From 67ce03e7396d63cdf6b16584b11ac29851a8231e Mon Sep 17 00:00:00 2001 From: Brad Pokorny Date: Wed, 2 Mar 2016 00:17:20 -0800 Subject: [PATCH] Fix token hashing with python 3 With python 3, hasher.update() must be called with byte encoding. Hashing without encoding first in python 3 results in this error: TypeError: Unicode-objects must be encoded before hashing Using byte encoding also works with python 2.7, so convert tokens to bytes before hashing regardless of python version. Change-Id: I837566c669565ed8c11dacbefc273dae3ff580bb Closes-Bug: #1552443 --- openstack_auth/tests/tests.py | 3 --- openstack_auth/user.py | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/openstack_auth/tests/tests.py b/openstack_auth/tests/tests.py index 10f67096..79f347e6 100644 --- a/openstack_auth/tests/tests.py +++ b/openstack_auth/tests/tests.py @@ -29,9 +29,7 @@ from keystoneclient.v2_0 import client as client_v2 from keystoneclient.v3 import client as client_v3 import mock from mox3 import mox -import sys from testscenarios import load_tests_apply_scenarios # noqa -import unittest from openstack_auth import policy from openstack_auth.tests import data_v2 @@ -1165,7 +1163,6 @@ class UserTestCase(test.TestCase): def setUp(self): self.data = data_v3.generate_test_data(pki=True) - @unittest.skipIf(sys.version_info >= (3, 0), "Bug #1552443") def test_unscoped_token_is_none(self): created_token = user.Token(self.data.domain_scoped_access_info, unscoped_token=None) diff --git a/openstack_auth/user.py b/openstack_auth/user.py index 854d2683..c55121bb 100644 --- a/openstack_auth/user.py +++ b/openstack_auth/user.py @@ -88,12 +88,12 @@ class Token(object): algorithm = getattr(settings, 'OPENSTACK_TOKEN_HASH_ALGORITHM', 'md5') hasher = hashlib.new(algorithm) - hasher.update(self.id) + hasher.update(self.id.encode('utf-8')) self.id = hasher.hexdigest() # Only hash unscoped token if needed if self._is_pki_token(self.unscoped_token): hasher = hashlib.new(algorithm) - hasher.update(self.unscoped_token) + hasher.update(self.unscoped_token.encode('utf-8')) self.unscoped_token = hasher.hexdigest() self.expires = auth_ref.expires