Hello community, here is the log from the commit of package python-acme for openSUSE:Factory checked in at 2017-08-12 20:28:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-acme (Old) and /work/SRC/openSUSE:Factory/.python-acme.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-acme" Sat Aug 12 20:28:34 2017 rev:10 rq:516190 version:0.17.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-acme/python-acme.changes 2017-08-04 11:58:40.069659433 +0200 +++ /work/SRC/openSUSE:Factory/.python-acme.new/python-acme.changes 2017-08-12 20:28:37.764029511 +0200 @@ -1,0 +2,6 @@ +Fri Aug 11 15:49:23 UTC 2017 - ec...@opensuse.org + +- update to 0.17.0 + - No changelog from upstream + +------------------------------------------------------------------- Old: ---- acme-0.16.0.tar.gz acme-0.16.0.tar.gz.asc New: ---- acme-0.17.0.tar.gz acme-0.17.0.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-acme.spec ++++++ --- /var/tmp/diff_new_pack.aMnZcO/_old 2017-08-12 20:28:38.687900004 +0200 +++ /var/tmp/diff_new_pack.aMnZcO/_new 2017-08-12 20:28:38.699898321 +0200 @@ -18,7 +18,7 @@ %define libname acme Name: python-%{libname} -Version: 0.16.0 +Version: 0.17.0 Release: 0 Summary: Python library for the ACME protocol License: Apache-2.0 ++++++ acme-0.16.0.tar.gz -> acme-0.17.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/PKG-INFO new/acme-0.17.0/PKG-INFO --- old/acme-0.16.0/PKG-INFO 2017-07-05 23:39:57.000000000 +0200 +++ new/acme-0.17.0/PKG-INFO 2017-08-02 01:43:11.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: acme -Version: 0.16.0 +Version: 0.17.0 Summary: ACME protocol implementation in Python Home-page: https://github.com/letsencrypt/letsencrypt Author: Certbot Project diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/acme/crypto_util.py new/acme-0.17.0/acme/crypto_util.py --- old/acme-0.16.0/acme/crypto_util.py 2017-07-05 23:39:42.000000000 +0200 +++ new/acme-0.17.0/acme/crypto_util.py 2017-08-02 01:42:57.000000000 +0200 @@ -218,7 +218,7 @@ text = func(OpenSSL.crypto.FILETYPE_TEXT, cert_or_req).decode("utf-8") # WARNING: this function does not support multiple SANs extensions. # Multiple X509v3 extensions of the same type is disallowed by RFC 5280. - match = re.search(r"X509v3 Subject Alternative Name:\s*(.*)", text) + match = re.search(r"X509v3 Subject Alternative Name:(?: critical)?\s*(.*)", text) # WARNING: this function assumes that no SAN can include # parts_separator, hence the split! sans_parts = [] if match is None else match.group(1).split(parts_separator) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/acme/crypto_util_test.py new/acme-0.17.0/acme/crypto_util_test.py --- old/acme-0.16.0/acme/crypto_util_test.py 2017-07-05 23:39:42.000000000 +0200 +++ new/acme-0.17.0/acme/crypto_util_test.py 2017-08-02 01:42:57.000000000 +0200 @@ -131,6 +131,11 @@ self.assertEqual(self._call_csr('csr-idnsans.pem'), self._get_idn_names()) + def test_critical_san(self): + self.assertEqual(self._call_cert('critical-san.pem'), + ['chicago-cubs.venafi.example', 'cubs.venafi.example']) + + class RandomSnTest(unittest.TestCase): """Test for random certificate serial numbers.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/acme/messages.py new/acme-0.17.0/acme/messages.py --- old/acme-0.16.0/acme/messages.py 2017-07-05 23:39:42.000000000 +0200 +++ new/acme-0.17.0/acme/messages.py 2017-08-02 01:42:57.000000000 +0200 @@ -1,5 +1,6 @@ """ACME protocol messages.""" import collections +import six from acme import challenges from acme import errors @@ -36,9 +37,13 @@ def is_acme_error(err): """Check if argument is an ACME error.""" - return (ERROR_PREFIX in str(err)) or (OLD_ERROR_PREFIX in str(err)) + if isinstance(err, Error) and (err.typ is not None): + return (ERROR_PREFIX in err.typ) or (OLD_ERROR_PREFIX in err.typ) + else: + return False +@six.python_2_unicode_compatible class Error(jose.JSONObjectWithFields, errors.Error): """ACME error. @@ -92,10 +97,10 @@ return code def __str__(self): - return ' :: '.join( - part for part in + return b' :: '.join( + part.encode('ascii', 'backslashreplace') for part in (self.typ, self.description, self.detail, self.title) - if part is not None) + if part is not None).decode() class _Constant(jose.JSONDeSerializable, collections.Hashable): # type: ignore diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/acme/messages_test.py new/acme-0.17.0/acme/messages_test.py --- old/acme-0.16.0/acme/messages_test.py 2017-07-05 23:39:42.000000000 +0200 +++ new/acme-0.17.0/acme/messages_test.py 2017-08-02 01:42:57.000000000 +0200 @@ -26,6 +26,7 @@ 'type': ERROR_PREFIX + 'malformed', } self.error_custom = Error(typ='custom', detail='bar') + self.empty_error = Error() self.jobj_custom = {'type': 'custom', 'detail': 'bar'} def test_default_typ(self): @@ -45,12 +46,6 @@ 'The request message was malformed', self.error.description) self.assertTrue(self.error_custom.description is None) - def test_str(self): - self.assertEqual( - 'urn:ietf:params:acme:error:malformed :: The request message was ' - 'malformed :: foo :: title', str(self.error)) - self.assertEqual('custom :: bar', str(self.error_custom)) - def test_code(self): from acme.messages import Error self.assertEqual('malformed', self.error.code) @@ -60,8 +55,16 @@ def test_is_acme_error(self): from acme.messages import is_acme_error self.assertTrue(is_acme_error(self.error)) - self.assertTrue(is_acme_error(str(self.error))) self.assertFalse(is_acme_error(self.error_custom)) + self.assertFalse(is_acme_error(self.empty_error)) + self.assertFalse(is_acme_error("must pet all the {dogs|rabbits}")) + + def test_unicode_error(self): + from acme.messages import Error, ERROR_PREFIX, is_acme_error + arabic_error = Error( + detail=u'\u0639\u062f\u0627\u0644\u0629', typ=ERROR_PREFIX + 'malformed', + title='title') + self.assertTrue(is_acme_error(arabic_error)) def test_with_code(self): from acme.messages import Error, is_acme_error diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/acme/testdata/critical-san.pem new/acme-0.17.0/acme/testdata/critical-san.pem --- old/acme-0.16.0/acme/testdata/critical-san.pem 1970-01-01 01:00:00.000000000 +0100 +++ new/acme-0.17.0/acme/testdata/critical-san.pem 2017-08-02 01:42:57.000000000 +0200 @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIErTCCA5WgAwIBAgIKETb7VQAAAAAdGTANBgkqhkiG9w0BAQsFADCBkTELMAkG +A1UEBhMCVVMxDTALBgNVBAgTBFV0YWgxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5 +MRUwEwYDVQQKEwxWZW5hZmksIEluYy4xHzAdBgNVBAsTFkRlbW9uc3RyYXRpb24g +U2VydmljZXMxIjAgBgNVBAMTGVZlbmFmaSBFeGFtcGxlIElzc3VpbmcgQ0EwHhcN +MTcwNzEwMjMxNjA1WhcNMTcwODA5MjMxNjA1WjAAMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA7CU5qRIzCs9hCRiSUvLZ8r81l4zIYbx1V1vZz6x1cS4M +0keNfFJ1wB+zuvx80KaMYkWPYlg4Rsm9Ok3ZapakXDlaWtrfg78lxtHuPw1o7AYV +EXDwwPkNugLMJfYw5hWYSr8PCLcOJoY00YQ0fJ44L+kVsUyGjN4UTRRZmOh/yNVU +0W12dTCz4X7BAW01OuY6SxxwewnW3sBEep+APfr2jd/oIx7fgZmVB8aRCDPj4AFl +XINWIwxmptOwnKPbwLN/vhCvJRUkO6rA8lpYwQkedFf6fHhqi2Sq/NCEOg4RvMCF +fKbMpncOXxz+f4/i43SVLrPz/UyhjNbKGJZ+zFrQowIDAQABo4IBlTCCAZEwPgYD +VR0RAQH/BDQwMoIbY2hpY2Fnby1jdWJzLnZlbmFmaS5leGFtcGxlghNjdWJzLnZl +bmFmaS5leGFtcGxlMB0GA1UdDgQWBBTgKZXVSFNyPHHtO/phtIALPcCF5DAfBgNV +HSMEGDAWgBT/JJ6Wei/pzf+9DRHuv6Wgdk2HsjBSBgNVHR8ESzBJMEegRaBDhkFo +dHRwOi8vcGtpLnZlbmFmaS5leGFtcGxlL2NybC9WZW5hZmklMjBFeGFtcGxlJTIw +SXNzdWluZyUyMENBLmNybDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0 +dHA6Ly9wa2kudmVuYWZpLmV4YW1wbGUvb2NzcDAOBgNVHQ8BAf8EBAMCBaAwPQYJ +KwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhIDLGYTvsSSEnZ8ehvD5UofP4hMEgobv +DIGy4mcCAWQCAQIwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGwYJKwYBBAGCNxUKBA4w +DDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEA3YW4t1AzxEn384OqdU6L +ny8XkMhWpRM0W0Z9ZC3gRZKbVUu49nG/KB5hbVn/de33zdX9HOZJKc0vXzkGZQUs +OUCCsKX4VKzV5naGXOuGRbvV4CJh5P0kPlDzyb5t312S49nJdcdBf0Y/uL5Qzhst +bXy8qNfFNG3SIKKRAUpqE9OVIl+F+JBwexa+v/4dFtUOqMipfXxB3TaxnDqvU1dS +yO34ZTvIMGXJIZ5nn/d/LNc3N3vBg2SHkMpladqw0Hr7mL0bFOe0b+lJgkDP06Be +n08fikhz1j2AW4/ZHa9w4DUz7J21+RtHMhh+Vd1On0EAeZ563svDe7Z+yrg6zOVv +KA== +-----END CERTIFICATE----- \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/acme.egg-info/PKG-INFO new/acme-0.17.0/acme.egg-info/PKG-INFO --- old/acme-0.16.0/acme.egg-info/PKG-INFO 2017-07-05 23:39:57.000000000 +0200 +++ new/acme-0.17.0/acme.egg-info/PKG-INFO 2017-08-02 01:43:11.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: acme -Version: 0.16.0 +Version: 0.17.0 Summary: ACME protocol implementation in Python Home-page: https://github.com/letsencrypt/letsencrypt Author: Certbot Project diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/acme.egg-info/SOURCES.txt new/acme-0.17.0/acme.egg-info/SOURCES.txt --- old/acme-0.16.0/acme.egg-info/SOURCES.txt 2017-07-05 23:39:57.000000000 +0200 +++ new/acme-0.17.0/acme.egg-info/SOURCES.txt 2017-08-02 01:43:11.000000000 +0200 @@ -52,6 +52,7 @@ acme/testdata/cert-san.pem acme/testdata/cert.der acme/testdata/cert.pem +acme/testdata/critical-san.pem acme/testdata/csr-100sans.pem acme/testdata/csr-6sans.pem acme/testdata/csr-idnsans.pem diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acme-0.16.0/setup.py new/acme-0.17.0/setup.py --- old/acme-0.16.0/setup.py 2017-07-05 23:39:43.000000000 +0200 +++ new/acme-0.17.0/setup.py 2017-08-02 01:42:57.000000000 +0200 @@ -4,7 +4,7 @@ from setuptools import find_packages -version = '0.16.0' +version = '0.17.0' # Please update tox.ini when modifying dependency version requirements install_requires = [