All Samba attributes are removed when Samba access is disabled for a user.
---- Changes since 1.380 ----
Added access control options to prevent use of the same UID or GID.
+---- Changes since 1.390 ----
+Added locking to prevent concurrent writes to the LDAP database, to prevent UID collisions.
$ldap = &ldap_connect();
$schema = $ldap->schema();
$pft = $schema->attribute("shadowLastChange") ? 2 : 0;
+&lock_user_files();
# Work out a good base UID for new users
$newuid = $mconfig{'base_uid'};
}
}
print "</pre>\n";
+&unlock_user_files();
&webmin_log("batch", undef, $in{'source'} == 1 ? $in{'local'} : undef,
{ 'created' => $created, 'modified' => $modified,
'deleted' => $deleted, 'lnum' => $lnum } );
return &useradmin::set_group_envs(@_);
}
-# Does nothing, because no LDAP locking is needed
-sub lock_user_files { }
+# Locks a dummy file, to indicate that the DB is in use
+sub lock_user_files
+{
+&lock_file("$module_config_directory/ldapdb");
+}
-# Does nothing, because no LDAP locking is needed
-sub unlock_user_files { }
+sub unlock_user_files
+{
+&unlock_file("$module_config_directory/ldapdb");
+}
# split_props(text, &user)
sub split_props
&ReadParse();
$ldap = &ldap_connect();
$schema = $ldap->schema();
+&lock_user_files();
if (!$in{'new'}) {
# Get existing group
delete($in{'pass'});
delete($in{'encpass'});
$ldap->unbind();
+&unlock_user_files();
&webmin_log(!$in{'new'} ? 'modify' : 'create', 'group', $group, \%in);
# Bounce back to the list
&ReadParse();
$ldap = &ldap_connect();
$schema = $ldap->schema();
+&lock_user_files();
if (!$in{'new'}) {
# Get existing user
$rv = $ldap->search(base => $in{'dn'},
$ldap->unbind();
delete($in{'pass'});
delete($in{'passmode'});
+&unlock_user_files();
&webmin_log(!$in{'new'} ? 'modify' : 'create', 'user', $user, \%in);
&redirect($in{'return'} || "");