From 80ef6eecad7b42dffdb38fa510d71ebe3a012581 Mon Sep 17 00:00:00 2001 From: Allan Saddi Date: Tue, 22 Jul 2008 07:43:45 -0700 Subject: Attempt to deduce missing PATH_INFO and/or QUERY_STRING from REQUEST_URI, if present. --- ChangeLog | 5 +++++ flup/server/ajp_base.py | 7 +++++-- flup/server/fcgi_base.py | 14 ++++++++++---- flup/server/scgi_base.py | 14 ++++++++++---- 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 + + * 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 * 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' -- cgit v1.2.1