From b590c8d7572b727d565cc0b8ff660d43569845de Mon Sep 17 00:00:00 2001 From: root Date: Fri, 12 Jun 2026 19:09:37 -0500 Subject: Adding metadata --- dev-python/paramiko/Manifest | 3 + .../files/paramiko-3.2.0-disable-server.patch | 58 +++++++++ .../files/paramiko-3.2.0-nih-test-deps.patch | 134 +++++++++++++++++++++ .../files/paramiko-5.0.0-nih-test-deps.patch | 129 ++++++++++++++++++++ dev-python/paramiko/metadata.xml | 28 +++++ dev-python/paramiko/paramiko-3.5.1.ebuild | 72 +++++++++++ dev-python/paramiko/paramiko-4.0.0-r1.ebuild | 63 ++++++++++ dev-python/paramiko/paramiko-5.0.0.ebuild | 46 +++++++ 8 files changed, 533 insertions(+) create mode 100644 dev-python/paramiko/Manifest create mode 100644 dev-python/paramiko/files/paramiko-3.2.0-disable-server.patch create mode 100644 dev-python/paramiko/files/paramiko-3.2.0-nih-test-deps.patch create mode 100644 dev-python/paramiko/files/paramiko-5.0.0-nih-test-deps.patch create mode 100644 dev-python/paramiko/metadata.xml create mode 100644 dev-python/paramiko/paramiko-3.5.1.ebuild create mode 100644 dev-python/paramiko/paramiko-4.0.0-r1.ebuild create mode 100644 dev-python/paramiko/paramiko-5.0.0.ebuild (limited to 'dev-python/paramiko') diff --git a/dev-python/paramiko/Manifest b/dev-python/paramiko/Manifest new file mode 100644 index 000000000000..3cae142c29ff --- /dev/null +++ b/dev-python/paramiko/Manifest @@ -0,0 +1,3 @@ +DIST paramiko-3.5.1.gh.tar.gz 376472 BLAKE2B e00c0e1ab62eb443b3dfb5b1ebfacb9ac2f0f7e4946dcb986f8a211c22e645acd6d96ceaf709a954bf1f1554e8ce57ea1c6269984184025de39d9d9c4ff909d9 SHA512 a1198f7f21cfbdbb843acb59cc431f9af0a47d687a7e9702244f36b555bb37b75149c0e22302040400f20df50dee1d83154e5acd582982ca44f6cf68ff592675 +DIST paramiko-4.0.0.gh.tar.gz 430056 BLAKE2B 2fc4843de770d824928489284d65bb9a6d87efaa185ba5a2e1c8951a8985ca8c535f89a3a5f7d3745119a8fdf142fc7e8655c6ef44965e55c95b7db1cf567144 SHA512 5a6d4cf000f13e1a9ee2558f18a942e3b7f334807b007bed77cfb9d50f15d423b3490a0deca08f82749391092d2514c44cd7d8dda2dc66436db3816c2501c72a +DIST paramiko-5.0.0.gh.tar.gz 343905 BLAKE2B ebc99a2b1d6f4f962837c79b53eb8db13ec3bea3763e1c875de008a23cfad0451df2ed8395e2076033bbac1630557541e388d6148a3b00412772d69cb9e66245 SHA512 8130c0341e6ab39e8eb0f5ad187ecda2fb14db44995ccffbc3db0bb3cd568daca750224c3cbf4724b7ac503624b2fa72e78ad57e2218e69d471a43cfa8b4e63e diff --git a/dev-python/paramiko/files/paramiko-3.2.0-disable-server.patch b/dev-python/paramiko/files/paramiko-3.2.0-disable-server.patch new file mode 100644 index 000000000000..942f5161ee6f --- /dev/null +++ b/dev-python/paramiko/files/paramiko-3.2.0-disable-server.patch @@ -0,0 +1,58 @@ +From a47e9bdc80224c9ceafcea6da5cea1539ddfbd4d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Fri, 26 May 2023 06:05:13 +0200 +Subject: [PATCH 3/3] Disable server component due to security issues + +--- + paramiko/transport.py | 4 ++++ + tests/conftest.py | 5 +++++ + 2 files changed, 9 insertions(+) + +diff --git a/paramiko/transport.py b/paramiko/transport.py +index 8785d6bb..803d07d1 100644 +--- a/paramiko/transport.py ++++ b/paramiko/transport.py +@@ -120,6 +120,8 @@ from paramiko.util import ( + ) + + ++SERVER_DISABLED_BY_GENTOO = True ++ + # for thread cleanup + _active_threads = [] + +@@ -768,6 +770,8 @@ class Transport(threading.Thread, ClosingContextManager): + `.SSHException` -- if negotiation fails (and no ``event`` was + passed in) + """ ++ if SERVER_DISABLED_BY_GENTOO: ++ raise Exception("Disabled by Gentoo for security reasons. Enable with 'server' USE flag") + if server is None: + server = ServerInterface() + self.server_mode = True +diff --git a/tests/conftest.py b/tests/conftest.py +index 7546aae4..804a289e 100644 +--- a/tests/conftest.py ++++ b/tests/conftest.py +@@ -16,6 +16,7 @@ from paramiko import ( + Ed25519Key, + ECDSAKey, + PKey, ++ transport, + ) + + from ._loop import LoopSocket +@@ -23,6 +24,10 @@ from ._stub_sftp import StubServer, StubSFTPServer + from ._util import _support + + ++# We need the server component for testing ++transport.SERVER_DISABLED_BY_GENTOO = False ++ ++ + # Perform logging by default; pytest will capture and thus hide it normally, + # presenting it on error/failure. (But also allow turning it off when doing + # very pinpoint debugging - e.g. using breakpoints, so you don't want output +-- +2.40.1 + diff --git a/dev-python/paramiko/files/paramiko-3.2.0-nih-test-deps.patch b/dev-python/paramiko/files/paramiko-3.2.0-nih-test-deps.patch new file mode 100644 index 000000000000..84fb618dffb8 --- /dev/null +++ b/dev-python/paramiko/files/paramiko-3.2.0-nih-test-deps.patch @@ -0,0 +1,134 @@ +From 33c56a44f425bb5c4bf63759fbe85cfee06ab087 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Tue, 17 May 2022 07:26:36 +0200 +Subject: [PATCH 1/3] Replace pytest-relaxed with plain pytest.raises + +There is really no technical reason to bring pytest-relaxed to call +@raises as a decorator while plain pytest works just fine. Plus, +pytest.raises() is used in test_sftp already. + +pytest-relaxed causes humongous breakage to other packages +on the system. It has been banned from Gentoo for this reason. +--- + tests/test_client.py | 19 +++++++++---------- + 1 file changed, 9 insertions(+), 10 deletions(-) + +diff --git a/tests/test_client.py b/tests/test_client.py +index 1c0c6c84..c12cbe9a 100644 +--- a/tests/test_client.py ++++ b/tests/test_client.py +@@ -33,7 +33,6 @@ import weakref + from tempfile import mkstemp + + import pytest +-from pytest_relaxed import raises + from unittest.mock import patch, Mock + + import paramiko +@@ -799,11 +798,11 @@ class PasswordPassphraseTests(ClientTest): + + # TODO: more granular exception pending #387; should be signaling "no auth + # methods available" because no key and no password +- @raises(SSHException) + @requires_sha1_signing + def test_passphrase_kwarg_not_used_for_password_auth(self): +- # Using the "right" password in the "wrong" field shouldn't work. +- self._test_connection(passphrase="pygmalion") ++ with pytest.raises(SSHException): ++ # Using the "right" password in the "wrong" field shouldn't work. ++ self._test_connection(passphrase="pygmalion") + + @requires_sha1_signing + def test_passphrase_kwarg_used_for_key_passphrase(self): +@@ -823,15 +822,15 @@ class PasswordPassphraseTests(ClientTest): + password="television", + ) + +- @raises(AuthenticationException) # TODO: more granular + @requires_sha1_signing + def test_password_kwarg_not_used_for_passphrase_when_passphrase_kwarg_given( # noqa + self, + ): + # Sanity: if we're given both fields, the password field is NOT used as + # a passphrase. +- self._test_connection( +- key_filename=_support("test_rsa_password.key"), +- password="television", +- passphrase="wat? lol no", +- ) ++ with pytest.raises(AuthenticationException): ++ self._test_connection( ++ key_filename=_support("test_rsa_password.key"), ++ password="television", ++ passphrase="wat? lol no", ++ ) +-- +2.40.1 + +From a75bdc46a6eb72a0b0e80eeafad2e2a2536a9bd8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Sat, 21 Jan 2023 06:56:09 +0100 +Subject: [PATCH 2/3] Remove icecream dep + +--- + tests/conftest.py | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/tests/conftest.py b/tests/conftest.py +index 12b97283..7546aae4 100644 +--- a/tests/conftest.py ++++ b/tests/conftest.py +@@ -22,13 +22,6 @@ from ._loop import LoopSocket + from ._stub_sftp import StubServer, StubSFTPServer + from ._util import _support + +-from icecream import ic, install as install_ic +- +- +-# Better print() for debugging - use ic()! +-install_ic() +-ic.configureOutput(includeContext=True) +- + + # Perform logging by default; pytest will capture and thus hide it normally, + # presenting it on error/failure. (But also allow turning it off when doing +-- +2.40.1 + +From a4f96f21450942398b46f2b5f125b89297f3f3f2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Fri, 26 May 2023 06:18:25 +0200 +Subject: [PATCH] Remove pointless use of Lexicon vendored from invoke with + class + +--- + tests/conftest.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/tests/conftest.py b/tests/conftest.py +index 7546aae4..45362de8 100644 +--- a/tests/conftest.py ++++ b/tests/conftest.py +@@ -4,8 +4,6 @@ import shutil + import threading + from pathlib import Path + +-from invoke.vendor.lexicon import Lexicon +- + import pytest + from paramiko import ( + SFTPServer, +@@ -132,6 +130,10 @@ for datum in key_data: + datum.insert(0, short) + + ++class Lexicon: ++ pass ++ ++ + @pytest.fixture(scope="session", params=key_data, ids=lambda x: x[0]) + def keys(request): + """ +-- +2.40.1 + diff --git a/dev-python/paramiko/files/paramiko-5.0.0-nih-test-deps.patch b/dev-python/paramiko/files/paramiko-5.0.0-nih-test-deps.patch new file mode 100644 index 000000000000..e0193c4a091f --- /dev/null +++ b/dev-python/paramiko/files/paramiko-5.0.0-nih-test-deps.patch @@ -0,0 +1,129 @@ +From 58dbeb2d72fb00465b606c22c8f665ad7177a664 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Tue, 17 May 2022 07:26:36 +0200 +Subject: [PATCH 1/3] Replace pytest-relaxed with plain pytest.raises + +There is really no technical reason to bring pytest-relaxed to call +@raises as a decorator while plain pytest works just fine. Plus, +pytest.raises() is used in test_sftp already. + +pytest-relaxed causes humongous breakage to other packages +on the system. It has been banned from Gentoo for this reason. +--- + tests/test_client.py | 19 +++++++++---------- + 1 file changed, 9 insertions(+), 10 deletions(-) + +diff --git a/tests/test_client.py b/tests/test_client.py +index df66f7da..75e30501 100644 +--- a/tests/test_client.py ++++ b/tests/test_client.py +@@ -33,7 +33,6 @@ from tempfile import mkstemp + from unittest.mock import patch + + import pytest +-from pytest_relaxed import raises + + import paramiko + from paramiko import SSHClient +@@ -710,10 +709,10 @@ class PasswordPassphraseTests(ClientTest): + + # TODO: more granular exception pending #387; should be signaling "no auth + # methods available" because no key and no password +- @raises(SSHException) + def test_passphrase_kwarg_not_used_for_password_auth(self): +- # Using the "right" password in the "wrong" field shouldn't work. +- self._test_connection(passphrase="pygmalion") ++ with pytest.raises(SSHException): ++ # Using the "right" password in the "wrong" field shouldn't work. ++ self._test_connection(passphrase="pygmalion") + + def test_passphrase_kwarg_used_for_key_passphrase(self): + # Straightforward again, with new passphrase kwarg. +@@ -731,14 +730,14 @@ class PasswordPassphraseTests(ClientTest): + password="television", + ) + +- @raises(AuthenticationException) # TODO: more granular + def test_password_kwarg_not_used_for_passphrase_when_passphrase_kwarg_given( # noqa + self, + ): + # Sanity: if we're given both fields, the password field is NOT used as + # a passphrase. +- self._test_connection( +- key_filename=_support("test_rsa_password.key"), +- password="television", +- passphrase="wat? lol no", +- ) ++ with pytest.raises(AuthenticationException): ++ self._test_connection( ++ key_filename=_support("test_rsa_password.key"), ++ password="television", ++ passphrase="wat? lol no", ++ ) +From 42ddab757cb5f9cc71a5924443620ad08f02550a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Sat, 21 Jan 2023 06:56:09 +0100 +Subject: [PATCH 2/3] Remove icecream dep + +--- + tests/conftest.py | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/tests/conftest.py b/tests/conftest.py +index 4e9ae8a5..ef0b1231 100644 +--- a/tests/conftest.py ++++ b/tests/conftest.py +@@ -5,8 +5,6 @@ import threading + from pathlib import Path + + import pytest +-from icecream import ic +-from icecream import install as install_ic + from invoke.vendor.lexicon import Lexicon + + from paramiko import ( +@@ -23,10 +21,6 @@ from ._loop import LoopSocket + from ._stub_sftp import StubServer, StubSFTPServer + from ._util import _support + +-# Better print() for debugging - use ic()! +-install_ic() +-ic.configureOutput(includeContext=True) +- + + # Perform logging by default; pytest will capture and thus hide it normally, + # presenting it on error/failure. (But also allow turning it off when doing +From f67b8881361358151a2ce1937323366f5303ea50 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Fri, 26 May 2023 06:18:25 +0200 +Subject: [PATCH 3/3] Remove pointless use of Lexicon vendored from invoke with + class + +--- + tests/conftest.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/tests/conftest.py b/tests/conftest.py +index ef0b1231..64b7e0dc 100644 +--- a/tests/conftest.py ++++ b/tests/conftest.py +@@ -5,8 +5,6 @@ import threading + from pathlib import Path + + import pytest +-from invoke.vendor.lexicon import Lexicon +- + from paramiko import ( + SFTP, + ECDSAKey, +@@ -146,6 +144,10 @@ key_data = [ + ] + + ++class Lexicon: ++ pass ++ ++ + @pytest.fixture(scope="session", params=key_data, ids=lambda x: x[1]) + def keys(request): + """ diff --git a/dev-python/paramiko/metadata.xml b/dev-python/paramiko/metadata.xml new file mode 100644 index 000000000000..0243508b07f6 --- /dev/null +++ b/dev-python/paramiko/metadata.xml @@ -0,0 +1,28 @@ + + + + + python@gentoo.org + Python + + +This is a library for making SSH2 connections (client or server). +Emphasis is on using SSH2 as an alternative to SSL for making secure +connections between python scripts. All major ciphers and hash methods +are supported. SFTP client mode is now supported too. + + +これはSSH2コネクション(クライアントとサーバー)を作り出すためのライブラリです。注 +目点はPython言語スクリプト間のセキュアなコネクションを作り出すSSLの代用にSSHを利 +用している所です。有名なCipherとHash処理の全てがサポートされています。SFTPクライ +アントもサポートされています。 + + + + Enable server feature + + + cpe:/a:paramiko:paramiko + + baldeagleos-repo + diff --git a/dev-python/paramiko/paramiko-3.5.1.ebuild b/dev-python/paramiko/paramiko-3.5.1.ebuild new file mode 100644 index 000000000000..128367f18b6a --- /dev/null +++ b/dev-python/paramiko/paramiko-3.5.1.ebuild @@ -0,0 +1,72 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=setuptools +PYTHON_COMPAT=( python3_{13..14} ) +PYTHON_REQ_USE="threads(+)" + +inherit distutils-r1 + +DESCRIPTION="SSH2 protocol library" +HOMEPAGE=" + https://www.paramiko.org/ + https://github.com/paramiko/paramiko/ + https://pypi.org/project/paramiko/ +" +SRC_URI=" + https://github.com/paramiko/paramiko/archive/${PV}.tar.gz + -> ${P}.gh.tar.gz +" + +LICENSE="LGPL-2.1" +SLOT="0" +KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-macos" +IUSE="examples server" + +RDEPEND=" + >=dev-python/bcrypt-3.1.3[${PYTHON_USEDEP}] + >=dev-python/cryptography-2.5[${PYTHON_USEDEP}] + >=dev-python/pynacl-1.0.1[${PYTHON_USEDEP}] + >=dev-python/pyasn1-0.1.7[${PYTHON_USEDEP}] +" +BDEPEND=" + test? ( + dev-python/pytest-rerunfailures[${PYTHON_USEDEP}] + ) +" + +distutils_enable_tests pytest + +EPYTEST_DESELECT=( + # upstream doesn't really maintain the gssapi support + tests/test_gssapi.py + tests/test_kex_gss.py + tests/test_ssh_gss.py +) + +src_prepare() { + local PATCHES=( + "${FILESDIR}/${PN}-3.2.0-nih-test-deps.patch" + ) + + if ! use server; then + PATCHES+=( "${FILESDIR}/${PN}-3.2.0-disable-server.patch" ) + fi + distutils-r1_src_prepare +} + +python_test() { + local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 + epytest -p rerunfailures --reruns=5 +} + +python_install_all() { + distutils-r1_python_install_all + + if use examples; then + docinto examples + dodoc -r demos/* + fi +} diff --git a/dev-python/paramiko/paramiko-4.0.0-r1.ebuild b/dev-python/paramiko/paramiko-4.0.0-r1.ebuild new file mode 100644 index 000000000000..b11daaff79c6 --- /dev/null +++ b/dev-python/paramiko/paramiko-4.0.0-r1.ebuild @@ -0,0 +1,63 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=setuptools +PYTHON_COMPAT=( python3_{13..14} ) +PYTHON_REQ_USE="threads(+)" + +inherit distutils-r1 + +DESCRIPTION="SSH2 protocol library" +HOMEPAGE=" + https://www.paramiko.org/ + https://github.com/paramiko/paramiko/ + https://pypi.org/project/paramiko/ +" +SRC_URI=" + https://github.com/paramiko/paramiko/archive/${PV}.tar.gz + -> ${P}.gh.tar.gz +" + +LICENSE="LGPL-2.1" +SLOT="0" +KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-macos" +IUSE="examples" + +RDEPEND=" + >=dev-python/bcrypt-3.2[${PYTHON_USEDEP}] + >=dev-python/cryptography-3.3[${PYTHON_USEDEP}] + >=dev-python/pynacl-1.5[${PYTHON_USEDEP}] +" + +EPYTEST_PLUGINS=() +EPYTEST_RERUNS=5 +distutils_enable_tests pytest + +EPYTEST_DESELECT=( + # upstream doesn't really maintain the gssapi support + tests/test_gssapi.py + tests/test_kex_gss.py + tests/test_ssh_gss.py +) + +src_prepare() { + local PATCHES=( + "${FILESDIR}/${PN}-3.2.0-nih-test-deps.patch" + ) + + distutils-r1_src_prepare + + # optional dep + sed -i -e '/invoke/d' pyproject.toml || die +} + +python_install_all() { + distutils-r1_python_install_all + + if use examples; then + docinto examples + dodoc -r demos/* + fi +} diff --git a/dev-python/paramiko/paramiko-5.0.0.ebuild b/dev-python/paramiko/paramiko-5.0.0.ebuild new file mode 100644 index 000000000000..2961af781f78 --- /dev/null +++ b/dev-python/paramiko/paramiko-5.0.0.ebuild @@ -0,0 +1,46 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=setuptools +PYTHON_COMPAT=( python3_{13..14} ) +PYTHON_REQ_USE="threads(+)" + +inherit distutils-r1 + +DESCRIPTION="SSH2 protocol library" +HOMEPAGE=" + https://www.paramiko.org/ + https://github.com/paramiko/paramiko/ + https://pypi.org/project/paramiko/ +" +SRC_URI=" + https://github.com/paramiko/paramiko/archive/${PV}.tar.gz + -> ${P}.gh.tar.gz +" + +LICENSE="LGPL-2.1" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos" + +RDEPEND=" + >=dev-python/bcrypt-3.2[${PYTHON_USEDEP}] + >=dev-python/cryptography-3.3[${PYTHON_USEDEP}] + >=dev-python/pynacl-1.5[${PYTHON_USEDEP}] +" + +EPYTEST_PLUGINS=() +EPYTEST_RERUNS=5 +distutils_enable_tests pytest + +src_prepare() { + local PATCHES=( + "${FILESDIR}/${PN}-5.0.0-nih-test-deps.patch" + ) + + distutils-r1_src_prepare + + # optional dep + sed -i -e '/invoke/d' pyproject.toml || die +} -- cgit v1.3