Control: tags 1009096 + patch
Control: tags 1009096 + pending

Dear maintainer,

I've prepared an NMU for mosquitto (versioned as 2.0.11-1.1) and
uploaded it to DELAYED/1. Please feel free to tell me if I
should delay it longer.

Cheers
-- 
Sebastian Ramacher
diff -Nru mosquitto-2.0.11/debian/changelog mosquitto-2.0.11/debian/changelog
--- mosquitto-2.0.11/debian/changelog	2021-06-09 14:54:36.000000000 +0200
+++ mosquitto-2.0.11/debian/changelog	2022-04-16 17:17:54.000000000 +0200
@@ -1,3 +1,13 @@
+mosquitto (2.0.11-1.1) unstable; urgency=medium
+
+  * Non-maintainer upload
+
+  [ Olivier Gayot ]
+  * Fix autopkgtest failure when running against Python 3.10 (Closes:
+    #1009096) (LP: #1960214)
+
+ -- Sebastian Ramacher <sramac...@debian.org>  Sat, 16 Apr 2022 17:17:54 +0200
+
 mosquitto (2.0.11-1) unstable; urgency=medium
 
   * SECURITY UPDATE: In Eclipse Mosquitto 1.6 to 2.0.10, if an authenticated
diff -Nru mosquitto-2.0.11/debian/patches/series mosquitto-2.0.11/debian/patches/series
--- mosquitto-2.0.11/debian/patches/series	2021-06-09 14:54:36.000000000 +0200
+++ mosquitto-2.0.11/debian/patches/series	2022-04-16 17:17:09.000000000 +0200
@@ -2,3 +2,4 @@
 1571.patch
 deb-test.patch
 missing-test.patch
+ssl-sslcontext-wrap_socket.patch
diff -Nru mosquitto-2.0.11/debian/patches/ssl-sslcontext-wrap_socket.patch mosquitto-2.0.11/debian/patches/ssl-sslcontext-wrap_socket.patch
--- mosquitto-2.0.11/debian/patches/ssl-sslcontext-wrap_socket.patch	1970-01-01 01:00:00.000000000 +0100
+++ mosquitto-2.0.11/debian/patches/ssl-sslcontext-wrap_socket.patch	2022-04-16 17:17:09.000000000 +0200
@@ -0,0 +1,217 @@
+Description: Replace uses of ssl.wrap_socket by ssl.SSLContext.wrap_socket
+ The function ssl.wrap_socket() is deprecated starting Python 3.7 because it
+ does not support hostname matching (which is considered insecure). In Python
+ 3.10, the function now throws warnings at runtime, which makes autopkgtest
+ fail.
+ 
+ The function ssl.SSLContext.wrap_socket comes in as the replacement and
+ has support for SNI and hostname matching.
+ 
+ Replaced all uses of ssl.wrap_socket() by equivalent using
+ ssl.SSLContext.wrap_socket().
+
+Author: Olivier Gayot <olivier.ga...@canonical.com>
+Bug-Ubuntu: https://launchpad.net/bugs/1960214
+Forwarded: https://github.com/eclipse/mosquitto/pull/2451
+Last-Update: 2022-02-07
+
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-bridge.py
++++ mosquitto-2.0.11/test/broker/08-ssl-bridge.py
+@@ -34,7 +34,9 @@ publish_packet = mosq_test.gen_publish("
+ 
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+-ssock = ssl.wrap_socket(sock, ca_certs="../ssl/all-ca.crt", keyfile="../ssl/server.key", certfile="../ssl/server.crt", server_side=True)
++context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH, cafile="../ssl/all-ca.crt")
++context.load_cert_chain(certfile="../ssl/server.crt", keyfile="../ssl/server.key")
++ssock = context.wrap_socket(sock, server_side=True)
+ ssock.settimeout(20)
+ ssock.bind(('', port1))
+ ssock.listen(5)
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-cert-auth-crl.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-cert-auth-crl.py
+@@ -31,7 +31,9 @@ broker = mosq_test.start_broker(filename
+ 
+ try:
+     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-    ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", certfile="../ssl/client.crt", keyfile="../ssl/client.key", cert_reqs=ssl.CERT_REQUIRED)
++    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-root-ca.crt")
++    context.load_cert_chain(certfile="../ssl/client.crt", keyfile="../ssl/client.key")
++    ssock = context.wrap_socket(sock, server_hostname="localhost")
+     ssock.settimeout(20)
+     ssock.connect(("localhost", port1))
+ 
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-cert-auth-expired.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-cert-auth-expired.py
+@@ -31,7 +31,9 @@ broker = mosq_test.start_broker(filename
+ 
+ try:
+     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-    ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", certfile="../ssl/client-expired.crt", keyfile="../ssl/client-expired.key", cert_reqs=ssl.CERT_REQUIRED)
++    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-root-ca.crt")
++    context.load_cert_chain(certfile="../ssl/client-expired.crt", keyfile="../ssl/client-expired.key")
++    ssock = context.wrap_socket(sock, server_hostname="localhost")
+     ssock.settimeout(20)
+     try:
+         ssock.connect(("localhost", port1))
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-cert-auth-revoked.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-cert-auth-revoked.py
+@@ -30,7 +30,9 @@ broker = mosq_test.start_broker(filename
+ 
+ try:
+     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-    ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", certfile="../ssl/client-revoked.crt", keyfile="../ssl/client-revoked.key", cert_reqs=ssl.CERT_REQUIRED)
++    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-root-ca.crt")
++    context.load_cert_chain(certfile="../ssl/client-revoked.crt", keyfile="../ssl/client-revoked.key")
++    ssock = context.wrap_socket(sock, server_hostname="localhost")
+     ssock.settimeout(20)
+     try:
+         ssock.connect(("localhost", port1))
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-cert-auth-without.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-cert-auth-without.py
+@@ -28,7 +28,8 @@ connect_packet = mosq_test.gen_connect("
+ broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port2, use_conf=True)
+ 
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", cert_reqs=ssl.CERT_REQUIRED)
++context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
++ssock = context.wrap_socket(sock, server_hostname="localhost")
+ ssock.settimeout(20)
+ try:
+     ssock.connect(("localhost", port1))
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-cert-auth.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-cert-auth.py
+@@ -32,7 +32,9 @@ broker = mosq_test.start_broker(filename
+ 
+ try:
+     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-    ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", certfile="../ssl/client.crt", keyfile="../ssl/client.key", cert_reqs=ssl.CERT_REQUIRED)
++    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-root-ca.crt")
++    context.load_cert_chain(certfile="../ssl/client.crt", keyfile="../ssl/client.key")
++    ssock = context.wrap_socket(sock, server_hostname="localhost")
+     ssock.settimeout(20)
+     ssock.connect(("localhost", port1))
+ 
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-identity.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-identity.py
+@@ -33,7 +33,9 @@ broker = mosq_test.start_broker(filename
+ 
+ try:
+     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-    ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", certfile="../ssl/client.crt", keyfile="../ssl/client.key", cert_reqs=ssl.CERT_REQUIRED)
++    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-root-ca.crt")
++    context.load_cert_chain(certfile="../ssl/client.crt", keyfile="../ssl/client.key")
++    ssock = context.wrap_socket(sock, server_hostname="localhost")
+     ssock.settimeout(20)
+     ssock.connect(("localhost", port1))
+ 
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-no-auth-wrong-ca.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-no-auth-wrong-ca.py
+@@ -29,7 +29,8 @@ connack_packet = mosq_test.gen_connack(r
+ broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port2, use_conf=True)
+ 
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-alt-ca.crt", cert_reqs=ssl.CERT_REQUIRED)
++context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-alt-ca.crt")
++ssock = context.wrap_socket(sock, server_hostname="localhost")
+ ssock.settimeout(20)
+ try:
+     ssock.connect(("localhost", port1))
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-no-auth.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-no-auth.py
+@@ -32,7 +32,8 @@ broker = mosq_test.start_broker(filename
+ 
+ try:
+     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-    ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", cert_reqs=ssl.CERT_REQUIRED)
++    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-root-ca.crt")
++    ssock = context.wrap_socket(sock, server_hostname="localhost")
+     ssock.settimeout(20)
+     ssock.connect(("localhost", port1))
+ 
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-connect-no-identity.py
++++ mosquitto-2.0.11/test/broker/08-ssl-connect-no-identity.py
+@@ -32,7 +32,8 @@ broker = mosq_test.start_broker(filename
+ 
+ try:
+     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-    ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", cert_reqs=ssl.CERT_REQUIRED)
++    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-root-ca.crt")
++    ssock = context.wrap_socket(sock, server_hostname="localhost")
+     ssock.settimeout(20)
+     ssock.connect(("localhost", port1))
+     
+--- mosquitto-2.0.11.orig/test/broker/08-ssl-hup-disconnect.py
++++ mosquitto-2.0.11/test/broker/08-ssl-hup-disconnect.py
+@@ -43,7 +43,9 @@ def do_test(option):
+ 
+     try:
+         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+-        ssock = ssl.wrap_socket(sock, ca_certs="../ssl/test-root-ca.crt", certfile="../ssl/client.crt", keyfile="../ssl/client.key", cert_reqs=ssl.CERT_REQUIRED)
++        context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile="../ssl/test-root-ca.crt")
++        context.load_cert_chain(certfile="../ssl/client.crt", keyfile="../ssl/client.key")
++        ssock = context.wrap_socket(sock, server_hostname="localhost")
+         ssock.settimeout(20)
+         ssock.connect(("localhost", port))
+         mosq_test.do_send_receive(ssock, connect_packet, connack_packet, "connack")
+--- mosquitto-2.0.11.orig/test/lib/08-ssl-connect-cert-auth-enc.py
++++ mosquitto-2.0.11/test/lib/08-ssl-connect-cert-auth-enc.py
+@@ -26,9 +26,10 @@ disconnect_packet = mosq_test.gen_discon
+ 
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+-ssock = ssl.wrap_socket(sock, ca_certs="../ssl/all-ca.crt",
+-        keyfile="../ssl/server.key", certfile="../ssl/server.crt",
+-        server_side=True, cert_reqs=ssl.CERT_REQUIRED)
++context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH, cafile="../ssl/all-ca.crt")
++context.load_cert_chain(certfile="../ssl/server.crt", keyfile="../ssl/server.key")
++context.verify_mode = ssl.CERT_REQUIRED
++ssock = context.wrap_socket(sock, server_side=True)
+ ssock.settimeout(10)
+ ssock.bind(('', port))
+ ssock.listen(5)
+--- mosquitto-2.0.11.orig/test/lib/08-ssl-connect-cert-auth.py
++++ mosquitto-2.0.11/test/lib/08-ssl-connect-cert-auth.py
+@@ -26,9 +26,10 @@ disconnect_packet = mosq_test.gen_discon
+ 
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+-ssock = ssl.wrap_socket(sock, ca_certs="../ssl/all-ca.crt",
+-        keyfile="../ssl/server.key", certfile="../ssl/server.crt",
+-        server_side=True, cert_reqs=ssl.CERT_REQUIRED)
++context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH, cafile="../ssl/all-ca.crt")
++context.load_cert_chain(certfile="../ssl/server.crt", keyfile="../ssl/server.key")
++context.verify_mode = ssl.CERT_REQUIRED
++ssock = context.wrap_socket(sock, server_side=True)
+ ssock.settimeout(10)
+ ssock.bind(('', port))
+ ssock.listen(5)
+--- mosquitto-2.0.11.orig/test/lib/08-ssl-connect-no-auth.py
++++ mosquitto-2.0.11/test/lib/08-ssl-connect-no-auth.py
+@@ -25,7 +25,9 @@ disconnect_packet = mosq_test.gen_discon
+ 
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+-ssock = ssl.wrap_socket(sock, ca_certs="../ssl/all-ca.crt", keyfile="../ssl/server.key", certfile="../ssl/server.crt", server_side=True)
++context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH, cafile="../ssl/all-ca.crt")
++context.load_cert_chain(certfile="../ssl/server.crt", keyfile="../ssl/server.key")
++ssock = context.wrap_socket(sock, server_side=True)
+ ssock.settimeout(10)
+ ssock.bind(('', port))
+ ssock.listen(5)
+--- mosquitto-2.0.11.orig/test/lib/08-ssl-fake-cacert.py
++++ mosquitto-2.0.11/test/lib/08-ssl-fake-cacert.py
+@@ -10,9 +10,10 @@ if sys.version < '2.7':
+ 
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+-ssock = ssl.wrap_socket(sock, ca_certs="../ssl/all-ca.crt",
+-        keyfile="../ssl/server.key", certfile="../ssl/server.crt",
+-        server_side=True, cert_reqs=ssl.CERT_REQUIRED)
++context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH, cafile="../ssl/all-ca.crt")
++context.load_cert_chain(certfile="../ssl/server.crt", keyfile="../ssl/server.key")
++context.verfiy_mode = ssl.CERT_REQUIRED)
++ssock = context.wrap_socket(sock, server_side=True)
+ ssock.settimeout(10)
+ ssock.bind(('', port))
+ ssock.listen(5)

Reply via email to