[git commit master 1/1] deluser: do not warn spuriously when deleting group by deluser

Denys Vlasenko vda.linux at googlemail.com
Mon Nov 8 04:47:04 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=a8dc97cb8204d2574de4d65889264427b0485f50
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Tito Ragusa <farmatito at tiscali.it>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 loginutils/deluser.c |   20 ++++++++++++++------
 1 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/loginutils/deluser.c b/loginutils/deluser.c
index 8ee72ef..47a10fe 100644
--- a/loginutils/deluser.c
+++ b/loginutils/deluser.c
@@ -23,7 +23,7 @@ int deluser_main(int argc, char **argv)
 	/* Name of shadow or gshadow file */
 	const char *sfile;
 	/* Are we deluser or delgroup? */
-	bool do_deluser = (ENABLE_DELUSER && (!ENABLE_DELGROUP || applet_name[3] == 'u'));
+	int do_deluser = (ENABLE_DELUSER && (!ENABLE_DELGROUP || applet_name[3] == 'u'));
 
 	if (geteuid() != 0)
 		bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
@@ -51,7 +51,13 @@ int deluser_main(int argc, char **argv)
 			struct group *gr;
  do_delgroup:
 			/* "delgroup GROUP" or "delgroup USER GROUP" */
-			gr = xgetgrnam(name); /* bail out if GROUP is wrong */
+			if (do_deluser < 0) { /* delgroup after deluser? */
+				gr = getgrnam(name);
+				if (!gr)
+					return EXIT_SUCCESS;
+			} else {
+				gr = xgetgrnam(name); /* bail out if GROUP is wrong */
+			}
 			if (!member) {
 				/* "delgroup GROUP" */
 				struct passwd *pw;
@@ -79,13 +85,15 @@ int deluser_main(int argc, char **argv)
 			}
 		} while (ENABLE_FEATURE_SHADOWPASSWDS && pfile);
 
-		if (ENABLE_DELGROUP && do_deluser) {
+		if (ENABLE_DELGROUP && do_deluser > 0) {
 			/* "deluser USER" also should try to delete
 			 * same-named group. IOW: do "delgroup USER"
 			 */
-//TODO: check how it actually works in upstream.
-//I suspect it is only done if group has no more members.
-			do_deluser = 0;
+// On debian deluser is a perl script that calls userdel.
+// From man userdel:
+//  If USERGROUPS_ENAB is defined to yes in /etc/login.defs, userdel will
+//  delete the group with the same name as the user.
+			do_deluser = -1;
 			goto do_delgroup;
 		}
 		return EXIT_SUCCESS;
-- 
1.7.1



More information about the busybox-cvs mailing list