summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-09-20 23:02:32 +0000
committerGerrit Code Review <review@openstack.org>2014-09-20 23:02:32 +0000
commit6f9dff17997efa45868832ef5995d9b74c35888b (patch)
tree6da63106af04a0220b785529f59d28573a977ce5
parent32e1e33b3744019c8883bf3e72ce4dc992a5e1e7 (diff)
parentcf5e45dd5b1ae9b98698a05e7d39989b6bfd4747 (diff)
downloadpython-keystoneclient-6f9dff17997efa45868832ef5995d9b74c35888b.tar.gz
Merge "fix EC2 Signature Version 4 calculation, in the case of POST"
-rw-r--r--keystoneclient/contrib/ec2/utils.py9
-rw-r--r--keystoneclient/tests/test_ec2utils.py12
2 files changed, 19 insertions, 2 deletions
diff --git a/keystoneclient/contrib/ec2/utils.py b/keystoneclient/contrib/ec2/utils.py
index 3b722f2..899b95a 100644
--- a/keystoneclient/contrib/ec2/utils.py
+++ b/keystoneclient/contrib/ec2/utils.py
@@ -232,12 +232,19 @@ class Ec2Signer(object):
header_list.append('%s:%s' % (h, headers_lower[h]))
return '\n'.join(header_list) + '\n'
+ def canonical_query_str(verb, params):
+ # POST requests pass parameters in through the request body
+ canonical_qs = ''
+ if verb.upper() != 'POST':
+ canonical_qs = self._canonical_qs(params)
+ return canonical_qs
+
# Create canonical request:
# http://docs.aws.amazon.com/general/latest/gr/
# sigv4-create-canonical-request.html
# Get parameters and headers in expected string format
cr = "\n".join((verb.upper(), path,
- self._canonical_qs(params),
+ canonical_query_str(verb, params),
canonical_header_str(),
auth_param('SignedHeaders'),
body_hash))
diff --git a/keystoneclient/tests/test_ec2utils.py b/keystoneclient/tests/test_ec2utils.py
index ff4aee3..71fc176 100644
--- a/keystoneclient/tests/test_ec2utils.py
+++ b/keystoneclient/tests/test_ec2utils.py
@@ -130,7 +130,17 @@ class Ec2SignerTest(testtools.TestCase):
# examples specify no query string, but the final POST example
# does, apparently incorrectly since an empty parameter list
# aligns all steps and the final signature with the examples
- params = {}
+ params = {'Action': 'CreateUser',
+ 'UserName': 'NewUser',
+ 'Version': '2010-05-08',
+ 'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
+ 'X-Amz-Credential': 'AKIAEXAMPLE/20140611/'
+ 'us-east-1/iam/aws4_request',
+ 'X-Amz-Date': '20140611T231318Z',
+ 'X-Amz-Expires': '30',
+ 'X-Amz-SignedHeaders': 'host',
+ 'X-Amz-Signature': 'ced6826de92d2bdeed8f846f0bf508e8'
+ '559e98e4b0199114b84c54174deb456c'}
credentials = {'host': 'iam.amazonaws.com',
'verb': 'POST',
'path': '/',