Fix a problem with sticky cookie domain matching.
Just like everything else cookie-related in the standard library, cookielib.domain_match is fucked up.
This commit is contained in:
parent
45f4768a5c
commit
8fbba59e8d
|
@ -759,6 +759,13 @@ class StickyCookieState:
|
||||||
m["path"] or "/"
|
m["path"] or "/"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def domain_match(self, a, b):
|
||||||
|
if cookielib.domain_match(a, b):
|
||||||
|
return True
|
||||||
|
elif cookielib.domain_match(a, b.strip(".")):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def handle_response(self, f):
|
def handle_response(self, f):
|
||||||
for i in f.response.headers["set-cookie"]:
|
for i in f.response.headers["set-cookie"]:
|
||||||
# FIXME: We now know that Cookie.py screws up some cookies with
|
# FIXME: We now know that Cookie.py screws up some cookies with
|
||||||
|
@ -766,22 +773,23 @@ class StickyCookieState:
|
||||||
c = Cookie.SimpleCookie(str(i))
|
c = Cookie.SimpleCookie(str(i))
|
||||||
m = c.values()[0]
|
m = c.values()[0]
|
||||||
k = self.ckey(m, f)
|
k = self.ckey(m, f)
|
||||||
if cookielib.domain_match(f.request.host, k[0]):
|
if self.domain_match(f.request.host, k[0]):
|
||||||
self.jar[self.ckey(m, f)] = m
|
self.jar[self.ckey(m, f)] = m
|
||||||
|
|
||||||
def handle_request(self, f):
|
def handle_request(self, f):
|
||||||
|
l = []
|
||||||
if f.match(self.flt):
|
if f.match(self.flt):
|
||||||
for i in self.jar.keys():
|
for i in self.jar.keys():
|
||||||
match = [
|
match = [
|
||||||
cookielib.domain_match(i[0], f.request.host),
|
self.domain_match(f.request.host, i[0]),
|
||||||
f.request.port == i[1],
|
f.request.port == i[1],
|
||||||
f.request.path.startswith(i[2])
|
f.request.path.startswith(i[2])
|
||||||
]
|
]
|
||||||
if all(match):
|
if all(match):
|
||||||
l = f.request.headers["cookie"]
|
|
||||||
f.request.stickycookie = True
|
|
||||||
l.append(self.jar[i].output(header="").strip())
|
l.append(self.jar[i].output(header="").strip())
|
||||||
f.request.headers["cookie"] = l
|
if l:
|
||||||
|
f.request.stickycookie = True
|
||||||
|
f.request.headers["cookie"] = l
|
||||||
|
|
||||||
|
|
||||||
class StickyAuthState:
|
class StickyAuthState:
|
||||||
|
|
Loading…
Reference in New Issue