python: Remove HTTP_CONTENT_{TYPE,LENGTH} from WSGI environment.
authorFredrik Tolf <fredrik@dolda2000.com>
Tue, 28 Aug 2012 00:59:57 +0000 (02:59 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Tue, 28 Aug 2012 00:59:57 +0000 (02:59 +0200)
Although not strictly required by the CGI specification, many programs
and libraries seem to require it.

python/ashd-wsgi
python3/ashd-wsgi3

index 5e1db09..f20d6ca 100755 (executable)
@@ -130,8 +130,14 @@ def dowsgi(req):
     if "X-Ash-Server-Port" in req: env["SERVER_PORT"] = req["X-Ash-Server-Port"]
     if "X-Ash-Protocol" in req and req["X-Ash-Protocol"] == "https": env["HTTPS"] = "on"
     if "X-Ash-Address" in req: env["REMOTE_ADDR"] = req["X-Ash-Address"]
-    if "Content-Type" in req: env["CONTENT_TYPE"] = req["Content-Type"]
-    if "Content-Length" in req: env["CONTENT_LENGTH"] = req["Content-Length"]
+    if "Content-Type" in req:
+        env["CONTENT_TYPE"] = req["Content-Type"]
+        # The CGI specification does not strictly require this, but
+        # many actualy programs and libraries seem to.
+        del env["HTTP_CONTENT_TYPE"]
+    if "Content-Length" in req:
+        env["CONTENT_LENGTH"] = req["Content-Length"]
+        del env["HTTP_CONTENT_TYPE"]
     if "X-Ash-File" in req: env["SCRIPT_FILENAME"] = absolutify(req["X-Ash-File"])
     if "X-Ash-Protocol" in req: env["wsgi.url_scheme"] = req["X-Ash-Protocol"]
     env["wsgi.input"] = req.sk
index cdabec3..dcf1613 100755 (executable)
@@ -135,6 +135,10 @@ def dowsgi(req):
                      ("HTTP_X_ASH_ADDRESS", "REMOTE_ADDR"), ("HTTP_CONTENT_TYPE", "CONTENT_TYPE"),
                      ("HTTP_CONTENT_LENGTH", "CONTENT_LENGTH"), ("HTTP_X_ASH_PROTOCOL", "wsgi.url_scheme")]:
         if src in env: env[tgt] = env[src]
+    for key in ["HTTP_CONTENT_TYPE", "HTTP_CONTENT_LENGTH"]:
+        # The CGI specification does not strictly require this, but
+        # many actualy programs and libraries seem to.
+        if key in env: del env[key]
     if "X-Ash-Protocol" in req and req["X-Ash-Protocol"] == b"https": env["HTTPS"] = "on"
     if "X-Ash-File" in req: env["SCRIPT_FILENAME"] = absolutify(req["X-Ash-File"].decode(locale.getpreferredencoding()))
     env["wsgi.input"] = req.sk