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:
parent
0e13b4019c
commit
361b1a6884
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user