aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTito Ragusa <farmatito@tiscali.it>2010-11-08 05:44:11 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2010-11-08 05:47:04 +0100
commita8dc97cb8204d2574de4d65889264427b0485f50 (patch)
tree38ef8116f5935e561c6b1231dfaa3ceac75349b6
parente057b0f94f679af834d5eb15e10c714c72c16740 (diff)
downloadbusybox-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>
-rw-r--r--loginutils/deluser.c20
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;