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