Fix cookie with Max-Age processing

When cookie has Max-Age set it tries to get expiration by adding
to a timestamp. Without this patch the timestamp would be set to
None and thus the addition of timestamp + max_age fails

https://pagure.io/freeipa/issue/6718

Reviewed-By: Simo Sorce <ssorce@redhat.com>
This commit is contained in:
Stanislav Laznicka
2017-03-02 09:11:34 +01:00
committed by Jan Cholasta
parent d1c5d92897
commit 24eeb4d6a3
2 changed files with 12 additions and 5 deletions

View File

@@ -759,9 +759,11 @@ class KerbTransport(SSLTransport):
session_cookie = None session_cookie = None
try: try:
for cookie in cookie_header: for cookie in cookie_header:
session_cookie = \ session_cookie = (
Cookie.get_named_cookie_from_string(cookie, COOKIE_NAME, Cookie.get_named_cookie_from_string(
request_url) cookie, COOKIE_NAME, request_url,
timestamp=datetime.datetime.utcnow())
)
if session_cookie is not None: if session_cookie is not None:
break break
except Exception as e: except Exception as e:
@@ -861,7 +863,9 @@ class RPCClient(Connectible):
# Search for the session cookie within the cookie string # Search for the session cookie within the cookie string
try: try:
session_cookie = Cookie.get_named_cookie_from_string(cookie_string, COOKIE_NAME) session_cookie = Cookie.get_named_cookie_from_string(
cookie_string, COOKIE_NAME,
timestamp=datetime.datetime.utcnow())
except Exception: except Exception:
return None return None

View File

@@ -322,7 +322,8 @@ class Cookie(object):
return cookies return cookies
@classmethod @classmethod
def get_named_cookie_from_string(cls, cookie_string, cookie_name, request_url=None): def get_named_cookie_from_string(cls, cookie_string, cookie_name,
request_url=None, timestamp=None):
''' '''
A cookie string may contain multiple cookies, parse the cookie A cookie string may contain multiple cookies, parse the cookie
string and return the last cookie in the string matching the string and return the last cookie in the string matching the
@@ -344,6 +345,8 @@ class Cookie(object):
if cookie.key == cookie_name: if cookie.key == cookie_name:
target_cookie = cookie target_cookie = cookie
if timestamp is not None:
target_cookie.timestamp = timestamp
if request_url is not None: if request_url is not None:
target_cookie.normalize(request_url) target_cookie.normalize(request_url)
return target_cookie return target_cookie