Commit Diff


commit - afb86b2c8a6e846c6e088085f3b454f3b4bdd5c8
commit + 26cd3e9dd3d4042457224b5ecef6de8234d7f950
blob - 75cb58cebcb314bd5ee333e807e71c0734d1f29f
blob + 85ab8b5f4bd8b509d4bde8cd3530d3a0e737fff5
--- config.c
+++ config.c
@@ -89,7 +89,7 @@ config_getproxy(struct galileo *env, struct imsg *imsg
 
 	memcpy(proxy, imsg->data, sizeof(*proxy));
 
-	log_debug("%s: server=%s proxy-to=%s:%d (%s)", __func__,
+	log_debug("%s: proxy=%s -> %s:%s (%s)", __func__,
 	    proxy->pr_conf.host, proxy->pr_conf.proxy_addr,
 	    proxy->pr_conf.proxy_port, proxy->pr_conf.proxy_name);
 
blob - 01c32897bb8d5f0b0b97c8f0ef15b277e9f14665
blob + 078319a04b3c234c489053e08cad7613ed2d79f3
--- galileo.h
+++ galileo.h
@@ -118,7 +118,7 @@ struct proxy_config {
 	char		 stylesheet[PATH_MAX];
 	char		 proxy_addr[HOST_NAME_MAX + 1];
 	char		 proxy_name[HOST_NAME_MAX + 1];
-	uint16_t	 proxy_port; /* TODO: turn into string */
+	char		 proxy_port[6];
 };
 
 struct proxy {
blob - f3ace66e6d54ee9b2e1a146beb72b64c66772252
blob + 8bc265231e27893e9e70ed90c1c593e9264a6d66
--- parse.y
+++ parse.y
@@ -202,15 +202,13 @@ proxyopts_l	: proxyopts_l proxyoptsl nl
 		| proxyoptsl optnl
 		;
 
-proxyoptsl	: SOURCE STRING PORT port {
+proxyoptsl	: SOURCE STRING proxyport {
 			size_t n;
 
 			n = strlcpy(pr->pr_conf.proxy_addr, $2,
 			    sizeof(pr->pr_conf.proxy_addr));
 			if (n >= sizeof(pr->pr_conf.proxy_addr))
 				yyerror("proxy source too long!");
-			pr->pr_conf.proxy_port = $4;
-
 			free($2);
 		}
 		| HOSTNAME STRING {
@@ -232,6 +230,20 @@ proxyoptsl	: SOURCE STRING PORT port {
 			free($2);
 		}
 		;
+
+proxyport	: /* empty */ {
+			strlcpy(pr->pr_conf.proxy_port, "1965",
+			    sizeof(pr->pr_conf.proxy_port));
+		}
+		| PORT port {
+			size_t len;
+			int n;
+
+			len = sizeof(pr->pr_conf.proxy_port);
+			n = snprintf(pr->pr_conf.proxy_port, len, "%lld", $2);
+			if (n < 0 || (size_t)n >= len)
+				fatal("port number too long?");
+		};
 
 port		: NUMBER {
 			if ($1 <= 0 || $1 > (int)USHRT_MAX) {
blob - c987fa20d8b181b09f97ab77043a03c203b76d9d
blob + 5bc56b3258bf39b256e0a965e72d253ddaac5605
--- proxy.c
+++ proxy.c
@@ -356,7 +356,7 @@ proxy_start_request(struct galileo *env, struct client
 	struct addrinfo		 hints;
 	struct asr_query	*query;
 	int			 r;
-	char			*url, port[32];
+	char			*url;
 
 	if ((clt->clt_pc = proxy_server_match(env, clt)) == NULL) {
 		if (proxy_start_reply(clt, 501, "text/html") == -1)
@@ -389,13 +389,12 @@ proxy_start_request(struct galileo *env, struct client
 		return (0);
 	}
 
-	(void)snprintf(port, sizeof(port), "%d", clt->clt_pc->proxy_port);
-
 	memset(&hints, 0, sizeof(hints));
 	hints.ai_family = AF_UNSPEC;
 	hints.ai_socktype = SOCK_STREAM;
 
-	query = getaddrinfo_async(clt->clt_pc->proxy_addr, port, &hints, NULL);
+	query = getaddrinfo_async(clt->clt_pc->proxy_addr,
+	    clt->clt_pc->proxy_port, &hints, NULL);
 	if (query == NULL) {
 		log_warn("getaddrinfo_async");
 		return (fcgi_abort_request(clt));
@@ -420,7 +419,7 @@ proxy_resolved(struct asr_result *res, void *d)
 	clt->clt_evasr = NULL;
 
 	if (res->ar_gai_errno != 0) {
-		log_warnx("failed to resolve %s:%d: %s",
+		log_warnx("failed to resolve %s:%s: %s",
 		    pc->proxy_addr, pc->proxy_port,
 		    gai_strerror(res->ar_gai_errno));
 		if (proxy_start_reply(clt, 501, "text/html") == -1)
@@ -548,7 +547,7 @@ done:
 	return;
 
 err:
-	log_warn("failed to connect to %s:%d",
+	log_warn("failed to connect to %s:%s",
 	    clt->clt_pc->proxy_addr, clt->clt_pc->proxy_port);
 	if (proxy_start_reply(clt, 501, "text/html") == -1)
 		return;