aboutsummaryrefslogtreecommitdiff
path: root/loginutils/adduser.c
diff options
context:
space:
mode:
authorTito Ragusa <farmatito@tiscali.it>2014-01-17 09:17:55 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2014-01-17 09:17:55 +0100
commit891b98c9bcb0872465c1f9192b8cbc9779b8d164 (patch)
tree859511fb76a5c50793a2833697cf4b232865e283 /loginutils/adduser.c
parent2e66daca654d130b820a4f0498de7f0ec355039a (diff)
downloadbusybox-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.c24
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 */
42static void passwd_study(struct passwd *p) 45static 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