Это отлично работает в Apache2.2, но не в 2.4 (и теперь мне нужно использовать 2.4):
<AuthnProviderAlias ldap myldap>
AuthLDAPBindDN cn=Manager,dc=example,dc=com
AuthLDAPBindPassword xxxx
AuthLDAPURL ldap://localhost:9011/dc=example,dc=com?uid?sub?(objectClass=*)
</AuthnProviderAlias>
Listen 48443
<VirtualHost myserver:48443>
<Directory /path/to/a/folder>
Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AuthBasicProvider myldap mySecondLdap myThirdLdap ...
AuthType Basic
AuthName "LDAP authentication for folder"
Require valid-user
...
</Directory>
</VirtualHost>
Используя непосредственно директивы Apache 2.4 mod_authnz_ldap работает в разделе <Directory >
:
AuthLDAPBindDN cn=Manager,dc=example,dc=com
AuthLDAPBindPassword xxx
AuthLDAPURL ldap://localhost:9011/dc=example,dc=com?uid?sub?(objectClass=*)
AuthBasicProvider ldap
Но это позволяет использовать аутентификацию только для одного сервера LDAP, и мне нужно пройти аутентификацию по меньшей мере из двух.
Следовательно, использование AuthnProviderAlias
, которое теперь (2.4) является частью mod_authn_core
модуль проверки подлинности ядра, вместо старого 2.2 Модуль аутентификации LDAP mod_authn_alias
.
Я скомпилировал все версии 2.4.x(от 2.4.1 до 2.4.6 и даже текущего), APR 1.4.8 и APR- использовать 1.5.2, в режиме отладки (-g -O0
)
То, что я пробовал, - это сеанс отладки (gdb --command=debug
, с 'debug
' файл параметров gdb, как показано ниже:
file /home/vonc/usr/local/apps/apache/bin/httpd
set logging file /home/vonc/gdb.txt
set logging on
set args -X
show args
set breakpoint pending on
# authn_alias_check_password
b mod_authn_core.c:115
# authaliassection
b mod_authn_core.c:203
b mod_authn_core.c:255
run
wh
fs next
where
Что я вижу:
- функция
authaliassection
mod_authn_core
вызывается дважды, возможно, из-заserver/main.c
вызываетap_process_config_tree
дважды (один раз здесь и один раз там) в той жеmain()
function.
Эта функция получает authcfg
authn_alias_srv_conf *authcfg =
(authn_alias_srv_conf *)ap_get_module_config(r->server->module_config,
&authn_core_module);
И устанавливает поставщик с правильным именем 'ldap
' и правым псевдонимом 'myldap
'
apr_hash_set(authcfg->alias_rec, provider_alias, APR_HASH_KEY_STRING, prvdraliasrec);
НО: когда пароль нужно проверить (в authn_alias_check_password
, он снова получает authcfg
и выберите поставщика:
provider_alias_rec *prvdraliasrec = apr_hash_get(authcfg->alias_rec,
provider_name, APR_HASH_KEY_STRING);
Он использует правый provider_name
'myldap
',... и который всегда возвращает null
.
это означает, что prvdraliasrec->provider->check_password
никогда не вызывается.
Аналогичный вопрос в списке рассылки http-dev (23 августа, 2013 "Is AuthnProviderAlias тонко сломанный в 2.4?" ) был... без ответа.
Как вы устраните эту ошибку?