Magellan Linux

Contents of /trunk/apache2/patches/apache2-2.2.4-mod_dir-adddirectoryindex.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 244 - (show annotations) (download)
Sat Jul 7 20:21:32 2007 UTC (16 years, 9 months ago) by niro
File size: 2800 byte(s)
-provides AddDirectoryIndex directive

1 diff -ur httpd-2.0.58.orig/modules/mappers/mod_dir.c httpd-2.0.58/modules/mappers/mod_dir.c
2 --- httpd-2.0.58.orig/modules/mappers/mod_dir.c 2007-03-31 19:36:23.000000000 -0400
3 +++ httpd-2.0.58/modules/mappers/mod_dir.c 2007-03-31 19:39:22.000000000 -0400
4 @@ -39,6 +39,7 @@
5
6 typedef struct dir_config_struct {
7 apr_array_header_t *index_names;
8 + apr_array_header_t *index_names_incr;
9 slash_cfg do_slash;
10 } dir_config_rec;
11
12 @@ -55,6 +56,23 @@
13 return NULL;
14 }
15
16 +static const char *add_index_incr(cmd_parms *cmd, void *dummy, const char *arg)
17 +{
18 + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
19 +
20 + if (err != NULL) {
21 + return err;
22 + }
23 +
24 + dir_config_rec *d = dummy;
25 +
26 + if (!d->index_names_incr) {
27 + d->index_names_incr = apr_array_make(cmd->pool, 2, sizeof(char *));
28 + }
29 + *(const char **)apr_array_push(d->index_names_incr) = arg;
30 + return NULL;
31 +}
32 +
33 static const char *configure_slash(cmd_parms *cmd, void *d_, int arg)
34 {
35 dir_config_rec *d = d_;
36 @@ -67,6 +85,8 @@
37 {
38 AP_INIT_ITERATE("DirectoryIndex", add_index, NULL, DIR_CMD_PERMS,
39 "a list of file names"),
40 + AP_INIT_ITERATE("AddDirectoryIndex", add_index_incr, NULL, RSRC_CONF,
41 + "a list of file names"),
42 AP_INIT_FLAG("DirectorySlash", configure_slash, NULL, DIR_CMD_PERMS,
43 "On or Off"),
44 {NULL}
45 @@ -77,6 +97,7 @@
46 dir_config_rec *new = apr_pcalloc(p, sizeof(dir_config_rec));
47
48 new->index_names = NULL;
49 + new->index_names_incr = NULL;
50 new->do_slash = SLASH_UNSET;
51 return (void *) new;
52 }
53 @@ -87,7 +108,26 @@
54 dir_config_rec *base = (dir_config_rec *)basev;
55 dir_config_rec *add = (dir_config_rec *)addv;
56
57 - new->index_names = add->index_names ? add->index_names : base->index_names;
58 +
59 + if (add->index_names) {
60 + new->index_names = add->index_names;
61 + } else {
62 + new->index_names = base->index_names;
63 + if (base->index_names_incr) {
64 + if (!new->index_names) {
65 + new->index_names = apr_array_make(p, 2, sizeof(char *));
66 + }
67 + apr_array_cat(new->index_names, base->index_names_incr);
68 + }
69 + }
70 +
71 + if (add->index_names_incr) {
72 + if (!new->index_names) {
73 + new->index_names = apr_array_make(p, 2, sizeof(char *));
74 + }
75 + apr_array_cat(new->index_names, add->index_names_incr);
76 + }
77 +
78 new->do_slash =
79 (add->do_slash == SLASH_UNSET) ? base->do_slash : add->do_slash;
80 return new;
81 @@ -155,6 +195,14 @@
82 return DECLINED;
83 }
84
85 + if (d->index_names_incr) {
86 + if (!d->index_names) {
87 + d->index_names = d->index_names_incr;
88 + } else {
89 + apr_array_cat(d->index_names, d->index_names_incr);
90 + }
91 + }
92 +
93 if (d->index_names) {
94 names_ptr = (char **)d->index_names->elts;
95 num_names = d->index_names->nelts;