diff --git a/ldap-useradmin/edit_group.cgi b/ldap-useradmin/edit_group.cgi index 5de5d0bb2..04e3f951a 100755 --- a/ldap-useradmin/edit_group.cgi +++ b/ldap-useradmin/edit_group.cgi @@ -50,9 +50,14 @@ print "\n"; print "$text{'gedit_gid'}\n"; if ($in{'new'} && $config{'next_gid'}) { # Next GID comes from module config + while(1) { + $newgid = $config{'next_gid'}; + $config{'next_gid'}++; + last if (!&check_uid_used($ldap, &get_group_base(), + "gidNumber", $newgid)); + } print "\n"; - $config{'next_uid'}++; + "value='$newgid'>\n"; &save_module_config(); } elsif ($in{'new'}) { diff --git a/ldap-useradmin/edit_user.cgi b/ldap-useradmin/edit_user.cgi index d229f92e5..1f8e22ad6 100755 --- a/ldap-useradmin/edit_user.cgi +++ b/ldap-useradmin/edit_user.cgi @@ -116,8 +116,12 @@ print "$text{'uid'}\n"; if ($in{'new'}) { # Find the first free UID above the base if ($config{'next_uid'}) { - $newuid = $config{'next_uid'}; - $config{'next_uid'}++; + while(1) { + $newuid = $config{'next_uid'}; + $config{'next_uid'}++; + last if (!&check_uid_used($ldap, &get_user_base(), + "uidNumber", $newuid)); + } &save_module_config(); } else { diff --git a/ldap-useradmin/ldap-useradmin-lib.pl b/ldap-useradmin/ldap-useradmin-lib.pl index a29ba1b57..36395f65a 100644 --- a/ldap-useradmin/ldap-useradmin-lib.pl +++ b/ldap-useradmin/ldap-useradmin-lib.pl @@ -1137,5 +1137,15 @@ $string =~ s/ return $string; } +# check_uid_used(&ldap, base, name, id)_ +# Returns 1 if a user or group can be found with the given uid or gid +sub check_uid_used +{ +local ($ldap, $base, $name, $id) = @_; +local $rv = $ldap->search('base' => $base, + 'filter' => "($name=$id)"); +return $rv->count ? 1 : 0; +} + 1;