Spit out error in case of improperly URI escaping with hURL: - geomyidae - a sm… | |
git clone git://git.codemadness.org/geomyidae | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 4140d67a13c6888267e975e8bf60bfe91f3d21a4 | |
parent 666c891cb2fa5ddd436e1cd0662f0c3e3d2ed142 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Sat, 10 Feb 2024 12:43:48 +0100 | |
Spit out error in case of improperly URI escaping with hURL: | |
Thanks pazzo for giving me the hint! | |
Diffstat: | |
M main.c | 62 ++++++++++++++++++++++-------… | |
1 file changed, 44 insertions(+), 18 deletions(-) | |
--- | |
diff --git a/main.c b/main.c | |
@@ -61,31 +61,37 @@ char *argv0; | |
char stdbase[] = "/var/gopher"; | |
char *stdport = "70"; | |
char *indexf[] = {"index.gph", "index.cgi", "index.dcgi", "index.bob", "index.… | |
+ | |
char *nocgierr = "3Sorry, execution of the token '%s' was requested, but this " | |
"is disabled in the server configuration.\tErr" | |
"\tlocalhost\t70\r\n"; | |
+ | |
char *notfounderr = "3Sorry, but the requested token '%s' could not be found.\… | |
"\tlocalhost\t70\r\n"; | |
+ | |
char *toolongerr = "3Sorry, but the requested token '%s' is a too long path.\t… | |
"\tlocalhost\t70\r\n"; | |
+ | |
char *tlserr = "3Sorry, but the requested token '%s' requires an encrypted con… | |
"\tlocalhost\t70\r\n"; | |
-char *htredir = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" | |
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//E… | |
- " \"DTD/xhtml-transitional.dtd\">\n" | |
- "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\">\n" | |
- " <head>\n" | |
- " <title>gopher redirect</title>\n" | |
- "\n" | |
- " <meta http-equiv=\"Refresh\" content=\"1;url=%s\" />\n" | |
- " </head>\n" | |
- " <body>\n" | |
- " This page is for redirecting you to: <a href=\"%s\">%s</a… | |
- " </body>\n" | |
- "</html>\n"; | |
-char *selinval ="3Happy helping ☃ here: " | |
- "Sorry, your selector does contains '..'. " | |
- "That's illegal here.\tErr\tlocalhost\t70\r\n.\r\n\r\n"; | |
+ | |
+/* TODO: Transform gopherspace to not need this anymore. See sacc(1). */ | |
+char *htredir = "<!DOCTYPE html>\n" | |
+ "<html><head><title>gopher redirect</title>\n" | |
+ "<meta http-equiv=\"refresh\" content=\"1;url=%s\" />\n" | |
+ "</head><body>\n" | |
+ "Please consider using native gopher 'w' type.\n" | |
+ "HTML is insecure and bloated.<br/>\n" | |
+ "You will be redirected to: <a href=\"%s\">%s</a>.\n" | |
+ "</body></html>\n"; | |
+ | |
+char *htescape = "3Happy helping ☃ here: " | |
+ "Sorry, your URI was not properly escaped." | |
+ "\tErr\tlocalhost\t70\r\n.\r\n\r\n"; | |
+ | |
+char *selinval = "3Happy helping ☃ here: " | |
+ "Sorry, your selector does contains '..'. " | |
+ "That's illegal here.\tErr\tlocalhost\t70\r\n.\r\n\r\n"; | |
int | |
dropprivileges(struct group *gr, struct passwd *pw) | |
@@ -186,7 +192,7 @@ handlerequest(int sock, char *req, int rlen, char *base, ch… | |
* mode. | |
*/ | |
if (!nocgi && recvb[0] != '/' && (c = strchr(recvb, ' '))) { | |
- *c++ = '\0'; | |
+ *c = '\0'; | |
if (strchr(recvb, '/')) | |
goto dothegopher; | |
if (snprintf(path, sizeof(path), "%s/%s", base, recvb) <= size… | |
@@ -199,8 +205,9 @@ handlerequest(int sock, char *req, int rlen, char *base, ch… | |
return; | |
} | |
} | |
- } | |
dothegopher: | |
+ *c = ' '; | |
+ } | |
/* Do not allow requests including "..". */ | |
if (strstr(recvb, "..")) { | |
@@ -237,7 +244,26 @@ dothegopher: | |
memmove(recvc, recvb, rlen+1); | |
/* Redirect to HTML redirecting to the specified URI. */ | |
+ /* TODO: Fix gopherspace to not require this. */ | |
if (!strncmp(recvb, "URL:", 4)) { | |
+ for (i = 4; i < sizeof(recvb)-1; i++) { | |
+ switch (recvb[i]) { | |
+ case '\0': | |
+ i = sizeof(recvb); | |
+ break; | |
+ case '"': | |
+ case '&': | |
+ case '>': | |
+ case '<': | |
+ case ' ': | |
+ case '\'': | |
+ case '\\': | |
+ write(sock, htescape, strlen(htescape)); | |
+ if (loglvl & ERRORS) | |
+ logentry(clienth, clientp, recvc, "Une… | |
+ return; | |
+ } | |
+ } | |
len = snprintf(path, sizeof(path), htredir, | |
recvb + 4, recvb + 4, recvb + 4); | |
if (len > sizeof(path)) |