pass query string to the gopher selector too - gopherproxy-c - Gopher HTTP proxy in C (CGI)
(HTM) git clone git://git.codemadness.org/gopherproxy-c
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 1d29587a28d81e13a3a7f4f3712dd408ce5726e0
(DIR) parent 78efc56f91b0956fe6e2dcc7919a4dcd64dfe66a
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 26 Feb 2023 16:11:26 +0100
pass query string to the gopher selector too
This allows path?something which is useful in CGI programs.
Diffstat:
M gopherproxy.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
---
(DIR) diff --git a/gopherproxy.c b/gopherproxy.c
@@ -181,7 +181,7 @@ typestr(int c)
}
void
-servefile(const char *server, const char *port, const char *path)
+servefile(const char *server, const char *port, const char *path, const char *query)
{
char buf[1024];
int r, w, fd;
@@ -192,7 +192,7 @@ servefile(const char *server, const char *port, const char *path)
if (pledge("stdio", NULL) == -1)
die(500, "pledge: %s\n", strerror(errno));
- if ((w = dprintf(fd, "%s\r\n", path)) == -1)
+ if ((w = dprintf(fd, "%s%s%s\r\n", path, query[0] ? "?" : "", query)) == -1)
die(500, "dprintf: %s\n", strerror(errno));
while ((r = read(fd, buf, sizeof(buf))) > 0) {
@@ -212,7 +212,7 @@ servefile(const char *server, const char *port, const char *path)
}
void
-servedir(const char *server, const char *port, const char *path, const char *param)
+servedir(const char *server, const char *port, const char *path, const char *query, const char *param)
{
struct visited v;
FILE *fp;
@@ -227,9 +227,9 @@ servedir(const char *server, const char *port, const char *path, const char *par
die(500, "pledge: %s\n", strerror(errno));
if (param[0])
- r = dprintf(fd, "%s\t%s\r\n", path, param);
+ r = dprintf(fd, "%s%s%s\t%s\r\n", path, query[0] ? "?" : "", query, param);
else
- r = dprintf(fd, "%s\r\n", path);
+ r = dprintf(fd, "%s%s%s\r\n", path, query[0] ? "?" : "", query);
if (r == -1)
die(500, "write: %s\n", strerror(errno));
@@ -653,11 +653,11 @@ main(void)
break; /* handled below */
case '0':
dprintf(1, "Content-Type: text/plain; charset=utf-8\r\n\r\n");
- servefile(u.host, u.port, path);
+ servefile(u.host, u.port, path, u.query);
return 0;
case 'g':
dprintf(1, "Content-Type: image/gif\r\n\r\n");
- servefile(u.host, u.port, path);
+ servefile(u.host, u.port, path, u.query);
return 0;
case 'I':
/* try to set Content-Type based on extension */
@@ -671,18 +671,18 @@ main(void)
dprintf(1, "Content-Type: image/gif\r\n");
}
write(1, "\r\n", 2);
- servefile(u.host, u.port, path);
+ servefile(u.host, u.port, path, u.query);
return 0;
case '9':
/* try to detect filename */
if ((p = strrchr(path, '/')))
dprintf(1, "Content-Disposition: attachment; filename=\"%s\"\r\n", p + 1);
dprintf(1, "Content-Type: application/octet-stream\r\n\r\n");
- servefile(u.host, u.port, path);
+ servefile(u.host, u.port, path, u.query);
return 0;
default:
write(1, "\r\n", 2);
- servefile(u.host, u.port, path);
+ servefile(u.host, u.port, path, u.query);
return 0;
}
}
@@ -721,7 +721,7 @@ main(void)
if (query[0]) {
if (_type != '7')
param[0] = '\0';
- servedir(u.host, u.port, path, param);
+ servedir(u.host, u.port, path, u.query, param);
}
fputs("</pre>\n</body>\n</html>\n", stdout);