3f5470f
From 8ce77d0b80b835d337f61bd24c05b586ef059062 Mon Sep 17 00:00:00 2001
3f5470f
From: Christian Seiler <christian@iwakd.de>
3f5470f
Date: Fri, 23 Jan 2015 15:26:18 +0100
3f5470f
Subject: [PATCH] logind: remove per-user runtime dir again if setup fails
3f5470f
3f5470f
If setup of per-user runtime dir fails, clean up afterwards by removing
3f5470f
the directory before returning from the function, so we don't leave the
3f5470f
directory behind.
3f5470f
3f5470f
If this is not done, the second time the user logs in logind would
3f5470f
assume that the directory is already set up, even though it isn't.
3f5470f
3f5470f
(cherry picked from commit 4d858e7d9f39038713f760d7acc64acf7bba2aa7)
3f5470f
3f5470f
Conflicts:
3f5470f
	src/login/logind-user.c
3f5470f
---
3f5470f
 src/login/logind-user.c | 11 ++++++++---
3f5470f
 1 file changed, 8 insertions(+), 3 deletions(-)
3f5470f
3f5470f
diff --git a/src/login/logind-user.c b/src/login/logind-user.c
3f5470f
index 1205b48abb..093eaadb61 100644
3f5470f
--- a/src/login/logind-user.c
3f5470f
+++ b/src/login/logind-user.c
3f5470f
@@ -330,7 +330,6 @@ static int user_mkdir_runtime_path(User *u) {
3f5470f
                         r = asprintf(&t, "mode=0700,smackfsroot=*,uid=" UID_FMT ",gid=" GID_FMT ",size=%zu", u->uid, u->gid, u->manager->runtime_dir_size);
3f5470f
                 else
3f5470f
                         r = asprintf(&t, "mode=0700,uid=" UID_FMT ",gid=" GID_FMT ",size=%zu", u->uid, u->gid, u->manager->runtime_dir_size);
3f5470f
-
3f5470f
                 if (r < 0) {
3f5470f
                         r = log_oom();
3f5470f
                         goto fail;
3f5470f
@@ -338,7 +337,8 @@ static int user_mkdir_runtime_path(User *u) {
3f5470f
 
3f5470f
                 r = mount("tmpfs", p, "tmpfs", MS_NODEV|MS_NOSUID, t);
3f5470f
                 if (r < 0) {
3f5470f
-                        log_error("Failed to mount per-user tmpfs directory %s: %s", p, strerror(-r));
3f5470f
+                        log_error("Failed to mount per-user tmpfs directory %s: %m", p);
3f5470f
+                        r = -errno;
3f5470f
                         goto fail;
3f5470f
                 }
3f5470f
         }
3f5470f
@@ -347,7 +347,12 @@ static int user_mkdir_runtime_path(User *u) {
3f5470f
         return 0;
3f5470f
 
3f5470f
 fail:
3f5470f
-        free(p);
3f5470f
+        if (p) {
3f5470f
+                /* Try to clean up, but ignore errors */
3f5470f
+                (void) rmdir(p);
3f5470f
+                free(p);
3f5470f
+        }
3f5470f
+
3f5470f
         u->runtime_path = NULL;
3f5470f
         return r;
3f5470f
 }