I've also noticed this some time ago. My suggestion was to simply permit auto-index locations inside no-index servers.
https://marc.info/?l=openbsd-tech&m=160302351622195&w=2 On 2021-03-24 22:37, Quentin Rameau wrote: > Hello, > > It's been noted that the "directory no index" configuration > always shadow any other directory index configuration, > for example: > > directory no index > location "/foo/" { > directory auto index > } > > Even when requesting /foo/, > the global no index option > overrides the location-specific auto index. > > This looks a bit too restrictive > and contrary to having location-specific options. > > Here's a patch proposal modifying the current behaviour. > Note that if multiple contradictory options > are defined at the same level, > the most restrictive option, no index, > will still have priority over the others. > > What do you think? > > Index: config.c > =================================================================== > RCS file: /var/cvs/src/usr.sbin/httpd/config.c,v > retrieving revision 1.61 > diff -u -p -u -r1.61 config.c > --- config.c 21 Sep 2020 09:42:07 -0000 1.61 > +++ config.c 24 Mar 2021 21:26:39 -0000 > @@ -451,7 +451,7 @@ config_getserver_config(struct httpd *en > #endif > struct server_config *srv_conf, *parent; > uint8_t *p = imsg->data; > - unsigned int f; > + unsigned int f, fo; > size_t s; > > if ((srv_conf = calloc(1, sizeof(*srv_conf))) == NULL) > @@ -489,14 +489,19 @@ 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; > + fo = SRVFLAG_AUTO_INDEX|SRVFLAG_NO_AUTO_INDEX; > + if ((srv_conf->flags & fo) == 0) > + srv_conf->flags |= parent->flags & f; > (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) > - srv_conf->flags |= parent->flags & f; > + if ((srv_conf->flags & f) == 0) { > + fo = SRVFLAG_INDEX|SRVFLAG_NO_INDEX; > + if ((srv_conf->flags & fo) == 0) > + srv_conf->flags |= parent->flags & f; > + } > > f = SRVFLAG_ROOT; > if ((srv_conf->flags & f) == 0) { >