chiark / gitweb /
logind: remove per-user runtime dir again if setup fails
authorChristian Seiler <christian@iwakd.de>
Fri, 23 Jan 2015 14:26:18 +0000 (15:26 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 27 Jan 2015 17:55:50 +0000 (18:55 +0100)
If setup of per-user runtime dir fails, clean up afterwards by removing
the directory before returning from the function, so we don't leave the
directory behind.

If this is not done, the second time the user logs in logind would
assume that the directory is already set up, even though it isn't.

src/login/logind-user.c

index 49c373b50dad738c8f5ce5829d06c2c73d90ff80..d1f91d6a29812488a50bd24aa8428e2e00e8716e 100644 (file)
@@ -328,7 +328,6 @@ static int user_mkdir_runtime_path(User *u) {
                         r = asprintf(&t, "mode=0700,smackfsroot=*,uid=" UID_FMT ",gid=" GID_FMT ",size=%zu", u->uid, u->gid, u->manager->runtime_dir_size);
                 else
                         r = asprintf(&t, "mode=0700,uid=" UID_FMT ",gid=" GID_FMT ",size=%zu", u->uid, u->gid, u->manager->runtime_dir_size);
-
                 if (r < 0) {
                         r = log_oom();
                         goto fail;
@@ -336,7 +335,7 @@ static int user_mkdir_runtime_path(User *u) {
 
                 r = mount("tmpfs", p, "tmpfs", MS_NODEV|MS_NOSUID, t);
                 if (r < 0) {
-                        log_error_errno(r, "Failed to mount per-user tmpfs directory %s: %m", p);
+                        r = log_error_errno(errno, "Failed to mount per-user tmpfs directory %s: %m", p);
                         goto fail;
                 }
         }
@@ -345,7 +344,12 @@ static int user_mkdir_runtime_path(User *u) {
         return 0;
 
 fail:
-        free(p);
+        if (p) {
+                /* Try to clean up, but ignore errors */
+                (void) rmdir(p);
+                free(p);
+        }
+
         u->runtime_path = NULL;
         return r;
 }