X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fcallcgi.c;h=10bb87c9af47e6223dc35fd237a40fad51d2d98b;hb=f0a758cc8c1337606a392db67e63cec6601d2730;hp=84d4c6916db069b8bd4e7ea6d181960c505f7928;hpb=8626e489ae471e4842aecef363bfb9e8b3eaa246;p=ashd.git diff --git a/src/callcgi.c b/src/callcgi.c index 84d4c69..10bb87c 100644 --- a/src/callcgi.c +++ b/src/callcgi.c @@ -66,7 +66,7 @@ static char *absolutify(char *file) static void forkchild(int inpath, char *prog, char *file, char *method, char *url, char *rest, int *infd, int *outfd) { int i; - char *qp, **env; + char *qp, **env, *name; int inp[2], outp[2]; pid_t pid; @@ -90,15 +90,23 @@ static void forkchild(int inpath, char *prog, char *file, char *method, char *ur if(getenv("HTTP_VERSION")) putenv(sprintf2("SERVER_PROTOCOL=%s", getenv("HTTP_VERSION"))); putenv(sprintf2("REQUEST_METHOD=%s", method)); - putenv(sprintf2("PATH_INFO=%s", rest)); - putenv(sprintf2("SCRIPT_NAME=%s", url)); + putenv(sprintf2("PATH_INFO=/%s", rest)); + name = url; + /* XXX: This is an ugly hack (I think), but though I can think + * of several alternatives, none seem to be better. */ + if(*rest && (strlen(url) > strlen(rest)) && + !strcmp(rest, url + strlen(url) - strlen(rest)) && + (url[strlen(url) - strlen(rest) - 1] == '/')) { + name = sprintf2("%.*s", (int)(strlen(url) - strlen(rest) - 1), url); + } + putenv(sprintf2("SCRIPT_NAME=%s", name)); putenv(sprintf2("QUERY_STRING=%s", qp?qp:"")); if(getenv("REQ_HOST")) putenv(sprintf2("SERVER_NAME=%s", getenv("REQ_HOST"))); if(getenv("REQ_X_ASH_SERVER_PORT")) putenv(sprintf2("SERVER_PORT=%s", getenv("REQ_X_ASH_SERVER_PORT"))); if(getenv("REQ_X_ASH_PROTOCOL") && !strcmp(getenv("REQ_X_ASH_PROTOCOL"), "https")) - putenv("HTTPS=ON"); + putenv("HTTPS=on"); if(getenv("REQ_X_ASH_ADDRESS")) putenv(sprintf2("REMOTE_ADDR=%s", getenv("REQ_X_ASH_ADDRESS"))); if(getenv("REQ_CONTENT_TYPE"))