¿Puede funcionar AuthnProviderAlias ldap con Apache2.4.x?
Esto funciona perfectamente en Apache2.2, pero no en 2.4 (y yonecesitar usar 2.4 ahora):
<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>
Usando directamente las directivas deApache 2.4 mod_authnz_ldap trabaja en el<Directory >
sección:
AuthLDAPBindDN cn=Manager,dc=example,dc=com
AuthLDAPBindPassword xxx
AuthLDAPURL ldap://localhost:9011/dc=example,dc=com?uid?sub?(objectClass=*)
AuthBasicProvider ldap
Pero eso permite una autentificación.contra solouno Servidor LDAP, y tengo que autenticarme contra al menos dos.
De ahí el uso deAuthnProviderAlias
, que ahora es (2.4) parte demod_authn_core
módulo de autenticación de núcleo, en lugar de lo viejo2.2 módulo de autenticación LDAPmod_authn_alias
.
He compilado todas las versiones 2.4.x (de 2.4.1 a 2.4.6, e incluso actual), conAPR 1.4.8, y APR-util 1.5.2, en modo debug (-g -O0
)
Lo que intenté es una sesión de depuración (gdb --command=debug
, con 'debug
'un archivo de parámetros gdb como sigue):
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
Lo que veo es:
laauthaliassection
funcion demod_authn_core
se llamados vecesprobablemente porserver/main.c
llamadasap_process_config_tree
dos veces (una vez aquíyuna vez ahí) en el mismomain()
función.Esa funcionobtiene elauthcfg
authn_alias_srv_conf *authcfg =
(authn_alias_srv_conf *)ap_get_module_config(r->server->module_config,
&authn_core_module);
Yestablece el proveedor con el nombre correcto 'ldap
'y alias derecho'myldap
'
apr_hash_set(authcfg->alias_rec, provider_alias, APR_HASH_KEY_STRING, prvdraliasrec);
PERO: cuando la contraseña necesita ser revisada (enauthn_alias_check_password
, se poneauthcfg
otra vez ybuscar al proveedor:
provider_alias_rec *prvdraliasrec = apr_hash_get(authcfg->alias_rec,
provider_name, APR_HASH_KEY_STRING);
Usa el derechoprovider_name
'myldap
', ... y que siempre vuelve.null
.
eso significaprvdraliasrec->provider->check_password
nunca te llamen
Una pregunta similar en ellista de correo http-dev (23 de agosto de 2013 "¿Está AuthnProviderAlias sutilmente dividido en 2.4?") fue ... sin respuesta.
¿Cómo solucionarías este error?