On Sunday 07 November 2010 17:52:54 Denys Vlasenko wrote:
> On Sunday 07 November 2010 15:38, Tito wrote:

Snip

Here a list of tests of the current code:

delgroup wrong arg num                          ok /* show usage */
delgroup unknown group                          ok /* die with error msg */
delgroup unknown_member group           ok /* die with error msg */
delgroup member group                           ok /* success */
delgroup group                                  ok /* success */
delgroup group_UPG                              ok /* die with error msg */
deluser wrong arg num                           ok /* show usage */
deluser unknown user                            ok /* die with error msg */
deluser user_with_shared_gid                    KO /* spurious warning */
deluser user                                            ok /* success */

So we are almost there. ;-)

Attached a patch that fixes it.

Ciao,
Tito

--- loginutils/deluser.c.original       2010-11-07 20:35:15.000000000 +0100
+++ loginutils/deluser.c        2010-11-07 20:33:11.000000000 +0100
@@ -23,7 +23,7 @@
        /* 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,12 @@
                        struct group *gr;
  do_delgroup:
                        /* "delgroup GROUP" or "delgroup USER GROUP" */
-                       gr = xgetgrnam(name); /* bail out if GROUP is wrong */
+                       if (do_deluser < 0) {
+                               if((gr = getgrnam(name)) == NULL)
+                                       return EXIT_SUCCESS;
+                       } else {
+                               gr = xgetgrnam(name); /* bail out if GROUP is 
wrong */
+                       }
                        if (!member) {
                                /* "delgroup GROUP" */
                                struct passwd *pw;
@@ -79,13 +84,13 @@
                        }
                } 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;
+                       do_deluser = -1;
                        goto do_delgroup;
                }
                return EXIT_SUCCESS;
Signed-off-by: Tito Ragusa <[email protected]> 

--- loginutils/deluser.c.original	2010-11-07 20:35:15.000000000 +0100
+++ loginutils/deluser.c	2010-11-07 20:33:11.000000000 +0100
@@ -23,7 +23,7 @@
 	/* 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,12 @@
 			struct group *gr;
  do_delgroup:
 			/* "delgroup GROUP" or "delgroup USER GROUP" */
-			gr = xgetgrnam(name); /* bail out if GROUP is wrong */
+			if (do_deluser < 0) {
+				if((gr = getgrnam(name)) == NULL)
+					return EXIT_SUCCESS;
+			} else {
+				gr = xgetgrnam(name); /* bail out if GROUP is wrong */
+			}
 			if (!member) {
 				/* "delgroup GROUP" */
 				struct passwd *pw;
@@ -79,13 +84,13 @@
 			}
 		} 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;
+			do_deluser = -1;
 			goto do_delgroup;
 		}
 		return EXIT_SUCCESS;
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to