diff options
author | Cameron Katri <me@cameronkatri.com> | 2021-03-20 01:47:16 -0400 |
---|---|---|
committer | Cameron Katri <me@cameronkatri.com> | 2021-03-20 01:47:16 -0400 |
commit | a477b5619a23ec06af401df48724cc6ec49d9f76 (patch) | |
tree | a85a80e1f71b3ddb3b216163244dbbf057228359 /pw/pw_user.c | |
parent | ff633087671584f9a0627d2525d07f603f9994cc (diff) | |
download | pw-darwin-a477b5619a23ec06af401df48724cc6ec49d9f76.tar.gz pw-darwin-a477b5619a23ec06af401df48724cc6ec49d9f76.tar.zst pw-darwin-a477b5619a23ec06af401df48724cc6ec49d9f76.zip |
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
Diffstat (limited to 'pw/pw_user.c')
-rw-r--r-- | pw/pw_user.c | 10 |
1 files changed, 5 insertions, 5 deletions
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" |