deluser: make it simpler, fix inability to delete user from group
No binary (build failed)
—
(log yok)
| @@ -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 | |
| @@ -6,25 +6,18 @@ | |
| * Copyright (C) 1999,2000,2001 by John Beppu <[email protected]> | |
| * Copyright (C) 2007 by Tito Ragusa <[email protected]> | |
| * | |
| - | * 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; | |
| } | |