logind: add new session type "web" for PAM web clients, such as cockpit
On request of Stef Walter.
This commit is contained in:
@@ -1159,6 +1159,7 @@ static const char* const session_type_table[_SESSION_TYPE_MAX] = {
|
|||||||
[SESSION_X11] = "x11",
|
[SESSION_X11] = "x11",
|
||||||
[SESSION_WAYLAND] = "wayland",
|
[SESSION_WAYLAND] = "wayland",
|
||||||
[SESSION_MIR] = "mir",
|
[SESSION_MIR] = "mir",
|
||||||
|
[SESSION_WEB] = "web",
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_STRING_TABLE_LOOKUP(session_type, SessionType);
|
DEFINE_STRING_TABLE_LOOKUP(session_type, SessionType);
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ typedef enum SessionType {
|
|||||||
SESSION_X11,
|
SESSION_X11,
|
||||||
SESSION_WAYLAND,
|
SESSION_WAYLAND,
|
||||||
SESSION_MIR,
|
SESSION_MIR,
|
||||||
|
SESSION_WEB,
|
||||||
_SESSION_TYPE_MAX,
|
_SESSION_TYPE_MAX,
|
||||||
_SESSION_TYPE_INVALID = -1
|
_SESSION_TYPE_INVALID = -1
|
||||||
} SessionType;
|
} SessionType;
|
||||||
|
|||||||
+17
-4
@@ -714,7 +714,7 @@ int user_kill(User *u, int signo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void user_elect_display(User *u) {
|
void user_elect_display(User *u) {
|
||||||
Session *graphical = NULL, *text = NULL, *s;
|
Session *graphical = NULL, *text = NULL, *other = NULL, *s;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
@@ -732,22 +732,35 @@ void user_elect_display(User *u) {
|
|||||||
|
|
||||||
if (SESSION_TYPE_IS_GRAPHICAL(s->type))
|
if (SESSION_TYPE_IS_GRAPHICAL(s->type))
|
||||||
graphical = s;
|
graphical = s;
|
||||||
else
|
else if (s->type == SESSION_TTY)
|
||||||
text = s;
|
text = s;
|
||||||
|
else
|
||||||
|
other = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (graphical &&
|
if (graphical &&
|
||||||
(!u->display ||
|
(!u->display ||
|
||||||
u->display->class != SESSION_USER ||
|
u->display->class != SESSION_USER ||
|
||||||
u->display->stopping ||
|
u->display->stopping ||
|
||||||
!SESSION_TYPE_IS_GRAPHICAL(u->display->type)))
|
!SESSION_TYPE_IS_GRAPHICAL(u->display->type))) {
|
||||||
u->display = graphical;
|
u->display = graphical;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (text &&
|
if (text &&
|
||||||
(!u->display ||
|
(!u->display ||
|
||||||
u->display->class != SESSION_USER ||
|
u->display->class != SESSION_USER ||
|
||||||
u->display->stopping))
|
u->display->stopping ||
|
||||||
|
u->display->type != SESSION_TTY)) {
|
||||||
u->display = text;
|
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] = {
|
static const char* const user_state_table[_USER_STATE_MAX] = {
|
||||||
|
|||||||
Reference in New Issue
Block a user