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/addgroup.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/addgroup.c')
-rw-r--r-- | loginutils/addgroup.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/loginutils/addgroup.c b/loginutils/addgroup.c index b37270ff0..22cd0e661 100644 --- a/loginutils/addgroup.c +++ b/loginutils/addgroup.c | |||
@@ -22,14 +22,16 @@ | |||
22 | #if CONFIG_LAST_SYSTEM_ID < CONFIG_FIRST_SYSTEM_ID | 22 | #if CONFIG_LAST_SYSTEM_ID < CONFIG_FIRST_SYSTEM_ID |
23 | #error Bad LAST_SYSTEM_ID or FIRST_SYSTEM_ID in .config | 23 | #error Bad LAST_SYSTEM_ID or FIRST_SYSTEM_ID in .config |
24 | #endif | 24 | #endif |
25 | #if CONFIG_LAST_ID < CONFIG_LAST_SYSTEM_ID | ||
26 | #error Bad LAST_ID or LAST_SYSTEM_ID in .config | ||
27 | #endif | ||
25 | 28 | ||
26 | #define OPT_GID (1 << 0) | 29 | #define OPT_GID (1 << 0) |
27 | #define OPT_SYSTEM_ACCOUNT (1 << 1) | 30 | #define OPT_SYSTEM_ACCOUNT (1 << 1) |
28 | 31 | ||
29 | /* We assume GID_T_MAX == INT_MAX */ | ||
30 | static void xgroup_study(struct group *g) | 32 | static void xgroup_study(struct group *g) |
31 | { | 33 | { |
32 | unsigned max = INT_MAX; | 34 | unsigned max = CONFIG_LAST_ID; |
33 | 35 | ||
34 | /* Make sure gr_name is unused */ | 36 | /* Make sure gr_name is unused */ |
35 | if (getgrnam(g->gr_name)) { | 37 | if (getgrnam(g->gr_name)) { |
@@ -46,7 +48,6 @@ static void xgroup_study(struct group *g) | |||
46 | max = CONFIG_LAST_SYSTEM_ID; | 48 | max = CONFIG_LAST_SYSTEM_ID; |
47 | } else { | 49 | } else { |
48 | g->gr_gid = CONFIG_LAST_SYSTEM_ID + 1; | 50 | g->gr_gid = CONFIG_LAST_SYSTEM_ID + 1; |
49 | max = 64999; | ||
50 | } | 51 | } |
51 | } | 52 | } |
52 | /* Check if the desired gid is free | 53 | /* Check if the desired gid is free |
@@ -125,7 +126,7 @@ int addgroup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |||
125 | int addgroup_main(int argc UNUSED_PARAM, char **argv) | 126 | int addgroup_main(int argc UNUSED_PARAM, char **argv) |
126 | { | 127 | { |
127 | unsigned opts; | 128 | unsigned opts; |
128 | unsigned gid = 0; | 129 | const char *gid = "0"; |
129 | 130 | ||
130 | /* need to be root */ | 131 | /* need to be root */ |
131 | if (geteuid()) { | 132 | if (geteuid()) { |
@@ -139,7 +140,7 @@ int addgroup_main(int argc UNUSED_PARAM, char **argv) | |||
139 | * addgroup -g num group | 140 | * addgroup -g num group |
140 | * addgroup user group | 141 | * addgroup user group |
141 | * Check for min, max and missing args */ | 142 | * Check for min, max and missing args */ |
142 | opt_complementary = "-1:?2:g+"; | 143 | opt_complementary = "-1:?2"; |
143 | opts = getopt32(argv, "g:S", &gid); | 144 | opts = getopt32(argv, "g:S", &gid); |
144 | /* move past the commandline options */ | 145 | /* move past the commandline options */ |
145 | argv += optind; | 146 | argv += optind; |
@@ -175,7 +176,7 @@ int addgroup_main(int argc UNUSED_PARAM, char **argv) | |||
175 | #endif /* ENABLE_FEATURE_ADDUSER_TO_GROUP */ | 176 | #endif /* ENABLE_FEATURE_ADDUSER_TO_GROUP */ |
176 | { | 177 | { |
177 | die_if_bad_username(argv[0]); | 178 | die_if_bad_username(argv[0]); |
178 | new_group(argv[0], gid); | 179 | new_group(argv[0], xatou_range(gid, 0, CONFIG_LAST_ID)); |
179 | } | 180 | } |
180 | /* Reached only on success */ | 181 | /* Reached only on success */ |
181 | return EXIT_SUCCESS; | 182 | return EXIT_SUCCESS; |