diff --git a/swift/common/wsgi.py b/swift/common/wsgi.py index e8ef95f4a6..272f53ac1c 100644 --- a/swift/common/wsgi.py +++ b/swift/common/wsgi.py @@ -329,14 +329,16 @@ def make_pre_authed_env(env, method=None, path=None, agent='Swift', newenv = {} for name in ('eventlet.posthooks', 'HTTP_USER_AGENT', 'HTTP_HOST', 'PATH_INFO', 'QUERY_STRING', 'REMOTE_USER', 'REQUEST_METHOD', - 'SERVER_NAME', 'SERVER_PORT', 'SERVER_PROTOCOL', - 'swift.cache', 'swift.source', 'swift.trans_id'): + 'SCRIPT_NAME', 'SERVER_NAME', 'SERVER_PORT', + 'SERVER_PROTOCOL', 'swift.cache', 'swift.source', + 'swift.trans_id'): if name in env: newenv[name] = env[name] if method: newenv['REQUEST_METHOD'] = method if path: newenv['PATH_INFO'] = path + newenv['SCRIPT_NAME'] = '' if query_string is not None: newenv['QUERY_STRING'] = query_string if agent: @@ -348,4 +350,6 @@ def make_pre_authed_env(env, method=None, path=None, agent='Swift', newenv['swift.authorize_override'] = True newenv['REMOTE_USER'] = '.wsgi.pre_authed' newenv['wsgi.input'] = StringIO('') + if 'SCRIPT_NAME' not in newenv: + newenv['SCRIPT_NAME'] = '' return newenv diff --git a/test/unit/common/test_wsgi.py b/test/unit/common/test_wsgi.py index b27f9b5215..4884104371 100644 --- a/test/unit/common/test_wsgi.py +++ b/test/unit/common/test_wsgi.py @@ -223,5 +223,20 @@ class TestWSGI(unittest.TestCase): {'QUERY_STRING': 'original'}, 'GET', 'path', 'the body') self.assertEquals(r.body, 'the body') + def test_pre_auth_creates_script_name(self): + e = wsgi.make_pre_authed_env({}) + self.assertTrue('SCRIPT_NAME' in e) + + def test_pre_auth_copies_script_name(self): + e = wsgi.make_pre_authed_env({'SCRIPT_NAME': '/script_name'}) + self.assertEquals(e['SCRIPT_NAME'], '/script_name') + + def test_pre_auth_copies_script_name_unless_path_overridden(self): + e = wsgi.make_pre_authed_env({'SCRIPT_NAME': '/script_name'}, + path='/override') + self.assertEquals(e['SCRIPT_NAME'], '') + self.assertEquals(e['PATH_INFO'], '/override') + + if __name__ == '__main__': unittest.main()