iSet GOPHERS and HTTPS in CGI, if TLS is used. - 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 89d4f0d0cf90543362a036133e88cb9fe21513d4 /scm/geomyidae/commit/89d4f0d0cf90543362a036133e88cb9fe21513d4.gph bitreich.org 70 1parent 3600ffac963bc5816c86b8e447feea77a2b34751 /scm/geomyidae/commit/3600ffac963bc5816c86b8e447feea77a2b34751.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Fri, 12 Jun 2020 20:17:01 +0200 Err bitreich.org 70 i Err bitreich.org 70 iSet GOPHERS and HTTPS in CGI, if TLS is used. Err bitreich.org 70 i Err bitreich.org 70 iAdd infrastructure, so other handlers could handle it too. 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 | 16 +++++++++------- Err bitreich.org 70 i M handlr.h | 11 ++++++----- Err bitreich.org 70 i M ind.c | 12 +++++++++++- Err bitreich.org 70 i M ind.h | 5 +++-- Err bitreich.org 70 i M main.c | 9 +++++---- Err bitreich.org 70 i Err bitreich.org 70 i6 files changed, 35 insertions(+), 19 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@@ -372,6 +372,7 @@ Additionally to the above arguments several environment variables are set. 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 i+.Dl HTTPS and GOPHERS = set, if TLS is used Err bitreich.org 70 i .Pp Err bitreich.org 70 i .Ed Err bitreich.org 70 i . 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) Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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@@ -80,7 +80,7 @@ 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) Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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@@ -103,7 +103,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) Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, int istls) Err bitreich.org 70 i { Err bitreich.org 70 i int fd; Err bitreich.org 70 i Err bitreich.org 70 i@@ -123,7 +123,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) Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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@@ -158,7 +158,8 @@ handlecgi(int sock, char *file, char *port, char *base, char *args, Err bitreich.org 70 i break; 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+ setcgienviron(p, file, port, base, args, sear, ohost, chost, Err bitreich.org 70 i+ 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@@ -177,7 +178,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) Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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@@ -218,7 +219,8 @@ handledcgi(int sock, char *file, char *port, char *base, char *args, Err bitreich.org 70 i break; 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+ setcgienviron(p, file, port, base, args, sear, ohost, chost, Err bitreich.org 70 i+ 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,17 +17,18 @@ 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+ * 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); Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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); Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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); Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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); Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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); Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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@@ -465,7 +465,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) Err bitreich.org 70 i+ char *sear, char *ohost, char *chost, 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@@ -485,6 +485,7 @@ setcgienviron(char *file, char *path, char *port, char *base, char *args, Err bitreich.org 70 i * the script. The RFC allows us to set the IP to the value. Err bitreich.org 70 i */ Err bitreich.org 70 i setenv("REMOTE_HOST", chost, 1); Err bitreich.org 70 i+ /* Please do not implement identd here. */ Err bitreich.org 70 i unsetenv("REMOTE_IDENT"); Err bitreich.org 70 i unsetenv("REMOTE_USER"); Err bitreich.org 70 i /* Make PHP happy. */ Err bitreich.org 70 i@@ -501,5 +502,14 @@ setcgienviron(char *file, char *path, char *port, char *base, char *args, Err bitreich.org 70 i setenv("SERVER_SOFTWARE", "geomyidae", 1); Err bitreich.org 70 i Err bitreich.org 70 i setenv("X_GOPHER_SEARCH", sear, 1); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (istls) { Err bitreich.org 70 i+ setenv("GOPHERS", "on", 1); Err bitreich.org 70 i+ setenv("HTTPS", "on", 1); Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ unsetenv("GOPHERS"); Err bitreich.org 70 i+ unsetenv("HTTPS"); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i } 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 *); Err bitreich.org 70 i+ 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@@ -48,7 +48,8 @@ void freeelem(Elems *e); Err bitreich.org 70 i 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+ char *args, char *sear, char *ohost, char *chost, Err bitreich.org 70 i+ int istls); Err bitreich.org 70 i Err bitreich.org 70 i #endif 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@@ -121,7 +121,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+ char *port, char *clienth, char *clientp, int nocgi, Err bitreich.org 70 i+ 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 = NULL, *sear, *c; Err bitreich.org 70 i@@ -247,12 +248,12 @@ 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); Err bitreich.org 70 i+ clienth, istls); Err bitreich.org 70 i } Err bitreich.org 70 i } else { Err bitreich.org 70 i if (S_ISDIR(dir.st_mode)) { Err bitreich.org 70 i handledir(sock, path, port, base, args, sear, ohost, Err bitreich.org 70 i- clienth); Err bitreich.org 70 i+ clienth, 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@@ -863,7 +864,7 @@ 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); Err bitreich.org 70 i+ clientp, nocgi, istls); Err bitreich.org 70 i Err bitreich.org 70 i if (!istls) { Err bitreich.org 70 i waitforpendingbytes(sock); Err bitreich.org 70 .