ifix realpath when base is a symlink - 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 77f7f5ed8370cf11b8992c70e7f5361625b9afa9 /scm/geomyidae/commit/77f7f5ed8370cf11b8992c70e7f5361625b9afa9.gph bitreich.org 70
1parent d0a78b16bdbd4330424b9abdcf6448c5a2b42253 /scm/geomyidae/commit/d0a78b16bdbd4330424b9abdcf6448c5a2b42253.gph bitreich.org 70
hAuthor: KatolaZ <katolaz@freaknet.org> URL:mailto:katolaz@freaknet.org bitreich.org 70
iDate: Sat, 3 Dec 2022 14:18:29 +0000 Err bitreich.org 70
i Err bitreich.org 70
ifix realpath when base is a symlink 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 ind.c | 9 ++++++--- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 6 insertions(+), 3 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/ind.c b/ind.c /scm/geomyidae/file/ind.c.gph bitreich.org 70
i@@ -415,7 +415,7 @@ scanfile(char *fname) Err bitreich.org 70
i int Err bitreich.org 70
i printelem(int fd, Elems *el, char *file, char *base, char *addr, char *port) Err bitreich.org 70
i { Err bitreich.org 70
i- char *path, *p, *argbase, buf[PATH_MAX+1], *argp; Err bitreich.org 70
i+ char *path, *p, *argbase, buf[PATH_MAX+1], *argp, *realbase; Err bitreich.org 70
i int len, blen; Err bitreich.org 70
i Err bitreich.org 70
i if (!strcmp(el->e[3], "server")) { Err bitreich.org 70
i@@ -461,9 +461,11 @@ printelem(int fd, Elems *el, char *file, char *base, char *addr, char *port) Err bitreich.org 70
i snprintf(buf, sizeof(buf), "%s%.*s/%.*s", base, len, Err bitreich.org 70
i path, blen, el->e[2]); Err bitreich.org 70
i Err bitreich.org 70
i+ Err bitreich.org 70
i if ((path = realpath(buf, NULL)) && Err bitreich.org 70
i- !strncmp(base, path, strlen(base))) { Err bitreich.org 70
i- p = path + strlen(base); Err bitreich.org 70
i+ (realbase = realpath(base, NULL)) && Err bitreich.org 70
i+ !strncmp(realbase, path, strlen(realbase))) { Err bitreich.org 70
i+ p = path + strlen(realbase); Err bitreich.org 70
i Err bitreich.org 70
i /* Err bitreich.org 70
i * Do not forget to readd arguments which were Err bitreich.org 70
i@@ -476,6 +478,7 @@ printelem(int fd, Elems *el, char *file, char *base, char *addr, char *port) Err bitreich.org 70
i Err bitreich.org 70
i free(el->e[2]); Err bitreich.org 70
i el->e[2] = argp; Err bitreich.org 70
i+ free(realbase); Err bitreich.org 70
i } Err bitreich.org 70
i free(path); Err bitreich.org 70
i } Err bitreich.org 70
.
Response:
text/plain