summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/daemon.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/daemon.c b/src/daemon.c
index 9ccea49..4430fbd 100644
--- a/src/daemon.c
+++ b/src/daemon.c
@@ -47,6 +47,8 @@
#include "wtmp-helper.h"
#include "daemon.h"
#include "util.h"
+#include "user.h"
+#include "accounts-user-generated.h"
#define PATH_PASSWD "/etc/passwd"
#define PATH_SHADOW "/etc/shadow"
@@ -1290,6 +1292,8 @@ daemon_delete_user_authorized_cb (Daemon *daemon,
g_autoptr(GError) error = NULL;
struct passwd *pwent;
const gchar *argv[6];
+ const gchar *homedir;
+ gchar *resolved_homedir;
User *user;
pwent = getpwuid (ud->uid);
@@ -1315,6 +1319,15 @@ daemon_delete_user_authorized_cb (Daemon *daemon,
user_set_saved (user, FALSE);
+ /* Never delete the root filesystem. */
+ homedir = accounts_user_get_home_directory (ACCOUNTS_USER (user));
+ resolved_homedir = realpath (homedir, NULL);
+ if (resolved_homedir != NULL && g_strcmp0 (resolved_homedir, "/") == 0) {
+ sys_log (context, "Refusing to delete home directory of user '%s' because it is root filesystem", pwent->pw_name);
+ ud->remove_files = FALSE;
+ }
+ free (resolved_homedir);
+
argv[0] = "/usr/sbin/userdel";
if (ud->remove_files) {
argv[1] = "-f";