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