deluser: make it simpler, fix inability to delete user from group
authorHarald Becker <ralda@gmx.de>
Wed, 22 Sep 2010 12:50:15 +0000 (14:50 +0200)
committerDenys Vlasenko <dvlasenk@redhat.com>
Wed, 22 Sep 2010 16:03:29 +0000 (18:03 +0200)
Also makes menuconfig order more sensible

Signed-off-by: Harald Becker <ralda@gmx.de>
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
loginutils/Config.src
loginutils/deluser.c

index 5d497c4dcf7d10e38fc65121ff7cb56c3c03518e..8158bce7427b9aa9e6cd1696b305ec748190f104 100644 (file)
@@ -93,41 +93,18 @@ config USE_BB_CRYPT_SHA
          With this option off, login will fail password check for any
          user which has password encrypted with these algorithms.
 
-config ADDGROUP
-       bool "addgroup"
+config ADDUSER
+       bool "adduser"
        default y
        help
-         Utility for creating a new group account.
+         Utility for creating a new user account.
 
-config FEATURE_ADDGROUP_LONG_OPTIONS
+config FEATURE_ADDUSER_LONG_OPTIONS
        bool "Enable long options"
        default y
-       depends on ADDGROUP && LONG_OPTS
-       help
-         Support long options for the addgroup applet.
-
-config FEATURE_ADDUSER_TO_GROUP
-       bool "Support for adding users to groups"
-       default y
-       depends on ADDGROUP
-       help
-         If  called  with two non-option arguments,
-         addgroup will add an existing user to an
-         existing group.
-
-config DELGROUP
-       bool "delgroup"
-       default y
-       help
-         Utility for deleting a group account.
-
-config FEATURE_DEL_USER_FROM_GROUP
-       bool "Support for removing users from groups"
-       default y
-       depends on DELGROUP
+       depends on ADDUSER && LONG_OPTS
        help
-         If called with two non-option arguments, deluser
-         or delgroup will remove an user from a specified group.
+         Support long options for the adduser applet.
 
 config FEATURE_CHECK_NAMES
        bool "Enable sanity check on user/group names in adduser and addgroup"
@@ -141,19 +118,6 @@ config FEATURE_CHECK_NAMES
          For compatibility with Samba machine accounts "$" is also supported
          at the end of the user or group name.
 
-config ADDUSER
-       bool "adduser"
-       default y
-       help
-         Utility for creating a new user account.
-
-config FEATURE_ADDUSER_LONG_OPTIONS
-       bool "Enable long options"
-       default y
-       depends on ADDUSER && LONG_OPTS
-       help
-         Support long options for the adduser applet.
-
 config FIRST_SYSTEM_ID
        int "First valid system uid or gid for adduser and addgroup"
        depends on ADDUSER || ADDGROUP
@@ -170,12 +134,48 @@ config LAST_SYSTEM_ID
        help
          Last valid system uid or gid for adduser and addgroup
 
+config ADDGROUP
+       bool "addgroup"
+       default y
+       help
+         Utility for creating a new group account.
+
+config FEATURE_ADDGROUP_LONG_OPTIONS
+       bool "Enable long options"
+       default y
+       depends on ADDGROUP && LONG_OPTS
+       help
+         Support long options for the addgroup applet.
+
+config FEATURE_ADDUSER_TO_GROUP
+       bool "Support for adding users to groups"
+       default y
+       depends on ADDGROUP
+       help
+         If  called  with two non-option arguments,
+         addgroup will add an existing user to an
+         existing group.
+
 config DELUSER
        bool "deluser"
        default y
        help
          Utility for deleting a user account.
 
+config DELGROUP
+       bool "delgroup"
+       default y
+       help
+         Utility for deleting a group account.
+
+config FEATURE_DEL_USER_FROM_GROUP
+       bool "Support for removing users from groups"
+       default y
+       depends on DELGROUP
+       help
+         If called with two non-option arguments, deluser
+         or delgroup will remove an user from a specified group.
+
 config GETTY
        bool "getty"
        default y
index e234d6678966e2e20f1ad1d091b38551d881f843..65817b943d3bc65d069a6e5e4c4ebf368a62d8a1 100644 (file)
@@ -6,25 +6,18 @@
  * Copyright (C) 1999,2000,2001 by John Beppu <beppu@codepoet.org>
  * Copyright (C) 2007 by Tito Ragusa <farmatito@tiscali.it>
  *
- * Licensed under GPLv2, see file LICENSE in this source tree.
+ * 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))
+           || applet_name[3] != 'g'
+           || argc != 3)
        ) {
                bb_show_usage();
        }
@@ -32,25 +25,30 @@ int deluser_main(int argc, char **argv)
        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 (del_line_matching(argv, bb_path_passwd_file) < 0)
+       if (ENABLE_DELUSER && applet_name[3] == 'u') {
+               /* deluser USER */
+               if (update_passwd(bb_path_passwd_file, argv[1], NULL, NULL) < 0)
+                       return EXIT_FAILURE;
+               if (ENABLE_FEATURE_SHADOWPASSWDS)
+                       if (update_passwd(bb_path_shadow_file, argv[1], NULL, NULL) < 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_group_file) < 0)
-               return EXIT_FAILURE;
-       if (ENABLE_FEATURE_SHADOWPASSWDS) {
-               del_line_matching(argv, bb_path_gshadow_file);
+       } else if (ENABLE_DELGROUP) {
+               /* delgroup ... */
+               if (!ENABLE_FEATURE_DEL_USER_FROM_GROUP || argc != 3) {
+                       /* delgroup GROUP */
+                       if (update_passwd(bb_path_group_file, argv[1], NULL, NULL) < 0)
+                               return EXIT_FAILURE;
+                       if (ENABLE_FEATURE_SHADOWPASSWDS)
+                               if (update_passwd(bb_path_gshadow_file, argv[1], NULL, NULL) < 0)
+                                       return EXIT_FAILURE;
+               } else {
+                       /* delgroup USER GROUP */
+                       if (update_passwd(bb_path_group_file, argv[2], NULL, argv[1]) < 0)
+                               return EXIT_FAILURE;
+                       if (ENABLE_FEATURE_SHADOWPASSWDS)
+                               if (update_passwd(bb_path_gshadow_file, argv[2], NULL, argv[1]) < 0)
+                                       return EXIT_FAILURE;
+               }
        }
        return EXIT_SUCCESS;
 }