Introduction
Introduction Statistics Contact Development Disclaimer Help
We do not need the realpath. Only serve in basepath. - geomyidae - a small C-ba…
git clone git://git.codemadness.org/geomyidae
Log
Files
Refs
README
LICENSE
---
commit 9884d6e830dba5751c5363086e74b5f9a9c1691d
parent cdf260787abd32506e151744c411d0e1057757d8
Author: Christoph Lohmann <[email protected]>
Date: Wed, 23 Aug 2023 14:49:23 +0200
We do not need the realpath. Only serve in basepath.
Diffstat:
M main.c | 49 +++++++++++++----------------…
1 file changed, 20 insertions(+), 29 deletions(-)
---
diff --git a/main.c b/main.c
@@ -138,7 +138,7 @@ handlerequest(int sock, char *req, int rlen, char *base, ch…
char *serverp, int nocgi, int istls)
{
struct stat dir;
- char recvc[1025], recvb[1025], path[PATH_MAX+1], rpath[PATH_MAX+1], ar…
+ char recvc[1025], recvb[1025], path[PATH_MAX+1], args[1025],
argsc[1025], traverse[1025], traversec[1025],
*sear, *sep, *recvbp, *c;
int len = 0, fd, i, maxrecv, pathfallthrough = 0;
@@ -190,15 +190,13 @@ handlerequest(int sock, char *req, int rlen, char *base, …
if (strchr(recvb, '/'))
goto dothegopher;
if (snprintf(path, sizeof(path), "%s/%s", base, recvb) <= size…
- if (realpath(path, (char *)rpath)) {
- if (stat(rpath, &dir) == 0) {
- if (loglvl & FILES)
- logentry(clienth, clientp, rec…
+ if (stat(path, &dir) == 0) {
+ if (loglvl & FILES)
+ logentry(clienth, clientp, recvc, "com…
- handlecgi(sock, rpath, port, base, "",…
- clienth, serverh, istls, req, …
- return;
- }
+ handlecgi(sock, path, port, base, "", "", ohos…
+ clienth, serverh, istls, req, "");
+ return;
}
}
}
@@ -325,14 +323,7 @@ dothegopher:
}
}
- if (realpath(path, (char *)&rpath) == NULL) {
- dprintf(sock, notfounderr, recvc);
- if (loglvl & ERRORS)
- logentry(clienth, clientp, recvc, "not found");
- return;
- }
-
- if (stat(rpath, &dir) != -1) {
+ if (stat(path, &dir) != -1) {
/*
* If sticky bit is set, only serve if this is encrypted.
*/
@@ -348,9 +339,9 @@ dothegopher:
if (S_ISDIR(dir.st_mode)) {
for (i = 0; i < sizeof(indexf)/sizeof(indexf[0]);
i++) {
- len = strlen(rpath);
- if (len + strlen(indexf[i]) + ((rpath[len-1] =…
- >= sizeof(rpath)) {
+ len = strlen(path);
+ if (len + strlen(indexf[i]) + ((path[len-1] ==…
+ >= sizeof(path)) {
if (loglvl & ERRORS) {
logentry(clienth, clientp,
recvc,
@@ -369,18 +360,18 @@ dothegopher:
* strncat of one char static char array
* is an overflow.
*/
- if (rpath[len-1] != '/')
- strcat(rpath, "/");
- strcat(rpath, indexf[i]);
- fd = open(rpath, O_RDONLY);
+ if (path[len-1] != '/')
+ strcat(path, "/");
+ strcat(path, indexf[i]);
+ fd = open(path, O_RDONLY);
if (fd >= 0)
break;
/* Not found. Clear path from indexf. */
- rpath[len] = '\0';
+ path[len] = '\0';
}
} else {
- fd = open(rpath, O_RDONLY);
+ fd = open(path, O_RDONLY);
if (fd < 0) {
dprintf(sock, notfounderr, recvc);
if (loglvl & ERRORS) {
@@ -396,9 +387,9 @@ dothegopher:
if (fd >= 0) {
close(fd);
- c = strrchr(rpath, '/');
+ c = strrchr(path, '/');
if (c == NULL)
- c = rpath;
+ c = path;
type = gettype(c);
/*
@@ -880,7 +871,7 @@ main(int argc, char *argv[])
#ifdef __OpenBSD__
char promises[31]; /* check the size needed in the fork too */
- snprintf(promises, sizeof(promises), "rpath inet stdio proc exec %s",
+ snprintf(promises, sizeof(promises), "inet stdio proc exec %s",
revlookup ? "dns" : "");
if (pledge(promises, NULL) == -1) {
perror("pledge");
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.