fixed issues with next user name suggestion

This commit is contained in:
Roland Gruber 2018-08-15 10:43:10 +02:00
parent ebe2c6390a
commit 2848bc9586
1 changed files with 14 additions and 19 deletions

View File

@ -1161,7 +1161,7 @@ class posixAccount extends baseModule implements passwordService {
else { else {
// Change uid to a new uid until a free uid is found // Change uid to a new uid until a free uid is found
while ($this->userNameExists($this->attributes['uid'][0], $typeId)) { while ($this->userNameExists($this->attributes['uid'][0], $typeId)) {
$this->attributes['uid'][0] = $this->getNextUserName($this->attributes['uid'][0]); $this->attributes['uid'][0] = $this->getNextUserName($this->attributes['uid'][0], array_keys($this->getAccountContainer()->getAccountModules()));
} }
} }
// Show warning if LAM has changed username // Show warning if LAM has changed username
@ -1571,7 +1571,7 @@ class posixAccount extends baseModule implements passwordService {
$firstSuggestion = $this->attributes['uid'][0]; $firstSuggestion = $this->attributes['uid'][0];
if (!empty($this->attributes['uid'][0]) && $this->userNameExists($this->attributes['uid'][0], $typeId)) { if (!empty($this->attributes['uid'][0]) && $this->userNameExists($this->attributes['uid'][0], $typeId)) {
while ($this->userNameExists($this->attributes['uid'][0], $typeId)) { while ($this->userNameExists($this->attributes['uid'][0], $typeId)) {
$this->attributes['uid'][0] = $this->getNextUserName($this->attributes['uid'][0]); $this->attributes['uid'][0] = $this->getNextUserName($this->attributes['uid'][0], array_keys($this->getAccountContainer()->getAccountModules()));
} }
$users = $this->getUserNames($typeId); $users = $this->getUserNames($typeId);
$msg = new htmlStatusMessage($this->messages['uid'][5][0], $msg = new htmlStatusMessage($this->messages['uid'][5][0],
@ -2592,7 +2592,7 @@ class posixAccount extends baseModule implements passwordService {
if (array_key_exists($rawAccount[$ids['posixAccount_userName']], $existingUsers)) { if (array_key_exists($rawAccount[$ids['posixAccount_userName']], $existingUsers)) {
$userName = $rawAccount[$ids['posixAccount_userName']]; $userName = $rawAccount[$ids['posixAccount_userName']];
while (array_key_exists($userName, $existingUsers)) { while (array_key_exists($userName, $existingUsers)) {
$userName = $this->getNextUserName($userName); $userName = $this->getNextUserName($userName, $selectedModules);
} }
$errMsg = $this->messages['uid'][9]; $errMsg = $this->messages['uid'][9];
array_push($errMsg, array($i, $userName, $rawAccount[$ids['posixAccount_userName']], array_push($errMsg, array($i, $userName, $rawAccount[$ids['posixAccount_userName']],
@ -2702,11 +2702,11 @@ class posixAccount extends baseModule implements passwordService {
if (array_key_exists($rawAccount[$ids['posixAccount_hostName']], $existingUsers)) { if (array_key_exists($rawAccount[$ids['posixAccount_hostName']], $existingUsers)) {
$userName = $rawAccount[$ids['posixAccount_hostName']]; $userName = $rawAccount[$ids['posixAccount_hostName']];
while (array_key_exists($userName, $existingUsers)) { while (array_key_exists($userName, $existingUsers)) {
$userName = $this->getNextUserName($userName); $userName = $this->getNextUserName($userName, $selectedModules);
} }
$errMsg = $this->messages['uid'][10]; $errMsg = $this->messages['uid'][10];
array_push($errMsg, array($i, $userName, $rawAccount[$ids['posixAccount_hostName']], array_push($errMsg, array($i, $userName, $rawAccount[$ids['posixAccount_hostName']],
htmlspecialchars($existingUsers[$rawAccount[$ids['posixAccount_userName']]]))); htmlspecialchars($existingUsers[$rawAccount[$ids['posixAccount_hostName']]])));
$errors[] = $errMsg; $errors[] = $errMsg;
} }
if (get_preg($rawAccount[$ids['posixAccount_hostName']], 'hostname')) { if (get_preg($rawAccount[$ids['posixAccount_hostName']], 'hostname')) {
@ -3746,23 +3746,23 @@ class posixAccount extends baseModule implements passwordService {
* <br>Attention: This user name might still be in use. This needs to be checked separately. * <br>Attention: This user name might still be in use. This needs to be checked separately.
* *
* @param String $userName user name * @param String $userName user name
* @param string[] $moduleNames list of account module names
* @return String new user name * @return String new user name
*/ */
protected function getNextUserName($userName) { protected function getNextUserName($userName, $moduleNames) {
if ($this->get_scope()=='host') { if ($this->get_scope() == 'host' && in_array('sambaSamAccount', $moduleNames)) {
$userName = substr($userName, 0, -1); $userName = substr($userName, 0, -1);
} }
// get last character of username // get last character of username
$lastchar = substr($userName, strlen($userName) - 1, 1); $lastchar = substr($userName, strlen($userName) - 1, 1);
$suffix = '';
if (($this->get_scope() == 'host') && in_array('sambaSamAccount', $moduleNames)) {
$suffix = '$';
}
// Last character is no number // Last character is no number
if ( !preg_match('/^([0-9])+$/', $lastchar)) { if ( !preg_match('/^([0-9])+$/', $lastchar)) {
// Last character is no number. Therefore we only have to add "2" to it. // Last character is no number. Therefore we only have to add "2" to it.
if ($this->get_scope()=='host') { $userName = $userName . '2' . $suffix;
$userName = $userName . '2$';
}
else {
$userName = $userName . '2';
}
} }
else { else {
/* Last character is a number -> we have to increase the number until we've /* Last character is a number -> we have to increase the number until we've
@ -3786,12 +3786,7 @@ class posixAccount extends baseModule implements passwordService {
$firstchars = substr($userName, 0, $i + 1); $firstchars = substr($userName, 0, $i + 1);
$lastchars = substr($userName, $i + 1, strlen($userName) - $i); $lastchars = substr($userName, $i + 1, strlen($userName) - $i);
// Put username together // Put username together
if ($this->get_scope()=='host') { $userName = $firstchars . (intval($lastchars) + 1) . $suffix;
$userName = $firstchars . (intval($lastchars) + 1) . "$";
}
else {
$userName = $firstchars . (intval($lastchars) + 1);
}
} }
return $userName; return $userName;
} }