SMOLNET PORTAL home about changes
ifix a regression from 980a398da8acca65a13936ff0792c39f3dcb0ede - 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 9526d3d35917770ca5a021d745bcf50d382875b2	/scm/geomyidae/commit/9526d3d35917770ca5a021d745bcf50d382875b2.gph	bitreich.org	70
1parent fc79d9a4d2cd906e09d9f046e9f1cc91e35b0f7e	/scm/geomyidae/commit/fc79d9a4d2cd906e09d9f046e9f1cc91e35b0f7e.gph	bitreich.org	70
hAuthor: Hiltjo Posthuma <hiltjo@codemadness.org>	URL:mailto:hiltjo@codemadness.org	bitreich.org	70
iDate:   Wed,  8 Mar 2023 20:54:44 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
ifix a regression from 980a398da8acca65a13936ff0792c39f3dcb0ede	Err	bitreich.org	70
i	Err	bitreich.org	70
iOpen directory listings did not prefix the entries with / correctly when using	Err	bitreich.org	70
ia chroot.	Err	bitreich.org	70
i	Err	bitreich.org	70
iSigned-off-by: Christoph Lohmann <20h@r-36.net>	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M handlr.c                            |      22 +++++++++++++++++-----	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 17 insertions(+), 5 deletions(-)	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@@ -21,6 +21,16 @@	Err	bitreich.org	70
i #include "ind.h"	Err	bitreich.org	70
i #include "arg.h"	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+char *	Err	bitreich.org	70
i+make_base_path(char *path, char *base)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        if (!(base[0] == '/' && base[1] == '\0') &&	Err	bitreich.org	70
i+            strlen(path) > strlen(base))	Err	bitreich.org	70
i+                return path + strlen(base);	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i+                return path;	Err	bitreich.org	70
i+}	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, char *bhost, int istls)	Err	bitreich.org	70
i@@ -37,15 +47,16 @@ handledir(int sock, char *path, char *port, char *base, char *args,	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-        if (e[0] == '/')	Err	bitreich.org	70
i+        if (e > pa && e[0] == '/')	Err	bitreich.org	70
i                 *e = '\0';	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         par = xstrdup(pa);	Err	bitreich.org	70
i-        b = strrchr(par + strlen(base), '/');	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        b = strrchr(make_base_path(par, base), '/');	Err	bitreich.org	70
i         if (b != NULL) {	Err	bitreich.org	70
i                 *b = '\0';	Err	bitreich.org	70
i                 dprintf(sock, "1..\t%s\t%s\t%s\r\n",	Err	bitreich.org	70
i-                        par + strlen(base), ohost, port);	Err	bitreich.org	70
i+                        make_base_path(par, base), ohost, port);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i         free(par);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -62,11 +73,12 @@ handledir(int sock, char *path, char *port, char *base, char *args,	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                         type = gettype(dirent[i]->d_name);	Err	bitreich.org	70
i-                        file = smprintf("%s/%s", pa,	Err	bitreich.org	70
i+                        file = smprintf("%s%s%s", pa,	Err	bitreich.org	70
i+                                        pa[0] == '/' && pa[1] == '\0' ? "" : "/",	Err	bitreich.org	70
i                                         dirent[i]->d_name);	Err	bitreich.org	70
i                         if (stat(file, &st) >= 0 && S_ISDIR(st.st_mode))	Err	bitreich.org	70
i                                 type = gettype("index.gph");	Err	bitreich.org	70
i-                        e = file + strlen(base);	Err	bitreich.org	70
i+                        e = make_base_path(file, base);	Err	bitreich.org	70
i                         ret = dprintf(sock,	Err	bitreich.org	70
i                                         "%c%-50.50s %10s %16s\t%s\t%s\t%s\r\n",	Err	bitreich.org	70
i                                         *type->type,	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/geomyidae/commit/9526d3d35917...
Content-Typetext/plain; charset=utf-8