[z3-checkins] r34690 - z3/deliverance/trunk/deliverance

ianb at codespeak.net ianb at codespeak.net
Thu Nov 16 19:37:21 CET 2006


Author: ianb
Date: Thu Nov 16 19:37:17 2006
New Revision: 34690

Modified:
   z3/deliverance/trunk/deliverance/relocateresponse.py
   z3/deliverance/trunk/deliverance/test_relocate.txt
Log:
Added cookie domain rewriting

Modified: z3/deliverance/trunk/deliverance/relocateresponse.py
==============================================================================
--- z3/deliverance/trunk/deliverance/relocateresponse.py	(original)
+++ z3/deliverance/trunk/deliverance/relocateresponse.py	Thu Nov 16 19:37:17 2006
@@ -22,6 +22,16 @@
     for name, value in headers:
         if name.lower() == 'location':
             value = relocate_href(value, base_href, old_href, new_href)
+        if name.lower() == 'set-cookie':
+            if 'domain' in value:
+                # We have to rewrite the domain
+                old_domain = urlparse.urlsplit(old_href)[1].split(':')[0]
+                new_domain = urlparse.urlsplit(new_href)[1].split(':')[0]
+                def repl(match):
+                    return match.group(1)+new_domain
+                value = re.sub(
+                    r'(domain=[^ ",]*)%s' % re.escape(old_domain),
+                    repl, value)
         new_headers.append((name, value))
     return new_headers
 

Modified: z3/deliverance/trunk/deliverance/test_relocate.txt
==============================================================================
--- z3/deliverance/trunk/deliverance/test_relocate.txt	(original)
+++ z3/deliverance/trunk/deliverance/test_relocate.txt	Thu Nov 16 19:37:17 2006
@@ -47,14 +47,23 @@
     >>> relocate_href('index.html', **kw)
     'https://new/base/index.html'
 
-Now we look at header rewriting.  Note that Location is rewritten, but
-other headers are not.  (Set-Cookie should also get some rewriting,
-but does not yet)::
+Now we look at header rewriting.  Note that Location and Set-Cookie is
+rewritten, but other headers are not::
 
-    >>> relocate_headers([('X-Unknown', 'http://old'),
-    ...                   ('Location', 'http://old/foo/bar')],
-    ...                  **kw)
-    [('X-Unknown', 'http://old'), ('Location', 'https://new/foo/bar')]
+    >>> relocate_headers(
+    ...     [('X-Unknown', 'http://old'),
+    ...      ('Location', 'http://old/foo/bar'),
+    ...      ('Set-Cookie', 'foo=bar; domain=old')],
+    ...     **kw)
+    [('X-Unknown', 'http://old'), ('Location', 'https://new/foo/bar'), ('Set-Cookie', 'foo=bar; domain=new')]
+
+We'll even rewrite wildcard domains, though that might not be a good
+idea::
+
+    >>> relocate_headers(
+    ...     [('Set-Cookie', 'foo=bar; domain=*.old')],
+    ...     **kw)
+    [('Set-Cookie', 'foo=bar; domain=*.new')]
 
 But the location header won't be rewritten if it points to a
 third-party site::


More information about the z3-checkins mailing list