Hello, All

I found a bug in “cloudapis.py” on 3.0.2.
While calculating the results of Signature API request to cloudtool,
listAsyncJobs API startdate Signature error occur. 
The result of the assumption could not be obtained.

Cloudtool had been encrypted with the URL-encoded from HmacSHA1. 
While request parameter key gets generated, the cloudtool lowercased and 
requested. 
Therefore, the cloudtood would not work properly.

Was this bug already fixed?

Thank you!

patch----------
--- cloudapis.py.org    2012-05-07 13:58:37.000000000 +0900
+++ cloudapis.py        2012-07-09 21:08:36.217474743 +0900
@@ -51,9 +51,9 @@
         requests.sort(key=lambda x: str.lower(x[0]))
         
         requestUrl = "&".join(["=".join([request[0], 
urllib.quote_plus(str(request[1]))]) for request in requests])
-        hashStr = "&".join(["=".join([str.lower(request[0]), 
urllib.quote_plus(str.lower(str(request[1])))]) for request in requests])
+        hashStr = "&".join(["=".join([request[0], 
urllib.quote_plus(str(request[1]))]) for request in requests])
 
-        sig = urllib.quote_plus(base64.encodestring(hmac.new(self.securityKey, 
hashStr, hashlib.sha1).digest()).strip())
+        sig = urllib.quote_plus(base64.encodestring(hmac.new(self.securityKey, 
str.lower(hashStr), hashlib.sha1).digest()).strip())
 
         requestUrl += "&signature=%s"%sig
         return requestUrl
@@ -68,9 +68,9 @@
         requests.sort(key=lambda x: str.lower(x[0]))
         
         requestUrl = "&".join(["=".join([request[0], 
urllib.quote_plus(str(request[1]))]) for request in requests])
-        hashStr = "&".join(["=".join([str.lower(request[0]), 
urllib.quote_plus(str.lower(str(request[1])))]) for request in requests])
+        hashStr = "&".join(["=".join([request[0], 
urllib.quote_plus(str(request[1]))]) for request in requests])
 
-        sig = urllib.quote_plus(base64.encodestring(hmac.new(self.securityKey, 
hashStr, hashlib.sha1).digest()).strip())
+        sig = urllib.quote_plus(base64.encodestring(hmac.new(self.securityKey, 
str.lower(hashStr), hashlib.sha1).digest()).strip())
 
         requestUrl += "&signature=%s"%sig

----------patch


-- Helped by CloudStack Japanese user group core member --

--
Naoyuki Kajihara

Intelligence Business Solutions

1-4-4 Yanagibashi Taito-ku
Tokyo-to Japan  111-0052
Phone: +81 3 6385 6103
FAX: +81 3 6385 6104

http://ibs.inte.co.jp/
--- cloudapis.py.org    2012-05-07 13:58:37.000000000 +0900
+++ cloudapis.py        2012-07-09 21:08:36.217474743 +0900
@@ -51,9 +51,9 @@
         requests.sort(key=lambda x: str.lower(x[0]))
         
         requestUrl = "&".join(["=".join([request[0], 
urllib.quote_plus(str(request[1]))]) for request in requests])
-        hashStr = "&".join(["=".join([str.lower(request[0]), 
urllib.quote_plus(str.lower(str(request[1])))]) for request in requests])
+        hashStr = "&".join(["=".join([request[0], 
urllib.quote_plus(str(request[1]))]) for request in requests])
 
-        sig = urllib.quote_plus(base64.encodestring(hmac.new(self.securityKey, 
hashStr, hashlib.sha1).digest()).strip())
+        sig = urllib.quote_plus(base64.encodestring(hmac.new(self.securityKey, 
str.lower(hashStr), hashlib.sha1).digest()).strip())
 
         requestUrl += "&signature=%s"%sig
         return requestUrl
@@ -68,9 +68,9 @@
         requests.sort(key=lambda x: str.lower(x[0]))
         
         requestUrl = "&".join(["=".join([request[0], 
urllib.quote_plus(str(request[1]))]) for request in requests])
-        hashStr = "&".join(["=".join([str.lower(request[0]), 
urllib.quote_plus(str.lower(str(request[1])))]) for request in requests])
+        hashStr = "&".join(["=".join([request[0], 
urllib.quote_plus(str(request[1]))]) for request in requests])
 
-        sig = urllib.quote_plus(base64.encodestring(hmac.new(self.securityKey, 
hashStr, hashlib.sha1).digest()).strip())
+        sig = urllib.quote_plus(base64.encodestring(hmac.new(self.securityKey, 
str.lower(hashStr), hashlib.sha1).digest()).strip())
 
         requestUrl += "&signature=%s"%sig
 

Reply via email to