##// END OF EJS Templates
http: reuse authentication info after the first failed request (issue3567)...
Stéphane Klein -
r20964:a939eeb9 default
parent child Browse files
Show More
@@ -7,7 +7,7 b''
7 # This software may be used and distributed according to the terms of the
7 # This software may be used and distributed according to the terms of the
8 # GNU General Public License version 2 or any later version.
8 # GNU General Public License version 2 or any later version.
9
9
10 import urllib, urllib2, httplib, os, socket, cStringIO
10 import urllib, urllib2, httplib, os, socket, cStringIO, base64
11 from i18n import _
11 from i18n import _
12 import keepalive, util, sslutil
12 import keepalive, util, sslutil
13 import httpconnection as httpconnectionmod
13 import httpconnection as httpconnectionmod
@@ -422,9 +422,22 b' class httpdigestauthhandler(urllib2.HTTP'
422
422
423 class httpbasicauthhandler(urllib2.HTTPBasicAuthHandler):
423 class httpbasicauthhandler(urllib2.HTTPBasicAuthHandler):
424 def __init__(self, *args, **kwargs):
424 def __init__(self, *args, **kwargs):
425 self.auth = None
425 urllib2.HTTPBasicAuthHandler.__init__(self, *args, **kwargs)
426 urllib2.HTTPBasicAuthHandler.__init__(self, *args, **kwargs)
426 self.retried_req = None
427 self.retried_req = None
427
428
429 def http_request(self, request):
430 if self.auth:
431 request.add_unredirected_header(self.auth_header, self.auth)
432
433 return request
434
435 def https_request(self, request):
436 if self.auth:
437 request.add_unredirected_header(self.auth_header, self.auth)
438
439 return request
440
428 def reset_retry_count(self):
441 def reset_retry_count(self):
429 # Python 2.6.5 will call this on 401 or 407 errors and thus loop
442 # Python 2.6.5 will call this on 401 or 407 errors and thus loop
430 # forever. We disable reset_retry_count completely and reset in
443 # forever. We disable reset_retry_count completely and reset in
@@ -439,6 +452,19 b' class httpbasicauthhandler(urllib2.HTTPB'
439 return urllib2.HTTPBasicAuthHandler.http_error_auth_reqed(
452 return urllib2.HTTPBasicAuthHandler.http_error_auth_reqed(
440 self, auth_header, host, req, headers)
453 self, auth_header, host, req, headers)
441
454
455 def retry_http_basic_auth(self, host, req, realm):
456 user, pw = self.passwd.find_user_password(realm, req.get_full_url())
457 if pw is not None:
458 raw = "%s:%s" % (user, pw)
459 auth = 'Basic %s' % base64.b64encode(raw).strip()
460 if req.headers.get(self.auth_header, None) == auth:
461 return None
462 self.auth = auth
463 req.add_unredirected_header(self.auth_header, auth)
464 return self.parent.open(req)
465 else:
466 return None
467
442 handlerfuncs = []
468 handlerfuncs = []
443
469
444 def opener(ui, authinfo=None):
470 def opener(ui, authinfo=None):
@@ -226,37 +226,31 b' test http authentication'
226 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
226 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
227 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
227 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
228 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
228 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
229 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
230 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
229 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
231 "GET /?cmd=capabilities HTTP/1.1" 200 -
230 "GET /?cmd=capabilities HTTP/1.1" 200 -
232 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
231 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
233 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
232 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
234 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
233 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
235 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
236 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
234 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
237 "GET /?cmd=capabilities HTTP/1.1" 200 -
235 "GET /?cmd=capabilities HTTP/1.1" 200 -
238 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
236 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
239 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
237 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
240 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
238 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
241 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
242 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
239 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
243 "GET /?cmd=capabilities HTTP/1.1" 200 -
240 "GET /?cmd=capabilities HTTP/1.1" 200 -
244 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
241 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
245 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
242 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
246 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
243 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
247 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
248 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
244 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
249 "GET /?cmd=capabilities HTTP/1.1" 200 -
245 "GET /?cmd=capabilities HTTP/1.1" 200 -
250 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
246 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
251 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
247 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
252 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
248 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces
253 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
254 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
249 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
255 "GET /?cmd=capabilities HTTP/1.1" 200 -
250 "GET /?cmd=capabilities HTTP/1.1" 200 -
256 "GET /?cmd=branchmap HTTP/1.1" 200 -
251 "GET /?cmd=branchmap HTTP/1.1" 200 -
257 "GET /?cmd=stream_out HTTP/1.1" 401 -
252 "GET /?cmd=stream_out HTTP/1.1" 401 -
258 "GET /?cmd=stream_out HTTP/1.1" 200 -
253 "GET /?cmd=stream_out HTTP/1.1" 200 -
259 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
260 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
254 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
261 "GET /?cmd=capabilities HTTP/1.1" 200 -
255 "GET /?cmd=capabilities HTTP/1.1" 200 -
262 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
256 "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
@@ -271,13 +265,9 b' test http authentication'
271 "GET /?cmd=branchmap HTTP/1.1" 200 -
265 "GET /?cmd=branchmap HTTP/1.1" 200 -
272 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
266 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
273 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
267 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
274 "POST /?cmd=unbundle HTTP/1.1" 401 - x-hgarg-1:heads=686173686564+5eb5abfefeea63c80dd7553bcc3783f37e0c5524
275 "POST /?cmd=unbundle HTTP/1.1" 200 - x-hgarg-1:heads=686173686564+5eb5abfefeea63c80dd7553bcc3783f37e0c5524
268 "POST /?cmd=unbundle HTTP/1.1" 200 - x-hgarg-1:heads=686173686564+5eb5abfefeea63c80dd7553bcc3783f37e0c5524
276 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=phases
277 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases
269 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases
278 "POST /?cmd=pushkey HTTP/1.1" 401 - x-hgarg-1:key=7f4e523d01f2cc3765ac8934da3d14db775ff872&namespace=phases&new=0&old=1
279 "POST /?cmd=pushkey HTTP/1.1" 200 - x-hgarg-1:key=7f4e523d01f2cc3765ac8934da3d14db775ff872&namespace=phases&new=0&old=1
270 "POST /?cmd=pushkey HTTP/1.1" 200 - x-hgarg-1:key=7f4e523d01f2cc3765ac8934da3d14db775ff872&namespace=phases&new=0&old=1
280 "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks
281 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
271 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks
282
272
283 #endif
273 #endif
General Comments 0
You need to be logged in to leave comments. Login now