]> granicus.if.org Git - shadow/commitdiff
* libmisc/find_new_gid.c, libmisc/find_new_uid.c: For system
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sat, 11 Apr 2009 16:00:45 +0000 (16:00 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sat, 11 Apr 2009 16:00:45 +0000 (16:00 +0000)
accounts, return the first unused ID, starting from the max value.
This could be useful later to increase the static IDs range.

ChangeLog
NEWS
libmisc/find_new_gid.c
libmisc/find_new_uid.c

index 748c4230c7fbf6bfb4616c6cd3c22a08f576b90c..68a25ba2d836008b02eedc6831a44fab1cd71f77 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-11  Peter Vrabec  <pvrabec@redhat.com>
+
+       * libmisc/find_new_gid.c, libmisc/find_new_uid.c: For system
+       accounts, return the first unused ID, starting from the max value.
+       This could be useful later to increase the static IDs range.
+
 2009-04-11  Peter Vrabec  <pvrabec@redhat.com>
 
        * NEWS, src/useradd.c, man/useradd.8.xml: add -Z option to map
diff --git a/NEWS b/NEWS
index 71ccdf56439fd449c3b570a498c54e44e8131da5..9351f5632641fea3d64ea72d22022ac41fc66eb6 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -56,6 +56,8 @@ shadow-4.1.2.2 -> shadow-4.1.3                                                UNRELEASED
   * error handling improvement (see above).
   * Speedup (see "addition of users or groups" above).
   * do not create groups with GID set to (gid_t)-1.
+  * Allocate system group GIDs in reverse order. This could be useful
+    later to increase the static IDs range.
 - groupdel
   * audit logging improvements.
   * error handling improvement (see above).
@@ -82,6 +84,8 @@ shadow-4.1.2.2 -> shadow-4.1.3                                                UNRELEASED
   * Speedup (see "addition of users or groups" above).
   * do not create users with UID set to (gid_t)-1.
   * do not create groups with GID set to (gid_t)-1.
+  * Allocate system account UIDs/GIDs in reverse order. This could be useful
+    later to increase the static IDs range.
 - passwd
   * For compatibility with other passwd version, the --lock an --unlock
     options do not lock or unlock the user account anymore.  They only
@@ -98,6 +102,8 @@ shadow-4.1.2.2 -> shadow-4.1.3                                               UNRELEASED
   * New -M/--no-create-home option to disable CREATE_HOME.
   * do not create users with UID set to (gid_t)-1.
   * Added -Z option to map SELinux user for user's login.
+  * Allocate system user UIDs in reverse order. This could be useful
+    later to increase the static IDs range.
 - userdel
   * audit logging improvements.
   * Do not fail if the removed user is not in the shadow database.
index e7a072b09b56623d3a3a51d82d9657d4c9744362..d429c0181aa936662e637093edb90324484d2e38 100644 (file)
@@ -110,6 +110,23 @@ int find_new_gid (bool sys_group, gid_t *gid, gid_t const *preferred_gid)
                }
        }
 
+       /* find free system account in reverse order */
+       if (sys_group) {
+               for (group_id = gid_max; group_id >= gid_min; group_id--) {
+                       if (0 == used_gids[group_id]) {
+                               break;
+                       }
+               }
+               if ( group_id < gid_min ) {
+                       fprintf (stderr,
+                                _("%s: Can't get unique GID (no more available GIDs)\n"),
+                                Prog);
+                       SYSLOG ((LOG_WARN,
+                                "no more available GID on the system"));
+                       return -1;
+               }
+       }
+
        /*
         * If a group with GID equal to GID_MAX exists, the above algorithm
         * will give us GID_MAX+1 even if not unique. Search for the first
index f00b3e12ea40753614a02374036bb6fc0b4e8e1a..784b1bb0a15b616c19733bb7b4aa27063a855ba8 100644 (file)
@@ -111,6 +111,23 @@ int find_new_uid (bool sys_user, uid_t *uid, uid_t const *preferred_uid)
                }
        }
 
+       /* find free system account in reverse order */
+       if (sys_user) {
+               for (user_id = uid_max; user_id >= uid_min; user_id--) {
+                       if (0 == used_uids[user_id]) {
+                               break;
+                       }
+               }
+               if (user_id < uid_min ) {
+                       fprintf (stderr,
+                                _("%s: Can't get unique system UID (no more available UIDs)\n"),
+                                Prog);
+                       SYSLOG ((LOG_WARN,
+                                "no more available UID on the system"));
+                       return -1;
+               }
+       }
+
        /*
         * If a user with UID equal to UID_MAX exists, the above algorithm
         * will give us UID_MAX+1 even if not unique. Search for the first