

def match_hostname(cert, hostname):
    'Verify that *cert* (in decoded format as returned by\n    SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 rules\n    are mostly followed, but IP addresses are not accepted for *hostname*.\n\n    CertificateError is raised on failure. On success, the function\n    returns nothing.\n    '
    if (not cert):
        raise ValueError('empty or no certificate')
    dnsnames = []
    san = cert.get('subjectAltName', ())
    for (key, value) in san:
        if (key == 'DNS'):
            if _dnsname_to_pat(value).match(hostname):
                return
            dnsnames.append(value)
    if (not san):
        for sub in cert.get('subject', ()):
            for (key, value) in sub:
                if (key == 'commonName'):
                    if _dnsname_to_pat(value).match(hostname):
                        return
                    dnsnames.append(value)
    if (len(dnsnames) > 1):
        raise CertificateError(("hostname %r doesn't match either of %s" % (hostname, ', '.join(map(repr, dnsnames)))))
    elif (len(dnsnames) == 1):
        raise CertificateError(("hostname %r doesn't match %r" % (hostname, dnsnames[0])))
    else:
        raise CertificateError('no appropriate commonName or subjectAltName fields were found')

dataset/ETHPy150Open blynch/CloudMemeBackend/pymongo/ssl_match_hostname.py match_hostname/original