New submission from Luci Stanescu <luci.stane...@gmail.com>:

Hi,

The HTTPDigestAuthHandler's code looks like this:

    def http_error_401(self, req, fp, code, msg, headers):
        host = urlparse(req.full_url)[1]
        retry = self.http_error_auth_reqed('www-authenticate',
                                           host, req, headers)
        self.reset_retry_count()
        return retry

After successful authentication, the HTTP server might still return an error 
code, such as 404 or 304. In that case, self.http_error_auth_reqed raises the 
appropriate HTTPError and self.reset_retry_count is not called. I think that 
the code should be something along the lines of:

try:
  retry = self.http_error_auth_reqed('www-authenticate', host, req, headers)
except HTTPError, e:
  if e.code != 401:
    self.reset_retry_counter()
  raise
else:
  self.reset_retry_counter()
  return retry

Ways to reproduce the problem: try to access a resource for which an HTTP 
server requires authentication but for which after successful authentication 
returns a negative reply. I've attached an example script to demonstrate it 
(for python 2.X; bug also resent in 3.X, just replace import urllib2 with from 
urllib import request as urllib2 ;-) ).

The same problem applies to ProxyDigestAuthHandler.

----------
components: Library (Lib)
files: test_urllib2.py
messages: 115054
nosy: Luci.Stanescu
priority: normal
severity: normal
status: open
title: When reusing an handler, urllib(2)'s digest authentication fails after 
multiple regative replies
type: behavior
versions: Python 2.5, Python 2.6, Python 2.7, Python 3.1, Python 3.2, Python 3.3
Added file: http://bugs.python.org/file18656/test_urllib2.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue9698>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to