aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2015-02-05 18:35:52 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2015-02-05 18:35:52 +0100
commita14fa79592eadec0d5e296c66e79dfe36ce798c7 (patch)
treed825fa4b4719521c66db7fe739d64c16d89c6599
parent3c5d133c7def0718e313928c69bde2e9784ce58e (diff)
downloadbusybox-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.c22
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: