Fixing TLS in HAProxy. - geomyidae - A small C-based gopherd.
git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/
Log
Files
Refs
Tags
README
LICENSE
---
commit da60f209d2f93d5c8b224ccb539d612aff2911f6
parent d3a546ebc51a5cb2a96b4fd162a0c448c3db27e5
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sat, 19 Nov 2022 20:45:42 +0100

Fixing TLS in HAProxy.

This makes reading more lines in geomyidae on a request very easy now.
As a downside, the receiving is just one byte, until there is some NL.
This can be slow on really old computers.

Diffstat:
  M main.c                              |      23 +++++++----------------

1 file changed, 7 insertions(+), 16 deletions(-)
---
diff --git a/main.c b/main.c
@@ -917,6 +917,9 @@ main(int argc, char *argv[])
 #endif /* __OpenBSD__ */
 
 read_selector_again:
+                        rlen = 0;
+                        memset(recvb, 0, sizeof(recvb));
+
                         if (recv(sock, &byte0, 1, MSG_PEEK) < 1)
                                 return 1;
 
@@ -955,14 +958,14 @@ read_selector_again:
 #ifdef ENABLE_TLS
                                 if (istls) {
                                         retl = tls_read(tlsclientctx,
-                                                recvb+rlen, sizeof(recvb)-1-rlen);
+                                                recvb+rlen, 1);
                                         if (retl < 0)
                                                 fprintf(stderr, "tls_read failed: %s\n", tls_error(tlsclientctx));
                                 } else
 #endif /* ENABLE_TLS */
                                 {
                                         retl = read(sock, recvb+rlen,
-                                                sizeof(recvb)-1-rlen);
+                                                1);
                                         if (retl < 0)
                                                 perror("read");
                                 }
@@ -979,13 +982,6 @@ read_selector_again:
                          * TODO: Add other protocol version support.
                          */
                         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';
@@ -1028,15 +1024,10 @@ read_selector_again:
                                 }
                                 if (loglvl & CONN) {
                                         logentry(clienth, clientp, "-",
-                                                        "haproxy connected");
+                                                        "haproxy connection");
                                 }
-                                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;
+                                goto read_selector_again;
                         }
 
 #ifdef ENABLE_TLS