diff options
author | Tito Ragusa <farmatito@tiscali.it> | 2014-01-17 09:17:55 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2014-01-17 09:17:55 +0100 |
commit | 891b98c9bcb0872465c1f9192b8cbc9779b8d164 (patch) | |
tree | 859511fb76a5c50793a2833697cf4b232865e283 /loginutils/adduser.c | |
parent | 2e66daca654d130b820a4f0498de7f0ec355039a (diff) | |
download | busybox-w32-891b98c9bcb0872465c1f9192b8cbc9779b8d164.tar.gz busybox-w32-891b98c9bcb0872465c1f9192b8cbc9779b8d164.tar.bz2 busybox-w32-891b98c9bcb0872465c1f9192b8cbc9779b8d164.zip |
adduser,addgroup: introduce and use CONFIG_LAST_ID
Changes adduser.c, addgroup.c and Config.src to set and use CONFIG_LAST_ID.
function old new delta
adduser_main 841 865 +24
addgroup_main 407 425 +18
Signed-off-by: Tito Ragusa <farmatito@tiscali.it>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'loginutils/adduser.c')
-rw-r--r-- | loginutils/adduser.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/loginutils/adduser.c b/loginutils/adduser.c index ef390adf8..568a3018e 100644 --- a/loginutils/adduser.c +++ b/loginutils/adduser.c | |||
@@ -26,6 +26,10 @@ | |||
26 | #if CONFIG_LAST_SYSTEM_ID < CONFIG_FIRST_SYSTEM_ID | 26 | #if CONFIG_LAST_SYSTEM_ID < CONFIG_FIRST_SYSTEM_ID |
27 | #error Bad LAST_SYSTEM_ID or FIRST_SYSTEM_ID in .config | 27 | #error Bad LAST_SYSTEM_ID or FIRST_SYSTEM_ID in .config |
28 | #endif | 28 | #endif |
29 | #if CONFIG_LAST_ID < CONFIG_LAST_SYSTEM_ID | ||
30 | #error Bad LAST_ID or LAST_SYSTEM_ID in .config | ||
31 | #endif | ||
32 | |||
29 | 33 | ||
30 | /* #define OPT_HOME (1 << 0) */ /* unused */ | 34 | /* #define OPT_HOME (1 << 0) */ /* unused */ |
31 | /* #define OPT_GECOS (1 << 1) */ /* unused */ | 35 | /* #define OPT_GECOS (1 << 1) */ /* unused */ |
@@ -36,12 +40,11 @@ | |||
36 | #define OPT_DONT_MAKE_HOME (1 << 6) | 40 | #define OPT_DONT_MAKE_HOME (1 << 6) |
37 | #define OPT_UID (1 << 7) | 41 | #define OPT_UID (1 << 7) |
38 | 42 | ||
39 | /* We assume UID_T_MAX == INT_MAX */ | ||
40 | /* remix */ | 43 | /* remix */ |
41 | /* recoded such that the uid may be passed in *p */ | 44 | /* recoded such that the uid may be passed in *p */ |
42 | static void passwd_study(struct passwd *p) | 45 | static void passwd_study(struct passwd *p) |
43 | { | 46 | { |
44 | int max = UINT_MAX; | 47 | int max = CONFIG_LAST_ID; |
45 | 48 | ||
46 | if (getpwnam(p->pw_name)) { | 49 | if (getpwnam(p->pw_name)) { |
47 | bb_error_msg_and_die("%s '%s' in use", "user", p->pw_name); | 50 | bb_error_msg_and_die("%s '%s' in use", "user", p->pw_name); |
@@ -54,7 +57,6 @@ static void passwd_study(struct passwd *p) | |||
54 | max = CONFIG_LAST_SYSTEM_ID; | 57 | max = CONFIG_LAST_SYSTEM_ID; |
55 | } else { | 58 | } else { |
56 | p->pw_uid = CONFIG_LAST_SYSTEM_ID + 1; | 59 | p->pw_uid = CONFIG_LAST_SYSTEM_ID + 1; |
57 | max = 64999; | ||
58 | } | 60 | } |
59 | } | 61 | } |
60 | /* check for a free uid (and maybe gid) */ | 62 | /* check for a free uid (and maybe gid) */ |
@@ -147,6 +149,7 @@ int adduser_main(int argc UNUSED_PARAM, char **argv) | |||
147 | const char *usegroup = NULL; | 149 | const char *usegroup = NULL; |
148 | char *p; | 150 | char *p; |
149 | unsigned opts; | 151 | unsigned opts; |
152 | char *uid; | ||
150 | 153 | ||
151 | #if ENABLE_FEATURE_ADDUSER_LONG_OPTIONS | 154 | #if ENABLE_FEATURE_ADDUSER_LONG_OPTIONS |
152 | applet_long_options = adduser_longopts; | 155 | applet_long_options = adduser_longopts; |
@@ -164,16 +167,11 @@ int adduser_main(int argc UNUSED_PARAM, char **argv) | |||
164 | 167 | ||
165 | /* at least one and at most two non-option args */ | 168 | /* at least one and at most two non-option args */ |
166 | /* disable interactive passwd for system accounts */ | 169 | /* disable interactive passwd for system accounts */ |
167 | opt_complementary = "-1:?2:SD:u+"; | 170 | opt_complementary = "-1:?2:SD"; |
168 | if (sizeof(pw.pw_uid) == sizeof(int)) { | 171 | opts = getopt32(argv, "h:g:s:G:DSHu:", &pw.pw_dir, &pw.pw_gecos, &pw.pw_shell, &usegroup, &uid); |
169 | opts = getopt32(argv, "h:g:s:G:DSHu:", &pw.pw_dir, &pw.pw_gecos, &pw.pw_shell, &usegroup, &pw.pw_uid); | 172 | if (opts & OPT_UID) |
170 | } else { | 173 | pw.pw_uid = xatou_range(uid, 0, CONFIG_LAST_ID); |
171 | unsigned uid; | 174 | |
172 | opts = getopt32(argv, "h:g:s:G:DSHu:", &pw.pw_dir, &pw.pw_gecos, &pw.pw_shell, &usegroup, &uid); | ||
173 | if (opts & OPT_UID) { | ||
174 | pw.pw_uid = uid; | ||
175 | } | ||
176 | } | ||
177 | argv += optind; | 175 | argv += optind; |
178 | pw.pw_name = argv[0]; | 176 | pw.pw_name = argv[0]; |
179 | 177 | ||