SMOLNET PORTAL home about changes
iAdd HAProxy support. - geomyidae - A small C-based gopherd.	Err	bitreich.org	70
hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/	URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/	bitreich.org	70
1Log	/scm/geomyidae/log.gph	bitreich.org	70
1Files	/scm/geomyidae/files.gph	bitreich.org	70
1Refs	/scm/geomyidae/refs.gph	bitreich.org	70
1Tags	/scm/geomyidae/tag	bitreich.org	70
1README	/scm/geomyidae/file/README.gph	bitreich.org	70
1LICENSE	/scm/geomyidae/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit e03b02a1d3a3f7669d4bd88741def54dad981d59	/scm/geomyidae/commit/e03b02a1d3a3f7669d4bd88741def54dad981d59.gph	bitreich.org	70
1parent df8683b61ecb57affad4055f649560a2a789950e	/scm/geomyidae/commit/df8683b61ecb57affad4055f649560a2a789950e.gph	bitreich.org	70
hAuthor: Christoph Lohmann <20h@r-36.net>	URL:mailto:20h@r-36.net	bitreich.org	70
iDate:   Fri, 11 Nov 2022 09:05:18 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
iAdd HAProxy support.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M geomyidae.8                         |       9 +++++++++	Err	bitreich.org	70
i  M main.c                              |      62 +++++++++++++++++++++++++++++--	Err	bitreich.org	70
i	Err	bitreich.org	70
i2 files changed, 68 insertions(+), 3 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/geomyidae.8 b/geomyidae.8	/scm/geomyidae/file/geomyidae.8.gph	bitreich.org	70
i@@ -18,6 +18,7 @@	Err	bitreich.org	70
i .Op Fl e	Err	bitreich.org	70
i .Op Fl n	Err	bitreich.org	70
i .Op Fl s	Err	bitreich.org	70
i+.Op Fl y	Err	bitreich.org	70
i .Op Fl l Ar logfile	Err	bitreich.org	70
i .Op Fl v Ar loglevel	Err	bitreich.org	70
i .Op Fl b Ar base	Err	bitreich.org	70
i@@ -114,6 +115,9 @@ Don't perform reverse lookups.	Err	bitreich.org	70
i .It Fl s	Err	bitreich.org	70
i Log using syslog for logging.	Err	bitreich.org	70
i .	Err	bitreich.org	70
i+.It Fl y	Err	bitreich.org	70
i+Enable HAProxy support.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i .It Fl l Ar logfile	Err	bitreich.org	70
i Specify file where log output is written (no default).	Err	bitreich.org	70
i .	Err	bitreich.org	70
i@@ -483,6 +487,11 @@ Phrases_of_the_Ages.txt	Err	bitreich.org	70
i .Pp	Err	bitreich.org	70
i Care should to be exercised to avoid creating miss-Typed entries, unwanted	Err	bitreich.org	70
i recursions, and/or unintended writes in the working directory.	Err	bitreich.org	70
i+.Sh HAPROXY SUPPORT	Err	bitreich.org	70
i+Geomyidae has	Err	bitreich.org	70
i+.Em HAProxy	Err	bitreich.org	70
i+support. It can be enabled using the -y parameter.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i .Sh LOG FILES	Err	bitreich.org	70
i The log file (ie. /var/log/gopherd.log) has the following structure:	Err	bitreich.org	70
i .	Err	bitreich.org	70
1diff --git a/main.c b/main.c	/scm/geomyidae/file/main.c.gph	bitreich.org	70
i@@ -526,7 +526,7 @@ getlistenfd(struct addrinfo *hints, char *bindip, char *port, int *rlfdnum)	Err	bitreich.org	70
i void	Err	bitreich.org	70
i usage(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        dprintf(2, "usage: %s [-46cdens] [-l logfile] "	Err	bitreich.org	70
i+        dprintf(2, "usage: %s [-46cdensy] [-l logfile] "	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i                    "[-t keyfile certfile] "	Err	bitreich.org	70
i #endif /* ENABLE_TLS */	Err	bitreich.org	70
i@@ -546,7 +546,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         int sock, dofork = 1, inetf = AF_UNSPEC, usechroot = 0,	Err	bitreich.org	70
i             nocgi = 0, errno_save, nbindips = 0, i, j,	Err	bitreich.org	70
i             nlfdret, *lfdret, listfd, maxlfd, istls = 0,	Err	bitreich.org	70
i-            dotls = 0,	Err	bitreich.org	70
i+            dotls = 0, dohaproxy = 0, tcpver = -1, haret = 0,	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i             tlspipe[2], shufbuf[1025],	Err	bitreich.org	70
i             shuflen, wlen, shufpos,	Err	bitreich.org	70
i@@ -556,7 +556,9 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         fd_set rfd;	Err	bitreich.org	70
i         char *port, *base, clienth[NI_MAXHOST], clientp[NI_MAXSERV],	Err	bitreich.org	70
i              *user = NULL, *group = NULL, **bindips = NULL,	Err	bitreich.org	70
i-             *ohost = NULL, *sport = NULL, *p,	Err	bitreich.org	70
i+             *ohost = NULL, *sport = NULL, *p;	Err	bitreich.org	70
i+        /* Must be as large as recvb, due to scanf restrictions. */	Err	bitreich.org	70
i+        char hachost[1025], hashost[1025], hacport[1025], hasport[1025],	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i              *certfile = NULL, *keyfile = NULL,	Err	bitreich.org	70
i #endif /* ENABLE_TLS */	Err	bitreich.org	70
i@@ -574,9 +576,11 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         ARGBEGIN {	Err	bitreich.org	70
i         case '4':	Err	bitreich.org	70
i                 inetf = AF_INET;	Err	bitreich.org	70
i+                tcpver = 4;	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i         case '6':	Err	bitreich.org	70
i                 inetf = AF_INET6;	Err	bitreich.org	70
i+                tcpver = 6;	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i         case 'b':	Err	bitreich.org	70
i                 base = EARGF(usage());	Err	bitreich.org	70
i@@ -630,6 +634,9 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         case 'v':	Err	bitreich.org	70
i                 loglvl = atoi(EARGF(usage()));	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i+        case 'y':	Err	bitreich.org	70
i+                dohaproxy = 1;	Err	bitreich.org	70
i+                break;	Err	bitreich.org	70
i         default:	Err	bitreich.org	70
i                 usage();	Err	bitreich.org	70
i         } ARGEND;	Err	bitreich.org	70
i@@ -942,6 +949,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i                                 return 1;	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+read_selector_again:	Err	bitreich.org	70
i                         maxrecv = sizeof(recvb) - 1;	Err	bitreich.org	70
i                         do {	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i@@ -966,6 +974,54 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i                         if (rlen <= 0)	Err	bitreich.org	70
i                                 return 1;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+                        /*	Err	bitreich.org	70
i+                         * HAProxy v1 protocol support.	Err	bitreich.org	70
i+                         * TODO: Add other protocol version support.	Err	bitreich.org	70
i+                         */	Err	bitreich.org	70
i+                        if (dohaproxy && !strncmp(recvb, "PROXY TCP", 9)) {	Err	bitreich.org	70
i+                                /*	Err	bitreich.org	70
i+                                 * Be careful, we are using scanf.	Err	bitreich.org	70
i+                                 * TODO: Use some better parsing.	Err	bitreich.org	70
i+                                 */	Err	bitreich.org	70
i+                                memset(hachost, 0, sizeof(hachost));	Err	bitreich.org	70
i+                                memset(hashost, 0, sizeof(hashost));	Err	bitreich.org	70
i+                                memset(hacport, 0, sizeof(hacport));	Err	bitreich.org	70
i+                                memset(hasport, 0, sizeof(hasport));	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                                haret = sscanf(recvb, "PROXY TCP%d %s %s %s %s",	Err	bitreich.org	70
i+                                        &tcpver, hachost, hashost, hacport,	Err	bitreich.org	70
i+                                        hasport);	Err	bitreich.org	70
i+                                if (haret != 5)	Err	bitreich.org	70
i+                                        return 1;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                                /*	Err	bitreich.org	70
i+                                 * Be careful. Everything could be	Err	bitreich.org	70
i+                                 * malicious.	Err	bitreich.org	70
i+                                 */	Err	bitreich.org	70
i+                                memset(clienth, 0, sizeof(clienth));	Err	bitreich.org	70
i+                                memmove(clienth, hachost, sizeof(clienth)-1);	Err	bitreich.org	70
i+                                memset(serverh, 0, sizeof(serverh));	Err	bitreich.org	70
i+                                memmove(serverh, hashost, sizeof(serverh)-1);	Err	bitreich.org	70
i+                                memset(clientp, 0, sizeof(clientp));	Err	bitreich.org	70
i+                                memmove(clientp, hacport, sizeof(clientp)-1);	Err	bitreich.org	70
i+                                memset(serverp, 0, sizeof(serverp));	Err	bitreich.org	70
i+                                memmove(serverp, hasport, sizeof(serverp)-1);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                                if (!strncmp(serverh, "::ffff:", 7)) {	Err	bitreich.org	70
i+                                        memmove(serverh, serverh+7,	Err	bitreich.org	70
i+                                                        strlen(serverh)-6);	Err	bitreich.org	70
i+                                }	Err	bitreich.org	70
i+                                if (!strncmp(clienth, "::ffff:", 7)) {	Err	bitreich.org	70
i+                                        memmove(clienth, clienth+7,	Err	bitreich.org	70
i+                                                        strlen(clienth)-6);	Err	bitreich.org	70
i+                                }	Err	bitreich.org	70
i+                                if (loglvl & CONN) {	Err	bitreich.org	70
i+                                        logentry(clienth, clientp, "-",	Err	bitreich.org	70
i+                                                        "haproxy connected");	Err	bitreich.org	70
i+                                }	Err	bitreich.org	70
i+                                goto read_selector_again;	Err	bitreich.org	70
i+                        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i                         if (istls) {	Err	bitreich.org	70
i                                 if (pipe(tlspipe) < 0) {	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/geomyidae/commit/e03b02a1d3a3...
Content-Typetext/plain; charset=utf-8