From: Lennart Poettering Date: Mon, 19 May 2025 09:57:56 +0000 (+0200) Subject: logind: always enclose list fields (that may contain spaces) in quotes X-Git-Tag: v258-rc1~529^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b0555149de780f81ec6f741d36bdb41b4d1d8a94;p=thirdparty%2Fsystemd.git logind: always enclose list fields (that may contain spaces) in quotes --- diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c index 22690dcf66b..f6eef1c8219 100644 --- a/src/login/logind-seat.c +++ b/src/login/logind-seat.c @@ -129,20 +129,19 @@ int seat_save(Seat *s) { } if (s->sessions) { - fputs("SESSIONS=", f); - LIST_FOREACH(sessions_by_seat, i, s->sessions) { + fputs("SESSIONS=\"", f); + LIST_FOREACH(sessions_by_seat, i, s->sessions) fprintf(f, - "%s%c", + "%s%s", i->id, - i->sessions_by_seat_next ? ' ' : '\n'); - } + i->sessions_by_seat_next ? " " : "\"\n"); - fputs("UIDS=", f); + fputs("UIDS=\"", f); LIST_FOREACH(sessions_by_seat, i, s->sessions) fprintf(f, - UID_FMT"%c", + UID_FMT"%s", i->user->user_record->uid, - i->sessions_by_seat_next ? ' ' : '\n'); + i->sessions_by_seat_next ? " " : "\"\n"); } r = flink_tmpfile(f, temp_path, s->state_file, LINK_TMPFILE_REPLACE); diff --git a/src/login/logind-session.c b/src/login/logind-session.c index c0038c1a629..150aea887f3 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -267,12 +267,19 @@ int session_set_leader_consume(Session *s, PidRef _leader) { static void session_save_devices(Session *s, FILE *f) { SessionDevice *sd; - if (!hashmap_isempty(s->devices)) { - fprintf(f, "DEVICES="); - HASHMAP_FOREACH(sd, s->devices) - fprintf(f, DEVNUM_FORMAT_STR " ", DEVNUM_FORMAT_VAL(sd->dev)); - fprintf(f, "\n"); + if (hashmap_isempty(s->devices)) + return; + + bool need_space = false; + fputs("DEVICES=\"", f); + HASHMAP_FOREACH(sd, s->devices) { + if (need_space) + fputc(' ', f); + + fprintf(f, DEVNUM_FORMAT_STR, DEVNUM_FORMAT_VAL(sd->dev)); + need_space = true; } + fputs("\"\n", f); } int session_save(Session *s) { diff --git a/src/login/logind-user.c b/src/login/logind-user.c index a1f7c439f23..8da9afb7f82 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -194,7 +194,7 @@ static int user_save_internal(User *u) { if (u->sessions) { bool first; - fputs("SESSIONS=", f); + fputs("SESSIONS=\"", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (first) @@ -205,7 +205,8 @@ static int user_save_internal(User *u) { fputs(i->id, f); } - fputs("\nSEATS=", f); + fputs("\"\n" + "SEATS=\"", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (!i->seat) @@ -219,7 +220,8 @@ static int user_save_internal(User *u) { fputs(i->seat->id, f); } - fputs("\nACTIVE_SESSIONS=", f); + fputs("\"\n" + "ACTIVE_SESSIONS=\"", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (!session_is_active(i)) @@ -233,7 +235,8 @@ static int user_save_internal(User *u) { fputs(i->id, f); } - fputs("\nONLINE_SESSIONS=", f); + fputs("\"\n" + "ONLINE_SESSIONS=\"", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (session_get_state(i) == SESSION_CLOSING) @@ -247,7 +250,8 @@ static int user_save_internal(User *u) { fputs(i->id, f); } - fputs("\nACTIVE_SEATS=", f); + fputs("\"\n" + "ACTIVE_SEATS=\"", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (!session_is_active(i) || !i->seat) @@ -261,7 +265,8 @@ static int user_save_internal(User *u) { fputs(i->seat->id, f); } - fputs("\nONLINE_SEATS=", f); + fputs("\"\n" + "ONLINE_SEATS=\"", f); first = true; LIST_FOREACH(sessions_by_user, i, u->sessions) { if (session_get_state(i) == SESSION_CLOSING || !i->seat) @@ -274,7 +279,7 @@ static int user_save_internal(User *u) { fputs(i->seat->id, f); } - fputc('\n', f); + fputs("\"\n", f); } r = flink_tmpfile(f, temp_path, u->state_file, LINK_TMPFILE_REPLACE);