diff -up shadow-4.1.5/libmisc/find_new_gid.c.uflg shadow-4.1.5/libmisc/find_new_gid.c --- shadow-4.1.5/libmisc/find_new_gid.c.uflg 2011-07-30 01:10:27.000000000 +0200 +++ shadow-4.1.5/libmisc/find_new_gid.c 2012-03-19 12:51:46.090554116 +0100 @@ -68,7 +68,7 @@ int find_new_gid (bool sys_group, return -1; } } else { - gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 101UL); + gid_min = (gid_t) 1; gid_max = (gid_t) getdef_ulong ("GID_MIN", 1000UL) - 1; gid_max = (gid_t) getdef_ulong ("SYS_GID_MAX", (unsigned long) gid_max); if (gid_max < gid_min) { @@ -100,6 +100,10 @@ int find_new_gid (bool sys_group, return 0; } + /* if we did not find free preffered system gid, we start to look for + * one in the range assigned to dynamic system IDs */ + if (sys_group) + gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 101UL); /* * Search the entire group file,