]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
logind: always enclose list fields (that may contain spaces) in quotes
authorLennart Poettering <lennart@poettering.net>
Mon, 19 May 2025 09:57:56 +0000 (11:57 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 21 May 2025 15:33:40 +0000 (17:33 +0200)
src/login/logind-seat.c
src/login/logind-session.c
src/login/logind-user.c

index 22690dcf66b498ee679814355d1d28fa1f173533..f6eef1c8219d1635742fb3b8793e25ca53001205 100644 (file)
@@ -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);
index c0038c1a629258e1b96ca29c7234ebb777a5a81b..150aea887f35c0f3d7a9ff9b08756e3894c47f99 100644 (file)
@@ -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) {
index a1f7c439f23af2a64a15693e5c66cf83615dd7c2..8da9afb7f824fa0cf3a3e3934cb7150b5f498e19 100644 (file)
@@ -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);