SMOLNET PORTAL home about changes
iAdd SERVER_LISTEN_NAME feature. - 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 9ffef532d812330c00bd1043c884f9e685787018	/scm/geomyidae/commit/9ffef532d812330c00bd1043c884f9e685787018.gph	bitreich.org	70
1parent 8b9629bd2a0dae917cbe7e7db44417afc28064f6	/scm/geomyidae/commit/8b9629bd2a0dae917cbe7e7db44417afc28064f6.gph	bitreich.org	70
hAuthor: Christoph Lohmann <20h@r-36.net>	URL:mailto:20h@r-36.net	bitreich.org	70
iDate:   Wed, 26 Oct 2022 19:03:26 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iAdd SERVER_LISTEN_NAME feature.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M geomyidae.8                         |       1 +	Err	bitreich.org	70
i  M handlr.c                            |      17 ++++++++++-------	Err	bitreich.org	70
i  M handlr.h                            |      19 +++++++++++++------	Err	bitreich.org	70
i  M ind.c                               |       3 ++-	Err	bitreich.org	70
i  M ind.h                               |       4 ++--	Err	bitreich.org	70
i  M main.c                              |      27 +++++++++++++++++++--------	Err	bitreich.org	70
i	Err	bitreich.org	70
i6 files changed, 47 insertions(+), 24 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@@ -381,6 +381,7 @@ Additionally to the above arguments several environment variables are set.	Err	bitreich.org	70
i .Dl SCRIPT_NAME = script which is executed	Err	bitreich.org	70
i .Dl SERVER_NAME = server's hostname	Err	bitreich.org	70
i .Dl SERVER_PORT = server's port	Err	bitreich.org	70
i+.Dl SERVER_LISTEN_NAME = ip the server received the connection on	Err	bitreich.org	70
i .Dl SERVER_PROTOCOL = `gopher/1.0'	Err	bitreich.org	70
i .Dl SERVER_SOFTWARE = `geomyidae'	Err	bitreich.org	70
i .Dl X_GOPHER_SEARCH = search (See above.)	Err	bitreich.org	70
1diff --git a/handlr.c b/handlr.c	/scm/geomyidae/file/handlr.c.gph	bitreich.org	70
i@@ -23,7 +23,7 @@	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i handledir(int sock, char *path, char *port, char *base, char *args,	Err	bitreich.org	70
i-                char *sear, char *ohost, char *chost, int istls)	Err	bitreich.org	70
i+                char *sear, char *ohost, char *chost, char *bhost, int istls)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         char *pa, *file, *e, *par, *b;	Err	bitreich.org	70
i         struct dirent **dirent;	Err	bitreich.org	70
i@@ -33,6 +33,7 @@ handledir(int sock, char *path, char *port, char *base, char *args,	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         USED(args);	Err	bitreich.org	70
i         USED(sear);	Err	bitreich.org	70
i+        USED(bhost);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         pa = xstrdup(path);	Err	bitreich.org	70
i         e = pa + strlen(pa) - 1;	Err	bitreich.org	70
i@@ -85,13 +86,14 @@ handledir(int sock, char *path, char *port, char *base, char *args,	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i handlegph(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                char *sear, char *ohost, char *chost, int istls)	Err	bitreich.org	70
i+                char *sear, char *ohost, char *chost, char *bhost, int istls)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         Indexs *act;	Err	bitreich.org	70
i         int i, ret = 0;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         USED(args);	Err	bitreich.org	70
i         USED(sear);	Err	bitreich.org	70
i+        USED(bhost);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         act = scanfile(file);	Err	bitreich.org	70
i         if (act != NULL) {	Err	bitreich.org	70
i@@ -108,7 +110,7 @@ handlegph(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i handlebin(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                char *sear, char *ohost, char *chost, int istls)	Err	bitreich.org	70
i+                char *sear, char *ohost, char *chost, char *bhost, int istls)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         int fd;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -117,6 +119,7 @@ handlebin(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i         USED(args);	Err	bitreich.org	70
i         USED(sear);	Err	bitreich.org	70
i         USED(ohost);	Err	bitreich.org	70
i+        USED(bhost);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         fd = open(file, O_RDONLY);	Err	bitreich.org	70
i         if (fd >= 0) {	Err	bitreich.org	70
i@@ -128,7 +131,7 @@ handlebin(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i handlecgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                char *sear, char *ohost, char *chost, int istls)	Err	bitreich.org	70
i+                char *sear, char *ohost, char *chost, char *bhost, int istls)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         char *p, *path;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -164,7 +167,7 @@ handlecgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                 setcgienviron(p, file, port, base, args, sear, ohost, chost,	Err	bitreich.org	70
i-                                istls);	Err	bitreich.org	70
i+                                bhost, istls);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                 if (execl(file, p, sear, args, ohost, port,	Err	bitreich.org	70
i                                 (char *)NULL) == -1) {	Err	bitreich.org	70
i@@ -183,7 +186,7 @@ handlecgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i handledcgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                char *sear, char *ohost, char *chost, int istls)	Err	bitreich.org	70
i+                char *sear, char *ohost, char *chost, char *bhost, int istls)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         FILE *fp;	Err	bitreich.org	70
i         char *p, *path, *ln = NULL;	Err	bitreich.org	70
i@@ -225,7 +228,7 @@ handledcgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                 setcgienviron(p, file, port, base, args, sear, ohost, chost,	Err	bitreich.org	70
i-                                istls);	Err	bitreich.org	70
i+                                bhost, istls);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                 if (execl(file, p, sear, args, ohost, port,	Err	bitreich.org	70
i                                 (char *)NULL) == -1) {	Err	bitreich.org	70
1diff --git a/handlr.h b/handlr.h	/scm/geomyidae/file/handlr.h.gph	bitreich.org	70
i@@ -17,20 +17,27 @@	Err	bitreich.org	70
i  * sear .... search part of request (»selector\tsearch\r\n«)	Err	bitreich.org	70
i  * ohost ... host of geomiydae (See -h in geomyidae(8))	Err	bitreich.org	70
i  * chost ... IP of the client sending a request	Err	bitreich.org	70
i+ * bhost ... server IP the server received the connection to	Err	bitreich.org	70
i  * istls ... set to 1, if TLS was used for thr request	Err	bitreich.org	70
i  */	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void handledir(int sock, char *path, char *port, char *base, char *args,	Err	bitreich.org	70
i-                        char *sear, char *ohost, char *chost, int istls);	Err	bitreich.org	70
i+                        char *sear, char *ohost, char *chost, char *bhost,	Err	bitreich.org	70
i+                        int istls);	Err	bitreich.org	70
i void handlegph(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                        char *sear, char *ohost, char *chost, int istls);	Err	bitreich.org	70
i+                        char *sear, char *ohost, char *chost, char *bhost,	Err	bitreich.org	70
i+                        int istls);	Err	bitreich.org	70
i void handlebin(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                        char *sear, char *ohost, char *chost, int istls);	Err	bitreich.org	70
i+                        char *sear, char *ohost, char *chost, char *bhost,	Err	bitreich.org	70
i+                        int istls);	Err	bitreich.org	70
i void handletxt(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                        char *sear, char *ohost, char *chost, int istls);	Err	bitreich.org	70
i+                        char *sear, char *ohost, char *chost, char *bhost,	Err	bitreich.org	70
i+                        int istls);	Err	bitreich.org	70
i void handlecgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                        char *sear, char *ohost, char *chost, int istls);	Err	bitreich.org	70
i+                        char *sear, char *ohost, char *chost, char *bhost,	Err	bitreich.org	70
i+                        int istls);	Err	bitreich.org	70
i void handledcgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i-                        char *sear, char *ohost, char *chost, int istls);	Err	bitreich.org	70
i+                        char *sear, char *ohost, char *chost, char *bhost,	Err	bitreich.org	70
i+                        int istls);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #endif	Err	bitreich.org	70
1diff --git a/ind.c b/ind.c	/scm/geomyidae/file/ind.c.gph	bitreich.org	70
i@@ -531,7 +531,7 @@ reverselookup(char *host)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i setcgienviron(char *file, char *path, char *port, char *base, char *args,	Err	bitreich.org	70
i-                char *sear, char *ohost, char *chost, int istls)	Err	bitreich.org	70
i+                char *sear, char *ohost, char *chost, char *bhost, int istls)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         /*	Err	bitreich.org	70
i          * TODO: Clean environment from possible unsafe environment variables.	Err	bitreich.org	70
i@@ -569,6 +569,7 @@ setcgienviron(char *file, char *path, char *port, char *base, char *args,	Err	bitreich.org	70
i         setenv("SCRIPT_NAME", file, 1);	Err	bitreich.org	70
i         setenv("SERVER_NAME", ohost, 1);	Err	bitreich.org	70
i         setenv("SERVER_PORT", port, 1);	Err	bitreich.org	70
i+        setenv("SERVER_LISTEN_NAME", bhost, 1);	Err	bitreich.org	70
i         setenv("SERVER_PROTOCOL", "gopher/1.0", 1);	Err	bitreich.org	70
i         setenv("SERVER_SOFTWARE", "geomyidae", 1);	Err	bitreich.org	70
i 	Err	bitreich.org	70
1diff --git a/ind.h b/ind.h	/scm/geomyidae/file/ind.h.gph	bitreich.org	70
i@@ -27,7 +27,7 @@ struct filetype {	Err	bitreich.org	70
i         char *end;	Err	bitreich.org	70
i         char *type;	Err	bitreich.org	70
i         void (* f)(int, char *, char *, char *, char *, char *, char *,	Err	bitreich.org	70
i-                char *, int);	Err	bitreich.org	70
i+                char *, char *, int);	Err	bitreich.org	70
i };	Err	bitreich.org	70
i 	Err	bitreich.org	70
i filetype *gettype(char *filename);	Err	bitreich.org	70
i@@ -49,7 +49,7 @@ char *smprintf(char *fmt, ...);	Err	bitreich.org	70
i char *reverselookup(char *host);	Err	bitreich.org	70
i void setcgienviron(char *file, char *path, char *port, char *base,	Err	bitreich.org	70
i                 char *args, char *sear, char *ohost, char *chost,	Err	bitreich.org	70
i-                int istls);	Err	bitreich.org	70
i+                char *bhost, int istls);	Err	bitreich.org	70
i char *humansize(off_t n);	Err	bitreich.org	70
i char *humantime(const time_t *clock);	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@@ -133,8 +133,8 @@ logentry(char *host, char *port, char *qry, char *status)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i handlerequest(int sock, char *req, int rlen, char *base, char *ohost,	Err	bitreich.org	70
i-              char *port, char *clienth, char *clientp, int nocgi,	Err	bitreich.org	70
i-              int istls)	Err	bitreich.org	70
i+              char *port, char *clienth, char *clientp, char *serverh,	Err	bitreich.org	70
i+              char *serverp, int nocgi, int istls)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         struct stat dir;	Err	bitreich.org	70
i         char recvc[1025], recvb[1025], path[1025], args[1025], argsc[1025],	Err	bitreich.org	70
i@@ -367,7 +367,7 @@ handlerequest(int sock, char *req, int rlen, char *base, char *ohost,	Err	bitreich.org	70
i                                 logentry(clienth, clientp, recvc, "nocgi error");	Err	bitreich.org	70
i                 } else {	Err	bitreich.org	70
i                         type->f(sock, path, port, base, args, sear, ohost,	Err	bitreich.org	70
i-                                clienth, istls);	Err	bitreich.org	70
i+                                clienth, serverh, istls);	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i         } else {	Err	bitreich.org	70
i                 /*	Err	bitreich.org	70
i@@ -376,7 +376,7 @@ handlerequest(int sock, char *req, int rlen, char *base, char *ohost,	Err	bitreich.org	70
i                  */	Err	bitreich.org	70
i                 if (!pathfallthrough && S_ISDIR(dir.st_mode)) {	Err	bitreich.org	70
i                         handledir(sock, path, port, base, args, sear, ohost,	Err	bitreich.org	70
i-                                clienth, istls);	Err	bitreich.org	70
i+                                clienth, serverh, istls);	Err	bitreich.org	70
i                         if (loglvl & DIRS) {	Err	bitreich.org	70
i                                 logentry(clienth, clientp, recvc,	Err	bitreich.org	70
i                                                         "dir listing");	Err	bitreich.org	70
i@@ -540,9 +540,9 @@ int	Err	bitreich.org	70
i main(int argc, char *argv[])	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         struct addrinfo hints;	Err	bitreich.org	70
i-        struct sockaddr_storage clt;	Err	bitreich.org	70
i+        struct sockaddr_storage clt, slt;	Err	bitreich.org	70
i         struct linger lingerie;	Err	bitreich.org	70
i-        socklen_t cltlen;	Err	bitreich.org	70
i+        socklen_t cltlen, sltlen;	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@@ -560,7 +560,7 @@ main(int argc, char *argv[])	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-             byte0, recvb[1025];	Err	bitreich.org	70
i+             byte0, recvb[1025], serverh[NI_MAXHOST], serverp[NI_MAXSERV];	Err	bitreich.org	70
i         struct passwd *us = NULL;	Err	bitreich.org	70
i         struct group *gr = NULL;	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i@@ -858,6 +858,16 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+                sltlen = sizeof(slt);	Err	bitreich.org	70
i+                serverh[0] = serverp[0] = '\0';	Err	bitreich.org	70
i+                if (getsockname(sock, (struct sockaddr *)&slt, &sltlen) == 0) {	Err	bitreich.org	70
i+                        getnameinfo((struct sockaddr *)&slt, sltlen, serverh,	Err	bitreich.org	70
i+                                        sizeof(serverh), serverp, sizeof(serverp),	Err	bitreich.org	70
i+                                        NI_NUMERICHOST|NI_NUMERICSERV);	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+                if (!strncmp(serverh, "::ffff:", 7))	Err	bitreich.org	70
i+                        memmove(serverh, serverh+7, strlen(serverh)-6);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i                 if (getnameinfo((struct sockaddr *)&clt, cltlen, clienth,	Err	bitreich.org	70
i                                 sizeof(clienth), clientp, sizeof(clientp),	Err	bitreich.org	70
i                                 NI_NUMERICHOST|NI_NUMERICSERV)) {	Err	bitreich.org	70
i@@ -996,7 +1006,8 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                         handlerequest(sock, recvb, rlen, base,	Err	bitreich.org	70
i                                         ohost, sport, clienth,	Err	bitreich.org	70
i-                                        clientp, nocgi, istls);	Err	bitreich.org	70
i+                                        clientp, serverh, serverp,	Err	bitreich.org	70
i+                                        nocgi, istls);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                         if (!istls) {	Err	bitreich.org	70
i                                 /*	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/geomyidae/commit/9ffef532d812...
Content-Typetext/plain; charset=utf-8