From a477b5619a23ec06af401df48724cc6ec49d9f76 Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Sat, 20 Mar 2021 01:47:16 -0400 Subject: pw(8): Fix userdel -r Fix userdel -r: Remove check to see if uid is used by second user, which is failing after single user is removed Improve Makefile Disallow removing of apple's system users --- pw/pw_user.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'pw/pw_user.c') diff --git a/pw/pw_user.c b/pw/pw_user.c index 826388d..fa1ee36 100644 --- a/pw/pw_user.c +++ b/pw/pw_user.c @@ -224,7 +224,6 @@ static struct passwd fakeuser = { "User &", "/nonexistent", "/bin/sh", - 0, 0 }; @@ -1077,9 +1076,11 @@ pw_user_del(int argc, char **argv, char *arg1) if (name == NULL) name = pwd->pw_name; - if (strcmp(pwd->pw_name, "root") == 0) - errx(EX_DATAERR, "cannot remove user 'root'"); - + char *system_users[30] = {"nobody", "root", "mobile", "daemon", "_ftp", "_networkd", "_wireless", "_installd", "_neagent", "_ifccd", "_securityd", "_mdnsresponder", "_sshd", "_unknown", "_distnote", "_astris", "_ondemand", "_findmydevice", "_datadetectors", "_captiveagent", "_analyticsd", "_timed", "_gpsd", "_reportmemoryexception", "_diskimagesiod", "_logd", "_iconservices", "_fud", "_knowledgegraphd", "_coreml"}; + for (int i = 0; i < 30; i++) { + if (strcmp(pwd->pw_name, system_users[i]) == 0) + errx(EX_DATAERR, "cannot remove user '%s'", system_users[i]); + } /* Remove opie record from /etc/opiekeys */ if (PWALTDIR() != PWF_ALT) rmopie(pwd->pw_name); @@ -1158,7 +1159,6 @@ pw_user_del(int argc, char **argv, char *arg1) /* Remove home directory and contents */ if (PWALTDIR() != PWF_ALT && deletehome && *home == '/' && - GETPWUID(id) == NULL && fstatat(conf.rootfd, home + 1, &st, 0) != -1) { rm_r(conf.rootfd, home, id); pw_log(cnf, M_DELETE, W_USER, "%s(%ju) home '%s' %s" -- cgit v1.2.3-56-ge451