"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: gotd.conf: adds time suffixes to timeouts
To:
Omar Polo <op@omarpolo.com>
Cc:
gameoftrees@openbsd.org
Date:
Tue, 3 Jan 2023 15:17:29 +0100

Download raw body.

Thread
On Tue, Jan 03, 2023 at 10:48:01AM +0100, Omar Polo wrote:
> I had something like this lying around in a private parse.y, would it
> be useful for gotd too?  It just allows for a slightly more nice
> timeout definition, which is quite niche.

I like this. ok

> diff 40b85cca5d86ebef3a353efd464af989c3ebf18b 0428eb4f1414af686a05fa3569b6639a47880b53
> commit - 40b85cca5d86ebef3a353efd464af989c3ebf18b
> commit + 0428eb4f1414af686a05fa3569b6639a47880b53
> blob - ba00f127e7a704c7c95a42f2210fd109af6de5a3
> blob + a45eb65170386548a9b8a2b7812f7309eebdc6f6
> --- gotd/gotd.conf.5
> +++ gotd/gotd.conf.5
> @@ -55,7 +55,19 @@ The default timeout is 3600 seconds (1 hour).
>  If this timeout is exceeded while a Git protocol request is being processed,
>  the request will be aborted and the connection will be terminated.
>  .Pp
> -The default timeout is 3600 seconds (1 hour).
> +The timeout value may also have a suffix indicating its unit of measure.
> +Supported suffixes are:
> +.Pp
> +.Bl -tag -compact -width tenletters
> +.It Ar s No or Ar S
> +seconds
> +.It Ar m No or Ar M
> +minutes
> +.It Ar h No or Ar H
> +hours
> +.El
> +.Pp
> +The default timeout is 1h (3600 seconds, one hour).
>  This should only be changed if legitimate requests are exceeding the default
>  timeout for some reason, such as the server spending an extraordinary
>  amount of time generating a pack file.
> @@ -205,7 +217,7 @@ connection request timeout 7200  # 2 hours
>  }
>  
>  # Use a larger request timeout value:
> -connection request timeout 7200  # 2 hours
> +connection request timeout 2h
>  
>  # Some users are granted a higher concurrent connection limit:
>  connection {
> blob - 580f43381ccf163eac2c738800e7efd25c7562e4
> blob + a19acba378f3c3be18670a3ec12ad2b20ee61fdf
> --- gotd/parse.y
> +++ gotd/parse.y
> @@ -147,6 +147,57 @@ timeout		: NUMBER {
>  			$$.tv_sec = $1;
>  			$$.tv_usec = 0;
>  		}
> +		| STRING {
> +			const char	*errstr;
> +			const char	*type = "seconds";
> +			size_t		 len;
> +			int		 mul = 1;
> +
> +			if (*$1 == '\0') {
> +				yyerror("invalid number of seconds: %s", $1);
> +				free($1);
> +				YYERROR;
> +			}
> +
> +			len = strlen($1);
> +			switch ($1[len - 1]) {
> +			case 'S':
> +			case 's':
> +				$1[len - 1] = '\0';
> +				break;
> +			case 'M':
> +			case 'm':
> +				type = "minutes";
> +				mul = 60;
> +				$1[len - 1] = '\0';
> +				break;
> +			case 'H':
> +			case 'h':
> +				type = "hours";
> +				mul = 60 * 60;
> +				$1[len - 1] = '\0';
> +				break;
> +			}
> +
> +			$$.tv_usec = 0;
> +			$$.tv_sec = strtonum($1, 0, INT_MAX, &errstr);
> +			if (errstr) {
> +				yyerror("number of %s is %s: %s", type,
> +				    errstr, $1);
> +				free($1);
> +				YYERROR;
> +			}
> +
> +			if ($$.tv_sec > INT_MAX / mul) {
> +				yyerror("number of %s is too too large: %s",
> +				    type, $1);
> +				free($1);
> +				YYERROR;
> +			}
> +
> +			$$.tv_sec *= mul;
> +			free($1);
> +		}
>  		;
>  
>  main		: UNIX_SOCKET STRING {
> 
>