call[fs]cgi: Fixed bug-fix bug.
[ashd.git] / src / callfcgi.c
index a6d3945..27c9c5e 100644 (file)
@@ -441,14 +441,19 @@ static char *absolutify(char *file)
 static void mkcgienv(struct hthead *req, struct charbuf *dst)
 {
     int i;
-    char *url, *qp, *h, *p;
+    char *url, *unq, *qp, *h, *p;
     
     bufaddenv(dst, "SERVER_SOFTWARE", "ashd/%s", VERSION);
     bufaddenv(dst, "GATEWAY_INTERFACE", "CGI/1.1");
     bufaddenv(dst, "SERVER_PROTOCOL", "%s", req->ver);
     bufaddenv(dst, "REQUEST_METHOD", "%s", req->method);
     bufaddenv(dst, "REQUEST_URI", "%s", req->url);
-    bufaddenv(dst, "PATH_INFO", req->rest);
+    if((unq = unquoteurl(req->rest)) != NULL) {
+       bufaddenv(dst, "PATH_INFO", unq);
+       free(unq);
+    } else {
+       bufaddenv(dst, "PATH_INFO", req->rest);
+    }
     url = sstrdup(req->url);
     if((qp = strchr(url, '?')) != NULL)
        *(qp++) = 0;
@@ -461,6 +466,7 @@ static void mkcgienv(struct hthead *req, struct charbuf *dst)
        bufaddenv(dst, "SCRIPT_NAME", "%s", url);
     }
     bufaddenv(dst, "QUERY_STRING", "%s", qp?qp:"");
+    free(url);
     if((h = getheader(req, "Host")) != NULL)
        bufaddenv(dst, "SERVER_NAME", "%s", h);
     if((h = getheader(req, "X-Ash-Server-Port")) != NULL)
@@ -477,8 +483,11 @@ static void mkcgienv(struct hthead *req, struct charbuf *dst)
        bufaddenv(dst, "CONTENT_LENGTH", "%s", h);
     else
        bufaddenv(dst, "CONTENT_LENGTH", "0");
-    if((h = getheader(req, "X-Ash-File")) != NULL)
-       bufaddenv(dst, "SCRIPT_FILENAME", "%s", absolutify(h));
+    if((h = getheader(req, "X-Ash-File")) != NULL) {
+       h = absolutify(h);
+       bufaddenv(dst, "SCRIPT_FILENAME", "%s", h);
+       free(h);
+    }
     for(i = 0; i < req->noheaders; i++) {
        h = sprintf2("HTTP_%s", req->headers[i][0]);
        for(p = h; *p; p++) {