##// END OF EJS Templates
http digest auth: reset redirect counter on new requests (issue2255)...
Mads Kiilerich -
r11457:2ec34616 stable
parent child Browse files
Show More
@@ -542,11 +542,25 b' if has_https:'
542 conn.ui = self.ui
542 conn.ui = self.ui
543 return conn
543 return conn
544
544
545 # In python < 2.5 AbstractDigestAuthHandler raises a ValueError if
546 # it doesn't know about the auth type requested. This can happen if
547 # somebody is using BasicAuth and types a bad password.
548 class httpdigestauthhandler(urllib2.HTTPDigestAuthHandler):
545 class httpdigestauthhandler(urllib2.HTTPDigestAuthHandler):
546 def __init__(self, *args, **kwargs):
547 urllib2.HTTPDigestAuthHandler.__init__(self, *args, **kwargs)
548 self.retried_req = None
549
550 def reset_retry_count(self):
551 # Python 2.6.5 will call this on 401 or 407 errors and thus loop
552 # forever. We disable reset_retry_count completely and reset in
553 # http_error_auth_reqed instead.
554 pass
555
549 def http_error_auth_reqed(self, auth_header, host, req, headers):
556 def http_error_auth_reqed(self, auth_header, host, req, headers):
557 # Reset the retry counter once for each request.
558 if req is not self.retried_req:
559 self.retried_req = req
560 self.retried = 0
561 # In python < 2.5 AbstractDigestAuthHandler raises a ValueError if
562 # it doesn't know about the auth type requested. This can happen if
563 # somebody is using BasicAuth and types a bad password.
550 try:
564 try:
551 return urllib2.HTTPDigestAuthHandler.http_error_auth_reqed(
565 return urllib2.HTTPDigestAuthHandler.http_error_auth_reqed(
552 self, auth_header, host, req, headers)
566 self, auth_header, host, req, headers)
@@ -556,13 +570,6 b' class httpdigestauthhandler(urllib2.HTTP'
556 return
570 return
557 raise
571 raise
558
572
559 # Python 2.6.5 will keep resetting the retry count on redirects, for
560 # example when the server returns 401 on failing auth (like google code
561 # currently does). We stop the endless recursion by not resetting the
562 # count.
563 def reset_retry_count(self):
564 pass
565
566 def getauthinfo(path):
573 def getauthinfo(path):
567 scheme, netloc, urlpath, query, frag = urlparse.urlsplit(path)
574 scheme, netloc, urlpath, query, frag = urlparse.urlsplit(path)
568 if not urlpath:
575 if not urlpath:
General Comments 0
You need to be logged in to leave comments. Login now