]> granicus.if.org Git - python/commitdiff
[Patch #1574068 by Scott Dial] urllib and urllib2 were using
authorAndrew M. Kuchling <amk@amk.ca>
Fri, 27 Oct 2006 17:13:33 +0000 (17:13 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Fri, 27 Oct 2006 17:13:33 +0000 (17:13 +0000)
base64.encodestring() for encoding authentication data.
encodestring() can include newlines for very long input, which
produced broken HTTP headers.

2.4 backport candidate, probably.

Lib/urllib.py
Lib/urllib2.py
Misc/NEWS

index 8d5669075dda23829ef54a02987f083490081aaf..064632c260b3f2d34ae55aa624a36a3d80338023 100644 (file)
@@ -302,13 +302,13 @@ class URLopener:
 
         if proxy_passwd:
             import base64
-            proxy_auth = base64.encodestring(proxy_passwd).strip()
+            proxy_auth = base64.b64encode(proxy_passwd).strip()
         else:
             proxy_auth = None
 
         if user_passwd:
             import base64
-            auth = base64.encodestring(user_passwd).strip()
+            auth = base64.b64encode(user_passwd).strip()
         else:
             auth = None
         h = httplib.HTTP(host)
@@ -387,12 +387,12 @@ class URLopener:
             if not host: raise IOError, ('https error', 'no host given')
             if proxy_passwd:
                 import base64
-                proxy_auth = base64.encodestring(proxy_passwd).strip()
+                proxy_auth = base64.b64encode(proxy_passwd).strip()
             else:
                 proxy_auth = None
             if user_passwd:
                 import base64
-                auth = base64.encodestring(user_passwd).strip()
+                auth = base64.b64encode(user_passwd).strip()
             else:
                 auth = None
             h = httplib.HTTPS(host, 0,
index 3459f0d230baba1755a57a57fda25e453da191c6..890d3d4a6c186db50f1817386833a9ba6d488e8a 100644 (file)
@@ -674,7 +674,7 @@ class ProxyHandler(BaseHandler):
             proxy_type = orig_type
         if user and password:
             user_pass = '%s:%s' % (unquote(user), unquote(password))
-            creds = base64.encodestring(user_pass).strip()
+            creds = base64.b64encode(user_pass).strip()
             req.add_header('Proxy-authorization', 'Basic ' + creds)
         hostport = unquote(hostport)
         req.set_proxy(hostport, proxy_type)
@@ -798,7 +798,7 @@ class AbstractBasicAuthHandler:
         user, pw = self.passwd.find_user_password(realm, host)
         if pw is not None:
             raw = "%s:%s" % (user, pw)
-            auth = 'Basic %s' % base64.encodestring(raw).strip()
+            auth = 'Basic %s' % base64.b64encode(raw).strip()
             if req.headers.get(self.auth_header, None) == auth:
                 return None
             req.add_header(self.auth_header, auth)
index 64fa7bf826e34c1754eb3f2a9ea8009864e7c42b..57e5ad0c3ddf270056692dfb9f51b92dc0c2fdb2 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -110,6 +110,9 @@ Library
 
 - Bug #1576241: fix functools.wraps() to work on built-in functions.
 
+- Patch #1574068: fix urllib/urllib2 to not insert line breaks when
+  HTTP authentication data was very long.
+
 - Fix a bug in traceback.format_exception_only() that led to an error
   being raised when print_exc() was called without an exception set.
   In version 2.4, this printed "None", restored that behavior.