strip / at the end of the base path - geomyidae - A small C-based gopherd. HTML git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 2760fe803a9ea8574dd7fa57b17708f283b5dbe0 DIR parent baf4df6c6481209962d0fa861dcbb6b9d69467a6 HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Thu, 13 Sep 2018 20:42:13 +0200 strip / at the end of the base path this fixes relative path handling when using: geomyidae -b /var/gopher/ (added slash). Signed-off-by: Christoph Lohmann <20h@r-36.net> Diffstat: M main.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --- DIR diff --git a/main.c b/main.c @@ -44,7 +44,7 @@ int revlookup = 1; char *logfile = NULL; char *argv0; -char *stdbase = "/var/gopher"; +char stdbase[] = "/var/gopher"; char *stdport = "70"; char *indexf[] = {"/index.gph", "/index.cgi", "/index.dcgi", "/index.bin"}; char *nocgierr = "3Sorry, execution of the token '%s' was requested, but this " @@ -374,7 +374,7 @@ main(int argc, char *argv[]) socklen_t cltlen; int sock, dofork, inetf, usechroot, nocgi; char *port, *base, clienth[NI_MAXHOST], clientp[NI_MAXSERV]; - char *user, *group, *bindip, *ohost, *sport; + char *user, *group, *bindip, *ohost, *sport, *p; struct passwd *us; struct group *gr; @@ -538,6 +538,10 @@ main(int argc, char *argv[]) return 1; } + /* strip / at the end, except if it is "/" */ + for (p = base + strlen(base); p > base + 1 && p[-1] == '/'; --p) + p[-1] = '\0'; + if (dropprivileges(gr, us) < 0) { perror("dropprivileges"); close(listfd);