summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Saddi <allan@saddi.com>2008-07-22 07:43:45 -0700
committerAllan Saddi <allan@saddi.com>2008-07-22 07:43:45 -0700
commit80ef6eecad7b42dffdb38fa510d71ebe3a012581 (patch)
tree86b65c43996e3d74a394cf32445476ae39845f73
parentcbe792618a1e6b1aeddd8d751dbeefe6a981ba23 (diff)
downloadflup-80ef6eecad7b42dffdb38fa510d71ebe3a012581.tar.gz
Attempt to deduce missing PATH_INFO and/or QUERY_STRING from
REQUEST_URI, if present.
-rw-r--r--ChangeLog5
-rw-r--r--flup/server/ajp_base.py7
-rw-r--r--flup/server/fcgi_base.py14
-rw-r--r--flup/server/scgi_base.py14
4 files changed, 30 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 022312f..33c5cfb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-07-22 Allan Saddi <allan@saddi.com>
+
+ * Attempt to deduce missing PATH_INFO and/or QUERY_STRING from
+ REQUEST_URI, if present. Patch provided by Richard Davies.
+
2007-09-10 Allan Saddi <allan@saddi.com>
* Fix readline implementations so size argument is checked
diff --git a/flup/server/ajp_base.py b/flup/server/ajp_base.py
index b9dfa0f..fd560c2 100644
--- a/flup/server/ajp_base.py
+++ b/flup/server/ajp_base.py
@@ -924,8 +924,11 @@ class BaseAJPServer(object):
environ['PATH_INFO'] = value[len(scriptName):]
environ['SCRIPT_NAME'] = scriptName
- if not environ.has_key('QUERY_STRING'):
- environ['QUERY_STRING'] = ''
+ if not environ.has_key('QUERY_STRING') or not environ['QUERY_STRING']:
+ if environ.has_key['REQUEST_URI']:
+ environ['QUERY_STRING'] = environ['REQUEST_URI'].partition('?')[2]
+ else:
+ environ['QUERY_STRING'] = ''
def error(self, request):
"""
diff --git a/flup/server/fcgi_base.py b/flup/server/fcgi_base.py
index 2c68484..34c0fbd 100644
--- a/flup/server/fcgi_base.py
+++ b/flup/server/fcgi_base.py
@@ -1136,10 +1136,16 @@ class BaseFCGIServer(object):
"""Ensure certain values are present, if required by WSGI."""
if not environ.has_key('SCRIPT_NAME'):
environ['SCRIPT_NAME'] = ''
- if not environ.has_key('PATH_INFO'):
- environ['PATH_INFO'] = ''
- if not environ.has_key('QUERY_STRING'):
- environ['QUERY_STRING'] = ''
+ if not environ.has_key('PATH_INFO') or not environ['PATH_INFO']:
+ if environ.has_key('REQUEST_URI'):
+ environ['PATH_INFO'] = environ['REQUEST_URI'].partition('?')[0]
+ else:
+ environ['PATH_INFO'] = ''
+ if not environ.has_key('QUERY_STRING') or not environ['QUERY_STRING']:
+ if environ.has_key('REQUEST_URI'):
+ environ['QUERY_STRING'] = environ['REQUEST_URI'].partition('?')[2]
+ else:
+ environ['QUERY_STRING'] = ''
# If any of these are missing, it probably signifies a broken
# server...
diff --git a/flup/server/scgi_base.py b/flup/server/scgi_base.py
index 0bcb652..8c70ffb 100644
--- a/flup/server/scgi_base.py
+++ b/flup/server/scgi_base.py
@@ -473,8 +473,11 @@ class BaseSCGIServer(object):
def _sanitizeEnv(self, environ):
"""Fill-in/deduce missing values in environ."""
# Ensure QUERY_STRING exists
- if not environ.has_key('QUERY_STRING'):
- environ['QUERY_STRING'] = ''
+ if not environ.has_key('QUERY_STRING') or not environ['QUERY_STRING']:
+ if environ.has_key('REQUEST_URI'):
+ environ['QUERY_STRING'] = environ['REQUEST_URI'].partition('?')[2]
+ else:
+ environ['QUERY_STRING'] = ''
# Check WSGI_SCRIPT_NAME
scriptName = environ.get('WSGI_SCRIPT_NAME')
@@ -495,8 +498,11 @@ class BaseSCGIServer(object):
# Pull SCRIPT_NAME/PATH_INFO from environment, with empty defaults
if not environ.has_key('SCRIPT_NAME'):
environ['SCRIPT_INFO'] = ''
- if not environ.has_key('PATH_INFO'):
- environ['PATH_INFO'] = ''
+ if not environ.has_key('PATH_INFO') or not environ['PATH_INFO']:
+ if environ.has_key('REQUEST_URI'):
+ environ['PATH_INFO'] = environ['REQUEST_URI'].partition('?')[0]
+ else:
+ environ['PATH_INFO'] = ''
else:
# Configured scriptName
warnings.warn('Configured SCRIPT_NAME is deprecated\n'