From 9d501ecb41272f7037227dc54c1c8f9c64858edc Mon Sep 17 00:00:00 2001 From: James Antill Date: Mon, 20 Feb 2023 01:58:17 -0500 Subject: [PATCH] Import rpm: f75795097e8d2aa9bfbd4d6e8827b987915bffa4 --- .gitignore | 1 + 0001-literal-comparison.patch | 66 ++++++++++++++ gating.yaml | 7 ++ python-yubico-py3.patch | 22 +++++ python-yubico.spec | 160 ++++++++++++++++++++++++++++++++++ sources | 1 + tests/sanity.sh | 8 ++ tests/test_ipa_yubikey.py | 28 ++++++ tests/tests.yml | 13 +++ 9 files changed, 306 insertions(+) create mode 100644 .gitignore create mode 100644 0001-literal-comparison.patch create mode 100644 gating.yaml create mode 100644 python-yubico-py3.patch create mode 100644 python-yubico.spec create mode 100644 sources create mode 100644 tests/sanity.sh create mode 100755 tests/test_ipa_yubikey.py create mode 100644 tests/tests.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ce01c9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/python-yubico-1.3.2.tar.gz diff --git a/0001-literal-comparison.patch b/0001-literal-comparison.patch new file mode 100644 index 0000000..e3feff1 --- /dev/null +++ b/0001-literal-comparison.patch @@ -0,0 +1,66 @@ +From b4a53389c3e6ad41c836aa82998149f427fe1ad8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tibor=20Dudl=C3=A1k?= +Date: Tue, 10 Sep 2019 19:12:19 +0200 +Subject: [PATCH] Do not use comparision with "is" for literals +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +There is a warning with python 3.8 at fedora rawhide about +comparision with "is" while running ipa-server install. +See: https://bugs.python.org/issue34850 + +Signed-off-by: Tibor Dudlák +--- + yubico/yubikey_config.py | 4 ++-- + yubico/yubikey_usb_hid.py | 6 +++--- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/yubico/yubikey_config.py b/yubico/yubikey_config.py +index b5a30c4..caeed02 100644 +--- a/yubico/yubikey_config.py ++++ b/yubico/yubikey_config.py +@@ -475,12 +475,12 @@ def to_frame(self, slot=1): + """ + data = self.to_string() + payload = data.ljust(64, yubico_util.chr_byte(0x0)) +- if slot is 1: ++ if slot == 1: + if self._update_config: + command = SLOT.UPDATE1 + else: + command = SLOT.CONFIG +- elif slot is 2: ++ elif slot == 2: + if self._update_config: + command = SLOT.UPDATE2 + else: +diff --git a/yubico/yubikey_usb_hid.py b/yubico/yubikey_usb_hid.py +index c07dcaa..b87ff3c 100644 +--- a/yubico/yubikey_usb_hid.py ++++ b/yubico/yubikey_usb_hid.py +@@ -285,13 +285,13 @@ def _waitfor(self, mode, mask, may_block, timeout=2): + seconds_left = min(20, seconds_left) + wait_num = (seconds_left * 2) - 1 + 6 + +- if mode is 'nand': ++ if mode == 'nand': + if not flags & mask == mask: + finished = True + else: + self._debug("Status %s (0x%x) has not cleared bits %s (0x%x)\n" + % (bin(flags), flags, bin(mask), mask)) +- elif mode is 'and': ++ elif mode == 'and': + if flags & mask == mask: + finished = True + else: +@@ -303,7 +303,7 @@ def _waitfor(self, mode, mask, may_block, timeout=2): + if not finished: + wait_num -= 1 + if wait_num == 0: +- if mode is 'nand': ++ if mode == 'nand': + reason = 'Timed out waiting for YubiKey to clear status 0x%x' % mask + else: + reason = 'Timed out waiting for YubiKey to set status 0x%x' % mask diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..6f49862 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,7 @@ +# recipients: abokovoy, frenaud, kaleem, ftrivino, cheimes +--- !Policy +product_versions: + - rhel-9 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} diff --git a/python-yubico-py3.patch b/python-yubico-py3.patch new file mode 100644 index 0000000..4a6588a --- /dev/null +++ b/python-yubico-py3.patch @@ -0,0 +1,22 @@ +From 7e6e424ed579c53a0767ba71eb47345ae1e472ca Mon Sep 17 00:00:00 2001 +From: minus +Date: Sat, 12 Mar 2016 12:18:44 +0100 +Subject: [PATCH] fixed Python 3 compatibility for Yubikey 4 + +--- + yubico/yubikey_4_usb_hid.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/yubico/yubikey_4_usb_hid.py b/yubico/yubikey_4_usb_hid.py +index 31c6f5d..b44bb90 100644 +--- a/yubico/yubikey_4_usb_hid.py ++++ b/yubico/yubikey_4_usb_hid.py +@@ -104,7 +104,7 @@ def _read_capabilities(self): + frame = yubikey_frame.YubiKeyFrame(command=SLOT.YK4_CAPABILITIES) + self._device._write(frame) + response = self._device._read_response() +- r_len = ord(response[0]) ++ r_len = yubico_util.ord_byte(response[0]) + + # 1 byte length, 2 byte CRC. + if not yubico_util.validate_crc16(response[:r_len+3]): diff --git a/python-yubico.spec b/python-yubico.spec new file mode 100644 index 0000000..a361312 --- /dev/null +++ b/python-yubico.spec @@ -0,0 +1,160 @@ +%{!?_licensedir:%global license %%doc} + +%global srcname yubico + +%if 0%{?rhel} > 7 +# Disable python2 build by default +%bcond_with python2 +%else +%bcond_without python2 +%endif + +Name: python-%{srcname} +Version: 1.3.2 +Release: 9.1%{?dist} +Summary: Pure-python library for interacting with Yubikeys + +License: BSD +URL: https://github.com/Yubico/%{name} +Source0: https://github.com/Yubico/%{name}/archive/%{name}-%{version}.tar.gz +Patch0: python-yubico-py3.patch + +BuildArch: noarch + +%if %{with python2} +BuildRequires: python2-devel +BuildRequires: python2-setuptools +BuildRequires: python2-nose +BuildRequires: python2-pyusb +%endif # with python2 + +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-nose +BuildRequires: python3-pyusb + +%description +Pure-python library for interacting with Yubikeys + +%if %{with python2} +%package -n python2-%{srcname} +Summary: Pure-python library for interacting with Yubikeys +Requires: pyusb +Obsoletes: python-yubico < %{version}-%{release} + +%{?python_provide:%python_provide python2-%{srcname}} + +%description -n python2-%{srcname} +Pure-python library for interacting with Yubikeys. For Python 2. +%endif # with python2 + +%package -n python3-%{srcname} +Summary: Pure-python library for interacting with Yubikeys +Requires: python3-pyusb + +%{?python_provide:%python_provide python3-%{srcname}} + +%description -n python3-%{srcname} +Pure-python library for interacting with Yubikeys. For Python 3. + + +%prep +%autosetup -n %{name}-%{name}-%{version} -p1 + + +%build +%if %{with python2} +%py2_build +%endif # with python2 +%py3_build + + +%install +%if %{with python2} +%py2_install +%endif # with python2 +%py3_install + + +%check +%if %{with python2} +nosetests-%{python2_version} -e test_challenge_response -e test_serial -e test_status +%endif # with python2 +nosetests-%{python3_version} -e test_challenge_response -e test_serial -e test_status + +%if %{with python2} +%files -n python2-%{srcname} +%license COPYING +%doc NEWS README +%{python2_sitelib}/* +%endif # with python2 + +%files -n python3-%{srcname} +%license COPYING +%doc NEWS README +%{python3_sitelib}/* + + +%changelog +* Thu Jun 16 2022 Florence Blanc-Renaud - 1.3.2-9.1 +- Rebuilt to fix NVR issue (#2097803) + +* Tue Jun 19 2018 Charalampos Stratakis - 1.3.2-9 +- Conditionalize the python2 subpackage + +* Fri Feb 09 2018 Fedora Release Engineering - 1.3.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Aug 24 2017 Nathaniel McCallum - 1.3.2-7 +- Backport an upstream python3 fix (#1484862) + +* Thu Jul 27 2017 Fedora Release Engineering - 1.3.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 1.3.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Dec 19 2016 Miro Hrončok - 1.3.2-4 +- Rebuild for Python 3.6 + +* Tue Jul 19 2016 Fedora Release Engineering - 1.3.2-3 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Wed May 11 2016 Nathaniel McCallum - 1.3.2-2 +- Add missing provide for python-yubico +- Add missing obsoletes for python-yubico + +* Tue May 10 2016 Nathaniel McCallum - 1.3.2-1 +- Cleanup obsolete conditions (like RHEL 6) +- Update to v1.3.2 + +* Thu Feb 04 2016 Fedora Release Engineering - 1.2.3-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Jan 11 2016 Will Thompson - 1.2.3-5 +- Add python3-pyusb dependency to python3 subpackage (#1278210) + +* Mon Jan 11 2016 Ville Skyttä +- Ship COPYING as %%license where applicable + +* Tue Nov 10 2015 Fedora Release Engineering - 1.2.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Mon Jul 20 2015 Miro Hrončok - 1.2.3-3 +- Add Python 3 subpackage (#1244237) + +* Thu Jun 18 2015 Fedora Release Engineering - 1.2.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Mon Mar 23 2015 Nathaniel McCallum - 1.2.3-1 +- Upstream 1.2.3 +- Require pyusb during building when running tests + +* Mon Jun 23 2014 Nathaniel McCallum - 1.2.1-3 +- Enable build on EL6. + +* Sat Jun 21 2014 Nathaniel McCallum - 1.2.1-2 +- Run upstream tests during build. + +* Thu Jun 19 2014 Nathaniel McCallum - 1.2.1-1 +- Initial release. diff --git a/sources b/sources new file mode 100644 index 0000000..026da58 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA1 (python-yubico-1.3.2.tar.gz) = ce26775893e3d25c33e226b376d92dfe1ae114d6 diff --git a/tests/sanity.sh b/tests/sanity.sh new file mode 100644 index 0000000..38185fd --- /dev/null +++ b/tests/sanity.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -ex + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +dnf install -y python3-yubico + +exec ${DIR}/test_ipa_yubikey.py diff --git a/tests/test_ipa_yubikey.py b/tests/test_ipa_yubikey.py new file mode 100755 index 0000000..e97562d --- /dev/null +++ b/tests/test_ipa_yubikey.py @@ -0,0 +1,28 @@ +#!/usr/bin/python3 +"""Simple test for APIs used by IPA's otptoken plugin +""" +import logging + +import yubico +import usb.core + +logging.basicConfig(level=logging.INFO) +log = logging.getLogger() + + +def main(): + try: + yk = yubico.find_yubikey() + except usb.core.USBError as e: + log.info(e) + except yubico.yubikey.YubiKeyError as e: + log.info(e) + else: + assert yk.version_num() + log.info(yk.status()) + log.info(yk.status().valid_configs()) + log.info("PASS") + + +if __name__ == "__main__": + main() diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..d0b6fb4 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,13 @@ +--- +- hosts: localhost + tags: + - classic + roles: + - role: standard-test-source + - role: standard-test-basic + required_packages: + - python3-yubico + tests: + - test_ipa_yubikey: + dir: "tests" + run: ./test_ipa_yubikey.py