diff options
| author | Tito Ragusa <farmatito@tiscali.it> | 2010-11-08 05:44:11 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-11-08 05:47:04 +0100 |
| commit | a8dc97cb8204d2574de4d65889264427b0485f50 (patch) | |
| tree | 38ef8116f5935e561c6b1231dfaa3ceac75349b6 /loginutils | |
| parent | e057b0f94f679af834d5eb15e10c714c72c16740 (diff) | |
| download | busybox-w32-a8dc97cb8204d2574de4d65889264427b0485f50.tar.gz busybox-w32-a8dc97cb8204d2574de4d65889264427b0485f50.tar.bz2 busybox-w32-a8dc97cb8204d2574de4d65889264427b0485f50.zip | |
deluser: do not warn spuriously when deleting group by deluser
Signed-off-by: Tito Ragusa <farmatito@tiscali.it>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'loginutils')
| -rw-r--r-- | loginutils/deluser.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/loginutils/deluser.c b/loginutils/deluser.c index 8ee72ef6f..47a10fe14 100644 --- a/loginutils/deluser.c +++ b/loginutils/deluser.c | |||
| @@ -23,7 +23,7 @@ int deluser_main(int argc, char **argv) | |||
| 23 | /* Name of shadow or gshadow file */ | 23 | /* Name of shadow or gshadow file */ |
| 24 | const char *sfile; | 24 | const char *sfile; |
| 25 | /* Are we deluser or delgroup? */ | 25 | /* Are we deluser or delgroup? */ |
| 26 | bool do_deluser = (ENABLE_DELUSER && (!ENABLE_DELGROUP || applet_name[3] == 'u')); | 26 | int do_deluser = (ENABLE_DELUSER && (!ENABLE_DELGROUP || applet_name[3] == 'u')); |
| 27 | 27 | ||
| 28 | if (geteuid() != 0) | 28 | if (geteuid() != 0) |
| 29 | bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); | 29 | bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); |
| @@ -51,7 +51,13 @@ int deluser_main(int argc, char **argv) | |||
| 51 | struct group *gr; | 51 | struct group *gr; |
| 52 | do_delgroup: | 52 | do_delgroup: |
| 53 | /* "delgroup GROUP" or "delgroup USER GROUP" */ | 53 | /* "delgroup GROUP" or "delgroup USER GROUP" */ |
| 54 | gr = xgetgrnam(name); /* bail out if GROUP is wrong */ | 54 | if (do_deluser < 0) { /* delgroup after deluser? */ |
| 55 | gr = getgrnam(name); | ||
| 56 | if (!gr) | ||
| 57 | return EXIT_SUCCESS; | ||
| 58 | } else { | ||
| 59 | gr = xgetgrnam(name); /* bail out if GROUP is wrong */ | ||
| 60 | } | ||
| 55 | if (!member) { | 61 | if (!member) { |
| 56 | /* "delgroup GROUP" */ | 62 | /* "delgroup GROUP" */ |
| 57 | struct passwd *pw; | 63 | struct passwd *pw; |
| @@ -79,13 +85,15 @@ int deluser_main(int argc, char **argv) | |||
| 79 | } | 85 | } |
| 80 | } while (ENABLE_FEATURE_SHADOWPASSWDS && pfile); | 86 | } while (ENABLE_FEATURE_SHADOWPASSWDS && pfile); |
| 81 | 87 | ||
| 82 | if (ENABLE_DELGROUP && do_deluser) { | 88 | if (ENABLE_DELGROUP && do_deluser > 0) { |
| 83 | /* "deluser USER" also should try to delete | 89 | /* "deluser USER" also should try to delete |
| 84 | * same-named group. IOW: do "delgroup USER" | 90 | * same-named group. IOW: do "delgroup USER" |
| 85 | */ | 91 | */ |
| 86 | //TODO: check how it actually works in upstream. | 92 | // On debian deluser is a perl script that calls userdel. |
| 87 | //I suspect it is only done if group has no more members. | 93 | // From man userdel: |
| 88 | do_deluser = 0; | 94 | // If USERGROUPS_ENAB is defined to yes in /etc/login.defs, userdel will |
| 95 | // delete the group with the same name as the user. | ||
| 96 | do_deluser = -1; | ||
| 89 | goto do_delgroup; | 97 | goto do_delgroup; |
| 90 | } | 98 | } |
| 91 | return EXIT_SUCCESS; | 99 | return EXIT_SUCCESS; |
