iAdding support for index.cgi and index.dcgi. - 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 244ea008836ed16030d843c157877c4aa8e71a08 /scm/geomyidae/commit/244ea008836ed16030d843c157877c4aa8e71a08.gph bitreich.org 70 1parent f4302a23294447764096dbe4ad39bcd67dfe53b6 /scm/geomyidae/commit/f4302a23294447764096dbe4ad39bcd67dfe53b6.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Sat, 26 Nov 2016 22:54:33 +0100 Err bitreich.org 70 i Err bitreich.org 70 iAdding support for index.cgi and index.dcgi. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M main.c | 25 ++++++++++++++++++++----- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 20 insertions(+), 5 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@@ -44,7 +44,7 @@ char *logfile = nil; Err bitreich.org 70 i char *argv0; Err bitreich.org 70 i char *stdbase = "/var/gopher"; Err bitreich.org 70 i char *stdport = "70"; Err bitreich.org 70 i-char *indexf = "/index.gph"; Err bitreich.org 70 i+char *indexf[] = {"/index.gph", "/index.cgi", "/index.dcgi"}; Err bitreich.org 70 i char *err = "3Sorry, but the requested token '%s' could not be found.\tErr" Err bitreich.org 70 i "\tlocalhost\t70\r\n.\r\n\r\n"; Err bitreich.org 70 i char *htredir = "\n" Err bitreich.org 70 i@@ -131,7 +131,7 @@ handlerequest(int sock, char *base, char *ohost, char *port, char *clienth, Err bitreich.org 70 i { Err bitreich.org 70 i struct stat dir; Err bitreich.org 70 i char recvc[1025], recvb[1025], path[1025], *args, *sear, *c; Err bitreich.org 70 i- int len, fd; Err bitreich.org 70 i+ int len, fd, i; Err bitreich.org 70 i filetype *type; Err bitreich.org 70 i Err bitreich.org 70 i memset(&dir, 0, sizeof(dir)); Err bitreich.org 70 i@@ -170,11 +170,26 @@ handlerequest(int sock, char *base, char *ohost, char *port, char *clienth, Err bitreich.org 70 i *args++ = '\0'; Err bitreich.org 70 i Err bitreich.org 70 i securepath(recvb, len - 2); Err bitreich.org 70 i+ if(strlen(recvb) == 0) { Err bitreich.org 70 i+ recvb[0] = '/'; Err bitreich.org 70 i+ recvb[1] = '\0'; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i snprintf(path, sizeof(path), "%s%s", base, recvb); Err bitreich.org 70 i- if(stat(path, &dir) != -1 && S_ISDIR(dir.st_mode)) Err bitreich.org 70 i- strncat(path, indexf, sizeof(path) - strlen(path)); Err bitreich.org 70 i Err bitreich.org 70 i- fd = open(path, O_RDONLY); Err bitreich.org 70 i+ fd = -1; Err bitreich.org 70 i+ if(stat(path, &dir) != -1 && S_ISDIR(dir.st_mode)) { Err bitreich.org 70 i+ for(i = 0; i < sizeof(indexf)/sizeof(indexf)[0]; i++) { Err bitreich.org 70 i+ strncat(path, indexf[i], sizeof(path) - strlen(path)); 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+ path[strlen(path)-strlen(indexf[i])] = '\0'; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ fd = open(path, O_RDONLY); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i if(fd >= 0) { Err bitreich.org 70 i close(fd); Err bitreich.org 70 i if(loglvl & FILES) Err bitreich.org 70 .