Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-paramiko for openSUSE:Factory 
checked in at 2022-05-01 18:53:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-paramiko (Old)
 and      /work/SRC/openSUSE:Factory/.python-paramiko.new.1538 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-paramiko"

Sun May  1 18:53:27 2022 rev:54 rq:973836 version:2.10.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-paramiko/python-paramiko.changes  
2022-04-10 19:05:22.926514429 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-paramiko.new.1538/python-paramiko.changes    
    2022-05-01 18:53:35.639163260 +0200
@@ -1,0 +2,14 @@
+Thu Apr 28 21:26:08 UTC 2022 - Dirk M??ller <[email protected]>
+
+- update to 2.10.4:
+  * Servers offering certificate variants of hostkey algorithms (eg
+    [email protected]) could not have their host keys verified by
+    Paramiko clients, as it only ever considered non-cert key types for that
+    part of connection handshaking. This has been fixed.
+  * gq PKey instances??? __eq__ did not have the usual safety guard in place to
+    ensure they were being compared to another PKey object, causing occasional
+    spurious BadHostKeyException (among other things). This has been fixed.
+  * Update camelCase method calls against the threading module to be 
snake_case;
+    this and related tweaks should fix some deprecation warnings under Python 
3.10.
+
+-------------------------------------------------------------------

Old:
----
  paramiko-2.10.3.tar.gz

New:
----
  paramiko-2.10.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-paramiko.spec ++++++
--- /var/tmp/diff_new_pack.UFYGd0/_old  2022-05-01 18:53:36.811164348 +0200
+++ /var/tmp/diff_new_pack.UFYGd0/_new  2022-05-01 18:53:36.811164348 +0200
@@ -19,12 +19,12 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-paramiko
-Version:        2.10.3
+Version:        2.10.4
 Release:        0
 Summary:        SSH2 protocol library
 License:        LGPL-2.1-or-later
 Group:          Documentation/Other
-URL:            http://www.paramiko.org/
+URL:            https://www.paramiko.org/
 Source0:        
https://files.pythonhosted.org/packages/source/p/paramiko/paramiko-%{version}.tar.gz
 Patch0:         paramiko-test_extend_timeout.patch
 # PATCH-FIX-UPSTREAM paramiko-pr1655-remove-pytest-relaxed.patch 
gh#paramiko/paramiko#1655 -- pytest-relaxed is broken

++++++ paramiko-2.10.3.tar.gz -> paramiko-2.10.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/PKG-INFO new/paramiko-2.10.4/PKG-INFO
--- old/paramiko-2.10.3/PKG-INFO        2022-03-18 22:02:27.000000000 +0100
+++ new/paramiko-2.10.4/PKG-INFO        2022-04-25 18:26:15.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: paramiko
-Version: 2.10.3
+Version: 2.10.4
 Summary: SSH2 protocol library
 Home-page: https://paramiko.org
 Author: Jeff Forcier
@@ -77,7 +77,7 @@
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
-Provides-Extra: gssapi
-Provides-Extra: invoke
-Provides-Extra: all
 Provides-Extra: ed25519
+Provides-Extra: all
+Provides-Extra: invoke
+Provides-Extra: gssapi
Binary files old/paramiko-2.10.3/docs/.doctrees/environment.pickle and 
new/paramiko-2.10.4/docs/.doctrees/environment.pickle differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/paramiko/_version.py 
new/paramiko-2.10.4/paramiko/_version.py
--- old/paramiko-2.10.3/paramiko/_version.py    2022-03-18 22:02:18.000000000 
+0100
+++ new/paramiko-2.10.4/paramiko/_version.py    2022-04-25 18:25:50.000000000 
+0200
@@ -1,2 +1,2 @@
-__version_info__ = (2, 10, 3)
+__version_info__ = (2, 10, 4)
 __version__ = ".".join(map(str, __version_info__))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/paramiko/buffered_pipe.py 
new/paramiko-2.10.4/paramiko/buffered_pipe.py
--- old/paramiko-2.10.3/paramiko/buffered_pipe.py       2022-03-18 
21:57:20.000000000 +0100
+++ new/paramiko-2.10.4/paramiko/buffered_pipe.py       2022-04-25 
18:22:40.000000000 +0200
@@ -101,7 +101,7 @@
             if self._event is not None:
                 self._event.set()
             self._buffer_frombytes(b(data))
-            self._cv.notifyAll()
+            self._cv.notify_all()
         finally:
             self._lock.release()
 
@@ -203,7 +203,7 @@
         self._lock.acquire()
         try:
             self._closed = True
-            self._cv.notifyAll()
+            self._cv.notify_all()
             if self._event is not None:
                 self._event.set()
         finally:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/paramiko/channel.py 
new/paramiko-2.10.4/paramiko/channel.py
--- old/paramiko-2.10.3/paramiko/channel.py     2022-03-18 21:57:20.000000000 
+0100
+++ new/paramiko-2.10.4/paramiko/channel.py     2022-04-25 18:22:40.000000000 
+0200
@@ -1066,7 +1066,7 @@
             if self.ultra_debug:
                 self._log(DEBUG, "window up {}".format(nbytes))
             self.out_window_size += nbytes
-            self.out_buffer_cv.notifyAll()
+            self.out_buffer_cv.notify_all()
         finally:
             self.lock.release()
 
@@ -1230,7 +1230,7 @@
         self.closed = True
         self.in_buffer.close()
         self.in_stderr_buffer.close()
-        self.out_buffer_cv.notifyAll()
+        self.out_buffer_cv.notify_all()
         # Notify any waiters that we are closed
         self.event.set()
         self.status_event.set()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/paramiko/pkey.py 
new/paramiko-2.10.4/paramiko/pkey.py
--- old/paramiko-2.10.3/paramiko/pkey.py        2022-03-18 22:01:21.000000000 
+0100
+++ new/paramiko-2.10.4/paramiko/pkey.py        2022-04-25 18:25:27.000000000 
+0200
@@ -140,7 +140,7 @@
         return cmp(self.asbytes(), other.asbytes())  # noqa
 
     def __eq__(self, other):
-        return self._fields == other._fields
+        return isinstance(other, PKey) and self._fields == other._fields
 
     def __hash__(self):
         return hash(self._fields)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/paramiko/sftp_file.py 
new/paramiko-2.10.4/paramiko/sftp_file.py
--- old/paramiko-2.10.3/paramiko/sftp_file.py   2022-03-18 21:57:20.000000000 
+0100
+++ new/paramiko-2.10.4/paramiko/sftp_file.py   2022-04-25 18:22:40.000000000 
+0200
@@ -527,7 +527,7 @@
         self._prefetch_done = False
 
         t = threading.Thread(target=self._prefetch_thread, args=(chunks,))
-        t.setDaemon(True)
+        t.daemon = True
         t.start()
 
     def _prefetch_thread(self, chunks):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/paramiko/transport.py 
new/paramiko-2.10.4/paramiko/transport.py
--- old/paramiko-2.10.3/paramiko/transport.py   2022-03-18 21:57:20.000000000 
+0100
+++ new/paramiko-2.10.4/paramiko/transport.py   2022-04-25 18:25:27.000000000 
+0200
@@ -450,7 +450,7 @@
                 )
         # okay, normal socket-ish flow here...
         threading.Thread.__init__(self)
-        self.setDaemon(True)
+        self.daemon = True
         self.sock = sock
         # we set the timeout so we can check self.active periodically to
         # see if we should bail. socket.timeout exception is never propagated.
@@ -549,7 +549,15 @@
 
     @property
     def preferred_keys(self):
-        return self._filter_algorithm("keys")
+        # Interleave cert variants here; resistant to various background
+        # overwriting of _preferred_keys, and necessary as hostkeys can't use
+        # the logic pubkey auth does re: injecting/checking for certs at
+        # runtime
+        filtered = self._filter_algorithm("keys")
+        return tuple(
+            filtered
+            + tuple("{}[email protected]".format(x) for x in filtered)
+        )
 
     @property
     def preferred_pubkeys(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/paramiko.egg-info/PKG-INFO 
new/paramiko-2.10.4/paramiko.egg-info/PKG-INFO
--- old/paramiko-2.10.3/paramiko.egg-info/PKG-INFO      2022-03-18 
22:02:27.000000000 +0100
+++ new/paramiko-2.10.4/paramiko.egg-info/PKG-INFO      2022-04-25 
18:26:15.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: paramiko
-Version: 2.10.3
+Version: 2.10.4
 Summary: SSH2 protocol library
 Home-page: https://paramiko.org
 Author: Jeff Forcier
@@ -77,7 +77,7 @@
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
-Provides-Extra: gssapi
-Provides-Extra: invoke
-Provides-Extra: all
 Provides-Extra: ed25519
+Provides-Extra: all
+Provides-Extra: invoke
+Provides-Extra: gssapi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/paramiko.egg-info/SOURCES.txt 
new/paramiko-2.10.4/paramiko.egg-info/SOURCES.txt
--- old/paramiko-2.10.3/paramiko.egg-info/SOURCES.txt   2022-03-18 
22:02:27.000000000 +0100
+++ new/paramiko-2.10.4/paramiko.egg-info/SOURCES.txt   2022-04-25 
18:26:15.000000000 +0200
@@ -157,7 +157,6 @@
 tests/badhash_key2.ed25519.key
 tests/conftest.py
 tests/loop.py
-tests/server.py
 tests/stub_sftp.py
 tests/test_agent.py
 tests/test_auth.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/tests/loop.py 
new/paramiko-2.10.4/tests/loop.py
--- old/paramiko-2.10.3/tests/loop.py   2022-03-18 21:57:20.000000000 +0100
+++ new/paramiko-2.10.4/tests/loop.py   2022-04-25 18:22:40.000000000 +0200
@@ -81,7 +81,7 @@
         self.__lock.acquire()
         try:
             self.__in_buffer += data
-            self.__cv.notifyAll()
+            self.__cv.notify_all()
         finally:
             self.__lock.release()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/tests/server.py 
new/paramiko-2.10.4/tests/server.py
--- old/paramiko-2.10.3/tests/server.py 2021-12-24 20:20:03.000000000 +0100
+++ new/paramiko-2.10.4/tests/server.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,176 +0,0 @@
-from contextlib import contextmanager
-import socket
-import threading
-
-from paramiko import DSSKey, RSAKey, ServerInterface, Transport
-from paramiko import AUTH_FAILED, AUTH_SUCCESSFUL
-from paramiko import OPEN_SUCCEEDED, OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
-
-
-LONG_BANNER = """\
-Welcome to the super-fun-land BBS, where our MOTD is the primary thing we
-provide. All rights reserved. Offer void in Tennessee. Stunt drivers were
-used. Do not attempt at home. Some restrictions apply.
-
-Happy birthday to Commie the cat!
-
-Note: An SSH banner may eventually appear.
-
-Maybe.
-"""
-
-
-class NullServer(ServerInterface):
-    paranoid_did_password = False
-    paranoid_did_public_key = False
-    paranoid_key = DSSKey.from_private_key_file("tests/test_dss.key")
-
-    def __init__(self, allowed_keys=None):
-        self.allowed_keys = allowed_keys if allowed_keys is not None else []
-
-    def get_allowed_auths(self, username):
-        if username == "slowdive":
-            return "publickey,password"
-        return "publickey"
-
-    def check_auth_password(self, username, password):
-        if (username == "slowdive") and (password == "pygmalion"):
-            return AUTH_SUCCESSFUL
-        return AUTH_FAILED
-
-    def check_auth_publickey(self, username, key):
-        if key in self.allowed_keys:
-            return AUTH_SUCCESSFUL
-        return AUTH_FAILED
-
-    def check_channel_request(self, kind, chanid):
-        if kind == "bogus":
-            return OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
-        return OPEN_SUCCEEDED
-
-    def check_channel_exec_request(self, channel, command):
-        if command != b"yes":
-            return False
-        return True
-
-    def check_channel_shell_request(self, channel):
-        return True
-
-    def check_global_request(self, kind, msg):
-        self._global_request = kind
-        # NOTE: for w/e reason, older impl of this returned False always, even
-        # tho that's only supposed to occur if the request cannot be served.
-        # For now, leaving that the default unless test supplies specific
-        # 'acceptable' request kind
-        return kind == "acceptable"
-
-    def check_channel_x11_request(
-        self,
-        channel,
-        single_connection,
-        auth_protocol,
-        auth_cookie,
-        screen_number,
-    ):
-        self._x11_single_connection = single_connection
-        self._x11_auth_protocol = auth_protocol
-        self._x11_auth_cookie = auth_cookie
-        self._x11_screen_number = screen_number
-        return True
-
-    def check_port_forward_request(self, addr, port):
-        self._listen = socket.socket()
-        self._listen.bind(("127.0.0.1", 0))
-        self._listen.listen(1)
-        return self._listen.getsockname()[1]
-
-    def cancel_port_forward_request(self, addr, port):
-        self._listen.close()
-        self._listen = None
-
-    def check_channel_direct_tcpip_request(self, chanid, origin, destination):
-        self._tcpip_dest = destination
-        return OPEN_SUCCEEDED
-
-
-@contextmanager
-def server(
-    hostkey=None,
-    init=None,
-    server_init=None,
-    client_init=None,
-    connect=None,
-    pubkeys=None,
-    catch_error=False,
-):
-    """
-    SSH server contextmanager for testing.
-
-    :param hostkey:
-        Host key to use for the server; if None, loads
-        ``test_rsa.key``.
-    :param init:
-        Default `Transport` constructor kwargs to use for both sides.
-    :param server_init:
-        Extends and/or overrides ``init`` for server transport only.
-    :param client_init:
-        Extends and/or overrides ``init`` for client transport only.
-    :param connect:
-        Kwargs to use for ``connect()`` on the client.
-    :param pubkeys:
-        List of public keys for auth.
-    :param catch_error:
-        Whether to capture connection errors & yield from contextmanager.
-        Necessary for connection_time exception testing.
-    """
-    if init is None:
-        init = {}
-    if server_init is None:
-        server_init = {}
-    socks = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-    socks.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-    socks.bind(("", 2223))
-    socks.listen()
-    client, addr = socks.accept()
-    ts = Transport(client, **dict(init, **server_init))
-
-    if hostkey is None:
-        hostkey = RSAKey.from_private_key_file("tests/test_rsa.key")
-    ts.add_server_key(hostkey)
-    event = threading.Event()
-    server = NullServer(allowed_keys=pubkeys)
-    ts.start_server(event, server)
-
-    yield ts
-    chan = ts.accept()
-    if not chan:
-        return
-    event.wait()
-    chan.send("\r\n\r\nWelcome to my dorky little BBS!\r\n\r\n")
-    chan.close()
-
-    ts.close()
-    client.close()
-
-
-_disable_sha2 = dict(
-    disabled_algorithms=dict(keys=["rsa-sha2-256", "rsa-sha2-512"])
-)
-_disable_sha1 = dict(disabled_algorithms=dict(keys=["ssh-rsa"]))
-_disable_sha2_pubkey = dict(
-    disabled_algorithms=dict(pubkeys=["rsa-sha2-256", "rsa-sha2-512"])
-)
-_disable_sha1_pubkey = dict(disabled_algorithms=dict(pubkeys=["ssh-rsa"]))
-
-import logging
-
-logging.basicConfig(level=logging.DEBUG)
-privkey = RSAKey.from_private_key_file("tests/test_rsa.key")
-
-
-with server(
-    pubkeys=[privkey],
-    server_init=dict(server_sig_algs=True),
-    init=dict(disabled_algorithms=dict(pubkeys=["rsa-sha2-512"])),
-) as ts:
-    pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/tests/test_pkey.py 
new/paramiko-2.10.4/tests/test_pkey.py
--- old/paramiko-2.10.3/tests/test_pkey.py      2022-03-18 22:01:21.000000000 
+0100
+++ new/paramiko-2.10.4/tests/test_pkey.py      2022-04-25 18:25:27.000000000 
+0200
@@ -624,6 +624,11 @@
         for key1, key2 in self.keys():
             assert key1 == key2
 
+    def test_keys_are_not_equal_to_other(self):
+        for value in [None, True, ""]:
+            for key1, _ in self.keys():
+                assert key1 != value
+
     def test_keys_are_hashable(self):
         # NOTE: this isn't a great test due to hashseed randomization under
         # Python 3 preventing use of static values, but it does still prove
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/paramiko-2.10.3/tests/test_transport.py 
new/paramiko-2.10.4/tests/test_transport.py
--- old/paramiko-2.10.3/tests/test_transport.py 2022-03-18 21:57:20.000000000 
+0100
+++ new/paramiko-2.10.4/tests/test_transport.py 2022-04-25 18:25:27.000000000 
+0200
@@ -756,7 +756,7 @@
                 threading.Thread.__init__(
                     self, None, None, self.__class__.__name__
                 )
-                self.setDaemon(True)
+                self.daemon = True
                 self.chan = chan
                 self.iterations = iterations
                 self.done_event = done_event
@@ -780,7 +780,7 @@
                 threading.Thread.__init__(
                     self, None, None, self.__class__.__name__
                 )
-                self.setDaemon(True)
+                self.daemon = True
                 self.chan = chan
                 self.done_event = done_event
                 self.watchdog_event = threading.Event()
@@ -1121,7 +1121,12 @@
         t = Transport(sock=Mock())
         assert t.preferred_ciphers == t._preferred_ciphers
         assert t.preferred_macs == t._preferred_macs
-        assert t.preferred_keys == t._preferred_keys
+        assert t.preferred_keys == tuple(
+            t._preferred_keys
+            + tuple(
+                "{}[email protected]".format(x) for x in t._preferred_keys
+            )
+        )
         assert t.preferred_kex == t._preferred_kex
 
     def test_preferred_lists_filter_disabled_algorithms(self):
@@ -1140,6 +1145,7 @@
         assert "hmac-md5" not in t.preferred_macs
         assert "ssh-dss" in t._preferred_keys
         assert "ssh-dss" not in t.preferred_keys
+        assert "[email protected]" not in t.preferred_keys
         assert "diffie-hellman-group14-sha256" in t._preferred_kex
         assert "diffie-hellman-group14-sha256" not in t.preferred_kex
 

Reply via email to