Hi,
I've downloaded a fresh 1.17.2 tar and could confirm the bug.
It is triggered when CONFIG_DESKTOP is set.

Something that I don't fully understand is how 

bb_error_msg_and_die("can't remove primary group of user %s", argv[1]);

could be reached when argc is 3   

        if ((ENABLE_FEATURE_DEL_USER_FROM_GROUP && argc != 3)
         || ENABLE_DELUSER
         || (ENABLE_DELGROUP && ENABLE_DESKTOP)
        ) {

The above lines did some dead code elimination games
(As far as my understanding goes this should be/was optimized to
if (argc != 3 )
and not to
if (argc != 3 || 1)
)
and I'm pretty sure that the simple test case 

deluser user group 

did work at the time of submission as it did in my older tree
(maybe forgot to do a make clean after git pull, that's why 
i could not see the bug)
Did we do any changes in the build system that could explain it?
Attached you find a patch that seems to fix the bug.

int deluser_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int deluser_main(int argc, char **argv)
{
        if (argc != 2
         && (!ENABLE_FEATURE_DEL_USER_FROM_GROUP
            || (applet_name[3] != 'g' || argc != 3))
        ) {
                bb_show_usage();
        }

        if (geteuid())
                bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);

        if (ENABLE_DELUSER
         && (!ENABLE_DELGROUP || applet_name[3] == 'u')
        ) {
                if (del_line_matching(argv, bb_path_passwd_file) < 0)
                        return EXIT_FAILURE;
                if (ENABLE_FEATURE_SHADOWPASSWDS) {
                        del_line_matching(argv, bb_path_shadow_file);
                }
        } else if (ENABLE_DESKTOP && ENABLE_DELGROUP && getpwnam(argv[1]) && 
argc != 3)
                bb_error_msg_and_die("can't remove primary group of user %s", 
argv[1]);

        if (del_line_matching(argv, bb_path_group_file) < 0)
                return EXIT_FAILURE;
        if (ENABLE_FEATURE_SHADOWPASSWDS) {
                del_line_matching(argv, bb_path_gshadow_file);
        }
        return EXIT_SUCCESS;
}

Needs a little more testing from the list members.

Ciao,
Tito

P.S.: Harald, sorry for not being able to see the bug at first.
        Could you please test if attached deluser.c fixes it for you?


/* vi: set sw=4 ts=4: */
/*
 * deluser/delgroup implementation for busybox
 *
 * Copyright (C) 1999 by Lineo, inc. and John Beppu
 * Copyright (C) 1999,2000,2001 by John Beppu <[email protected]>
 * Copyright (C) 2007 by Tito Ragusa <[email protected]>
 *
 * Licensed under GPL version 2, see file LICENSE in this tarball for details.
 *
 */
#include "libbb.h"

static int del_line_matching(char **args, const char *filename)
{
	if (ENABLE_FEATURE_DEL_USER_FROM_GROUP && args[2]) {
		return update_passwd(filename, args[2], NULL, args[1]);
	}
	return update_passwd(filename, args[1], NULL, NULL);
}

int deluser_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int deluser_main(int argc, char **argv)
{
	if (argc != 2
	 && (!ENABLE_FEATURE_DEL_USER_FROM_GROUP
	    || (applet_name[3] != 'g' || argc != 3))
	) {
		bb_show_usage();
	}

	if (geteuid())
		bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);

	if (ENABLE_DELUSER
	 && (!ENABLE_DELGROUP || applet_name[3] == 'u')
	) {
		if (del_line_matching(argv, bb_path_passwd_file) < 0)
			return EXIT_FAILURE;
		if (ENABLE_FEATURE_SHADOWPASSWDS) {
			del_line_matching(argv, bb_path_shadow_file);
		}
	} else if (ENABLE_DESKTOP && ENABLE_DELGROUP && getpwnam(argv[1]) && argc != 3)
		bb_error_msg_and_die("can't remove primary group of user %s", argv[1]);

	if (del_line_matching(argv, bb_path_group_file) < 0)
		return EXIT_FAILURE;
	if (ENABLE_FEATURE_SHADOWPASSWDS) {
		del_line_matching(argv, bb_path_gshadow_file);
	}
	return EXIT_SUCCESS;
}
--- loginutils/deluser.c.orig	2010-09-09 14:57:56.000000000 +0200
+++ loginutils/deluser.c	2010-09-22 15:04:22.000000000 +0200
@@ -32,21 +32,17 @@
 	if (geteuid())
 		bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
 
-	if ((ENABLE_FEATURE_DEL_USER_FROM_GROUP && argc != 3)
-	 || ENABLE_DELUSER
-	 || (ENABLE_DELGROUP && ENABLE_DESKTOP)
+	if (ENABLE_DELUSER
+	 && (!ENABLE_DELGROUP || applet_name[3] == 'u')
 	) {
-		if (ENABLE_DELUSER
-		 && (!ENABLE_DELGROUP || applet_name[3] == 'u')
-		) {
-			if (del_line_matching(argv, bb_path_passwd_file) < 0)
-				return EXIT_FAILURE;
-			if (ENABLE_FEATURE_SHADOWPASSWDS) {
-				del_line_matching(argv, bb_path_shadow_file);
-			}
-		} else if (ENABLE_DESKTOP && ENABLE_DELGROUP && getpwnam(argv[1]))
-			bb_error_msg_and_die("can't remove primary group of user %s", argv[1]);
-	}
+		if (del_line_matching(argv, bb_path_passwd_file) < 0)
+			return EXIT_FAILURE;
+		if (ENABLE_FEATURE_SHADOWPASSWDS) {
+			del_line_matching(argv, bb_path_shadow_file);
+		}
+	} else if (ENABLE_DESKTOP && ENABLE_DELGROUP && getpwnam(argv[1]) && argc != 3)
+		bb_error_msg_and_die("can't remove primary group of user %s", argv[1]);
+
 	if (del_line_matching(argv, bb_path_group_file) < 0)
 		return EXIT_FAILURE;
 	if (ENABLE_FEATURE_SHADOWPASSWDS) {
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to