[Pulp-list] unicode strings in our request URLs

Pradeep Kilambi pkilambi at redhat.com
Fri Oct 29 18:37:16 UTC 2010


On 10/29/2010 02: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?
>

+1 makes sense

~ Prad

> Mike
>
> _______________________________________________
> Pulp-list mailing list
> Pulp-list at redhat.com
> https://www.redhat.com/mailman/listinfo/pulp-list




More information about the Pulp-list mailing list