Bug Fixed (in my case). I will post the AI help that i had to solve the problem, i have installed osTicket (v1.18.2) on Windows 2019 Xampp Web Server, LDAP Authentication and Lookup plugin connected to a Windows 2019 Domain.
The real bug is in account.php, lines 63–75.
The code checks whether an external backend exists in lines 65 and 67, but then the else block always validates:
$_POST['passwd1']
For LDAP registration, that password field does not exist. So osTicket produces a hidden password error and then shows only:
"Unable to register account. See messages below"
Replace lines 63–75
######### Replace this: ################
if (!$user_form->isValid(function($f) { return $f->isVisibleToUsers(); }))
$errors['err'] = __('Incomplete client information');
elseif (!$POST['backend'] && !$POST['passwd1'])
$errors['passwd1'] = __('New password is required');
elseif (!$POST['backend'] && $POST['passwd2'] != $POST['passwd1'])
$errors['passwd1'] = __('Passwords do not match');
else {
try {
UserAccount::checkPassword($POST['passwd1']);
} catch (BadPassword $ex) {
$errors['passwd1'] = $ex->getMessage();
}
}
############### with: ###################
if (!$user_form->isValid(function($f) {
return $f->isVisibleToUsers();
})) {
$errors['err'] = __('Incomplete client information');
}
elseif (empty($POST['backend'])) {
$passwd1 = $POST['passwd1'] ?? '';
$passwd2 = $_POST['passwd2'] ?? '';
if (!$passwd1) {
$errors['passwd1'] = __('New password is required');
}
elseif ($passwd2 !== $passwd1) {
$errors['passwd1'] = __('Passwords do not match');
}
else {
try {
UserAccount::checkPassword($passwd1);
} catch (BadPassword $ex) {
$errors['passwd1'] = $ex->getMessage();
}
}
}
Password validation now runs only when:
empty($_POST['backend'])
That means:
local osTicket registration → password required and validated;
LDAP registration → password validation skipped;
OAuth or another external backend → password validation skipped.