adduser,addgroup: introduce and use CONFIG_LAST_ID
[oweals/busybox.git] / loginutils / addgroup.c
index b37270ff0f3894e452d26b48f87f959930e1fa1f..22cd0e6615f742d417486cd544117a4aa9a94274 100644 (file)
 #if CONFIG_LAST_SYSTEM_ID < CONFIG_FIRST_SYSTEM_ID
 #error Bad LAST_SYSTEM_ID or FIRST_SYSTEM_ID in .config
 #endif
+#if CONFIG_LAST_ID < CONFIG_LAST_SYSTEM_ID
+#error Bad LAST_ID or LAST_SYSTEM_ID in .config
+#endif
 
 #define OPT_GID                       (1 << 0)
 #define OPT_SYSTEM_ACCOUNT            (1 << 1)
 
-/* We assume GID_T_MAX == INT_MAX */
 static void xgroup_study(struct group *g)
 {
-       unsigned max = INT_MAX;
+       unsigned max = CONFIG_LAST_ID;
 
        /* Make sure gr_name is unused */
        if (getgrnam(g->gr_name)) {
@@ -46,7 +48,6 @@ static void xgroup_study(struct group *g)
                        max = CONFIG_LAST_SYSTEM_ID;
                } else {
                        g->gr_gid = CONFIG_LAST_SYSTEM_ID + 1;
-                       max = 64999;
                }
        }
        /* Check if the desired gid is free
@@ -125,7 +126,7 @@ int addgroup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int addgroup_main(int argc UNUSED_PARAM, char **argv)
 {
        unsigned opts;
-       unsigned gid = 0;
+       const char *gid = "0";
 
        /* need to be root */
        if (geteuid()) {
@@ -139,7 +140,7 @@ int addgroup_main(int argc UNUSED_PARAM, char **argv)
         *  addgroup -g num group
         *  addgroup user group
         * Check for min, max and missing args */
-       opt_complementary = "-1:?2:g+";
+       opt_complementary = "-1:?2";
        opts = getopt32(argv, "g:S", &gid);
        /* move past the commandline options */
        argv += optind;
@@ -175,7 +176,7 @@ int addgroup_main(int argc UNUSED_PARAM, char **argv)
 #endif /* ENABLE_FEATURE_ADDUSER_TO_GROUP */
        {
                die_if_bad_username(argv[0]);
-               new_group(argv[0], gid);
+               new_group(argv[0], xatou_range(gid, 0, CONFIG_LAST_ID));
        }
        /* Reached only on success */
        return EXIT_SUCCESS;