From aad41a70b7b9079143c6e8593f14e4772f2624fe Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 8 Jun 2010 09:42:07 +0200 Subject: [PATCH] Change internal logic to rewrite apache variables and pass request to next modules --- mod_vhost_ldap.c | 53 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/mod_vhost_ldap.c b/mod_vhost_ldap.c index f3b729a..9edc0c2 100644 --- a/mod_vhost_ldap.c +++ b/mod_vhost_ldap.c @@ -89,6 +89,7 @@ typedef struct mod_vhost_ldap_request_t { char *cgiroot; /* ScriptAlias */ char *uid; /* Suexec Uid */ char *gid; /* Suexec Gid */ + char *saved_docroot; /* Saved DocumentRoot */ } mod_vhost_ldap_request_t; char *attributes[] = @@ -557,6 +558,8 @@ fallback: return DECLINED; } + /* Whole CGI logic is now flawed :-( */ + /* FIXME START */ cgi = NULL; if (reqc->cgiroot) { @@ -569,11 +572,16 @@ fallback: r->filename = apr_pstrcat (r->pool, reqc->cgiroot, cgi + strlen("cgi-bin"), NULL); r->handler = "cgi-script"; apr_table_setn(r->notes, "alias-forced-type", r->handler); - } else if (r->uri[0] == '/') { - r->filename = apr_pstrcat (r->pool, reqc->docroot, r->uri, NULL); - } else { - return DECLINED; } + /* FIXME: END */ + + /* This is useless now - it maps to standard handlers */ +/* } else if (r->uri[0] == '/') { */ +/* /\* r->filename = apr_pstrdup(r->pool, r->uri); *\/ */ +/* /\* r->filename = apr_pstrcat (r->pool, reqc->docroot, r->uri, NULL); *\/ */ +/* } else { */ +/* return DECLINED; */ +/* } */ top->server->server_hostname = apr_pstrdup (top->pool, reqc->name); @@ -585,11 +593,39 @@ fallback: e = top->subprocess_env; apr_table_addn (e, "SERVER_ROOT", reqc->docroot); + reqc->saved_docroot = apr_pstrdup(top->pool, ap_document_root(r)); + core->ap_document_root = apr_pstrdup(top->pool, reqc->docroot); ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, "[mod_vhost_ldap.c]: translated to %s", r->filename); + ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, + "[mod_vhost_ldap.c]: ap_document_root set to: %s", ap_document_root(r)); + + ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, + "[mod_vhost_ldap.c]: canonical_filename: %s", r->canonical_filename); + + /* Hack to allow post-processing by other modules (mod_rewrite, mod_alias) */ + return DECLINED; +} + +static int mod_vhost_ldap_cleanup(request_rec * r) +{ + request_rec *top = (r->main)?r->main:r; + + core_server_config * core = + (core_server_config *) ap_get_module_config(r->server->module_config, &core_module); + + mod_vhost_ldap_request_t *reqc = + (mod_vhost_ldap_request_t *)ap_get_module_config(r->request_config, + &vhost_ldap_module); + + core->ap_document_root = apr_pstrdup(top->pool, reqc->saved_docroot); + + ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, + "[mod_vhost_ldap.c]: ap_document_root set back to: %s", ap_document_root(r)); + return OK; } @@ -638,8 +674,15 @@ static ap_unix_identity_t *mod_vhost_ldap_get_suexec_id_doer(const request_rec * static void mod_vhost_ldap_register_hooks (apr_pool_t * p) { + + /* + * Run before mod_rewrite + */ + static const char * const aszRewrite[]={ "mod_rewrite.c", NULL }; + ap_hook_post_config(mod_vhost_ldap_post_config, NULL, NULL, APR_HOOK_MIDDLE); - ap_hook_translate_name(mod_vhost_ldap_translate_name, 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 -- 2.45.1