]> granicus.if.org Git - python/commitdiff
Patch #1479302: Make urllib2 digest auth and basic auth play together.
authorGeorg Brandl <georg@python.org>
Mon, 8 May 2006 17:36:08 +0000 (17:36 +0000)
committerGeorg Brandl <georg@python.org>
Mon, 8 May 2006 17:36:08 +0000 (17:36 +0000)
Lib/test/test_urllib2.py
Lib/urllib2.py

index 08b97a6f637ddaf94e7fc7d18c3a9c566248d1a0..c8f19bcab02aea22407791a7bb64ccdf8bab18ae 100644 (file)
@@ -779,6 +779,27 @@ class HandlerTests(unittest.TestCase):
                               "proxy.example.com:3128",
                               )
 
+    def test_basic_and_digest_auth_handlers(self):
+        # HTTPDigestAuthHandler threw an exception if it couldn't handle a 40*
+        # response (http://python.org/sf/1479302), where it should instead
+        # return None to allow another handler (especially
+        # HTTPBasicAuthHandler) to handle the response.
+        class TestDigestAuthHandler(urllib2.HTTPDigestAuthHandler):
+            handler_order = 400  # strictly before HTTPBasicAuthHandler
+        opener = OpenerDirector()
+        password_manager = MockPasswordManager()
+        digest_handler = TestDigestAuthHandler(password_manager)
+        basic_handler = urllib2.HTTPBasicAuthHandler(password_manager)
+        opener.add_handler(digest_handler)
+        realm = "ACME Networks"
+        http_handler = MockHTTPHandler(
+            401, 'WWW-Authenticate: Basic realm="%s"\r\n\r\n' % realm)
+        self._test_basic_auth(opener, basic_handler, "Authorization",
+                              realm, http_handler, password_manager,
+                              "http://acme.example.com/protected",
+                              "http://acme.example.com/protected",
+                              )
+
     def _test_basic_auth(self, opener, auth_handler, auth_header,
                          realm, http_handler, password_manager,
                          request_url, protected_url):
index 8d38504d2bf491b03d71e2517809950fe8992c33..5948376f6cf96f405ed9e68b4bb4eb80d42c77ec 100644 (file)
@@ -846,9 +846,6 @@ class AbstractDigestAuthHandler:
             scheme = authreq.split()[0]
             if scheme.lower() == 'digest':
                 return self.retry_http_digest_auth(req, authreq)
-            else:
-                raise ValueError("AbstractDigestAuthHandler doesn't know "
-                                 "about %s"%(scheme))
 
     def retry_http_digest_auth(self, req, auth):
         token, challenge = auth.split(' ', 1)