char *cgiroot; /* ScriptAlias */
char *uid; /* Suexec Uid */
char *gid; /* Suexec Gid */
- char *saved_docroot; /* Saved DocumentRoot */
} mod_vhost_ldap_request_t;
char *attributes[] =
int sleep0 = 0;
int sleep1 = 1;
int sleep;
+ struct berval hostnamebv, shostnamebv;
reqc =
(mod_vhost_ldap_request_t *)apr_pcalloc(r->pool, sizeof(mod_vhost_ldap_request_t));
}
hostname = r->hostname;
+ if (hostname == NULL || hostname[0] == '\0')
+ goto null;
fallback:
ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
"[mod_vhost_ldap.c]: translating hostname [%s], uri [%s]", hostname, r->uri);
- apr_snprintf(filtbuf, FILTER_LENGTH, "(&(%s)(|(apacheServerName=%s)(apacheServerAlias=%s)))", conf->filter, hostname, hostname);
+ ber_str2bv(hostname, 0, 0, &hostnamebv);
+ if (ldap_bv2escaped_filter_value(&hostnamebv, &shostnamebv) != 0)
+ goto null;
+ apr_snprintf(filtbuf, FILTER_LENGTH, "(&(%s)(|(apacheServerName=%s)(apacheServerAlias=%s)))", conf->filter, shostnamebv.bv_val, shostnamebv.bv_val);
+ ber_memfree(shostnamebv.bv_val);
result = util_ldap_cache_getuserdn(r, ldc, conf->url, conf->basedn, conf->scope,
attributes, filtbuf, &dn, &vals);
}
if (result == LDAP_NO_SUCH_OBJECT) {
+ if (strcmp(hostname, "*") != 0) {
+ if (strncmp(hostname, "*.", 2) == 0)
+ hostname += 2;
+ hostname += strcspn(hostname, ".");
+ hostname = apr_pstrcat(r->pool, "*", hostname, NULL);
+ ap_log_rerror(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, r,
+ "[mod_vhost_ldap.c] translate: "
+ "virtual host not found, trying wildcard %s",
+ hostname);
+ goto fallback;
+ }
+
+null:
if (conf->fallback && (is_fallback++ <= 0)) {
ap_log_rerror(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, r,
"[mod_vhost_ldap.c] translate: "
top->server->server_admin = apr_pstrdup (top->pool, reqc->admin);
}
- reqc->saved_docroot = apr_pstrdup(top->pool, ap_document_root(r));
-
result = set_document_root(r, reqc->docroot);
if (result != OK) {
return HTTP_INTERNAL_SERVER_ERROR;
return DECLINED;
}
-static int mod_vhost_ldap_cleanup(request_rec * r)
-{
- mod_vhost_ldap_request_t *reqc =
- (mod_vhost_ldap_request_t *)ap_get_module_config(r->request_config,
- &vhost_ldap_module);
-
- /* Set ap_document_root back to saved value */
- return set_document_root(r, reqc->saved_docroot);
-}
-
#ifdef HAVE_UNIX_SUEXEC
static ap_unix_identity_t *mod_vhost_ldap_get_suexec_id_doer(const request_rec * r)
{
ap_hook_post_config(mod_vhost_ldap_post_config, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_translate_name(mod_vhost_ldap_translate_name, NULL, aszRewrite, APR_HOOK_FIRST);
- ap_hook_fixups(mod_vhost_ldap_cleanup, aszRewrite, NULL, APR_HOOK_MIDDLE);
#ifdef HAVE_UNIX_SUEXEC
ap_hook_get_suexec_identity(mod_vhost_ldap_get_suexec_id_doer, NULL, NULL, APR_HOOK_MIDDLE);
#endif