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?

questionAnswers(2)

yourAnswerToTheQuestion