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
+}

Reply via email to