* libmisc/find_new_gid.c, libmisc/find_new_uid.c: Avoid calling
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 22 Feb 2009 23:23:15 +0000 (23:23 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 22 Feb 2009 23:23:15 +0000 (23:23 +0000)
getgrent()/getpwent() after they return NULL. This caused LDAP to
return at the beginning of the group/user entries.

ChangeLog
libmisc/find_new_gid.c
libmisc/find_new_uid.c

index 93a5d88abc486f69ae30ef67be27e865a8b90fa1..10414bfb43eabf65d9f31f991be4108fa7e2bff6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Avoid calling
+       getgrent()/getpwent() after they return NULL. This caused LDAP to
+       return at the beginning of the group/user entries.
+
 2009-01-27  Nicolas François  <nicolas.francois@centraliens.net>
 
        * man/nologin.8.xml: Fix typo (HYSTORY -> HISTORY).
index 0201ebdf0c02e5751cdcc392f732d695003ff46c..1f2de5fd534e440b66fa2b138793ea68d1d004b5 100644 (file)
@@ -89,9 +89,7 @@ int find_new_gid (bool sys_group, gid_t *gid, gid_t const *preferred_gid)
         * some groups were created but the changes were not committed yet.
         */
        setgrent ();
-       gr_rewind ();
-       while (   ((grp = getgrent ()) != NULL)
-              || ((grp = gr_next ()) != NULL)) {
+       while ((grp = getgrent ()) != NULL) {
                if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
                        group_id = grp->gr_gid + 1;
                }
@@ -101,6 +99,16 @@ int find_new_gid (bool sys_group, gid_t *gid, gid_t const *preferred_gid)
                }
        }
        endgrent ();
+       gr_rewind ();
+       while ((grp = getgrent ()) != NULL) {
+               if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
+                       group_id = grp->gr_gid + 1;
+               }
+               /* create index of used GIDs */
+               if (grp->gr_gid <= gid_max) {
+                       used_gids[grp->gr_gid] = 1;
+               }
+       }
 
        /*
         * If a group with GID equal to GID_MAX exists, the above algorithm
index 90918b40f3b1e0df7b6d33d5d914bb62346426a9..f00b3e12ea40753614a02374036bb6fc0b4e8e1a 100644 (file)
@@ -90,9 +90,7 @@ int find_new_uid (bool sys_user, uid_t *uid, uid_t const *preferred_uid)
         * some users were created but the changes were not committed yet.
         */
        setpwent ();
-       pw_rewind ();
-       while (   ((pwd = getpwent ()) != NULL)
-              || ((pwd = pw_next ()) != NULL)) {
+       while ((pwd = getpwent ()) != NULL) {
                if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
                        user_id = pwd->pw_uid + 1;
                }
@@ -102,6 +100,16 @@ int find_new_uid (bool sys_user, uid_t *uid, uid_t const *preferred_uid)
                }
        }
        endpwent ();
+       pw_rewind ();
+       while ((pwd = pw_next ()) != NULL) {
+               if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
+                       user_id = pwd->pw_uid + 1;
+               }
+               /* create index of used UIDs */
+               if (pwd->pw_uid <= uid_max) {
+                       used_uids[pwd->pw_uid] = 1;
+               }
+       }
 
        /*
         * If a user with UID equal to UID_MAX exists, the above algorithm