dgaudet 98/01/30 11:30:35
Modified: . STATUS src CHANGES src/main http_core.c Log: Fix Options and AllowOverrides merging in main_server lookup_defaults and vhost lookup_defaults. Revision Changes Path 1.138 +1 -0 apache-1.3/STATUS Index: STATUS =================================================================== RCS file: /export/home/cvs/apache-1.3/STATUS,v retrieving revision 1.137 retrieving revision 1.138 diff -u -r1.137 -r1.138 --- STATUS 1998/01/30 14:51:49 1.137 +++ STATUS 1998/01/30 19:30:30 1.138 @@ -142,6 +142,7 @@ * some rfc2068 case insensitivity issues * r->allowed cleanup * References to undefined 'cwd' cell fixed in suexec.c + * fix options/allowoverride merging Available Patches: 1.607 +6 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.606 retrieving revision 1.607 diff -u -r1.606 -r1.607 --- CHANGES 1998/01/30 14:49:55 1.606 +++ CHANGES 1998/01/30 19:30:31 1.607 @@ -1,5 +1,11 @@ Changes with Apache 1.3b4 + *) Options and AllowOverrides weren't properly merging in the main + server setting inside vhosts (only an issue when you have no + <Directory> or other section containing an Options that affects + a request). Options +foo or -foo in the main_server wouldn't + affect the main_server's lookup defaults. [Dean Gaudet] + *) Variable 'cwd' was being used pointlessly before being set. [Ken Coar] PR#1738 1.153 +21 -10 apache-1.3/src/main/http_core.c Index: http_core.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/main/http_core.c,v retrieving revision 1.152 retrieving revision 1.153 diff -u -r1.152 -r1.153 --- http_core.c 1998/01/30 03:36:56 1.152 +++ http_core.c 1998/01/30 19:30:34 1.153 @@ -112,9 +112,9 @@ conf->d_is_fnmatch = conf->d ? (is_fnmatch (conf->d) != 0) : 0; conf->d_components = conf->d ? count_dirs (conf->d) : 0; - conf->opts = dir ? OPT_UNSET : OPT_ALL; + conf->opts = dir ? OPT_UNSET : OPT_UNSET|OPT_ALL; conf->opts_add = conf->opts_remove = OPT_NONE; - conf->override = dir ? OR_UNSET : OR_ALL; + conf->override = dir ? OR_UNSET : OR_UNSET|OR_ALL; conf->content_md5 = 2; @@ -158,11 +158,16 @@ conf->d_components = new->d_components; conf->r = new->r; - if (new->opts != OPT_UNSET) conf->opts = new->opts; - if (new->opts_add) conf->opts |= new->opts_add; - if (new->opts_remove) conf->opts &= ~(new->opts_remove); + if (!(new->opts & OPT_UNSET)) conf->opts = new->opts; + if (new->opts_add) { + conf->opts |= new->opts_add; + conf->opts &= ~OPT_UNSET; + } + if (new->opts_remove) { + conf->opts &= ~(new->opts_remove | OPT_UNSET); + } - if (new->override != OR_UNSET) conf->override = new->override; + if (!(new->override & OR_UNSET)) conf->override = new->override; if (new->default_type) conf->default_type = new->default_type; if (new->auth_type) conf->auth_type = new->auth_type; @@ -692,6 +697,7 @@ d->override = OR_ALL; else return pstrcat (cmd->pool, "Illegal override option ", w, NULL); + d->override &= ~OR_UNSET; } return NULL; @@ -737,12 +743,17 @@ else return pstrcat (cmd->pool, "Illegal option ", w, NULL); - if (action == '-') + if (action == '-') { d->opts_remove |= opt; - else if (action == '+') + d->opts &= ~opt; + } + else if (action == '+') { d->opts_add |= opt; - else - d->opts |= opt; + d->opts |= opt; + } + else { + d->opts |= opt; + } } return NULL;