python-urllib3 ftbfs in cosmic

Bug #1823646 reported by Matthias Klose
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
python-urllib3 (Ubuntu)
Fix Released
High
Unassigned

Bug Description

https://launchpadlibrarian.net/418304792/buildlog_ubuntu-cosmic-amd64.python-urllib3_1.22-1_BUILDING.txt.gz

=================================== FAILURES ===================================
_________________ TestConnection.test_match_hostname_mismatch __________________

self = <test.test_connection.TestConnection object at 0x7f46d583e160>

    def test_match_hostname_mismatch(self):
        cert = {'subjectAltName': [('DNS', 'foo')]}
        asserted_hostname = 'bar'
        try:
            with mock.patch('urllib3.connection.log.error') as mock_log:
> _match_hostname(cert, asserted_hostname)

test/test_connection.py:39:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cert = {'subjectAltName': [('DNS', 'foo')]}, asserted_hostname = 'bar'

    def _match_hostname(cert, asserted_hostname):
        try:
> match_hostname(cert, asserted_hostname)

urllib3/connection.py:356:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cert = {'subjectAltName': [('DNS', 'foo')]}, hostname = 'bar'

    def match_hostname(cert, hostname):
        """Verify that *cert* (in decoded format as returned by
        SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125
        rules are followed.

        The function matches IP addresses rather than dNSNames if hostname is a
        valid ipaddress string. IPv4 addresses are supported on all platforms.
        IPv6 addresses are supported on platforms with IPv6 support (AF_INET6
        and inet_pton).

        CertificateError is raised on failure. On success, the function
        returns nothing.
        """
        if not cert:
            raise ValueError("empty or no certificate, match_hostname needs a "
                             "SSL socket or SSL context with either "
                             "CERT_OPTIONAL or CERT_REQUIRED")
        try:
            host_ip = _inet_paton(hostname)
        except ValueError:
            # Not an IP address (common case)
            host_ip = None
        dnsnames = []
        san = cert.get('subjectAltName', ())
        for key, value in san:
            if key == 'DNS':
                if host_ip is None and _dnsname_match(value, hostname):
                    return
                dnsnames.append(value)
            elif key == 'IP Address':
                if host_ip is not None and _ipaddress_match(value, host_ip):
                    return
                dnsnames.append(value)
        if not dnsnames:
            # The subject is only checked when there is no dNSName entry
            # in subjectAltName
            for sub in cert.get('subject', ()):
                for key, value in sub:
                    # XXX according to RFC 2818, the most specific Common Name
                    # must be used.
                    if key == 'commonName':
                        if _dnsname_match(value, 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]))
E ssl.SSLCertVerificationError: ("hostname 'bar' doesn't match 'foo'",)

/usr/lib/python3.7/ssl.py:327: SSLCertVerificationError

During handling of the above exception, another exception occurred:

self = <test.test_connection.TestConnection object at 0x7f46d583e160>

    def test_match_hostname_mismatch(self):
        cert = {'subjectAltName': [('DNS', 'foo')]}
        asserted_hostname = 'bar'
        try:
            with mock.patch('urllib3.connection.log.error') as mock_log:
                _match_hostname(cert, asserted_hostname)
        except CertificateError as e:
> assert str(e) == "hostname 'bar' doesn't match 'foo'"
E assert '("hostname \...ch \'foo\'",)' == "hostname 'bar...t match 'foo'"
E - ("hostname 'bar' doesn't match 'foo'",)
E ? -- ---
E + hostname 'bar' doesn't match 'foo'

test/test_connection.py:41: AssertionError
======== 1 failed, 545 passed, 51 skipped, 1 deselected in 7.44 seconds ========
/usr/lib/python3/dist-packages/_pytest/assertion/rewrite.py:6: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import imp
/usr/lib/python3/dist-packages/pkg_resources/_vendor/pyparsing.py:943: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  collections.MutableMapping.register(ParseResults)
/usr/lib/python3/dist-packages/pkg_resources/_vendor/pyparsing.py:3245: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  elif isinstance( exprs, collections.Iterable ):
E: pybuild pybuild:338: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7_urllib3/build; python3.7 -m pytest --ignore=test/appengine --ignore=test/with_dummyserver --ignore=test/test_connectionpool.py --ignore=test/contrib/test_socks.py -k-test_recent_date
dh_auto_test: pybuild --test -i python{version} -p "3.7 3.6" returned exit code 13
make: *** [debian/rules:16: build] Error 25

Matthias Klose (doko)
Changed in python-urllib3 (Ubuntu):
importance: Undecided → High
tags: added: ftbfs rls-cc-incoming
Revision history for this message
Marc Deslauriers (mdeslaur) wrote :

This was fixed in (1.22-1ubuntu0.18.10.1)

Changed in python-urllib3 (Ubuntu):
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.