Ping. Latest diff below. 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 26 Oct 2020 08:26:48 -0000 @@ -587,8 +587,10 @@ serveroptsl : LISTEN ON STRING opttls po struct server *s = NULL; TAILQ_FOREACH(s, conf->sc_servers, srv_entry) { + /* Compare locations of same parent server */ if ((s->srv_conf.flags & SRVFLAG_LOCATION) && - s->srv_conf.id == srv_conf->id && + s->srv_conf.parent_id == + srv_conf->parent_id && strcmp(s->srv_conf.location, srv_conf->location) == 0) break;
On 2020-10-11 12:00, m...@fn.de wrote: > Ping. Updated diff below. > > ------------------------------------------------------------------- > 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 11 Oct 2020 09:52:34 -0000 > @@ -588,7 +588,8 @@ serveroptsl : LISTEN ON STRING opttls po > > TAILQ_FOREACH(s, conf->sc_servers, srv_entry) { > if ((s->srv_conf.flags & SRVFLAG_LOCATION) && > - s->srv_conf.id == srv_conf->id && > + s->srv_conf.parent_id == > + srv_conf->parent_id && > strcmp(s->srv_conf.location, > srv_conf->location) == 0) > break; > ------------------------------------------------------------------- > > On 2020-09-26 08:57, m...@fn.de wrote: >> During httpd setup I realized that duplicate location names are not >> being detected even though I remembered having seen a corresponding >> piece of code in 'usr.sbin/httpd/parse.y' the other day. As far >> as I understand, the comparison 's->srv_conf.id == srv_conf->id' >> can never be true as a newly created location ID would never match >> the ID of any existing location. >> >> To check whether or not I was right, I recompiled httpd with DEBUG >> enabled and tried to start the server with the following (actually >> invalid) httpd.conf: >> >> ---------------------------------------- >> server "testserver" { >> listen on 127.0.0.1 port www >> location "/foo" { block } >> location "/foo" { block } >> } >> ---------------------------------------- >> >> # httpd -vvd >> startup >> adding location "/foo" for "testserver[2]" >> adding location "/foo" for "testserver[3]" >> adding server "testserver[1]" >> .... >> (httpd running) >> >> I guess the intention was to compare the new location name with all >> other location names available under the same parent server. I >> accomplished this by applying the patch at the bottom of this >> message. After recompiling, httpd startup terminates as expected. >> >> # httpd -vvd >> startup >> adding location "/foo" for "testserver[2]" >> /etc/httpd.conf:4: location "/foo" defined twice >> ..... >> logger exiting, pid 98967 >> server exiting, pid 27723 >> server exiting, pid 78507 >> server exiting, pid 25743 >> >> >> comments? OK? >> >> ------------------------------------------------------------------- >> >> Index: usr.sbin/httpd/parse.y >> =================================================================== >> RCS file: /cvs/src/usr.sbin/httpd/parse.y,v >> retrieving revision 1.117 >> diff -u -p -u -p -r1.117 parse.y >> --- usr.sbin/httpd/parse.y 26 Aug 2020 06:50:20 -0000 1.117 >> +++ usr.sbin/httpd/parse.y 26 Sep 2020 06:03:52 -0000 >> @@ -581,7 +581,8 @@ serveroptsl : LISTEN ON STRING opttls po >> >> TAILQ_FOREACH(s, conf->sc_servers, srv_entry) { >> if ((s->srv_conf.flags & SRVFLAG_LOCATION) && >> - s->srv_conf.id == srv_conf->id && >> + s->srv_conf.parent_id == >> + srv_conf->parent_id && >> strcmp(s->srv_conf.location, >> srv_conf->location) == 0) >> break; >> >