X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=libs%2Fshttpd%2Fcgi.c;fp=libs%2Fshttpd%2Fcgi.c;h=925b61a9fe48195e8a4b90d415a6922a3e56d213;hb=1dee4e3cd008a27789bbce05b0eb47b0eb5d121a;hp=122dee3125ad76163b183c95cd4aeebefb4085fd;hpb=3dc3ac3cfe10b7196a7977e9c041c29fa141c35e;p=fms.git diff --git a/libs/shttpd/cgi.c b/libs/shttpd/cgi.c index 122dee3..925b61a 100644 --- a/libs/shttpd/cgi.c +++ b/libs/shttpd/cgi.c @@ -145,7 +145,7 @@ prepare_environment(const struct conn *c, const char *prog, struct env_block *blk) { const struct headers *h = &c->ch; - const char *s; + const char *s, *root = c->ctx->options[OPT_ROOT]; size_t len; blk->len = blk->nvars = 0; @@ -155,14 +155,14 @@ prepare_environment(const struct conn *c, const char *prog, addenv(blk, "%s", "SERVER_PROTOCOL=HTTP/1.1"); addenv(blk, "%s", "REDIRECT_STATUS=200"); /* PHP */ addenv(blk, "SERVER_PORT=%d", c->loc_port); - addenv(blk, "SERVER_NAME=%s", c->ctx->auth_realm); - addenv(blk, "SERVER_ROOT=%s", c->ctx->document_root); - addenv(blk, "DOCUMENT_ROOT=%s", c->ctx->document_root); + addenv(blk, "SERVER_NAME=%s", c->ctx->options[OPT_AUTH_REALM]); + addenv(blk, "SERVER_ROOT=%s", root); + addenv(blk, "DOCUMENT_ROOT=%s", root); addenv(blk, "REQUEST_METHOD=%s", known_http_methods[c->method].ptr); addenv(blk, "REMOTE_ADDR=%s", inet_ntoa(c->sa.u.sin.sin_addr)); addenv(blk, "REMOTE_PORT=%hu", ntohs(c->sa.u.sin.sin_port)); addenv(blk, "REQUEST_URI=%s", c->uri); - addenv(blk, "SCRIPT_NAME=%s", prog + strlen(c->ctx->document_root)); + addenv(blk, "SCRIPT_NAME=%s", prog + strlen(root)); addenv(blk, "SCRIPT_FILENAME=%s", prog); /* PHP */ addenv(blk, "PATH_TRANSLATED=%s", prog); @@ -202,7 +202,7 @@ prepare_environment(const struct conn *c, const char *prog, } /* Add user-specified variables */ - s = c->ctx->cgi_vars; + s = c->ctx->options[OPT_CGI_ENVIRONMENT]; FOR_EACH_WORD_IN_LIST(s, len) addenv(blk, "%.*s", len, s); @@ -234,6 +234,7 @@ run_cgi(struct conn *c, const char *prog) int ret, pair[2]; prepare_environment(c, prog, &blk); + pair[0] = pair[1] = -1; /* CGI must be executed in its own directory */ (void) my_snprintf(dir, sizeof(dir), "%s", prog);