diff -up shadow-4.1.4.2/libmisc/find_new_gid.c.uflg shadow-4.1.4.2/libmisc/find_new_gid.c --- shadow-4.1.4.2/libmisc/find_new_gid.c.uflg 2010-05-21 11:31:36.069929199 +0200 +++ shadow-4.1.4.2/libmisc/find_new_gid.c 2010-05-21 11:31:47.600963338 +0200 @@ -61,7 +61,7 @@ int find_new_gid (bool sys_group, gid_min = (gid_t) getdef_ulong ("GID_MIN", 500UL); gid_max = (gid_t) getdef_ulong ("GID_MAX", 60000UL); } else { - gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 201UL); + gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 1UL); gid_max = (gid_t) getdef_ulong ("GID_MIN", 500UL) - 1; gid_max = (gid_t) getdef_ulong ("SYS_GID_MAX", (unsigned long) gid_max); } @@ -79,7 +79,11 @@ int find_new_gid (bool sys_group, *gid = *preferred_gid; 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", 201UL); /* * Search the entire group file,