Fix haproxy support. - geomyidae - A small C-based gopherd. HTML git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 8de0a5087833495b700c7ce4472df52c397c4cd5 DIR parent ef96bd3ac67bd8a63756736a172fe34590d45ea5 HTML Author: Christoph Lohmann <20h@r-36.net> Date: Mon, 14 Nov 2022 01:06:49 +0100 Fix haproxy support. Diffstat: M main.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) --- DIR diff --git a/main.c b/main.c @@ -916,6 +916,7 @@ main(int argc, char *argv[]) } #endif /* __OpenBSD__ */ +read_selector_again: if (recv(sock, &byte0, 1, MSG_PEEK) < 1) return 1; @@ -949,7 +950,6 @@ main(int argc, char *argv[]) return 1; } -read_selector_again: maxrecv = sizeof(recvb) - 1; do { #ifdef ENABLE_TLS @@ -980,6 +980,17 @@ read_selector_again: */ if (dohaproxy && !strncmp(recvb, "PROXY TCP", 9)) { /* + * In case more than proxy tcp was read, + * be pepared. + */ + p = strchr(recvb, '\n'); + if (p == NULL) + return 1; + if (p[-1] == '\r') + p[-1] = '\0'; + *p++ = '\0'; + + /* * Be careful, we are using scanf. * TODO: Use some better parsing. */ @@ -1019,7 +1030,13 @@ read_selector_again: logentry(clienth, clientp, "-", "haproxy connected"); } - goto read_selector_again; + printf("clienth = %s, clientp = %s, serverh = %s, serverp = %s\n", + clienth, clientp, serverh, serverp); + + /* Realign recvb to new value. */ + memmove(recvb, p, sizeof(recvb)-(p-recvb)); + if (strlen(recvb) < 1) + goto read_selector_again; } #ifdef ENABLE_TLS @@ -1065,8 +1082,9 @@ read_selector_again: #endif /* ENABLE_TLS */ handlerequest(sock, recvb, rlen, base, - ohost, sport, clienth, - clientp, serverh, serverp, + (dohaproxy)? serverh : ohost, + (dohaproxy)? serverp : sport, + clienth, clientp, serverh, serverp, nocgi, istls); if (!istls) {