diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-08-14 02:59:02 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-08-14 03:00:24 +0200 |
commit | e9e74f28d783a052dce7edfa94d7918bb591ba7a (patch) | |
tree | 477358326ca14f17299fac0c3c545c74a2e3fdc8 | |
parent | 8085f163c50d998f3e30a6ddfc72c73d5dc57747 (diff) |
logind: add new session type "web" for PAM web clients, such as cockpit
On request of Stef Walter.
-rw-r--r-- | src/login/logind-session.c | 1 | ||||
-rw-r--r-- | src/login/logind-session.h | 1 | ||||
-rw-r--r-- | src/login/logind-user.c | 21 |
3 files changed, 19 insertions, 4 deletions
diff --git a/src/login/logind-session.c b/src/login/logind-session.c index feedc30fa6..9d05faf47c 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -1159,6 +1159,7 @@ static const char* const session_type_table[_SESSION_TYPE_MAX] = { [SESSION_X11] = "x11", [SESSION_WAYLAND] = "wayland", [SESSION_MIR] = "mir", + [SESSION_WEB] = "web", }; DEFINE_STRING_TABLE_LOOKUP(session_type, SessionType); diff --git a/src/login/logind-session.h b/src/login/logind-session.h index cb8514e580..9fb0188a84 100644 --- a/src/login/logind-session.h +++ b/src/login/logind-session.h @@ -56,6 +56,7 @@ typedef enum SessionType { SESSION_X11, SESSION_WAYLAND, SESSION_MIR, + SESSION_WEB, _SESSION_TYPE_MAX, _SESSION_TYPE_INVALID = -1 } SessionType; diff --git a/src/login/logind-user.c b/src/login/logind-user.c index fdbccb364c..d48eca47f0 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -714,7 +714,7 @@ int user_kill(User *u, int signo) { } void user_elect_display(User *u) { - Session *graphical = NULL, *text = NULL, *s; + Session *graphical = NULL, *text = NULL, *other = NULL, *s; assert(u); @@ -732,22 +732,35 @@ void user_elect_display(User *u) { if (SESSION_TYPE_IS_GRAPHICAL(s->type)) graphical = s; - else + else if (s->type == SESSION_TTY) text = s; + else + other = s; } if (graphical && (!u->display || u->display->class != SESSION_USER || u->display->stopping || - !SESSION_TYPE_IS_GRAPHICAL(u->display->type))) + !SESSION_TYPE_IS_GRAPHICAL(u->display->type))) { u->display = graphical; + return; + } if (text && (!u->display || u->display->class != SESSION_USER || - u->display->stopping)) + u->display->stopping || + u->display->type != SESSION_TTY)) { u->display = text; + return; + } + + if (other && + (!u->display || + u->display->class != SESSION_USER || + u->display->stopping)) + u->display = other; } static const char* const user_state_table[_USER_STATE_MAX] = { |