Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/url.py @ 13421:bd8bfa85d5a5
url: refactor BetterHTTPS.connect
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Wed, 16 Feb 2011 04:28:17 +0100 |
parents | 051f498628f7 |
children | ebce5196b9db |
comparison
equal
deleted
inserted
replaced
13420:051f498628f7 | 13421:bd8bfa85d5a5 |
---|---|
544 if has_https: | 544 if has_https: |
545 class BetterHTTPS(httplib.HTTPSConnection): | 545 class BetterHTTPS(httplib.HTTPSConnection): |
546 send = keepalive.safesend | 546 send = keepalive.safesend |
547 | 547 |
548 def connect(self): | 548 def connect(self): |
549 host = self.host | |
549 cacerts = self.ui.config('web', 'cacerts') | 550 cacerts = self.ui.config('web', 'cacerts') |
550 if cacerts: | 551 hostfingerprint = self.ui.config('hostfingerprints', host) |
551 cacerts = util.expandpath(cacerts) | 552 |
552 | |
553 hostfingerprint = self.ui.config('hostfingerprints', self.host) | |
554 if cacerts and not hostfingerprint: | 553 if cacerts and not hostfingerprint: |
555 sock = _create_connection((self.host, self.port)) | 554 sock = _create_connection((self.host, self.port)) |
556 self.sock = _ssl_wrap_socket(sock, self.key_file, | 555 self.sock = _ssl_wrap_socket(self.sock, self.key_file, |
557 self.cert_file, cert_reqs=CERT_REQUIRED, | 556 self.cert_file, cert_reqs=CERT_REQUIRED, |
558 ca_certs=cacerts) | 557 ca_certs=util.expandpath(cacerts)) |
559 msg = _verifycert(self.sock.getpeercert(), self.host) | 558 msg = _verifycert(self.sock.getpeercert(), host) |
560 if msg: | 559 if msg: |
561 raise util.Abort(_('%s certificate error: %s ' | 560 raise util.Abort(_('%s certificate error: %s ' |
562 '(use --insecure to connect ' | 561 '(use --insecure to connect ' |
563 'insecurely)') % (self.host, msg)) | 562 'insecurely)') % (host, msg)) |
564 self.ui.debug('%s certificate successfully verified\n' % | 563 self.ui.debug('%s certificate successfully verified\n' % host) |
565 self.host) | |
566 else: | 564 else: |
567 httplib.HTTPSConnection.connect(self) | 565 httplib.HTTPSConnection.connect(self) |
568 if hasattr(self.sock, 'getpeercert'): | 566 if hasattr(self.sock, 'getpeercert'): |
569 peercert = self.sock.getpeercert(True) | 567 peercert = self.sock.getpeercert(True) |
570 peerfingerprint = util.sha1(peercert).hexdigest() | 568 peerfingerprint = util.sha1(peercert).hexdigest() |
573 if hostfingerprint: | 571 if hostfingerprint: |
574 if peerfingerprint.lower() != \ | 572 if peerfingerprint.lower() != \ |
575 hostfingerprint.replace(':', '').lower(): | 573 hostfingerprint.replace(':', '').lower(): |
576 raise util.Abort(_('invalid certificate for %s ' | 574 raise util.Abort(_('invalid certificate for %s ' |
577 'with fingerprint %s') % | 575 'with fingerprint %s') % |
578 (self.host, nicefingerprint)) | 576 (host, nicefingerprint)) |
579 self.ui.debug('%s certificate matched fingerprint %s\n' % | 577 self.ui.debug('%s certificate matched fingerprint %s\n' % |
580 (self.host, nicefingerprint)) | 578 (host, nicefingerprint)) |
581 else: | 579 else: |
582 self.ui.warn(_('warning: %s certificate ' | 580 self.ui.warn(_('warning: %s certificate ' |
583 'with fingerprint %s not verified ' | 581 'with fingerprint %s not verified ' |
584 '(check hostfingerprints or web.cacerts ' | 582 '(check hostfingerprints or web.cacerts ' |
585 'config setting)\n') % | 583 'config setting)\n') % |
586 (self.host, nicefingerprint)) | 584 (host, nicefingerprint)) |
587 else: # python 2.5 ? | 585 else: # python 2.5 ? |
588 if hostfingerprint: | 586 if hostfingerprint: |
589 raise util.Abort(_('no certificate for %s ' | 587 raise util.Abort(_('no certificate for %s with ' |
590 'with fingerprint') % self.host) | 588 'configured hostfingerprint') % host) |
591 self.ui.warn(_('warning: %s certificate not verified ' | 589 self.ui.warn(_('warning: %s certificate not verified ' |
592 '(check web.cacerts config setting)\n') % | 590 '(check web.cacerts config setting)\n') % |
593 self.host) | 591 host) |
594 | 592 |
595 class httpsconnection(BetterHTTPS): | 593 class httpsconnection(BetterHTTPS): |
596 response_class = keepalive.HTTPResponse | 594 response_class = keepalive.HTTPResponse |
597 # must be able to send big bundle as stream. | 595 # must be able to send big bundle as stream. |
598 send = _gen_sendfile(BetterHTTPS.send) | 596 send = _gen_sendfile(BetterHTTPS.send) |