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;