It appears the patch can be far more simple.

Comments are welcome.


Index: usr.sbin/httpd/config.c
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/config.c,v
retrieving revision 1.61
diff -u -p -u -p -r1.61 config.c
--- usr.sbin/httpd/config.c     21 Sep 2020 09:42:07 -0000      1.61
+++ usr.sbin/httpd/config.c     18 Oct 2020 12:09:36 -0000
@@ -489,7 +489,12 @@ config_getserver_config(struct httpd *en
                /* Inherit configuration from the parent */
                f = SRVFLAG_INDEX|SRVFLAG_NO_INDEX;
                if ((srv_conf->flags & f) == 0) {
-                       srv_conf->flags |= parent->flags & f;
+                       /*
+                        * Inherit index flags from parent server only if
+                        * auto-index flag of location is not set
+                        */
+                       if ((srv_conf->flags & SRVFLAG_AUTO_INDEX) == 0)
+                               srv_conf->flags |= parent->flags & f;
                        (void)strlcpy(srv_conf->index, parent->index,
                            sizeof(srv_conf->index));
                }



On 2020-10-17 14:49, [email protected] wrote:
> Given the following httpd.conf snippet
> 
> server "example.com" {
>       ...
>       directory no index
>       ...
>       location "/foo" {
>               ...
>               directory auto index
>               ...
>       }
> }
> 
> the URL http://example.com/foo surprisingly results in a 403
> response.
> 
> With the directory option of the "/foo" location changed to
> 
>       location "/foo" {
>               directory {
>                       index "index.html"
>                       auto index
>               }
>       }
> 
> the auto-index is being generated (as expected).
> 
> I was wondering if there is any reason why the 'auto index' of
> the location shouldn't implicitly override the 'no index' option
> of the enclosing server (as it happens with the patch below).
> 
> 
> 
> Index: usr.sbin/httpd/config.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/httpd/config.c,v
> retrieving revision 1.61
> diff -u -p -u -p -r1.61 config.c
> --- usr.sbin/httpd/config.c   21 Sep 2020 09:42:07 -0000      1.61
> +++ usr.sbin/httpd/config.c   17 Oct 2020 12:26:20 -0000
> @@ -488,11 +488,10 @@ config_getserver_config(struct httpd *en
>       if (srv_conf->flags & SRVFLAG_LOCATION) {
>               /* Inherit configuration from the parent */
>               f = SRVFLAG_INDEX|SRVFLAG_NO_INDEX;
> -             if ((srv_conf->flags & f) == 0) {
> +             if ((srv_conf->flags & f) == 0)
>                       srv_conf->flags |= parent->flags & f;
> -                     (void)strlcpy(srv_conf->index, parent->index,
> -                         sizeof(srv_conf->index));
> -             }
> +             (void)strlcpy(srv_conf->index, parent->index,
> +                 sizeof(srv_conf->index));
>  
>               f = SRVFLAG_AUTO_INDEX|SRVFLAG_NO_AUTO_INDEX;
>               if ((srv_conf->flags & f) == 0)
> Index: usr.sbin/httpd/parse.y
> ===================================================================
> RCS file: /cvs/src/usr.sbin/httpd/parse.y,v
> retrieving revision 1.118
> diff -u -p -u -p -r1.118 parse.y
> --- usr.sbin/httpd/parse.y    11 Oct 2020 03:21:44 -0000      1.118
> +++ usr.sbin/httpd/parse.y    17 Oct 2020 12:26:20 -0000
> @@ -1006,6 +1006,8 @@ dirflags        : INDEX STRING          {
>                       srv_conf->flags |= SRVFLAG_NO_INDEX;
>               }
>               | AUTO INDEX            {
> +                     srv_conf->flags &= ~SRVFLAG_NO_INDEX;
> +                     srv_conf->flags |= SRVFLAG_INDEX;
>                       srv_conf->flags &= ~SRVFLAG_NO_AUTO_INDEX;
>                       srv_conf->flags |= SRVFLAG_AUTO_INDEX;
>               }
> 

Reply via email to