Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Apache: CVS

svn commit: r785425 - in /httpd/httpd/trunk: CHANGES modules/mappers/mod_dir.c

 

 

Apache cvs RSS feed   Index | Next | Previous | View Threaded


niq at apache

Jun 16, 2009, 2:57 PM

Post #1 of 1 (148 views)
Permalink
svn commit: r785425 - in /httpd/httpd/trunk: CHANGES modules/mappers/mod_dir.c

Author: niq
Date: Tue Jun 16 21:57:25 2009
New Revision: 785425

URL: http://svn.apache.org/viewvc?rev=785425&view=rev
Log:
Add DefaultHandler directive to mod_dir.
PR 47184

Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/modules/mappers/mod_dir.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=785425&r1=785424&r2=785425&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Tue Jun 16 21:57:25 2009
@@ -6,6 +6,10 @@
mod_proxy_ajp: Avoid delivering content from a previous request which
failed to send a request body. PR 46949 [Ruediger Pluem]

+ *) mod_dir: add DefaultHandler directive, to enable admin to specify
+ an action to happen when a URL maps to no file, without resorting
+ to ErrorDocument or mod_rewrite. PR 47184 [Nick Kew]
+
*) mod_cgid: Do not leak the listening Unix socket file descriptor to the
CGI process. PR 47335 [Kornél Pál <kornelpal gmail.com>]


Modified: httpd/httpd/trunk/modules/mappers/mod_dir.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/mappers/mod_dir.c?rev=785425&r1=785424&r2=785425&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/mappers/mod_dir.c (original)
+++ httpd/httpd/trunk/modules/mappers/mod_dir.c Tue Jun 16 21:57:25 2009
@@ -40,6 +40,7 @@
typedef struct dir_config_struct {
apr_array_header_t *index_names;
slash_cfg do_slash;
+ const char *dflt;
} dir_config_rec;

#define DIR_CMD_PERMS OR_INDEXES
@@ -82,6 +83,9 @@

static const command_rec dir_cmds[] =
{
+ AP_INIT_TAKE1("DefaultHandler", ap_set_string_slot,
+ (void*)APR_OFFSETOF(dir_config_rec, dflt),
+ DIR_CMD_PERMS, "Set a default handler"),
AP_INIT_RAW_ARGS("DirectoryIndex", add_index, NULL, DIR_CMD_PERMS,
"a list of file names"),
AP_INIT_FLAG("DirectorySlash", configure_slash, NULL, DIR_CMD_PERMS,
@@ -107,9 +111,53 @@
new->index_names = add->index_names ? add->index_names : base->index_names;
new->do_slash =
(add->do_slash == SLASH_UNSET) ? base->do_slash : add->do_slash;
+ new->dflt = add->dflt ? add->dflt : base->dflt;
return new;
}

+static int fixup_dflt(request_rec *r)
+{
+ dir_config_rec *d = ap_get_module_config(r->per_dir_config, &dir_module);
+ const char *name_ptr;
+ request_rec *rr;
+ int error_notfound = 0;
+ if ((r->finfo.filetype != APR_NOFILE) || (r->handler != NULL)) {
+ return DECLINED;
+ }
+ name_ptr = d->dflt;
+ if (r->args != NULL) {
+ name_ptr = apr_pstrcat(r->pool, name_ptr, "?", r->args, NULL);
+ }
+ rr = ap_sub_req_lookup_uri(name_ptr, r, r->output_filters);
+ if (rr->status == HTTP_OK
+ && ( (rr->handler && !strcmp(rr->handler, "proxy-server"))
+ || rr->finfo.filetype == APR_REG)) {
+ ap_internal_fast_redirect(rr, r);
+ return OK;
+ }
+ else if (ap_is_HTTP_REDIRECT(rr->status)) {
+
+ apr_pool_join(r->pool, rr->pool);
+ r->notes = apr_table_overlay(r->pool, r->notes, rr->notes);
+ r->headers_out = apr_table_overlay(r->pool, r->headers_out,
+ rr->headers_out);
+ r->err_headers_out = apr_table_overlay(r->pool, r->err_headers_out,
+ rr->err_headers_out);
+ error_notfound = rr->status;
+ }
+ else if (rr->status && rr->status != HTTP_NOT_FOUND
+ && rr->status != HTTP_OK) {
+ error_notfound = rr->status;
+ }
+
+ ap_destroy_sub_req(rr);
+ if (error_notfound) {
+ return error_notfound;
+ }
+
+ /* nothing for us to do, pass on through */
+ return DECLINED;
+}
static int fixup_dir(request_rec *r)
{
dir_config_rec *d;
@@ -256,6 +304,7 @@
static void register_hooks(apr_pool_t *p)
{
ap_hook_fixups(fixup_dir,NULL,NULL,APR_HOOK_LAST);
+ ap_hook_fixups(fixup_dflt,NULL,NULL,APR_HOOK_LAST);
}

module AP_MODULE_DECLARE_DATA dir_module = {

Apache cvs RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact lists@gossamer-threads.com
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.