chiark / gitweb /
logind: remove per-user runtime dir again if setup fails
[elogind.git] / 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;
 }