/usr/lib/python2.6/site-packages/boto
NameSizeModeActions
beanstalk/-0755rm
cacerts/-0755rm
cloudformation/-0755rm
cloudfront/-0755rm
cloudsearch/-0755rm
cloudsearch2/-0755rm
cloudtrail/-0755rm
cognito/-0755rm
contrib/-0755rm
datapipeline/-0755rm
directconnect/-0755rm
dynamodb/-0755rm
dynamodb2/-0755rm
ec2/-0755rm
ecs/-0755rm
elasticache/-0755rm
elastictranscoder/-0755rm
emr/-0755rm
file/-0755rm
fps/-0755rm
glacier/-0755rm
gs/-0755rm
iam/-0755rm
kinesis/-0755rm
logs/-0755rm
manage/-0755rm
mashups/-0755rm
mturk/-0755rm
mws/-0755rm
opsworks/-0755rm
pyami/-0755rm
rds/-0755rm
rds2/-0755rm
redshift/-0755rm
roboto/-0755rm
route53/-0755rm
s3/-0755rm
sdb/-0755rm
services/-0755rm
ses/-0755rm
sns/-0755rm
sqs/-0755rm
sts/-0755rm
support/-0755rm
swf/-0755rm
vendored/-0755rm
vpc/-0755rm
auth.py398540644editdlrm
auth.pyc348910644editdlrm
auth.pyo348910644editdlrm
auth_handler.py20640644editdlrm
auth_handler.pyc17350644editdlrm
auth_handler.pyo17350644editdlrm
compat.py26390644editdlrm
compat.pyc15210644editdlrm
compat.pyo15210644editdlrm
connection.py507910644editdlrm
connection.pyc384300644editdlrm
connection.pyo384300644editdlrm
endpoints.json183840644editdlrm
exception.py171060644editdlrm
exception.pyc226280644editdlrm
exception.pyo226280644editdlrm
handler.py23820644editdlrm
handler.pyc23790644editdlrm
handler.pyo23790644editdlrm
https_connection.py51350644editdlrm
https_connection.pyc50880644editdlrm
https_connection.pyo50880644editdlrm
jsonresponse.py60320644editdlrm
jsonresponse.pyc57330644editdlrm
jsonresponse.pyo57330644editdlrm
plugin.py27110644editdlrm
plugin.pyc23270644editdlrm
plugin.pyo23270644editdlrm
provider.py208900644editdlrm
provider.pyc136860644editdlrm
provider.pyo136860644editdlrm
regioninfo.py62140644editdlrm
regioninfo.pyc56060644editdlrm
regioninfo.pyo56060644editdlrm
requestlog.py14860644editdlrm
requestlog.pyc21850644editdlrm
requestlog.pyo21850644editdlrm
resultset.py65560644editdlrm
resultset.pyc57690644editdlrm
resultset.pyo57690644editdlrm
storage_uri.py391150644editdlrm
storage_uri.pyc352790644editdlrm
storage_uri.pyo352790644editdlrm
utils.py348850644editdlrm
utils.pyc346950644editdlrm
utils.pyo346950644editdlrm
__init__.py363370644editdlrm
__init__.pyc334460644editdlrm
__init__.pyo334460644editdlrm
Edit: /usr/lib/python2.6/site-packages/boto/https_connection.py (5135B)
# Copyright 2007,2011 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This file is derived from # http://googleappengine.googlecode.com/svn-history/r136/trunk/python/google/appengine/tools/https_wrapper.py """Extensions to allow HTTPS requests with SSL certificate validation.""" import re import socket import ssl import boto from boto.compat import six, http_client class InvalidCertificateException(http_client.HTTPException): """Raised when a certificate is provided with an invalid hostname.""" def __init__(self, host, cert, reason): """Constructor. Args: host: The hostname the connection was made to. cert: The SSL certificate (as a dictionary) the host returned. """ http_client.HTTPException.__init__(self) self.host = host self.cert = cert self.reason = reason def __str__(self): return ('Host %s returned an invalid certificate (%s): %s' % (self.host, self.reason, self.cert)) def GetValidHostsForCert(cert): """Returns a list of valid host globs for an SSL certificate. Args: cert: A dictionary representing an SSL certificate. Returns: list: A list of valid host globs. """ if 'subjectAltName' in cert: return [x[1] for x in cert['subjectAltName'] if x[0].lower() == 'dns'] else: return [x[0][1] for x in cert['subject'] if x[0][0].lower() == 'commonname'] def ValidateCertificateHostname(cert, hostname): """Validates that a given hostname is valid for an SSL certificate. Args: cert: A dictionary representing an SSL certificate. hostname: The hostname to test. Returns: bool: Whether or not the hostname is valid for this certificate. """ hosts = GetValidHostsForCert(cert) boto.log.debug( "validating server certificate: hostname=%s, certificate hosts=%s", hostname, hosts) for host in hosts: host_re = host.replace('.', '\.').replace('*', '[^.]*') if re.search('^%s$' % (host_re,), hostname, re.I): return True return False class CertValidatingHTTPSConnection(http_client.HTTPConnection): """An HTTPConnection that connects over SSL and validates certificates.""" default_port = http_client.HTTPS_PORT def __init__(self, host, port=default_port, key_file=None, cert_file=None, ca_certs=None, strict=None, **kwargs): """Constructor. Args: host: The hostname. Can be in 'host:port' form. port: The port. Defaults to 443. key_file: A file containing the client's private key cert_file: A file containing the client's certificates ca_certs: A file contianing a set of concatenated certificate authority certs for validating the server against. strict: When true, causes BadStatusLine to be raised if the status line can't be parsed as a valid HTTP/1.0 or 1.1 status line. """ if six.PY2: # Python 3.2 and newer have deprecated and removed the strict # parameter. Since the params are supported as keyword arguments # we conditionally add it here. kwargs['strict'] = strict http_client.HTTPConnection.__init__(self, host=host, port=port, **kwargs) self.key_file = key_file self.cert_file = cert_file self.ca_certs = ca_certs def connect(self): "Connect to a host on a given (SSL) port." if hasattr(self, "timeout"): sock = socket.create_connection((self.host, self.port), self.timeout) else: sock = socket.create_connection((self.host, self.port)) msg = "wrapping ssl socket; " if self.ca_certs: msg += "CA certificate file=%s" % self.ca_certs else: msg += "using system provided SSL certs" boto.log.debug(msg) self.sock = ssl.wrap_socket(sock, keyfile=self.key_file, certfile=self.cert_file, cert_reqs=ssl.CERT_REQUIRED, ca_certs=self.ca_certs) cert = self.sock.getpeercert() hostname = self.host.split(':', 0)[0] if not ValidateCertificateHostname(cert, hostname): raise InvalidCertificateException(hostname, cert, 'remote hostname "%s" does not match ' 'certificate' % hostname)