From 0d27ced5bc21beb2dbaa8779aabcf6d1351447e4cdb8622c0e6d55564ef31dc8 Mon Sep 17 00:00:00 2001 From: Max Lin Date: Tue, 2 Sep 2025 17:42:36 +0800 Subject: [PATCH] Update to Factory version --- ...hon-crash-when-manually-importing-gz.patch | 28 +++++++ hplip-3.25.2.tar.gz | 3 - hplip-3.25.2.tar.gz.asc | 6 -- hplip-3.25.6.tar.gz | 3 + hplip-3.25.6.tar.gz.asc | 11 +++ ...ode-new-signing-key-AC69536A2CF3A243.patch | 83 +++++++++++++++++++ hplip-no-urlopener.patch | 79 ++++++++++++++++++ hplip.changes | 38 +++++++++ hplip.keyring | 70 ++++++++-------- hplip.spec | 73 ++++++++++------ 10 files changed, 325 insertions(+), 69 deletions(-) create mode 100644 hp-setup-fix-python-crash-when-manually-importing-gz.patch delete mode 100644 hplip-3.25.2.tar.gz delete mode 100644 hplip-3.25.2.tar.gz.asc create mode 100644 hplip-3.25.6.tar.gz create mode 100644 hplip-3.25.6.tar.gz.asc create mode 100644 hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch create mode 100644 hplip-no-urlopener.patch diff --git a/hp-setup-fix-python-crash-when-manually-importing-gz.patch b/hp-setup-fix-python-crash-when-manually-importing-gz.patch new file mode 100644 index 0000000..fe2c836 --- /dev/null +++ b/hp-setup-fix-python-crash-when-manually-importing-gz.patch @@ -0,0 +1,28 @@ +From 216b15eb68bd5cacd26ff554e244fc4ea50a1acf Mon Sep 17 00:00:00 2001 +From: Martin Wilck +Date: Fri, 15 Aug 2025 23:10:44 +0200 +Subject: [PATCH 1/2] hp-setup: fix python crash when manually importing + gzipped PPD + +data read from gzip.GzipFile must be converted to a string, otherwise +the subsequent regex match will cause a python stacktrace. +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 2608f95..962909b 100755 +--- a/setup.py ++++ b/setup.py +@@ -552,7 +552,7 @@ else: # INTERACTIVE_MODE + if os.path.exists(file_path) and os.path.isfile(file_path): + + if file_path.endswith('.gz'): +- nickname = gzip.GzipFile(file_path, 'r').read(4096) ++ nickname = gzip.GzipFile(file_path, 'r').read(4096).decode("utf-8") + else: + nickname = open(file_path, 'r').read(4096) + +-- +2.50.1 + diff --git a/hplip-3.25.2.tar.gz b/hplip-3.25.2.tar.gz deleted file mode 100644 index 885a831..0000000 --- a/hplip-3.25.2.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e872ff28eb2517705a95f6e1839efa1e50a77a33aae8905278df2bd820919653 -size 30371001 diff --git a/hplip-3.25.2.tar.gz.asc b/hplip-3.25.2.tar.gz.asc deleted file mode 100644 index 86527b3..0000000 --- a/hplip-3.25.2.tar.gz.asc +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iF0EABECAB0WIQRKui9m29WpWJSRDgZz13DNpZBHuQUCZ8BY1gAKCRBz13DNpZBH -uS2IAKCA8szJDmNmB9LOn9gqvQtZNKLZGwCgnWs/NEryaAJrtevXQxRtmBn+VeA= -=dcBZ ------END PGP SIGNATURE----- diff --git a/hplip-3.25.6.tar.gz b/hplip-3.25.6.tar.gz new file mode 100644 index 0000000..75eba81 --- /dev/null +++ b/hplip-3.25.6.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6af314a7af0572f2ab6967b2fe68760e64d74628ef0e6237f8504d81047edbe +size 30464428 diff --git a/hplip-3.25.6.tar.gz.asc b/hplip-3.25.6.tar.gz.asc new file mode 100644 index 0000000..d355961 --- /dev/null +++ b/hplip-3.25.6.tar.gz.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2 + +iQEcBAABCAAGBQJoekszAAoJEF5OTSSjTs1XCjUH/3W/RawreKnt4IuIqUqHMTJn +haeiPj/jdArhbxreCjvYk3Z91VXJ4n2pyVWAwhW8ZKmSzdubDOEUrSs1fiRLF1qe +y/wmCSmDF+ZcQu7/QfLDhZQI7I7IOFKNGTNNlWh1z3HpnHqBywPusM8ej8EgEb76 +6tGLlNuo8ykFDAQNJAPCN/qexj/LUs+p/s4lhpkNa+A7OIhBmQkfwscHXXrhf67f +slavMnkCKbccegOtd9+i2NggtwkJDeNqZfgq6J7yXSxAm8jJjdAgJkqLmc9Vkxku +GuUkQffIlHeDKj6jKg8Og+oAeRShLf6rxlFIB/PedJ9bjbZwUZDHUd80dHlAFWU= +=VrP+ +-----END PGP SIGNATURE----- diff --git a/hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch b/hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch new file mode 100644 index 0000000..1850995 --- /dev/null +++ b/hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch @@ -0,0 +1,83 @@ +From b862d309e533c3272795119bfb706a1cc11d4727 Mon Sep 17 00:00:00 2001 +From: Martin Wilck +Date: Fri, 15 Aug 2025 23:12:13 +0200 +Subject: [PATCH 2/2] hplip: hardcode new signing key AC69536A2CF3A243 + +hplip as introduced a new GPG key with fingerprint for 3.25.6: + + 82FF A7C6 AA74 11D9 34BD E173 AC69 536A 2CF3 A243 + +See https://developers.hp.com/hp-linux-imaging-and-printing/hplipDigitalCertificate.html + +This key doesn't seem to be on public keyservers yet. +For now, simply hardcode the public key in hplip. It's the same +key with which the hplip code is signed, anyway. +--- + base/validation.py | 50 +++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 47 insertions(+), 3 deletions(-) + +diff --git a/base/validation.py b/base/validation.py +index d555f12..a2e5540 100644 +--- a/base/validation.py ++++ b/base/validation.py +@@ -83,10 +83,54 @@ class GPG_Verification(DigiSign_Verification): + + def __acquire_gpg_key(self): + +- cmd = '%s --homedir %s --no-permission-warning --keyserver %s --recv-keys 0x%X' \ +- % (self.__gpg, self.__gpg_dir, self.__pgp_site, self.__key) ++ key_AC69536A2CF3A243 = """ ++-----BEGIN PGP PUBLIC KEY BLOCK----- + +- log.info("Receiving digital keys: %s" % cmd) ++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 ++6saq ++=EWRb ++-----END PGP PUBLIC KEY BLOCK----- ++""" ++ ++ import tempfile ++ tf = tempfile.NamedTemporaryFile(mode='w', delete=False, encoding='utf-8') ++ tf.write(key_AC69536A2CF3A243) ++ tf.close() ++ ++ cmd = '%s --homedir %s --import %s' \ ++ % (self.__gpg, self.__gpg_dir, tf.name) ++ ++ log.info("Importing digital keys: %s" % cmd) + status, output = utils.run(cmd) + log.debug(output) + +-- +2.50.1 + diff --git a/hplip-no-urlopener.patch b/hplip-no-urlopener.patch new file mode 100644 index 0000000..b71e2af --- /dev/null +++ b/hplip-no-urlopener.patch @@ -0,0 +1,79 @@ +diff --git a/base/device.py b/base/device.py +index 2fdb29c..ca0d97e 100644 +--- a/base/device.py ++++ b/base/device.py +@@ -2526,9 +2526,9 @@ Content-length: %d\r + data = None + + log.debug("Opening: %s" % url2) +- opener = LocalOpener({}) ++ opener = LocalOpener() + try: +- f = opener.open(url2, data) ++ f = opener.open_hp(url2, data) + + except Error: + log.error("Status read failed: %s" % url2) +@@ -2548,7 +2548,7 @@ Content-length: %d\r + try: + url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url) + data = self +- opener = LocalOpenerEWS_LEDM({}) ++ opener = LocalOpenerEWS_LEDM() + try: + if footer: + return opener.open_hp(url2, data, footer) +@@ -2563,7 +2563,7 @@ Content-length: %d\r + try: + url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url) + data = self +- opener = LocalOpener_LEDM({}) ++ opener = LocalOpener_LEDM() + try: + if footer: + return opener.open_hp(url2, data, footer) +@@ -2580,7 +2580,7 @@ Content-length: %d\r + url="/cdm/supply/v1/suppliesPublic" + url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url) + data = self +- opener = LocalOpener_CDM({}) ++ opener = LocalOpener_CDM() + try: + if footer: + return opener.open_hp(url2, data, footer) +@@ -2688,7 +2688,7 @@ Content-length: %d\r + + + # URLs: hp:/usb/HP_LaserJet_3050?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml +-class LocalOpener(urllib_request.URLopener): ++class LocalOpener(): + def open_hp(self, url, dev): + log.debug("open_hp(%s)" % url) + +@@ -2718,7 +2718,7 @@ class LocalOpener(urllib_request.URLopener): + return response#.fp + + # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml +-class LocalOpenerEWS_LEDM(urllib_request.URLopener): ++class LocalOpenerEWS_LEDM(): + def open_hp(self, url, dev, foot=""): + log.debug("open_hp(%s)" % url) + +@@ -2744,7 +2744,7 @@ class LocalOpenerEWS_LEDM(urllib_request.URLopener): + + + # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml +-class LocalOpener_LEDM(urllib_request.URLopener): ++class LocalOpener_LEDM(): + def open_hp(self, url, dev, foot=""): + log.debug("open_hp(%s)" % url) + +@@ -2771,7 +2771,7 @@ class LocalOpener_LEDM(urllib_request.URLopener): + + + # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml +-class LocalOpener_CDM(urllib_request.URLopener): ++class LocalOpener_CDM(): + def open_hp(self, url, dev, foot=""): + log.debug("open_hp(%s)" % url) + match_obj = http_pat_url.search(url) diff --git a/hplip.changes b/hplip.changes index 180b69f..18925d7 100644 --- a/hplip.changes +++ b/hplip.changes @@ -1,3 +1,41 @@ +------------------------------------------------------------------- +Fri Aug 15 21:38:25 UTC 2025 - Martin Wilck + +- Fix verification of HP plugin with new GPG key (lp#2120738) + * add hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch +- Fix python crash in hp-setup on compressed PPD file (lp#2120739) + * add hp-setup-fix-python-crash-when-manually-importing-gz.patch +- Fix missing urllib.URLopener in python 3.14 (lp#2115046) + * add hplip-no-urlopener.patch +- Only run cupstestppd if explicitly requested with "--with testppd" + build parameter + +------------------------------------------------------------------- +Fri Aug 15 15:59:19 UTC 2025 - Martin Wilck + +- Updated hplip gpg public key + fingerprint: 82FF A7C6 AA74 11D9 34BD E173 AC69 536A 2CF3 A243 + https://developers.hp.com/hp-linux-imaging-and-printing/hplipDigitalCertificate.html + +- Update to hplip 3.25.6 +- Added support for new printers: + * HP LaserJet Enterprise Flow MFP 8601z + * HP LaserJet Pro MFP M126a plus + * HP LaserJet Pro MFP M126nw plus + * HP LaserJet Pro MFP M126snw plus + * HP Envy Photo 7200 series + * HP Envy Photo 7900 series + * HP OfficeJet Pro 9110 Series + * HP OfficeJet 9120 Series + * HP OfficeJet Pro 9120 Series + * HP OfficeJet Pro 9130 Series + +------------------------------------------------------------------- +Thu Aug 14 19:57:37 UTC 2025 - Lubos Kocman + +- Disable hp-scan-utils on Leap 16.0 + Leap does not want to ship scikit-image -> python-pandas + ------------------------------------------------------------------- Tue Jul 15 17:52:47 UTC 2025 - Martin Wilck diff --git a/hplip.keyring b/hplip.keyring index df273ad..e5316e3 100644 --- a/hplip.keyring +++ b/hplip.keyring @@ -1,39 +1,37 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v2.0.18 (GNU/Linux) -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 -=lgaV +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 +6saq +=EWRb -----END PGP PUBLIC KEY BLOCK----- + diff --git a/hplip.spec b/hplip.spec index 0c445f0..c7106df 100644 --- a/hplip.spec +++ b/hplip.spec @@ -1,7 +1,7 @@ # # spec file for package hplip # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -36,6 +36,17 @@ %global make_install make DESTDIR=%{buildroot} V=1 install %endif +%if 0%{?suse_version} == 1600 && 0%{?is_opensuse} +# Build without scanning support +%bcond_with scan_utils +%else +# Build scanning support +%bcond_without scan_utils +%endif + +# Run cupstestppd on the generated PPDs (prints many warnings) +%bcond_with testppd + %if 0%{use_qt5} %global config_qt_opts --disable-qt4 --enable-qt5 %global requires_qt %{pymod qt5} @@ -47,7 +58,7 @@ %endif Name: hplip -Version: 3.25.2 +Version: 3.25.6 Release: 0 Summary: HP's Printing, Scanning, and Faxing Software License: BSD-3-Clause AND GPL-2.0-or-later AND MIT @@ -119,6 +130,12 @@ Patch604: hplip-sclpml-strcasestr.patch Patch605: hplip-hpaio-gcc14.patch Patch606: hplip-base-fix-error-in-ConfigBase-handling.patch Patch607: hplip-utils-Fix-plugin-verification-with-sha256.patch +# lp#2120739 +Patch608: hp-setup-fix-python-crash-when-manually-importing-gz.patch +# lp#2120738 +Patch609: hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch +# lp#2115046 +Patch610: hplip-no-urlopener.patch # PATCH-FIX-UPSTREAM https://bugs.launchpad.net/hplip/+bug/2096650 Patch651: hplip-3.24.4-gcc15.patch # Compatibility patches for old SUSE releases @@ -196,6 +213,8 @@ Requires: foomatic-filters Requires: ghostscript # hp-plugin requries lsb_release Requires: lsb-release +# hp-plugin installation fails without /etc/sane/dll.conf +Requires: sane-backends Requires(post): %{_bindir}/find Requires(post): /bin/grep Requires(post): /bin/sed @@ -211,6 +230,12 @@ Obsoletes: hplip3 < 3.9.5 # This causes the "postscriptdriver" provides to be generated. # To avoid that, put "Ignore: cups-devel: cups-rpm-helper in the prjconf. +# Make sure we obsolete old scan-utils +# in case we're built without scan_utils +%if %{without scan_utils} +Obsoletes: hplip-scan-utils < %{version} +%endif + %description The Hewlett-Packard Linux Imaging and Printing project (HPLIP) provides a unified single and multifunction connectivity solution for HP @@ -309,6 +334,7 @@ Supplements: (%{name}-hpijs and sane-backends) This package includes the backend driver for scanning with HP scanners and all-in-one devices using SANE tools like xsane or scanimage. +%if %{with scan_utils} %package scan-utils Summary: HPLIP scanning frontends hp-scan and hp-uiscan # SLE does not provide python-pillow (PIL) (bsc#1131613) @@ -327,6 +353,7 @@ Obsoletes: %{name}-scan < %{version}-%{release} This package provides the "hp-scan" and "hp-uiscan" frontend utilities. These utilities are alternatives to the SANE frontends "xsane" and "scanimage". They expose some advanced features of certain HP scanner models. +%endif %package udev-rules Summary: HPLIP udev rules @@ -391,6 +418,9 @@ This sub-package is only required by developers. %patch -P 605 -p1 %patch -P 606 -p1 %patch -P 607 -p1 +%patch -P 608 -p1 +%patch -P 609 -p1 +%patch -P 610 -p1 %patch -P 651 -p1 %if 0%{?suse_version} < 1500 # python2 compatibility @@ -553,29 +583,13 @@ done # Final test by cupstestppd: # To save disk space gzip the files (gzipped PPDs can also be used by CUPS). # Future goal: Only have files which don't FAIL for cupstestppd. -# Ignore FAILs because of errors in UIConstraints and/or NonUIConstraints -# which are detected since cupstestppd in CUPS > 1.2.7 (i.e. in openSUSE 10.3). -# See Novell/Suse Bugzilla bug #309822: When this bug is fixed, cupstestppd would -# no longer result zero exit code. -# In the long run the PPDs should be fixed but as far as we know there have been -# no problems because of such UIConstraints errors so that it should be o.k. -# let those PPDs pass even if they are not strictly compliant. -# Ignore FAILs because of missing cupsFilter programs because -# in the package build environment the usual HPLIP filters -# like "hpcups" and "hpcupsfax" are -# installed at an unusual place (in the BuildRoot directory). -# For now keep all PPDs even if cupstestppd FAILs. -# Reason: -# With each CUPS version upgrade cupstestppd finds more and more errors -# so that more and more PPDs would be no longer included in the RPM -# which have been included before which results a regression. -# As far as we know there have been no problems at all because of -# not strictly compliant PPDs in HPLIP so that it is much better -# to provide all HPLIP PPDs so that the matching printers can be used -# than to be rigorous regarding enforcing compliance to the PPD specification: -echo "Final testing by cupstestppd..." +# Update 2025-08-15: this goal is unrealistic. Skip the testppd step unless +# explicitly enabled with --with testppd for p in *.ppd -do grep -E -v '^\*UIConstraints:|^\*NonUIConstraints:|^\*cupsFilter:' $p | cupstestppd - || true +do +%if %{with testppd} + grep -E -v '^\*UIConstraints:|^\*NonUIConstraints:|^\*cupsFilter:' $p | cupstestppd - || true +%endif gzip -n -9 $p done echo "Moving PPDs that use the hpps filter to %{_datadir}/cups/model/manufacturer-PPDs/hplip-hpps..." @@ -639,6 +653,15 @@ find "%{buildroot}" -type f -name "*.la" -delete -print # so that fdupes can only run for specific directories where linking files is safe: %fdupes -s %{buildroot}%{_datadir}/hplip/data/images +# Ensure we have no unpackaged files if build +# without scan-util +%if !%{with scan_utils} +rm -f %{buildroot}%{_bindir}/hp-scan +rm -f %{buildroot}%{_bindir}/hp-uiscan +rm -f %{buildroot}%{python_sitearch}/scanext.so +rm -f %{buildroot}%{_datadir}/applications/hp-uiscan.desktop +%endif + %post -p /bin/bash %udev_rules_update %desktop_database_post @@ -733,6 +756,7 @@ exit 0 %exclude %{_datadir}/hplip/base/__pycache__/imageprocessing.* %exclude %{_datadir}/hplip/%{ui_dir}/__pycache__/scandialog.* +%if %{with scan_utils} # The scanning utils depend on PIL and python3-scikit-image, # which are not available in SLE %files scan-utils @@ -751,6 +775,7 @@ exit 0 %{_datadir}/hplip/base/__pycache__/imageprocessing.* %{_datadir}/hplip/%{ui_dir}/__pycache__/scandialog.* %endif +%endif %files hpijs %config %{_sysconfdir}/hp/ -- 2.51.1