diff -ur httpd-2.0.58.orig/modules/mappers/mod_dir.c httpd-2.0.58/modules/mappers/mod_dir.c --- httpd-2.0.58.orig/modules/mappers/mod_dir.c 2007-03-31 19:36:23.000000000 -0400 +++ httpd-2.0.58/modules/mappers/mod_dir.c 2007-03-31 19:39:22.000000000 -0400 @@ -39,6 +39,7 @@ typedef struct dir_config_struct { apr_array_header_t *index_names; + apr_array_header_t *index_names_incr; slash_cfg do_slash; } dir_config_rec; @@ -55,6 +56,23 @@ return NULL; } +static const char *add_index_incr(cmd_parms *cmd, void *dummy, const char *arg) +{ + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + + if (err != NULL) { + return err; + } + + dir_config_rec *d = dummy; + + if (!d->index_names_incr) { + d->index_names_incr = apr_array_make(cmd->pool, 2, sizeof(char *)); + } + *(const char **)apr_array_push(d->index_names_incr) = arg; + return NULL; +} + static const char *configure_slash(cmd_parms *cmd, void *d_, int arg) { dir_config_rec *d = d_; @@ -67,6 +85,8 @@ { AP_INIT_ITERATE("DirectoryIndex", add_index, NULL, DIR_CMD_PERMS, "a list of file names"), + AP_INIT_ITERATE("AddDirectoryIndex", add_index_incr, NULL, RSRC_CONF, + "a list of file names"), AP_INIT_FLAG("DirectorySlash", configure_slash, NULL, DIR_CMD_PERMS, "On or Off"), {NULL} @@ -77,6 +97,7 @@ dir_config_rec *new = apr_pcalloc(p, sizeof(dir_config_rec)); new->index_names = NULL; + new->index_names_incr = NULL; new->do_slash = SLASH_UNSET; return (void *) new; } @@ -87,7 +108,26 @@ dir_config_rec *base = (dir_config_rec *)basev; dir_config_rec *add = (dir_config_rec *)addv; - new->index_names = add->index_names ? add->index_names : base->index_names; + + if (add->index_names) { + new->index_names = add->index_names; + } else { + new->index_names = base->index_names; + if (base->index_names_incr) { + if (!new->index_names) { + new->index_names = apr_array_make(p, 2, sizeof(char *)); + } + apr_array_cat(new->index_names, base->index_names_incr); + } + } + + if (add->index_names_incr) { + if (!new->index_names) { + new->index_names = apr_array_make(p, 2, sizeof(char *)); + } + apr_array_cat(new->index_names, add->index_names_incr); + } + new->do_slash = (add->do_slash == SLASH_UNSET) ? base->do_slash : add->do_slash; return new; @@ -155,6 +195,14 @@ return DECLINED; } + if (d->index_names_incr) { + if (!d->index_names) { + d->index_names = d->index_names_incr; + } else { + apr_array_cat(d->index_names, d->index_names_incr); + } + } + if (d->index_names) { names_ptr = (char **)d->index_names->elts; num_names = d->index_names->nelts;