On Fri, Mar 31, 2023 at 08:20:34AM +0200, Claudio Jeker wrote:
> If the slowcgi timeout fires before the command was actually started then
> just abort the fastcgi request with error 408.
>
> This can happen on POST requests where the client stops sending data.
> Now bgplgd does not support POST but that is only checked once the full
> fastcgi request from the webserver was received.
Makes sense. error_response() could remain static.
ok
>
> --
> :wq Claudio
>
> Index: slowcgi.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgplgd/slowcgi.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 slowcgi.c
> --- slowcgi.c 27 Oct 2022 13:24:22 -0000 1.5
> +++ slowcgi.c 27 Oct 2022 14:12:40 -0000
> @@ -159,6 +159,7 @@ void parse_begin_request(uint8_t *, uin
> void parse_params(uint8_t *, uint16_t, struct request *, uint16_t);
> void parse_stdin(uint8_t *, uint16_t, struct request *, uint16_t);
> char *env_get(struct request *, const char *);
> +void error_response(struct request *, int);
> void exec_cgi(struct request *);
> void script_std_in(int, short, void *);
> void script_err_in(int, short, void *);
> @@ -505,6 +506,12 @@ slowcgi_timeout(int fd, short events, vo
> if (c->script_flags & SCRIPT_DONE)
> return;
>
> + if (c->command_pid == 0) {
> + c->command_status = SIGALRM;
> + error_response(c, 408);
> + return;
> + }
> +
> ldebug("timeout fired for pid %d", c->command_pid);
>
> if (c->timeout_fired)
> @@ -887,7 +894,7 @@ http_error(int *res)
> return "Internal Server Error";
> }
>
> -static void
> +void
> error_response(struct request *c, int res)
> {
> const char *type = "text/html";
>