commit: 0771f88b22a97d9d54cac155d8077f74bfa6482c Author: Alfred Wingate <parona <AT> protonmail <DOT> com> AuthorDate: Mon Jan 26 06:52:05 2026 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Thu Jan 29 04:17:42 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0771f88b
app-admin/pass-import: new package, add 3.5 Signed-off-by: Alfred Wingate <parona <AT> protonmail.com> Part-of: https://github.com/gentoo/gentoo/pull/45522 Closes: https://github.com/gentoo/gentoo/pull/45522 Signed-off-by: Sam James <sam <AT> gentoo.org> app-admin/pass-import/Manifest | 1 + ...3.5-deal-with-zxcvbn-4.5.0-password-limit.patch | 27 ++++++ .../files/pass-import-3.5-dont-install-data.patch | 28 ++++++ app-admin/pass-import/metadata.xml | 17 ++++ app-admin/pass-import/pass-import-3.5.ebuild | 107 +++++++++++++++++++++ 5 files changed, 180 insertions(+) diff --git a/app-admin/pass-import/Manifest b/app-admin/pass-import/Manifest new file mode 100644 index 000000000000..8b35ecdecbf7 --- /dev/null +++ b/app-admin/pass-import/Manifest @@ -0,0 +1 @@ +DIST pass-import-3.5.gh.tar.gz 259930 BLAKE2B e6f160d0df46bc119c0b51ea1a9064c216fe8df7fe2db849a24901259e7b7590af60cee778caf6e5dfa2055d96416c30a9719b3c73c7b96f68a9433526bd8ed7 SHA512 b52cf0f1c43b37030c0e6efddf9fe7ad37d2ce20b7059bb0253f128e5bcaac0e82a9f657b16a8eaab0896ac4736698f261cd7c62437a73726b3bfbfcd7b2f369 diff --git a/app-admin/pass-import/files/pass-import-3.5-deal-with-zxcvbn-4.5.0-password-limit.patch b/app-admin/pass-import/files/pass-import-3.5-deal-with-zxcvbn-4.5.0-password-limit.patch new file mode 100644 index 000000000000..24c072ea77c8 --- /dev/null +++ b/app-admin/pass-import/files/pass-import-3.5-deal-with-zxcvbn-4.5.0-password-limit.patch @@ -0,0 +1,27 @@ +https://github.com/roddhjav/pass-import/pull/232 + +From fe919c9f7686fbf34d7c72f26952546ab92bc68d Mon Sep 17 00:00:00 2001 +From: Antonio Gurgel <[email protected]> +Date: Wed, 31 Dec 2025 00:36:41 -0800 +Subject: [PATCH] Don't bail on passwords longer than 72 chars + +--- a/pass_import/audit.py ++++ b/pass_import/audit.py +@@ -92,9 +92,14 @@ def zxcvbn(self): + user_input = list(entry.values()) + if password in user_input: + user_input.remove(password) +- results = zxcvbn(password, user_inputs=user_input) +- if results['score'] <= 2: +- self.weak.append((password, results)) ++ try: ++ results = zxcvbn(password, user_inputs=user_input) ++ if results['score'] <= 2: ++ self.weak.append((password, results)) ++ except ValueError: ++ # zxcvbn raises ValueError on passwords greater than 72 chars. ++ # Anything that long needn't be appended to `self.weak`. ++ pass + + def duplicates(self): + """Check for duplicated passwords.""" diff --git a/app-admin/pass-import/files/pass-import-3.5-dont-install-data.patch b/app-admin/pass-import/files/pass-import-3.5-dont-install-data.patch new file mode 100644 index 000000000000..aa3133bb32e5 --- /dev/null +++ b/app-admin/pass-import/files/pass-import-3.5-dont-install-data.patch @@ -0,0 +1,28 @@ +PEP517 wont correctly handle this +diff --git a/setup.py b/setup.py +index dc29840..697058c 100644 +--- a/setup.py ++++ b/setup.py +@@ -26,20 +26,4 @@ if '--user' in sys.argv: + else: + share = Path.home() / '.local' / 'share' + +-setup( +- data_files=[ +- (str(share / 'man' / 'man1'), [ +- 'share/man/man1/pass-import.1', +- 'share/man/man1/pimport.1', +- ]), +- (str(share / 'bash-completion' / 'completions'), [ +- 'share/bash-completion/completions/pass-import', +- 'share/bash-completion/completions/pimport', +- ]), +- (str(share / 'zsh' / 'site-functions'), [ +- 'share/zsh/site-functions/_pass-import', +- 'share/zsh/site-functions/_pimport', +- ]), +- (str(lib), ["import.bash"]), +- ], +-) ++setup() + diff --git a/app-admin/pass-import/metadata.xml b/app-admin/pass-import/metadata.xml new file mode 100644 index 000000000000..3758d89731f8 --- /dev/null +++ b/app-admin/pass-import/metadata.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>[email protected]</email> + <name>Alfred Wingate</name> + </maintainer> + <maintainer type="project" proxied="proxy"> + <email>[email protected]</email> + <name>Proxy Maintainers</name> + </maintainer> + <stabilize-allarches/> + <upstream> + <remote-id type="github">roddhjav/pass-import</remote-id> + <remote-id type="pypi">pass-import</remote-id> + </upstream> +</pkgmetadata> diff --git a/app-admin/pass-import/pass-import-3.5.ebuild b/app-admin/pass-import/pass-import-3.5.ebuild new file mode 100644 index 000000000000..9238008ef545 --- /dev/null +++ b/app-admin/pass-import/pass-import-3.5.ebuild @@ -0,0 +1,107 @@ +# Copyright 2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{11..14} ) +DISTUTILS_USE_PEP517=setuptools +PYPI_NO_NORMALIZE=1 +inherit distutils-r1 optfeature shell-completion xdg-utils + +DESCRIPTION="pass extension for importing data from most existing password managers" +HOMEPAGE=" + https://github.com/roddhjav/pass-import/ + https://pypi.org/project/pass-import/ +" +# lacking test files in sdist +SRC_URI=" + https://github.com/roddhjav/pass-import/releases/download/v${PV}/${P}.tar.gz + -> ${P}.gh.tar.gz +" + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="~amd64" + +RDEPEND=" + app-admin/pass + dev-python/pyaml[${PYTHON_USEDEP}] + dev-python/requests[${PYTHON_USEDEP}] + dev-python/zxcvbn[${PYTHON_USEDEP}] +" +BDEPEND=" + test? ( + sys-apps/dbus + ) +" + +EPYTEST_PLUGINS=() +distutils_enable_tests pytest + +PATCHES=( + "${FILESDIR}"/pass-import-3.5-dont-install-data.patch + "${FILESDIR}"/pass-import-3.5-deal-with-zxcvbn-4.5.0-password-limit.patch +) + +python_prepare_all() { + distutils-r1_python_prepare_all + + xdg_environment_reset + mkdir -p "${XDG_DATA_HOME}"/keyrings || die + cp tests/assets/db/gnome-keyring.keyring "${XDG_DATA_HOME}"/keyrings/pass-import.keyring || die +} + +python_test() { + EPYTEST_DESELECT=( + # Tries to touch system networkmanager + tests/test_open.py::TestOpen::test_open_networkmanager + + # FIXME + tests/imports/test_parse.py::TestParse::test_import_gnome_keyring + ) + EPYTEST_IGNORE=() + + if ! has_version dev-python/pykeepass; then + EPYTEST_DESELECT+=( + tests/imports/test_parse.py::TestParse::test_import_keepass + ) + fi + + if ! has_version dev-python/jsonpath-ng; then + EPYTEST_IGNORE+=( + tests/filters/test_filter_jsonpath.py + ) + fi + + local dbus_params=( + $(dbus-daemon --session --print-address --fork --print-pid) + ) + local -x DBUS_SESSION_BUS_ADDRESS=${dbus_params[0]} + + epytest + + kill "${dbus_params[1]}" || die +} + +src_install() { + distutils-r1_src_install + + exeinto /usr/lib/password-store/extensions + doexe import.bash + + doman share/man/man1/pass-import.1 share/man/man1/pimport.1 + dobashcomp share/bash-completion/completions/pass-import \ + share/bash-completion/completions/pimport + dozshcomp share/zsh/site-functions/_pass-import \ + share/zsh/site-functions/_pimport +} + +pkg_postinst() { + #optfeature "Lastpass cli based import/export" app-admin/lpass + #optfeature "XML based import" dev-python/defusedxml # preferred upstream but uses built-in xml if missing + optfeature "Keepass import from KDBX file" dev-python/pykeepass + optfeature "Gnome Keyring import" dev-python/secretstorage + optfeature "AndOTP or Aegis encrypted import" dev-python/cryptography + #optfeature "Detection of file decryption" dev-python/file-magic + optfeature "Filter exports" dev-python/jsonpath-ng +}
