SMOLNET PORTAL home about changes
iWe do not need the realpath. Only serve in basepath. - 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 9884d6e830dba5751c5363086e74b5f9a9c1691d	/scm/geomyidae/commit/9884d6e830dba5751c5363086e74b5f9a9c1691d.gph	bitreich.org	70
1parent cdf260787abd32506e151744c411d0e1057757d8	/scm/geomyidae/commit/cdf260787abd32506e151744c411d0e1057757d8.gph	bitreich.org	70
hAuthor: Christoph Lohmann <20h@r-36.net>	URL:mailto:20h@r-36.net	bitreich.org	70
iDate:   Wed, 23 Aug 2023 14:49:23 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iWe do not need the realpath. Only serve in basepath.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M main.c                              |      49 +++++++++++++------------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 20 insertions(+), 29 deletions(-)	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@@ -138,7 +138,7 @@ handlerequest(int sock, char *req, int rlen, char *base, char *ohost,	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[PATH_MAX+1], rpath[PATH_MAX+1], args[1025],	Err	bitreich.org	70
i+        char recvc[1025], recvb[1025], path[PATH_MAX+1], args[1025],	Err	bitreich.org	70
i                 argsc[1025], traverse[1025], traversec[1025],	Err	bitreich.org	70
i                 *sear, *sep, *recvbp, *c;	Err	bitreich.org	70
i         int len = 0, fd, i, maxrecv, pathfallthrough = 0;	Err	bitreich.org	70
i@@ -190,15 +190,13 @@ handlerequest(int sock, char *req, int rlen, char *base, char *ohost,	Err	bitreich.org	70
i                 if (strchr(recvb, '/'))	Err	bitreich.org	70
i                         goto dothegopher;	Err	bitreich.org	70
i                 if (snprintf(path, sizeof(path), "%s/%s", base, recvb) <= sizeof(path)) {	Err	bitreich.org	70
i-                        if (realpath(path, (char *)rpath)) {	Err	bitreich.org	70
i-                                if (stat(rpath, &dir) == 0) {	Err	bitreich.org	70
i-                                        if (loglvl & FILES)	Err	bitreich.org	70
i-                                                logentry(clienth, clientp, recvc, "compatibility serving");	Err	bitreich.org	70
i+                        if (stat(path, &dir) == 0) {	Err	bitreich.org	70
i+                                if (loglvl & FILES)	Err	bitreich.org	70
i+                                        logentry(clienth, clientp, recvc, "compatibility serving");	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-                                        handlecgi(sock, rpath, port, base, "", "", ohost,	Err	bitreich.org	70
i-                                                clienth, serverh, istls, req, "");	Err	bitreich.org	70
i-                                        return;	Err	bitreich.org	70
i-                                }	Err	bitreich.org	70
i+                                handlecgi(sock, path, port, base, "", "", ohost,	Err	bitreich.org	70
i+                                        clienth, serverh, istls, req, "");	Err	bitreich.org	70
i+                                return;	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i@@ -325,14 +323,7 @@ dothegopher:	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if (realpath(path, (char *)&rpath) == NULL) {	Err	bitreich.org	70
i-                dprintf(sock, notfounderr, recvc);	Err	bitreich.org	70
i-                if (loglvl & ERRORS)	Err	bitreich.org	70
i-                        logentry(clienth, clientp, recvc, "not found");	Err	bitreich.org	70
i-                return;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (stat(rpath, &dir) != -1) {	Err	bitreich.org	70
i+        if (stat(path, &dir) != -1) {	Err	bitreich.org	70
i                 /*	Err	bitreich.org	70
i                  * If sticky bit is set, only serve if this is encrypted.	Err	bitreich.org	70
i                  */	Err	bitreich.org	70
i@@ -348,9 +339,9 @@ dothegopher:	Err	bitreich.org	70
i                 if (S_ISDIR(dir.st_mode)) {	Err	bitreich.org	70
i                         for (i = 0; i < sizeof(indexf)/sizeof(indexf[0]);	Err	bitreich.org	70
i                                         i++) {	Err	bitreich.org	70
i-                                len = strlen(rpath);	Err	bitreich.org	70
i-                                if (len + strlen(indexf[i]) + ((rpath[len-1] == '/')? 0 : 1)	Err	bitreich.org	70
i-                                                >= sizeof(rpath)) {	Err	bitreich.org	70
i+                                len = strlen(path);	Err	bitreich.org	70
i+                                if (len + strlen(indexf[i]) + ((path[len-1] == '/')? 0 : 1)	Err	bitreich.org	70
i+                                                >= sizeof(path)) {	Err	bitreich.org	70
i                                         if (loglvl & ERRORS) {	Err	bitreich.org	70
i                                                 logentry(clienth, clientp,	Err	bitreich.org	70
i                                                         recvc,	Err	bitreich.org	70
i@@ -369,18 +360,18 @@ dothegopher:	Err	bitreich.org	70
i                                  * strncat of one char static char array	Err	bitreich.org	70
i                                  * is an overflow.	Err	bitreich.org	70
i                                  */	Err	bitreich.org	70
i-                                if (rpath[len-1] != '/')	Err	bitreich.org	70
i-                                        strcat(rpath, "/");	Err	bitreich.org	70
i-                                strcat(rpath, indexf[i]);	Err	bitreich.org	70
i-                                fd = open(rpath, O_RDONLY);	Err	bitreich.org	70
i+                                if (path[len-1] != '/')	Err	bitreich.org	70
i+                                        strcat(path, "/");	Err	bitreich.org	70
i+                                strcat(path, indexf[i]);	Err	bitreich.org	70
i+                                fd = open(path, O_RDONLY);	Err	bitreich.org	70
i                                 if (fd >= 0)	Err	bitreich.org	70
i                                         break;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                                 /* Not found. Clear path from indexf. */	Err	bitreich.org	70
i-                                rpath[len] = '\0';	Err	bitreich.org	70
i+                                path[len] = '\0';	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
i                 } else {	Err	bitreich.org	70
i-                        fd = open(rpath, O_RDONLY);	Err	bitreich.org	70
i+                        fd = open(path, O_RDONLY);	Err	bitreich.org	70
i                         if (fd < 0) {	Err	bitreich.org	70
i                                 dprintf(sock, notfounderr, recvc);	Err	bitreich.org	70
i                                 if (loglvl & ERRORS) {	Err	bitreich.org	70
i@@ -396,9 +387,9 @@ dothegopher:	Err	bitreich.org	70
i         if (fd >= 0) {	Err	bitreich.org	70
i                 close(fd);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-                c = strrchr(rpath, '/');	Err	bitreich.org	70
i+                c = strrchr(path, '/');	Err	bitreich.org	70
i                 if (c == NULL)	Err	bitreich.org	70
i-                        c = rpath;	Err	bitreich.org	70
i+                        c = path;	Err	bitreich.org	70
i                 type = gettype(c);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                 /*	Err	bitreich.org	70
i@@ -880,7 +871,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #ifdef __OpenBSD__	Err	bitreich.org	70
i         char promises[31]; /* check the size needed in the fork too */	Err	bitreich.org	70
i-        snprintf(promises, sizeof(promises), "rpath inet stdio proc exec %s",	Err	bitreich.org	70
i+        snprintf(promises, sizeof(promises), "inet stdio proc exec %s",	Err	bitreich.org	70
i                  revlookup ? "dns" : "");	Err	bitreich.org	70
i         if (pledge(promises, NULL) == -1) {	Err	bitreich.org	70
i                 perror("pledge");	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/geomyidae/commit/9884d6e830db...
Content-Typetext/plain; charset=utf-8