У нас есть экземпляр MantisBT, и нам удалось настроить аутентификацию LDAP, но нам нужно также включить аутентификацию на основе пользователей Mantis (отдельно от LDAP для некоторых пользователей), очень похоже на этот вопрос для Ruby.
К сожалению, кажется, что вы можете легко настроить Mantis для аутентификации либо через LDAP, либо через своих пользователей, но включение обоих протоколов аутентификации проблематично. Есть ли у вас предложения?
Дело в том, что мы не контролируем содержимое базы данных LDAP. Мы можем использовать только то, что есть, но не добавлять новых пользователей (что сделало бы предложенное вами решение жизнеспособным).
Хорошо, я только что проверил код, и я могу ошибаться, но я думаю, что его легко исправить, посмотрите здесь, в функции auth_does_password_match, 1-е условие содержит оператор return (отсюда и поведение «xor» в методах аутентификации), вы просто нужно сделать это условие резервным для классической аутентификации, которая идет сразу после, или чтобы все было правильно, вы можете создать свою собственную константу для t_configured_login_method, чтобы вы могли добавить свою собственную логику и не мешать другим методам аутентификации.
@EricLavault - это то, что я искал. Я был бы более чем счастлив принять ваш комментарий в качестве ответа, если вы решите добавить его.
Спасибо, я написал это как ответ с более подробной информацией.





Глядя на исходный код, в функции auth_does_password_match(), которая фактически выполняет аутентификацию:
function auth_does_password_match( $p_user_id, $p_test_password ) {
$t_configured_login_method = config_get_global( 'login_method' );
if ( LDAP == $t_configured_login_method ) {
return ldap_authenticate( $p_user_id, $p_test_password );
}
# code continues with a try for each of the other authentication methods
# ...
}
Первое условие проверяет метод входа в систему $t_configured_login_method и, если это «LDAP», пытается пройти аутентификацию соответствующим образом. Хорошо, здесь нет ничего сумасшедшего, но утверждение return ldap_authenticate(...); не позволяет использовать другие методы аутентификации.
Надеюсь, не составит большого труда исправить ошибку, чтобы в случае сбоя аутентификации LDAP можно было вернуться к другим методам аутентификации.
По сути, требуется, чтобы возвращаемое значение ldap_authenticate() возвращалось Только, если аутентификация LDAP прошла успешно, но не в противном случае, чтобы код мог продолжать попытки с другими методами аутентификации. 1-е условие будет выглядеть так:
if (LDAP == $t_configured_login_method && ldap_authenticate($p_user_id, $p_test_password)) {
return TRUE;
}
Чтобы сделать все правильно, вы можете создать свою собственную константу для t_configured_login_method, чтобы вы могли добавить свою собственную логику и не мешать другим методам аутентификации.
Я не знаю Mantis, но если нет возможности включить оба типа аутентификации, вы можете экспортировать пользователей из mantis и импортировать их в свою базу данных ldap, таким образом, вы сможете управлять всеми пользователями в одной точке. Если вы не можете экспортировать напрямую в ldif, это может быть более сложным, но наличие образца ldif «обычной» пользовательской записи может подсказать вам, как перенести экспорт данных богомола в ldif.