diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2015-02-05 18:35:52 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2015-02-05 18:35:52 +0100 |
commit | a14fa79592eadec0d5e296c66e79dfe36ce798c7 (patch) | |
tree | d825fa4b4719521c66db7fe739d64c16d89c6599 | |
parent | 3c5d133c7def0718e313928c69bde2e9784ce58e (diff) | |
download | busybox-w32-a14fa79592eadec0d5e296c66e79dfe36ce798c7.tar.gz busybox-w32-a14fa79592eadec0d5e296c66e79dfe36ce798c7.tar.bz2 busybox-w32-a14fa79592eadec0d5e296c66e79dfe36ce798c7.zip |
deluser: implement --remove-home
function old new delta
deluser_main 308 355 +47
packed_usage 30149 30156 +7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 54/0) Total: 54 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | loginutils/deluser.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/loginutils/deluser.c b/loginutils/deluser.c index e39ac5506..2d98ecc58 100644 --- a/loginutils/deluser.c +++ b/loginutils/deluser.c | |||
@@ -11,9 +11,10 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | //usage:#define deluser_trivial_usage | 13 | //usage:#define deluser_trivial_usage |
14 | //usage: "USER" | 14 | //usage: IF_LONG_OPTS("[--remove-home] ") "USER" |
15 | //usage:#define deluser_full_usage "\n\n" | 15 | //usage:#define deluser_full_usage "\n\n" |
16 | //usage: "Delete USER from the system" | 16 | //usage: "Delete USER from the system" |
17 | // --remove-home is self-explanatory enough to put it in --help | ||
17 | 18 | ||
18 | //usage:#define delgroup_trivial_usage | 19 | //usage:#define delgroup_trivial_usage |
19 | //usage: IF_FEATURE_DEL_USER_FROM_GROUP("[USER] ")"GROUP" | 20 | //usage: IF_FEATURE_DEL_USER_FROM_GROUP("[USER] ")"GROUP" |
@@ -37,6 +38,19 @@ int deluser_main(int argc, char **argv) | |||
37 | /* Are we deluser or delgroup? */ | 38 | /* Are we deluser or delgroup? */ |
38 | int do_deluser = (ENABLE_DELUSER && (!ENABLE_DELGROUP || applet_name[3] == 'u')); | 39 | int do_deluser = (ENABLE_DELUSER && (!ENABLE_DELGROUP || applet_name[3] == 'u')); |
39 | 40 | ||
41 | #if !ENABLE_LONG_OPTS | ||
42 | const int opt_delhome = 0; | ||
43 | #else | ||
44 | int opt_delhome = 0; | ||
45 | if (do_deluser) { | ||
46 | applet_long_options = | ||
47 | "remove-home\0" No_argument "\xff"; | ||
48 | opt_delhome = getopt32(argv, ""); | ||
49 | argv += opt_delhome; | ||
50 | argc -= opt_delhome; | ||
51 | } | ||
52 | #endif | ||
53 | |||
40 | if (geteuid() != 0) | 54 | if (geteuid() != 0) |
41 | bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); | 55 | bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); |
42 | 56 | ||
@@ -55,10 +69,14 @@ int deluser_main(int argc, char **argv) | |||
55 | case 2: | 69 | case 2: |
56 | if (do_deluser) { | 70 | if (do_deluser) { |
57 | /* "deluser USER" */ | 71 | /* "deluser USER" */ |
58 | xgetpwnam(name); /* bail out if USER is wrong */ | 72 | struct passwd *pw; |
73 | |||
74 | pw = xgetpwnam(name); /* bail out if USER is wrong */ | ||
59 | pfile = bb_path_passwd_file; | 75 | pfile = bb_path_passwd_file; |
60 | if (ENABLE_FEATURE_SHADOWPASSWDS) | 76 | if (ENABLE_FEATURE_SHADOWPASSWDS) |
61 | sfile = bb_path_shadow_file; | 77 | sfile = bb_path_shadow_file; |
78 | if (opt_delhome) | ||
79 | remove_file(pw->pw_dir, FILEUTILS_RECUR); | ||
62 | } else { | 80 | } else { |
63 | struct group *gr; | 81 | struct group *gr; |
64 | do_delgroup: | 82 | do_delgroup: |