From: Sven Eden Date: Mon, 14 Aug 2017 07:16:15 +0000 (+0200) Subject: Prep v235: Apply upstream fixes (6/10) [src/login] X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=c1480d46a9e8781a15aa5553330a1230afde245b;p=elogind.git Prep v235: Apply upstream fixes (6/10) [src/login] --- diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 0b0109ad3..0abf4d50e 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -771,8 +771,8 @@ static int method_create_session(sd_bus_message *message, void *userdata, sd_bus if (hashmap_size(m->sessions) >= m->sessions_max) return sd_bus_error_setf(error, SD_BUS_ERROR_LIMITS_EXCEEDED, "Maximum number of sessions (%" PRIu64 ") reached, refusing further sessions.", m->sessions_max); - audit_session_from_pid(leader, &audit_id); - if (audit_id > 0) { + (void) audit_session_from_pid(leader, &audit_id); + if (audit_session_is_valid(audit_id)) { /* Keep our session IDs and the audit session IDs in sync */ if (asprintf(&id, "%"PRIu32, audit_id) < 0) @@ -784,7 +784,7 @@ static int method_create_session(sd_bus_message *message, void *userdata, sd_bus * ID */ if (hashmap_get(m->sessions, id)) { log_warning("Existing logind session ID %s used by new audit session, ignoring", id); - audit_id = 0; + audit_id = AUDIT_SESSION_INVALID; id = mfree(id); } diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c index de27e7137..1b6b4cdf2 100644 --- a/src/login/logind-seat.c +++ b/src/login/logind-seat.c @@ -127,7 +127,7 @@ int seat_save(Seat *s) { if (s->sessions) { Session *i; - fputs("SESSIONS=", f); + fputs_unlocked("SESSIONS=", f); LIST_FOREACH(sessions_by_seat, i, s->sessions) { fprintf(f, "%s%c", @@ -135,7 +135,7 @@ int seat_save(Seat *s) { i->sessions_by_seat_next ? ' ' : '\n'); } - fputs("UIDS=", f); + fputs_unlocked("UIDS=", f); LIST_FOREACH(sessions_by_seat, i, s->sessions) fprintf(f, UID_FMT"%c", diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 10e9327c0..6a59f8b47 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -33,7 +33,6 @@ #include "bus-error.h" #include "bus-util.h" #include "escape.h" -#include "extract-word.h" #include "fd-util.h" #include "fileio.h" #include "format-util.h" @@ -83,6 +82,7 @@ Session* session_new(Manager *m, const char *id) { s->manager = m; s->fifo_fd = -1; s->vtfd = -1; + s->audit_id = AUDIT_SESSION_INVALID; return s; } @@ -285,10 +285,10 @@ int session_save(Session *s) { if (!s->vtnr) fprintf(f, "POSITION=%u\n", s->position); - if (s->leader > 0) + if (pid_is_valid(s->leader)) fprintf(f, "LEADER="PID_FMT"\n", s->leader); - if (s->audit_id > 0) + if (audit_session_is_valid(s->audit_id)) fprintf(f, "AUDIT=%"PRIu32"\n", s->audit_id); if (dual_timestamp_is_set(&s->timestamp)) @@ -466,9 +466,8 @@ int session_load(Session *s) { } if (leader) { - k = parse_pid(leader, &s->leader); - if (k >= 0) - audit_session_from_pid(s->leader, &s->audit_id); + if (parse_pid(leader, &s->leader) >= 0) + (void) audit_session_from_pid(s->leader, &s->audit_id); } if (type) { @@ -771,7 +770,6 @@ int session_stop(Session *s, bool force) { #if 1 /// elogind must queue this session again session_add_to_gc_queue(s); #endif // 1 - return r; } diff --git a/src/login/logind-user.c b/src/login/logind-user.c index ae1d8b6bd..cd460d365 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -189,18 +189,18 @@ static int user_save_internal(User *u) { Session *i; bool first; - fputs("SESSIONS=", f); + fputs_unlocked("SESSIONS=", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (first) first = false; else - fputc(' ', f); + fputc_unlocked(' ', f); - fputs(i->id, f); + fputs_unlocked(i->id, f); } - fputs("\nSEATS=", f); + fputs_unlocked("\nSEATS=", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (!i->seat) @@ -209,12 +209,12 @@ static int user_save_internal(User *u) { if (first) first = false; else - fputc(' ', f); + fputc_unlocked(' ', f); - fputs(i->seat->id, f); + fputs_unlocked(i->seat->id, f); } - fputs("\nACTIVE_SESSIONS=", f); + fputs_unlocked("\nACTIVE_SESSIONS=", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (!session_is_active(i)) @@ -223,12 +223,12 @@ static int user_save_internal(User *u) { if (first) first = false; else - fputc(' ', f); + fputc_unlocked(' ', f); - fputs(i->id, f); + fputs_unlocked(i->id, f); } - fputs("\nONLINE_SESSIONS=", f); + fputs_unlocked("\nONLINE_SESSIONS=", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (session_get_state(i) == SESSION_CLOSING) @@ -237,12 +237,12 @@ static int user_save_internal(User *u) { if (first) first = false; else - fputc(' ', f); + fputc_unlocked(' ', f); - fputs(i->id, f); + fputs_unlocked(i->id, f); } - fputs("\nACTIVE_SEATS=", f); + fputs_unlocked("\nACTIVE_SEATS=", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (!session_is_active(i) || !i->seat) @@ -251,12 +251,12 @@ static int user_save_internal(User *u) { if (first) first = false; else - fputc(' ', f); + fputc_unlocked(' ', f); - fputs(i->seat->id, f); + fputs_unlocked(i->seat->id, f); } - fputs("\nONLINE_SEATS=", f); + fputs_unlocked("\nONLINE_SEATS=", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (session_get_state(i) == SESSION_CLOSING || !i->seat) @@ -265,11 +265,11 @@ static int user_save_internal(User *u) { if (first) first = false; else - fputc(' ', f); + fputc_unlocked(' ', f); - fputs(i->seat->id, f); + fputs_unlocked(i->seat->id, f); } - fputc('\n', f); + fputc_unlocked('\n', f); } r = fflush_and_check(f); @@ -616,7 +616,6 @@ int user_stop(User *u, bool force) { #if 1 /// elogind must queue this user again user_add_to_gc_queue(u); #endif // 1 - return r; } diff --git a/src/login/logind.conf.in b/src/login/logind.conf.in index 27b05fe8a..a3b89df4e 100644 --- a/src/login/logind.conf.in +++ b/src/login/logind.conf.in @@ -12,6 +12,8 @@ # See logind.conf(5) for details. [Login] +#NAutoVTs=6 +#ReserveVT=6 #KillUserProcesses=@KILL_USER_PROCESSES@ #KillOnlyUsers= #KillExcludeUsers=root @@ -33,11 +35,3 @@ #InhibitorsMax=8192 #SessionsMax=8192 #UserTasksMax=33% - -[Sleep] -#SuspendState=mem standby freeze -#SuspendMode= -#HibernateState=disk -#HibernateMode=platform shutdown -#HybridSleepState=disk -#HybridSleepMode=suspend platform shutdown diff --git a/src/login/meson.build b/src/login/meson.build index 9fd44ddc1..3a496a6e5 100644 --- a/src/login/meson.build +++ b/src/login/meson.build @@ -24,6 +24,7 @@ logind_gperf_c = custom_target( elogind_sources += [logind_gperf_c] #endif // 0 + liblogind_core_sources = files(''' logind-core.c logind-device.c @@ -59,7 +60,6 @@ liblogind_core_sources += [files(''' sleep_files, update_utmp_files] #endif // 1 - logind_acl_c = files('logind-acl.c') if conf.get('HAVE_ACL', false) liblogind_core_sources += logind_acl_c @@ -83,7 +83,6 @@ loginctl_sources += files(''' eloginctl.h '''.split()) #endif // 1 - #if 0 /// elogind builds itself unconditionally and with some adaptatins # if conf.get('ENABLE_LOGIND', false) # logind_conf = configure_file( diff --git a/src/login/pam_elogind.c b/src/login/pam_elogind.c index 472abdede..32a968bb6 100644 --- a/src/login/pam_elogind.c +++ b/src/login/pam_elogind.c @@ -376,7 +376,7 @@ _public_ PAM_EXTERN int pam_sm_open_session( if (debug) pam_syslog(handle, LOG_DEBUG, "Asking logind to create session: " "uid="UID_FMT" pid="PID_FMT" service=%s type=%s class=%s desktop=%s seat=%s vtnr=%"PRIu32" tty=%s display=%s remote=%s remote_user=%s remote_host=%s", - pw->pw_uid, getpid(), + pw->pw_uid, getpid_cached(), strempty(service), type, class, strempty(desktop), strempty(seat), vtnr, strempty(tty), strempty(display), @@ -391,7 +391,7 @@ _public_ PAM_EXTERN int pam_sm_open_session( &reply, "uusssssussbssa(sv)", (uint32_t) pw->pw_uid, - (uint32_t) getpid(), + (uint32_t) getpid_cached(), service, type, class,