diff --git a/include/util_ldap.h b/include/util_ldap.h index 3d5faed..ede304f 100644 --- a/include/util_ldap.h +++ b/include/util_ldap.h @@ -106,7 +106,7 @@ typedef struct util_ldap_connection_t { #if APR_HAS_THREADS apr_thread_mutex_t *lock; /* Lock to indicate this connection is in use */ #endif - + const char *url; const char *host; /* Name of the LDAP server (or space separated list) */ int port; /* Port of the LDAP server */ deref_options deref; /* how to handle alias dereferening */ @@ -237,7 +237,7 @@ APR_DECLARE_OPTIONAL_FN(apr_status_t,uldap_connection_unbind,(void *param)); * const char *binddn, const char *bindpw, deref_options deref, * int netscapessl, int starttls) */ -APR_DECLARE_OPTIONAL_FN(util_ldap_connection_t *,uldap_connection_find,(request_rec *r, const char *host, int port, +APR_DECLARE_OPTIONAL_FN(util_ldap_connection_t *,uldap_connection_find,(request_rec *r, const char *url, const char *host, int port, const char *binddn, const char *bindpw, deref_options deref, int secure)); diff --git a/modules/aaa/mod_authnz_ldap.c b/modules/aaa/mod_authnz_ldap.c index b7b132e..fc35993 100644 --- a/modules/aaa/mod_authnz_ldap.c +++ b/modules/aaa/mod_authnz_ldap.c @@ -434,7 +434,7 @@ static util_ldap_connection_t *get_connection_for_authz(request_rec *r, enum aut bindpw = req->password; } - return util_ldap_connection_find(r, sec->host, sec->port, + return util_ldap_connection_find(r, (const char *)sec->url, sec->host, sec->port, binddn, bindpw, sec->deref, sec->secure); } @@ -487,7 +487,7 @@ static authn_status authn_ldap_check_password(request_rec *r, const char *user, binddn = ldap_determine_binddn(r, user); } - ldc = util_ldap_connection_find(r, sec->host, sec->port, + ldc = util_ldap_connection_find(r, (const char *)sec->url, sec->host, sec->port, binddn, bindpw, sec->deref, sec->secure); } @@ -1406,6 +1406,8 @@ static const char *mod_auth_ldap_parse_url(cmd_parms *cmd, sec->port = urld->lud_port? urld->lud_port : LDAP_PORT; } + sec->url = apr_pstrndup(cmd->pool, sec->url, strrchr((char *)url, '/') - url); + sec->have_ldap_url = 1; ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, cmd->server, diff --git a/modules/ldap/util_ldap.c b/modules/ldap/util_ldap.c index dc08dd4..f0f099f 100644 --- a/modules/ldap/util_ldap.c +++ b/modules/ldap/util_ldap.c @@ -291,7 +291,8 @@ static int uldap_connection_init(request_rec *r, * some hosts with ports and some without. All hosts which do not * specify a port will use the default port. */ - apr_ldap_init(r->pool, &(ldc->ldap), + + apr_ldap_init(r->pool, &(ldc->ldap), ldc->url, ldc->host, APR_LDAP_SSL == ldc->secure ? LDAPS_PORT : LDAP_PORT, secure, &(result)); @@ -686,7 +687,7 @@ static int compare_client_certs(apr_array_header_t *srcs, * a pointer to the existing ldc structure will be returned. */ static util_ldap_connection_t * - uldap_connection_find(request_rec *r, + uldap_connection_find(request_rec *r, const char *url, const char *host, int port, const char *binddn, const char *bindpw, deref_options deref, int secure) @@ -828,6 +829,7 @@ static util_ldap_connection_t * apr_thread_mutex_lock(l->lock); #endif l->bound = 0; + l->url = url; l->host = apr_pstrdup(l->pool, host); l->port = port; l->deref = deref;