commit fc1cb9ea0716bf54463829dfca90b942ad5c8bf9 from: Omar Polo date: Wed Sep 14 09:11:21 2022 UTC link the specified stylesheet (if any) commit - b691dc5834da50450379bfc33318e109d055de96 commit + fc1cb9ea0716bf54463829dfca90b942ad5c8bf9 blob - 4ac86591014a4994c6134ee8be8fa3a93ef90893 blob + 2f6ad087b9d0f3d8b128f73aef43fef2cd5bbe56 --- parse.y +++ parse.y @@ -206,7 +206,15 @@ serveroptsl : PROXY STRING { /* ... */ } | PROXY '{' optnl proxyopts_l '}' - | STYLESHEET string { /* ... */ } + | STYLESHEET string { + size_t n; + + n = strlcpy(srv->srv_conf.stylesheet, $2, + sizeof(srv->srv_conf.stylesheet)); + if (n >= sizeof(srv->srv_conf.stylesheet)) + yyerror("stylesheet path too long!"); + free($2); + } ; proxyopts_l : proxyopts_l proxyoptsl nl blob - 3c81f89f249dc85bb6ef5e513b6089263a2635d2 blob + 021cf57a2d86ca0c43e68ab95612bcc1f96d59d4 --- proxy.c +++ proxy.c @@ -510,6 +510,7 @@ void proxy_read(struct bufferevent *bev, void *d) { struct client *clt = d; + struct proxy_config *pc = clt->clt_pc; struct evbuffer *src = EVBUFFER_INPUT(bev); const char *ctype; char *hdr; @@ -564,9 +565,15 @@ proxy_read(struct bufferevent *bev, void *d) clt->clt_headersdone = 1; if (clt->clt_translate) { - if (clt_puts(clt, "" - "") == -1) + if (clt_puts(clt, "") == -1) return; + log_debug("stylesheet is %s", pc->stylesheet); + if (*pc->stylesheet != '\0' && + clt_printf(clt, "", + pc->stylesheet) == -1) + return; + if (clt_puts(clt, "") == -1) + return; } goto copy;