commit 26cd3e9dd3d4042457224b5ecef6de8234d7f950 from: Omar Polo date: Fri Sep 23 13:00:39 2022 UTC make the port number optional and keep it as string 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;