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

From:
Stefan Sperling <stsp@stsp.name>
Subject:
gotwebd.conf fcgi port syntax change
To:
gameoftrees@openbsd.org
Date:
Mon, 29 Aug 2022 07:08:49 +0200

Download raw body.

Thread
Change gotwebd.conf fcgi socket syntax to "listen on 'foo' port 'bar'".
This prepares the grammar for multiple "listen on" statements.

The old syntax was:

  listen on 127.0.0.1
  fgci_socket { port 9000 }

New syntax is:

  fcgi_socket yes
  listen on 127.0.0.1 port 9000

At present, if more than once "listen on" statement is given, then only
the last on takes effect. Fixing this will be the next step.

ok?
 
diff f0680473a7db1e5941bffdc2ab5f80ddec209122 9dc531b939237dddb6dfb8b7e28cafe6572dae16
commit - f0680473a7db1e5941bffdc2ab5f80ddec209122
commit + 9dc531b939237dddb6dfb8b7e28cafe6572dae16
blob - 601286fd54eb92e666ed42a52b7d7a851eb91940
blob + d061ce939fdc0aeb984fb2f8da84a80463c6b189
--- gotwebd/parse.y
+++ gotwebd/parse.y
@@ -154,22 +154,22 @@ boolean		: STRING {
 		| NUMBER { $$ = $1; }
 		;
 
-fcgiport	: NUMBER {
-			if ($1 <= 0 || $1 > (int)USHRT_MAX) {
-				yyerror("invalid port: %lld", $1);
+fcgiport	: PORT NUMBER {
+			if ($2 <= 0 || $2 > (int)USHRT_MAX) {
+				yyerror("invalid port: %lld", $2);
 				YYERROR;
 			}
-			$$ = htons($1);
+			$$ = $2;
 		}
-		| STRING {
+		| PORT STRING {
 			int	 val;
 
-			if ((val = getservice($1)) == -1) {
-				yyerror("invalid port: %s", $1);
-				free($1);
+			if ((val = getservice($2)) == -1) {
+				yyerror("invalid port: %s", $2);
+				free($2);
 				YYERROR;
 			}
-			free($1);
+			free($2);
 
 			$$ = val;
 		}
@@ -191,9 +191,6 @@ main		: PREFORK NUMBER {
 		| FCGI_SOCKET boolean {
 			gotwebd->fcgi_socket = $2;
 		}
-		| FCGI_SOCKET boolean  {
-			gotwebd->fcgi_socket = $2;
-		} '{' optnl socketopts4 '}'
 		| UNIX_SOCKET boolean {
 			gotwebd->unix_socket = $2;
 		}
@@ -331,6 +328,18 @@ serveropts1	: REPOS_PATH STRING {
 			}
 			free($2);
 		}
+		| LISTEN ON STRING fcgiport {
+			n = strlcpy(new_srv->fcgi_socket_bind, $3,
+			    sizeof(new_srv->fcgi_socket_bind));
+			if (n >= sizeof(new_srv->fcgi_socket_bind)) {
+				yyerror("%s: fcgi_socket_bind truncated",
+				    __func__);
+				free($3);
+				YYERROR;
+			}
+			free($3);
+			new_srv->fcgi_socket_port = $4;
+		}
 		| MAX_REPOS NUMBER {
 			if ($2 > 0)
 				new_srv->max_repos = $2;
@@ -360,9 +369,6 @@ serveropts1	: REPOS_PATH STRING { | FCGI_SOCKET boolean {
 			new_srv->fcgi_socket = $2;
 		}
-		| FCGI_SOCKET boolean  {
-			new_srv->fcgi_socket = $2;
-		} '{' optnl socketopts2 '}'
 		| UNIX_SOCKET boolean {
 			new_srv->unix_socket = $2;
 		}
@@ -386,54 +392,6 @@ serveropts2	: serveropts2 serveropts1 nl
 		| serveropts1 optnl
 		;
 
-socketopts1	: LISTEN ON STRING {
-			n = strlcpy(new_srv->fcgi_socket_bind, $3,
-			    sizeof(new_srv->fcgi_socket_bind));
-			if (n >= sizeof(new_srv->fcgi_socket_bind)) {
-				yyerror("%s: fcgi_socket_bind truncated",
-				    __func__);
-				free($3);
-				YYERROR;
-			}
-			free($3);
-		}
-		| PORT fcgiport {
-			struct server	*srv;
-
-			TAILQ_FOREACH(srv, &gotwebd->servers, entry) {
-				if (srv->fcgi_socket_port == $2) {
-					yyerror("port already assigned");
-					YYERROR;
-				}
-			}
-			new_srv->fcgi_socket_port = $2;
-		}
-		;
-
-socketopts2	: socketopts2 socketopts1 nl
-		| socketopts1 optnl
-		;
-
-socketopts3	: LISTEN ON STRING {
-			n = strlcpy(gotwebd->fcgi_socket_bind, $3,
-			    sizeof(gotwebd->fcgi_socket_bind));
-			if (n >= sizeof(gotwebd->fcgi_socket_bind)) {
-				yyerror("%s: fcgi_socket_bind truncated",
-				    __func__);
-				free($3);
-				YYERROR;
-			}
-			free($3);
-		}
-		| PORT fcgiport {
-			gotwebd->fcgi_socket_port = $2;
-		}
-		;
-
-socketopts4	: socketopts4 socketopts3 nl
-		| socketopts3 optnl
-		;
-
 nl		: '\n' optnl
 		;