deluser: make it simpler, fix inability to delete user from group

Also makes menuconfig order more sensible

Signed-off-by: Harald Becker <ralda@gmx.de>
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
This commit is contained in:
Harald Becker 2010-09-22 14:50:15 +02:00 committed by Denys Vlasenko
parent 0e13b4019c
commit 361b1a6884
2 changed files with 73 additions and 75 deletions

View File

@ -93,6 +93,47 @@ config USE_BB_CRYPT_SHA
With this option off, login will fail password check for any With this option off, login will fail password check for any
user which has password encrypted with these algorithms. user which has password encrypted with these algorithms.
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 FEATURE_CHECK_NAMES
bool "Enable sanity check on user/group names in adduser and addgroup"
default n
depends on ADDUSER || ADDGROUP
help
Enable sanity check on user and group names in adduser and addgroup.
To avoid problems, the user or group name should consist only of
letters, digits, underscores, periods, at signs and dashes,
and not start with a dash (as defined by IEEE Std 1003.1-2001).
For compatibility with Samba machine accounts "$" is also supported
at the end of the user or group name.
config FIRST_SYSTEM_ID
int "First valid system uid or gid for adduser and addgroup"
depends on ADDUSER || ADDGROUP
range 0 64900
default 100
help
First valid system uid or gid for adduser and addgroup
config LAST_SYSTEM_ID
int "Last valid system uid or gid for adduser and addgroup"
depends on ADDUSER || ADDGROUP
range 0 64900
default 999
help
Last valid system uid or gid for adduser and addgroup
config ADDGROUP config ADDGROUP
bool "addgroup" bool "addgroup"
default y default y
@ -115,6 +156,12 @@ config FEATURE_ADDUSER_TO_GROUP
addgroup will add an existing user to an addgroup will add an existing user to an
existing group. existing group.
config DELUSER
bool "deluser"
default y
help
Utility for deleting a user account.
config DELGROUP config DELGROUP
bool "delgroup" bool "delgroup"
default y default y
@ -129,53 +176,6 @@ config FEATURE_DEL_USER_FROM_GROUP
If called with two non-option arguments, deluser If called with two non-option arguments, deluser
or delgroup will remove an user from a specified group. or delgroup will remove an user from a specified group.
config FEATURE_CHECK_NAMES
bool "Enable sanity check on user/group names in adduser and addgroup"
default n
depends on ADDUSER || ADDGROUP
help
Enable sanity check on user and group names in adduser and addgroup.
To avoid problems, the user or group name should consist only of
letters, digits, underscores, periods, at signs and dashes,
and not start with a dash (as defined by IEEE Std 1003.1-2001).
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
range 0 64900
default 100
help
First valid system uid or gid for adduser and addgroup
config LAST_SYSTEM_ID
int "Last valid system uid or gid for adduser and addgroup"
depends on ADDUSER || ADDGROUP
range 0 64900
default 999
help
Last valid system uid or gid for adduser and addgroup
config DELUSER
bool "deluser"
default y
help
Utility for deleting a user account.
config GETTY config GETTY
bool "getty" bool "getty"
default y default y

View File

@ -6,25 +6,18 @@
* Copyright (C) 1999,2000,2001 by John Beppu <beppu@codepoet.org> * Copyright (C) 1999,2000,2001 by John Beppu <beppu@codepoet.org>
* Copyright (C) 2007 by Tito Ragusa <farmatito@tiscali.it> * 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" #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) MAIN_EXTERNALLY_VISIBLE;
int deluser_main(int argc, char **argv) int deluser_main(int argc, char **argv)
{ {
if (argc != 2 if (argc != 2
&& (!ENABLE_FEATURE_DEL_USER_FROM_GROUP && (!ENABLE_FEATURE_DEL_USER_FROM_GROUP
|| (applet_name[3] != 'g' || argc != 3)) || applet_name[3] != 'g'
|| argc != 3)
) { ) {
bb_show_usage(); bb_show_usage();
} }
@ -32,25 +25,30 @@ int deluser_main(int argc, char **argv)
if (geteuid()) if (geteuid())
bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
if ((ENABLE_FEATURE_DEL_USER_FROM_GROUP && argc != 3) if (ENABLE_DELUSER && applet_name[3] == 'u') {
|| ENABLE_DELUSER /* deluser USER */
|| (ENABLE_DELGROUP && ENABLE_DESKTOP) if (update_passwd(bb_path_passwd_file, argv[1], NULL, NULL) < 0)
) { return EXIT_FAILURE;
if (ENABLE_DELUSER if (ENABLE_FEATURE_SHADOWPASSWDS)
&& (!ENABLE_DELGROUP || applet_name[3] == 'u') if (update_passwd(bb_path_shadow_file, argv[1], NULL, NULL) < 0)
) {
if (del_line_matching(argv, bb_path_passwd_file) < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
if (ENABLE_FEATURE_SHADOWPASSWDS) { } else if (ENABLE_DELGROUP) {
del_line_matching(argv, bb_path_shadow_file); /* delgroup ... */
} if (!ENABLE_FEATURE_DEL_USER_FROM_GROUP || argc != 3) {
} else if (ENABLE_DESKTOP && ENABLE_DELGROUP && getpwnam(argv[1])) /* delgroup GROUP */
bb_error_msg_and_die("can't remove primary group of user %s", argv[1]); if (update_passwd(bb_path_group_file, argv[1], NULL, NULL) < 0)
} return EXIT_FAILURE;
if (del_line_matching(argv, bb_path_group_file) < 0) if (ENABLE_FEATURE_SHADOWPASSWDS)
return EXIT_FAILURE; if (update_passwd(bb_path_gshadow_file, argv[1], NULL, NULL) < 0)
if (ENABLE_FEATURE_SHADOWPASSWDS) { return EXIT_FAILURE;
del_line_matching(argv, bb_path_gshadow_file); } 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; return EXIT_SUCCESS;
} }