version 0.2.1
[fms.git] / libs / shttpd / cgi.c
index 122dee3..925b61a 100644 (file)
@@ -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);