[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Pulp-list] unicode strings in our request URLs



On 10/29/2010 01:13 PM, Jeff Ortel wrote:


On 10/29/2010 01:31 PM, Mike McCune wrote:
For those that remember the baffling errors you sometimes have to debug
where Apache barfs with:

[Fri Oct 29 11:09:46 2010] [error] [client 127.0.0.1] Invalid method in
request P

in your ssl_error_log ...

and your pulp client bombs with:

Traceback (most recent call last):
File "/usr/bin/pulp-admin", line 7, in<module>
execfile(__file__)
...
File "/usr/lib64/python2.6/json/decoder.py", line 338, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

leaving you with no real way to figure out what is going on other than
to bang your head against the wall and hope that you remembered that
according to RFC 1738:

http://www.faqs.org/rfcs/rfc1738.html

"URLs are written only with the graphic printable characters of the
US-ASCII coded character set."

and

" Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
reserved characters used for their reserved purposes may be used
unencoded within a URL."

To fix this we have done this in our code:

connection.py: method = "/consumers/%s/" % str(id)
connection.py: method = "/consumers/%s/packages/" % str(id)
connection.py: method = "/consumers/%s/certificate/" % str(id)
connection.py: method = "/consumers/%s/keyvalues/" % str(id)
connection.py: method = "/consumergroups/%s/" % str(id)
connection.py: method = "/users/%s/" % str(login)

note the str() wrapping the param.

Instead of forcing our developers to remember todo this why don't we
just do the following in connection.py:

diff --git a/src/pulp/client/connection.py b/src/pulp/client/connection.py
index 0067dbb..6d4b75c 100644
--- a/src/pulp/client/connection.py
+++ b/src/pulp/client/connection.py
@@ -106,7 +106,9 @@ class Restlib(object):
self.key_file = key_file

def _request(self, request_type, method, info=None):
- handler = method
+ # Convert the method (path) into a string so we dont
+ # have any unicode characters in the URL
+ handler = str(method)
if not handler.startswith(self.apihandler):
#handler = self.apihandler + handler
handler = '/'.join((self.apihandler, handler))


Any objections?

Nope.  Excellent idea.


OK, change is pushed.

thanks for the double-check


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]