Czy ldap AuthnProviderAlias może działać z Apache2.4.x?
Działa to doskonale w Apache2.2, ale nie w 2.4 (i Ipotrzeba użyć teraz 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>
Bezpośrednie korzystanie z dyrektyw odApache 2.4 mod_authnz_ldap działa w<Directory >
Sekcja:
AuthLDAPBindDN cn=Manager,dc=example,dc=com
AuthLDAPBindPassword xxx
AuthLDAPURL ldap://localhost:9011/dc=example,dc=com?uid?sub?(objectClass=*)
AuthBasicProvider ldap
Ale to pozwala na uwierzytelnienietylko przeciwkojeden Serwer LDAPi muszę się uwierzytelnić na co najmniej dwóch.
Stąd wykorzystanieAuthnProviderAlias
, która jest teraz (2.4) częściąmod_authn_core
rdzeniowy moduł uwierzytelniania, zamiast starego2.2 Moduł uwierzytelniania LDAPmod_authn_alias
.
Skompilowałem wszystkie wersje 2.4.x (od 2.4.1 do 2.4.6, a nawet bieżące), za pomocąAPR 1.4.8 i APR-util 1.5.2, w trybie debugowania (-g -O0
)
To, co próbowałem, to sesja debugowania (gdb --command=debug
, z 'debug
'następujący plik parametrów 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
Widzę to:
authaliassection
funkcja zmod_authn_core
jest nazywanydwa razy, prawdopodobnie z powoduserver/main.c
połączeniaap_process_config_tree
dwa razy (raz tutaj, iraz tam) w tym samymmain()
funkcjonować.Ta funkcjadostajeauthcfg
authn_alias_srv_conf *authcfg =
(authn_alias_srv_conf *)ap_get_module_config(r->server->module_config,
&authn_core_module);
Iustawia dostawcę z właściwą nazwą ”ldap
„i prawy alias”myldap
'
apr_hash_set(authcfg->alias_rec, provider_alias, APR_HASH_KEY_STRING, prvdraliasrec);
ALE: kiedy hasło musi zostać sprawdzone (wauthn_alias_check_password
, robi sięauthcfg
ponownie ipobrać dostawcę:
provider_alias_rec *prvdraliasrec = apr_hash_get(authcfg->alias_rec,
provider_name, APR_HASH_KEY_STRING);
Używa prawaprovider_name
'myldap
', ... i to zawsze powracanull
.
to znaczyprvdraliasrec->provider->check_password
nigdy nie zadzwonię.
Podobne pytanie wlista mailingowa http-dev (23 sierpnia 2013 „Czy AuthnProviderAlias jest subtelnie łamany w 2.4?”) był ... bez odpowiedzi.
Jak rozwiązałbyś ten błąd?