From f66385472fcf440142e106a2a3203411fcf0785b Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Wed, 7 May 2025 10:44:05 +0200 Subject: [PATCH 01/22] hp-plugin failed checksum due usage of different hashes (fedora#2361230) output is not seen after installing plugin (fedora#2361230) --- hplip-plugin-reverthash.patch | 83 +++++++++++++++++++++++++++++++++++ hplip-plugin-stdout.patch | 13 ++++++ hplip.spec | 16 ++++++- 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 hplip-plugin-reverthash.patch create mode 100644 hplip-plugin-stdout.patch diff --git a/hplip-plugin-reverthash.patch b/hplip-plugin-reverthash.patch new file mode 100644 index 0000000..006f01e --- /dev/null +++ b/hplip-plugin-reverthash.patch @@ -0,0 +1,83 @@ +diff --git a/base/utils.py b/base/utils.py +index 09a3cb7..137ec72 100644 +--- a/base/utils.py ++++ b/base/utils.py +@@ -67,11 +67,17 @@ try: + except ImportError: + dbus_avail=False + +-import hashlib ++try: ++ import hashlib # new in 2.5 ++ ++ def get_checksum(s): ++ return hashlib.sha1(s).hexdigest() + +-def get_checksum(s): +- return hashlib.sha256(s).hexdigest() ++except ImportError: ++ import sha # deprecated in 2.6/3.0 + ++ def get_checksum(s): ++ return sha.new(s).hexdigest() + + + +diff --git a/installer/core_install.py b/installer/core_install.py +index 9a929a4..299b2f4 100644 +--- a/installer/core_install.py ++++ b/installer/core_install.py +@@ -31,10 +31,18 @@ import pwd + import tarfile + import stat + import glob +-import hashlib + +-def get_checksum(s): +- return hashlib.sha256(s).hexdigest() ++try: ++ import hashlib # new in 2.5 ++ ++ def get_checksum(s): ++ return hashlib.sha1(s).hexdigest() ++ ++except ImportError: ++ import sha # deprecated in 2.6/3.0 ++ ++ def get_checksum(s): ++ return sha.new(s).hexdigest() + + + # Local +diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py +index c2e2a94..4ae24e5 100755 +--- a/installer/pluginhandler.py ++++ b/installer/pluginhandler.py +@@ -21,7 +21,6 @@ + + import os + import shutil +-import hashlib + + from base import utils, tui, os_utils, validation, password + from base.g import * +@@ -31,8 +30,17 @@ from base.sixext.moves import configparser + from installer import core_install + + +-def get_checksum(s): +- return hashlib.sha256(s).hexdigest() ++try: ++ import hashlib # new in 2.5 ++ ++ def get_checksum(s): ++ return hashlib.sha1(s).hexdigest() ++ ++except ImportError: ++ import sha # deprecated in 2.6/3.0 ++ ++ def get_checksum(s): ++ return sha.new(s).hexdigest() + + + PLUGIN_STATE_FILE = '/var/lib/hp/hplip.state' diff --git a/hplip-plugin-stdout.patch b/hplip-plugin-stdout.patch new file mode 100644 index 0000000..c8d28a9 --- /dev/null +++ b/hplip-plugin-stdout.patch @@ -0,0 +1,13 @@ +diff --git a/base/os_utils.py b/base/os_utils.py +index 9fa137c..71edcc7 100644 +--- a/base/os_utils.py ++++ b/base/os_utils.py +@@ -37,7 +38,7 @@ def execute(cmd): + try: + # Use shlex.split to safely split the command into arguments + args = shlex.split(cmd) +- result = subprocess.run(args, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) ++ result = subprocess.run(args, check=True) + return result.returncode + except subprocess.CalledProcessError as e: + error_message = "Command failed with return code %d: %s\n%s" % (e.returncode, cmd, e.stderr.decode()) diff --git a/hplip.spec b/hplip.spec index f57e86c..dab37b1 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.25.2 -Release: 2%{?dist} +Release: 3%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -244,6 +244,12 @@ Patch72: hplip-gcc15-stdc23.patch # status history table shows unformatted QDateTime values # https://bugs.launchpad.net/hplip/+bug/1956547 Patch73: hplip-format-qdatetime.patch +# revert to old hash for now until plugin.conf has newer hashes, +# and make sure we see prompts when installing plugin... +# https://bugs.launchpad.net/hplip/+bug/2110100 +# https://bugs.launchpad.net/hplip/+bug/2110101 +Patch74: hplip-plugin-reverthash.patch +Patch75: hplip-plugin-stdout.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -604,6 +610,10 @@ done %patch -P 72 -p1 -b .gcc-strc23 # https://bugs.launchpad.net/hplip/+bug/1956547 %patch -P 73 -p1 -b .format-qdatetime +# https://bugs.launchpad.net/hplip/+bug/2110100 +# https://bugs.launchpad.net/hplip/+bug/2110101 +%patch -P 74 -p1 -b .hashrevert +%patch -P 75 -p1 -b .stdout # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -975,6 +985,10 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Wed May 07 2025 Zdenek Dohnal - 3.25.2-3 +- hp-plugin failed checksum due usage of different hashes (fedora#2361230) +- output is not seen after installing plugin (fedora#2361230) + * Wed Apr 16 2025 Zdenek Dohnal - 3.25.2-2 - remove Recommends on hplip-gui due complaint at (fedora#2360020) From 61a4f33d3a811f559bfde7f27eade48f16740df5 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Mon, 12 May 2025 10:03:00 +0200 Subject: [PATCH 02/22] plugin.conf now looks to use sha256 as well per email comms with HP, drop the revert --- hplip-plugin-reverthash.patch | 83 ----------------------------------- hplip.spec | 12 +++-- 2 files changed, 5 insertions(+), 90 deletions(-) delete mode 100644 hplip-plugin-reverthash.patch diff --git a/hplip-plugin-reverthash.patch b/hplip-plugin-reverthash.patch deleted file mode 100644 index 006f01e..0000000 --- a/hplip-plugin-reverthash.patch +++ /dev/null @@ -1,83 +0,0 @@ -diff --git a/base/utils.py b/base/utils.py -index 09a3cb7..137ec72 100644 ---- a/base/utils.py -+++ b/base/utils.py -@@ -67,11 +67,17 @@ try: - except ImportError: - dbus_avail=False - --import hashlib -+try: -+ import hashlib # new in 2.5 -+ -+ def get_checksum(s): -+ return hashlib.sha1(s).hexdigest() - --def get_checksum(s): -- return hashlib.sha256(s).hexdigest() -+except ImportError: -+ import sha # deprecated in 2.6/3.0 - -+ def get_checksum(s): -+ return sha.new(s).hexdigest() - - - -diff --git a/installer/core_install.py b/installer/core_install.py -index 9a929a4..299b2f4 100644 ---- a/installer/core_install.py -+++ b/installer/core_install.py -@@ -31,10 +31,18 @@ import pwd - import tarfile - import stat - import glob --import hashlib - --def get_checksum(s): -- return hashlib.sha256(s).hexdigest() -+try: -+ import hashlib # new in 2.5 -+ -+ def get_checksum(s): -+ return hashlib.sha1(s).hexdigest() -+ -+except ImportError: -+ import sha # deprecated in 2.6/3.0 -+ -+ def get_checksum(s): -+ return sha.new(s).hexdigest() - - - # Local -diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py -index c2e2a94..4ae24e5 100755 ---- a/installer/pluginhandler.py -+++ b/installer/pluginhandler.py -@@ -21,7 +21,6 @@ - - import os - import shutil --import hashlib - - from base import utils, tui, os_utils, validation, password - from base.g import * -@@ -31,8 +30,17 @@ from base.sixext.moves import configparser - from installer import core_install - - --def get_checksum(s): -- return hashlib.sha256(s).hexdigest() -+try: -+ import hashlib # new in 2.5 -+ -+ def get_checksum(s): -+ return hashlib.sha1(s).hexdigest() -+ -+except ImportError: -+ import sha # deprecated in 2.6/3.0 -+ -+ def get_checksum(s): -+ return sha.new(s).hexdigest() - - - PLUGIN_STATE_FILE = '/var/lib/hp/hplip.state' diff --git a/hplip.spec b/hplip.spec index dab37b1..2f7eb19 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.25.2 -Release: 3%{?dist} +Release: 4%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -244,11 +244,8 @@ Patch72: hplip-gcc15-stdc23.patch # status history table shows unformatted QDateTime values # https://bugs.launchpad.net/hplip/+bug/1956547 Patch73: hplip-format-qdatetime.patch -# revert to old hash for now until plugin.conf has newer hashes, -# and make sure we see prompts when installing plugin... -# https://bugs.launchpad.net/hplip/+bug/2110100 +# make sure we see prompts when installing plugin... # https://bugs.launchpad.net/hplip/+bug/2110101 -Patch74: hplip-plugin-reverthash.patch Patch75: hplip-plugin-stdout.patch %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -610,9 +607,7 @@ done %patch -P 72 -p1 -b .gcc-strc23 # https://bugs.launchpad.net/hplip/+bug/1956547 %patch -P 73 -p1 -b .format-qdatetime -# https://bugs.launchpad.net/hplip/+bug/2110100 # https://bugs.launchpad.net/hplip/+bug/2110101 -%patch -P 74 -p1 -b .hashrevert %patch -P 75 -p1 -b .stdout # Fedora specific patches now, don't put a generic patches under it @@ -985,6 +980,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Mon May 12 2025 Zdenek Dohnal - 3.25.2-4 +- plugin.conf now looks to use sha256 as well per email comms with HP, drop the revert + * Wed May 07 2025 Zdenek Dohnal - 3.25.2-3 - hp-plugin failed checksum due usage of different hashes (fedora#2361230) - output is not seen after installing plugin (fedora#2361230) From 8541ecd6f87ae8863c9fd24f259d4a9daa38596a Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Mon, 26 May 2025 15:24:43 +0200 Subject: [PATCH 03/22] hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501) --- hplip-gui-close-trace.patch | 24 ++++++++++++++++++++++++ hplip.spec | 10 +++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 hplip-gui-close-trace.patch diff --git a/hplip-gui-close-trace.patch b/hplip-gui-close-trace.patch new file mode 100644 index 0000000..39d8f01 --- /dev/null +++ b/hplip-gui-close-trace.patch @@ -0,0 +1,24 @@ +diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py +index 79f8fa8..28a77b3 100644 +--- a/ui5/devmgr5.py ++++ b/ui5/devmgr5.py +@@ -816,6 +816,9 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow): + + + def updateWindowTitle(self): ++ if self.cur_device is None or self.cur_device_uri is None: ++ return ++ + if self.cur_device.device_type == DEVICE_TYPE_FAX: + self.setWindowTitle(self.__tr("HP Device Manager - %s (Fax)"%self.cur_device.model_ui)) + else: +@@ -1876,6 +1879,9 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow): + + + def updatePrintControlTab(self): ++ if self.cur_device is None or self.cur_printer is None: ++ return ++ + if self.cur_device.device_type == DEVICE_TYPE_PRINTER: + self.PrintControlPrinterNameLabel.setText(self.__tr("Printer Name:")) + self.groupBox.setTitle(QApplication.translate("MainWindow", "Printer Queue Control", None)) diff --git a/hplip.spec b/hplip.spec index 2f7eb19..9956010 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.25.2 -Release: 4%{?dist} +Release: 5%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -247,6 +247,9 @@ Patch73: hplip-format-qdatetime.patch # make sure we see prompts when installing plugin... # https://bugs.launchpad.net/hplip/+bug/2110101 Patch75: hplip-plugin-stdout.patch +# toolbox shows traceback when button 'close' is clicked on at first dialog +# https://bugs.launchpad.net/hplip/+bug/2111722 +Patch76: hplip-gui-close-trace.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -609,6 +612,8 @@ done %patch -P 73 -p1 -b .format-qdatetime # https://bugs.launchpad.net/hplip/+bug/2110101 %patch -P 75 -p1 -b .stdout +# https://bugs.launchpad.net/hplip/+bug/2111722 +%patch -P 76 -p1 -b .gui-close-trace # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -980,6 +985,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Mon May 26 2025 Zdenek Dohnal - 3.25.2-5 +- hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501) + * Mon May 12 2025 Zdenek Dohnal - 3.25.2-4 - plugin.conf now looks to use sha256 as well per email comms with HP, drop the revert From b1ef7ae35e07387acaa3c9b76e10b8a3ea5c2152 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Mon, 2 Jun 2025 22:22:15 +0200 Subject: [PATCH 04/22] Rebuilt for Python 3.14 --- hplip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hplip.spec b/hplip.spec index 9956010..07f2ece 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.25.2 -Release: 5%{?dist} +Release: 6%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -985,6 +985,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Mon Jun 02 2025 Python Maint - 3.25.2-6 +- Rebuilt for Python 3.14 + * Mon May 26 2025 Zdenek Dohnal - 3.25.2-5 - hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501) From a995e312cb21fcc2c0b58e5c33feba6b60c38978 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Tue, 3 Jun 2025 08:11:29 +0200 Subject: [PATCH 05/22] Switch tests to Centos Stream --- plans.fmf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plans.fmf b/plans.fmf index deb443d..f4c2755 100644 --- a/plans.fmf +++ b/plans.fmf @@ -1,37 +1,37 @@ /tier1-internal: plan: import: - url: https://src.fedoraproject.org/tests/hplip.git + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git name: /plans/tier1/internal /tier1-public: plan: import: - url: https://src.fedoraproject.org/tests/hplip.git + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git name: /plans/tier1/public /tier2-tier3-internal: plan: import: - url: https://src.fedoraproject.org/tests/hplip.git + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git name: /plans/tier2-tier3/internal /tier2-tier3-public: plan: import: - url: https://src.fedoraproject.org/tests/hplip.git + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git name: /plans/tier2-tier3/public /others-internal: plan: import: - url: https://src.fedoraproject.org/tests/hplip.git + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git name: /plans/others/internal /others-public: plan: import: - url: https://src.fedoraproject.org/tests/hplip.git + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git name: /plans/others/public From 73678936ce93c0579ee46011aed32d96aa2844d2 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Fri, 20 Jun 2025 11:24:48 +0200 Subject: [PATCH 06/22] Remove URLopener Python 3.14 removed URLopener, which is used in hplip as parent class for LocalOpener* classes, and various hplip scripts (hp-setup, hp-plugin) started to traceback after removal. Remove URLopener for now, since at least sanity testing passes without it. --- hplip-no-urlopener.patch | 79 ++++++++++++++++++++++++++++++++++++++++ hplip.spec | 10 ++++- 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 hplip-no-urlopener.patch diff --git a/hplip-no-urlopener.patch b/hplip-no-urlopener.patch new file mode 100644 index 0000000..903fbbc --- /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.spec b/hplip.spec index 07f2ece..80334d0 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.25.2 -Release: 6%{?dist} +Release: 7%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -250,6 +250,9 @@ Patch75: hplip-plugin-stdout.patch # toolbox shows traceback when button 'close' is clicked on at first dialog # https://bugs.launchpad.net/hplip/+bug/2111722 Patch76: hplip-gui-close-trace.patch +# Python 3.14 removed urlopener +# https://bugs.launchpad.net/hplip/+bug/2115046 +Patch77: hplip-no-urlopener.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -614,6 +617,8 @@ done %patch -P 75 -p1 -b .stdout # https://bugs.launchpad.net/hplip/+bug/2111722 %patch -P 76 -p1 -b .gui-close-trace +# https://bugs.launchpad.net/hplip/+bug/2115046 +%patch -P 77 -p1 -b .no-urlopener # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -985,6 +990,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Thu Jun 19 2025 Zdenek Dohnal - 3.25.2-7 +- Python 3.14 removed URLopener + * Mon Jun 02 2025 Python Maint - 3.25.2-6 - Rebuilt for Python 3.14 From 5ad054fcdb04a8adabd112aa4ab0ec6b14d2364c Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 24 Jul 2025 17:04:43 +0000 Subject: [PATCH 07/22] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- hplip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hplip.spec b/hplip.spec index 80334d0..9fbf105 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.25.2 -Release: 7%{?dist} +Release: 8%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -990,6 +990,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Thu Jul 24 2025 Fedora Release Engineering - 3.25.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Thu Jun 19 2025 Zdenek Dohnal - 3.25.2-7 - Python 3.14 removed URLopener From 01d1e50f44f87ee2ac1d0f3a7629c562631b69ae Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Tue, 12 Aug 2025 13:31:19 +0200 Subject: [PATCH 08/22] hplip-3.25.6 is available (fedora#2386814) --- .gitignore | 1 + hplip-pcardext-disable.patch | 9 +++-- hplip-plugin-stdout.patch | 13 ------- hplip.spec | 73 ++++++++++++++++-------------------- sources | 2 +- 5 files changed, 40 insertions(+), 58 deletions(-) delete mode 100644 hplip-plugin-stdout.patch diff --git a/.gitignore b/.gitignore index c4e3a17..89da7d2 100644 --- a/.gitignore +++ b/.gitignore @@ -114,3 +114,4 @@ hplip-3.10.6.tar.gz /hplip-3.23.12-repack.tar.gz /hplip-3.24.4-repack.tar.gz /hplip-3.25.2-repack.tar.gz +/hplip-3.25.6-repack.tar.gz diff --git a/hplip-pcardext-disable.patch b/hplip-pcardext-disable.patch index 342c4d3..158379d 100644 --- a/hplip-pcardext-disable.patch +++ b/hplip-pcardext-disable.patch @@ -1,12 +1,13 @@ -diff -up hplip-3.25.2/Makefile.am.pcardext-disable hplip-3.25.2/Makefile.am ---- hplip-3.25.2/Makefile.am.pcardext-disable 2025-04-11 10:23:29.576593786 +0200 -+++ hplip-3.25.2/Makefile.am 2025-04-11 10:24:08.259842784 +0200 -@@ -306,13 +306,6 @@ if !HPLIP_CLASS_DRIVER +diff -up hplip-3.25.6/Makefile.am.pcardext-disable hplip-3.25.6/Makefile.am +--- hplip-3.25.6/Makefile.am.pcardext-disable 2025-08-11 12:52:35.359621088 +0200 ++++ hplip-3.25.6/Makefile.am 2025-08-11 12:54:58.654515582 +0200 +@@ -306,14 +306,6 @@ if !HPLIP_CLASS_DRIVER pcarddir = $(hplipdir)/pcard dist_pcard_DATA = pcard/__init__.py pcard/photocard.py -# pcardext -pcardextdir = $(PYTHONEXECDIR) +-pcardextdir = $(PYTHONEXECDIR) -pcardext_LTLIBRARIES = pcardext.la -pcardext_la_LDFLAGS = -module -avoid-version -pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c pcard/pcardext/pcardext.h diff --git a/hplip-plugin-stdout.patch b/hplip-plugin-stdout.patch deleted file mode 100644 index c8d28a9..0000000 --- a/hplip-plugin-stdout.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/base/os_utils.py b/base/os_utils.py -index 9fa137c..71edcc7 100644 ---- a/base/os_utils.py -+++ b/base/os_utils.py -@@ -37,7 +38,7 @@ def execute(cmd): - try: - # Use shlex.split to safely split the command into arguments - args = shlex.split(cmd) -- result = subprocess.run(args, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) -+ result = subprocess.run(args, check=True) - return result.returncode - except subprocess.CalledProcessError as e: - error_message = "Command failed with return code %d: %s\n%s" % (e.returncode, cmd, e.stderr.decode()) diff --git a/hplip.spec b/hplip.spec index 9fbf105..24f7071 100644 --- a/hplip.spec +++ b/hplip.spec @@ -6,8 +6,8 @@ Summary: HP Linux Imaging and Printing Project Name: hplip -Version: 3.25.2 -Release: 8%{?dist} +Version: 3.25.6 +Release: 1%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -199,60 +199,54 @@ Patch57: hplip-plugin-udevissues.patch # removed # - /lib64/libm.so is not symlink but ld script, which cannot be used in dlopen() Patch58: hplip-no-libhpmud-libm-warnings.patch -Patch60: hplip-plugin-script.patch +Patch59: hplip-plugin-script.patch # C99 compatibility fixes by fweimer - use explicit int # Submitted upstream: -Patch61: hplip-pserror-c99.patch +Patch60: hplip-pserror-c99.patch # C99 compatibility patch by fweimer - several undefined functions in hpaio # backend are declared in orblite.h # Submitted upstream: -Patch62: hplip-scan-hpaio-include.patch +Patch61: hplip-scan-hpaio-include.patch # C99 compatibility patch by fweimer - undefined _DBG() and dynamic linking funcs in orblite.c # - _DBG() looks like typo and new header is added for funcs # Submitted upstream: -Patch63: hplip-scan-orblite-c99.patch +Patch62: hplip-scan-orblite-c99.patch # C99 compatibility patch by fweimer: # PyString_AsStringAndSize is removed in Python3, remove its compilation for now # in case there is a request for compiling it again, there is a possible solution # for the function py3 alternative https://opendev.org/openstack/pyeclib/commit/19c8313986 # - disabling removes hp-unload and /usr/share/hplip/pcard as well # Submitted upstream: -Patch64: hplip-pcardext-disable.patch +Patch63: hplip-pcardext-disable.patch # undefined strcasestr() in sclpml.c - build with _GNU_SOURCE # Submitted upstream: -Patch65: hplip-sclpml-strcasestr.patch +Patch64: hplip-sclpml-strcasestr.patch # 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed # https://bugs.launchpad.net/hplip/+bug/2027972 -Patch67: hplip-fix-parsing-lpstat.patch +Patch65: hplip-fix-parsing-lpstat.patch # switch to curl by downstream patch from wget to workaround openstack dropping IPv6 # which causes great delays... # Remove this once internal openstack handles IPv6 better - test by pinging IPv6 in OpenStack, # it should not hang. -Patch68: hplip-plugin-curl.patch +Patch66: hplip-plugin-curl.patch # fix SyntaxWarning from python3.12 # https://bugs.launchpad.net/hplip/+bug/2029480 -Patch69: hplip-use-raw-strings.patch +Patch67: hplip-use-raw-strings.patch # FTBFS GCC 14 # https://bugs.launchpad.net/hplip/+bug/2048780 -Patch70: hplip-hpaio-gcc14.patch +Patch68: hplip-hpaio-gcc14.patch # format is no longer method in locale module # https://bugs.launchpad.net/hplip/+bug/2045507 -Patch71: hplip-locale-format.patch +Patch69: hplip-locale-format.patch # function prototype did not specify argument's data types # https://bugs.launchpad.net/hplip/+bug/2096650 -Patch72: hplip-gcc15-stdc23.patch +Patch70: hplip-gcc15-stdc23.patch # status history table shows unformatted QDateTime values # https://bugs.launchpad.net/hplip/+bug/1956547 -Patch73: hplip-format-qdatetime.patch -# make sure we see prompts when installing plugin... -# https://bugs.launchpad.net/hplip/+bug/2110101 -Patch75: hplip-plugin-stdout.patch -# toolbox shows traceback when button 'close' is clicked on at first dialog -# https://bugs.launchpad.net/hplip/+bug/2111722 -Patch76: hplip-gui-close-trace.patch +Patch71: hplip-format-qdatetime.patch # Python 3.14 removed urlopener # https://bugs.launchpad.net/hplip/+bug/2115046 -Patch77: hplip-no-urlopener.patch +Patch72: hplip-no-urlopener.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -577,48 +571,44 @@ done %patch -P 57 -p1 -b .hpplugin-udevperms # 2080235 - Misleading errors about missing shared libraries when scanning %patch -P 58 -p1 -b .no-libm-libhpmud-warn -%patch -P 60 -p1 -b .plugin-patch +%patch -P 59 -p1 -b .plugin-patch # C99 compatibility fixes by fweimer - use explicit int # Submitted upstream: -%patch -P 61 -p1 -b .pserror-int +%patch -P 60 -p1 -b .pserror-int # C99 compatibility patch by fweimer - several undefined functions in hpaio # backend are declared in orblite.h # Submitted upstream: -%patch -P 62 -p1 -b .hpaio-orblite-defs +%patch -P 61 -p1 -b .hpaio-orblite-defs # C99 compatibility patch by fweimer - undefined _DBG() and dynamic linking funcs in orblite.c # - _DBG() looks like typo and new header is added for funcs # Submitted upstream: -%patch -P 63 -p1 -b .orblite-undefs +%patch -P 62 -p1 -b .orblite-undefs # C99 compatibility patch by fweimer - python2 PyString_AsStringAndSize in python3 code # gives undefined reference - removed for now with dependent hp-unload -%patch -P 64 -p1 -b .pcardext-disable +%patch -P 63 -p1 -b .pcardext-disable # C99 compatibility patch by fweimer - undefined strcasestr() in sclpml.c - build with _GNU_SOURCE -%patch -P 65 -p1 -b .sclpml-strcasestr +%patch -P 64 -p1 -b .sclpml-strcasestr # 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed # https://bugs.launchpad.net/hplip/+bug/2027972 -%patch -P 67 -p1 -b .lpstat-parse +%patch -P 65 -p1 -b .lpstat-parse # switch to curl by downstream patch from wget to workaround openstack dropping IPv6 # which causes great delays... -%patch -P 68 -p1 -b .curl-switch +%patch -P 66 -p1 -b .curl-switch # fix warnings # upstream https://bugs.launchpad.net/hplip/+bug/2029480 -%patch -P 69 -p1 -b .raw-strings +%patch -P 67 -p1 -b .raw-strings # FTBFS GCC 14 # https://bugs.launchpad.net/hplip/+bug/2048780 -%patch -P 70 -p1 -b .hpaio-gcc14 +%patch -P 68 -p1 -b .hpaio-gcc14 # format is no longer method in locale module # https://bugs.launchpad.net/hplip/+bug/2045507 -%patch -P 71 -p1 -b .locale-format +%patch -P 69 -p1 -b .locale-format # https://bugs.launchpad.net/hplip/+bug/2096650 -%patch -P 72 -p1 -b .gcc-strc23 +%patch -P 70 -p1 -b .gcc-strc23 # https://bugs.launchpad.net/hplip/+bug/1956547 -%patch -P 73 -p1 -b .format-qdatetime -# https://bugs.launchpad.net/hplip/+bug/2110101 -%patch -P 75 -p1 -b .stdout -# https://bugs.launchpad.net/hplip/+bug/2111722 -%patch -P 76 -p1 -b .gui-close-trace +%patch -P 71 -p1 -b .format-qdatetime # https://bugs.launchpad.net/hplip/+bug/2115046 -%patch -P 77 -p1 -b .no-urlopener +%patch -P 72 -p1 -b .no-urlopener # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -990,6 +980,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Tue Aug 12 2025 Zdenek Dohnal - 3.25.6-1 +- hplip-3.25.6 is available (fedora#2386814) + * Thu Jul 24 2025 Fedora Release Engineering - 3.25.2-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild diff --git a/sources b/sources index 9ed256f..3eebca3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (hplip-3.25.2-repack.tar.gz) = 38941d8f624b8edc4a45695151649d18a430177f9b3e257cd969e234ff0f45285a68fa83240727dce411fea961de34b4dc5b46741a48087b77f1e34b48d7d6b1 +SHA512 (hplip-3.25.6-repack.tar.gz) = 1b431142e2516e383d5fcbaa1487c5a680b60a409bec02de4526ac82d2a88a4b2b28f3813740ae8f7f32f02d058ae6e986efc8e57a30d1c560132dc4014b87b4 From 334237ac687d516e55b7d3819a58ff2314f09798 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Wed, 17 Sep 2025 14:01:58 +0200 Subject: [PATCH 09/22] hp-scan command failed to run and gives an error (fedora#2395809) --- hplip-scan-size.patch | 37 +++++++++++++++++++++++++++++++++++++ hplip.spec | 8 ++++++++ 2 files changed, 45 insertions(+) create mode 100644 hplip-scan-size.patch diff --git a/hplip-scan-size.patch b/hplip-scan-size.patch new file mode 100644 index 0000000..1ff8cb3 --- /dev/null +++ b/hplip-scan-size.patch @@ -0,0 +1,37 @@ +diff --git a/scan.py b/scan.py +index b262ef2..cb0ffc1 100755 +--- a/scan.py ++++ b/scan.py +@@ -83,7 +83,7 @@ edge_erase_value = 0 + contrast = 0 + set_contrast = False + +-page_size = '' ++page_size = 'a4' + size_desc = '' + page_units = 'mm' + default_res = 300 +@@ -1615,7 +1615,7 @@ try: + else: + im = im.convert("RGB") + +- #im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[size],res) ++ #im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[page_size],res) + if barcode_count>0: + if barcode_first_occurence == True: + if barcode_first_page == False: +@@ -1718,12 +1718,12 @@ try: + #so that the output image size matches with the input scan area + #for Flatbad + if im: +- im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[size],res) ++ im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[page_size],res) + """ + #for ADF + for Image_file in adf_page_files: + image = Image.open(Image_file) +- resized_image = imageprocessing.resize_to_scan_area(image,PAGE_SIZES[size],res) ++ resized_image = imageprocessing.resize_to_scan_area(image,PAGE_SIZES[page_size],res) + resized_image.save(Image_file) + """ + if adf and (save_file =='jpg' or save_file == 'png' or save_file == 'tiff' or save_file == 'pdf' or save_file == 'bmp'): diff --git a/hplip.spec b/hplip.spec index 24f7071..f7d6bdd 100644 --- a/hplip.spec +++ b/hplip.spec @@ -247,6 +247,9 @@ Patch71: hplip-format-qdatetime.patch # Python 3.14 removed urlopener # https://bugs.launchpad.net/hplip/+bug/2115046 Patch72: hplip-no-urlopener.patch +# hp-scan command failed to run and gives an error (fedora#2395809) +# https://bugs.launchpad.net/hplip/+bug/2124268 +Patch73: hplip-scan-size.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -609,6 +612,8 @@ done %patch -P 71 -p1 -b .format-qdatetime # https://bugs.launchpad.net/hplip/+bug/2115046 %patch -P 72 -p1 -b .no-urlopener +# https://bugs.launchpad.net/hplip/+bug/2124268 +%patch -P 73 -p1 -b .scan-size # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -980,6 +985,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Wed Sep 17 2025 Zdenek Dohnal - 3.25.6-1 +- hp-scan command failed to run and gives an error (fedora#2395809) + * Tue Aug 12 2025 Zdenek Dohnal - 3.25.6-1 - hplip-3.25.6 is available (fedora#2386814) From be70bd6792c1b3d232805da4c8678273e2ddf7c6 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Wed, 17 Sep 2025 14:08:07 +0200 Subject: [PATCH 10/22] Use new HP GPG key for plugin validation HP now uses new key pair for signing plugin tarball as fix for CVE-2025-43023, but hplip code was still downloading the old one, thus validation always failed. --- hplip-new-gpg-key.patch | 13 +++++++++++++ hplip.spec | 6 ++++++ 2 files changed, 19 insertions(+) create mode 100644 hplip-new-gpg-key.patch diff --git a/hplip-new-gpg-key.patch b/hplip-new-gpg-key.patch new file mode 100644 index 0000000..4aa433b --- /dev/null +++ b/hplip-new-gpg-key.patch @@ -0,0 +1,13 @@ +diff --git a/base/validation.py b/base/validation.py +index 23645c6..a8e3253 100644 +--- a/base/validation.py ++++ b/base/validation.py +@@ -45,7 +45,7 @@ class GPG_Verification(DigiSign_Verification): + def __init__(self, keyservers = ['keyserver.ubuntu.com', + 'pgp.surf.nl', + 'pgp.mit.edu'], +- key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9): ++ key = 0x82FFA7C6AA7411D934BDE173AC69536A2CF3A243): + self.__keyservers = keyservers + self.__key = key + self.__gpg = utils.which('gpg',True) diff --git a/hplip.spec b/hplip.spec index f7d6bdd..6fb946e 100644 --- a/hplip.spec +++ b/hplip.spec @@ -250,6 +250,9 @@ Patch72: hplip-no-urlopener.patch # hp-scan command failed to run and gives an error (fedora#2395809) # https://bugs.launchpad.net/hplip/+bug/2124268 Patch73: hplip-scan-size.patch +# HP uses new GPG key, but hplip code does not use it +# https://developers.hp.com/hp-linux-imaging-and-printing/hplipDigitalCertificate.html +Patch74: hplip-new-gpg-key.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -614,6 +617,8 @@ done %patch -P 72 -p1 -b .no-urlopener # https://bugs.launchpad.net/hplip/+bug/2124268 %patch -P 73 -p1 -b .scan-size +# Use new GPG key from Ubuntu keyserver +%patch -P 74 -p1 -b .new-gpg-key # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -987,6 +992,7 @@ find doc/images -type f -exec chmod 644 {} \; %changelog * Wed Sep 17 2025 Zdenek Dohnal - 3.25.6-1 - hp-scan command failed to run and gives an error (fedora#2395809) +- use new GPG key from HP - new key was used as fix for CVE-2025-43023 * Tue Aug 12 2025 Zdenek Dohnal - 3.25.6-1 - hplip-3.25.6 is available (fedora#2386814) From 075cac0afbd6516bdd9adef4eece7870c62d1e72 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Fri, 9 Jan 2026 13:04:20 +0100 Subject: [PATCH 11/22] hplip-3.25.8 is available (fedora#2415311) --- .gitignore | 1 + hplip-add-ppd-crash.patch | 13 ------------ hplip-keyserver.patch | 44 --------------------------------------- hplip-new-gpg-key.patch | 13 ------------ hplip-plugin-stdout.patch | 41 ++++++++++++++++++++++++++++++++++++ hplip.spec | 19 +++++++++++------ sources | 2 +- 7 files changed, 56 insertions(+), 77 deletions(-) delete mode 100644 hplip-new-gpg-key.patch create mode 100644 hplip-plugin-stdout.patch diff --git a/.gitignore b/.gitignore index 89da7d2..00397c1 100644 --- a/.gitignore +++ b/.gitignore @@ -115,3 +115,4 @@ hplip-3.10.6.tar.gz /hplip-3.24.4-repack.tar.gz /hplip-3.25.2-repack.tar.gz /hplip-3.25.6-repack.tar.gz +/hplip-3.25.8-repack.tar.gz diff --git a/hplip-add-ppd-crash.patch b/hplip-add-ppd-crash.patch index 798630a..beb070d 100644 --- a/hplip-add-ppd-crash.patch +++ b/hplip-add-ppd-crash.patch @@ -1,16 +1,3 @@ -diff -up hplip-3.23.3/setup.py.add-ppd-crash hplip-3.23.3/setup.py ---- hplip-3.23.3/setup.py.add-ppd-crash 2023-03-28 09:26:11.000000000 +0200 -+++ hplip-3.23.3/setup.py 2023-05-29 13:55:03.443497903 +0200 -@@ -553,6 +553,9 @@ else: # INTERACTIVE_MODE - - if file_path.endswith('.gz'): - nickname = gzip.GzipFile(file_path, 'r').read(4096) -+ if sys.version_info[0] > 2: -+ nickname = nickname.decode('utf-8') -+ - else: - nickname = open(file_path, 'r').read(4096) - diff -up hplip-3.23.3/ui5/setupdialog.py.add-ppd-crash hplip-3.23.3/ui5/setupdialog.py --- hplip-3.23.3/ui5/setupdialog.py.add-ppd-crash 2023-05-29 13:55:03.443497903 +0200 +++ hplip-3.23.3/ui5/setupdialog.py 2023-05-29 13:57:19.014700721 +0200 diff --git a/hplip-keyserver.patch b/hplip-keyserver.patch index 9b457f1..c525503 100644 --- a/hplip-keyserver.patch +++ b/hplip-keyserver.patch @@ -10,47 +10,3 @@ index 99bda7b..0f90f92 100644 self.prev_length = len(y) self.spinner_pos = (self.spinner_pos + 1) % 8 -diff --git a/base/validation.py b/base/validation.py -index ee6b05a..5e955dc 100644 ---- a/base/validation.py -+++ b/base/validation.py -@@ -42,8 +42,11 @@ class DigiSign_Verification(object): - - - class GPG_Verification(DigiSign_Verification): -- def __init__(self, pgp_site = 'pgp.mit.edu', key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9): -- self.__pgp_site = pgp_site -+ def __init__(self, keyservers = ['keyserver.ubuntu.com', -+ 'pgp.surf.nl', -+ 'pgp.mit.edu'], -+ key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9): -+ self.__keyservers = keyservers - self.__key = key - self.__gpg = utils.which('gpg',True) - -@@ -82,13 +85,18 @@ 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) -- -- log.info("Receiving digital keys: %s" % cmd) -- status, output = utils.run(cmd) -- log.debug(output) -+ for kserver in self.__keyservers: -+ cmd = '%s --homedir %s --no-permission-warning --keyserver %s --recv-keys 0x%X' \ -+ % (self.__gpg, self.__gpg_dir, kserver, self.__key) -+ -+ log.info("Receiving digital keys: %s" % cmd) -+ status, output = utils.run(cmd) -+ log.debug(output) -+ -+ if not status: -+ break -+ log.info("Receiving keys from {} failed, trying the next keyserver." -+ .format(kserver)) - - self.__change_owner(True) - diff --git a/hplip-new-gpg-key.patch b/hplip-new-gpg-key.patch deleted file mode 100644 index 4aa433b..0000000 --- a/hplip-new-gpg-key.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/base/validation.py b/base/validation.py -index 23645c6..a8e3253 100644 ---- a/base/validation.py -+++ b/base/validation.py -@@ -45,7 +45,7 @@ class GPG_Verification(DigiSign_Verification): - def __init__(self, keyservers = ['keyserver.ubuntu.com', - 'pgp.surf.nl', - 'pgp.mit.edu'], -- key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9): -+ key = 0x82FFA7C6AA7411D934BDE173AC69536A2CF3A243): - self.__keyservers = keyservers - self.__key = key - self.__gpg = utils.which('gpg',True) diff --git a/hplip-plugin-stdout.patch b/hplip-plugin-stdout.patch new file mode 100644 index 0000000..92f8016 --- /dev/null +++ b/hplip-plugin-stdout.patch @@ -0,0 +1,41 @@ +diff --git a/base/os_utils.py b/base/os_utils.py +index 82a8b42..d918822 100644 +--- a/base/os_utils.py ++++ b/base/os_utils.py +@@ -26,6 +26,7 @@ import locale + import stat + import subprocess + import shlex ++import sys + + #Local + from . import logger +@@ -37,17 +38,22 @@ def execute(cmd): + try: + # Use shlex.split to safely split the command into arguments + args = shlex.split(cmd) +- process = subprocess.Popen(args,stdout=subprocess.PIPE, stderr=subprocess.PIPE) ++ process = subprocess.Popen(args,stdout=sys.stdout, stderr=sys.stderr, stdin=sys.stdin) + process.wait() + stdout, stderr = process.communicate() +- log.debug(f"Command executed: {cmd}\n{stdout.decode()}") ++ ++ log.debug(f"Command executed: {cmd}{f'\n{stdout.decode()}' if stdout else ''}") ++ + if process.returncode != 0: +- error_message = f"Command failed with return code {process.returncode}: {cmd}\n{stderr.decode()}" +- log.error(error_message) ++ log.error(f"Command failed with return code" \ ++ f"{process.returncode}: {cmd}" \ ++ f"{f'\n{stderr.decode()}' if stderr else ''}") ++ + return process.returncode + except subprocess.CalledProcessError as e: +- error_message = f"Command failed with return code {e.returncode}: {cmd}\n{e.stderr.decode()}" +- log.error(error_message) ++ log.error(f"Command failed with return code" \ ++ f"{e.returncode}: {cmd}" \ ++ f"{f'\n{e.stderr.decode()}' if e.stderr else ''}") + return e.returncode + except Exception as e: + log.error(f"Error executing command: {cmd}\n{str(e)}") diff --git a/hplip.spec b/hplip.spec index 6fb946e..d6b78cd 100644 --- a/hplip.spec +++ b/hplip.spec @@ -6,7 +6,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip -Version: 3.25.6 +Version: 3.25.8 Release: 1%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG @@ -76,6 +76,8 @@ Patch30: hplip-hpfax-importerror-print.patch Patch31: hplip-wifisetup.patch # pgp.mit.edu keyserver got bad connection, so we need to have pool of keyservers # to choose (Bz#1641100, launchpad#1799212) +# F42+ update: HP has new key, and currently only on Ubuntu keyserver - so this patch now +# only adjust terminal output, we will see if connection problems reappear Patch32: hplip-keyserver.patch # QMessagebox call was copy-pasted from Qt4 version, but Qt5 has different arguments, # This patch solves most of them @@ -250,9 +252,11 @@ Patch72: hplip-no-urlopener.patch # hp-scan command failed to run and gives an error (fedora#2395809) # https://bugs.launchpad.net/hplip/+bug/2124268 Patch73: hplip-scan-size.patch -# HP uses new GPG key, but hplip code does not use it -# https://developers.hp.com/hp-linux-imaging-and-printing/hplipDigitalCertificate.html -Patch74: hplip-new-gpg-key.patch +# 3.25.8 brings new implementation for calling commands in subprocess, +# but again directs I/O into pipes, which does not work for TUI plugin +# installation. Additionally it tracebacks if stdout/stderr is None +# https://bugs.launchpad.net/hplip/+bug/2110101 +Patch74: hplip-plugin-stdout.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -617,8 +621,8 @@ done %patch -P 72 -p1 -b .no-urlopener # https://bugs.launchpad.net/hplip/+bug/2124268 %patch -P 73 -p1 -b .scan-size -# Use new GPG key from Ubuntu keyserver -%patch -P 74 -p1 -b .new-gpg-key +# https://bugs.launchpad.net/hplip/+bug/2110101 +%patch -P 74 -p1 -b .plugin-stdout # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -990,6 +994,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Fri Jan 09 2026 Zdenek Dohnal - 3.25.8-1 +- hplip-3.25.8 is available (fedora#2415311) + * Wed Sep 17 2025 Zdenek Dohnal - 3.25.6-1 - hp-scan command failed to run and gives an error (fedora#2395809) - use new GPG key from HP - new key was used as fix for CVE-2025-43023 diff --git a/sources b/sources index 3eebca3..601b241 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (hplip-3.25.6-repack.tar.gz) = 1b431142e2516e383d5fcbaa1487c5a680b60a409bec02de4526ac82d2a88a4b2b28f3813740ae8f7f32f02d058ae6e986efc8e57a30d1c560132dc4014b87b4 +SHA512 (hplip-3.25.8-repack.tar.gz) = e4f82215e2753bee864e5ba643be2ce3566f1691638c35c74016279f92c872713d06e38a066d283f03f3e571d10c8ac2f1539bd32f6bafd1958641d96fe11059 From 05bb4ddaa1541327be0904f18a7225527531d9bb Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Fri, 23 Jan 2026 09:29:04 +0000 Subject: [PATCH 12/22] Rebuilt for net-snmp 5.9.5.2 --- hplip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hplip.spec b/hplip.spec index d6b78cd..ed725d2 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.25.8 -Release: 1%{?dist} +Release: 2%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -994,6 +994,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Fri Jan 23 2026 Benjamin A. Beasley - 3.25.8-2 +- Rebuilt for net-snmp 5.9.5.2 + * Fri Jan 09 2026 Zdenek Dohnal - 3.25.8-1 - hplip-3.25.8 is available (fedora#2415311) From 68e652d439a59f96a44c5203dde82e7f15784580 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Mon, 25 May 2026 18:22:46 +0200 Subject: [PATCH 13/22] 3.26.4 (fedora#2480158), fixes CVE-2026-8631, CVE-2026-8632 --- .gitignore | 1 + hplip-curl-fallback.patch | 40 ++++++++++++++++++++ hplip-locale-format.patch | 13 ------- hplip-repack.sh | 2 +- hplip-use-raw-strings.patch | 75 ++++++++++--------------------------- hplip.spec | 41 +++++++++++--------- sources | 2 +- 7 files changed, 86 insertions(+), 88 deletions(-) create mode 100644 hplip-curl-fallback.patch delete mode 100644 hplip-locale-format.patch diff --git a/.gitignore b/.gitignore index 00397c1..833e1ab 100644 --- a/.gitignore +++ b/.gitignore @@ -116,3 +116,4 @@ hplip-3.10.6.tar.gz /hplip-3.25.2-repack.tar.gz /hplip-3.25.6-repack.tar.gz /hplip-3.25.8-repack.tar.gz +/hplip-3.26.4-repack.tar.gz diff --git a/hplip-curl-fallback.patch b/hplip-curl-fallback.patch new file mode 100644 index 0000000..596a82c --- /dev/null +++ b/hplip-curl-fallback.patch @@ -0,0 +1,40 @@ +diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py +index c2e2a94..d10d1b9 100755 +--- a/installer/pluginhandler.py ++++ b/installer/pluginhandler.py +@@ -36,7 +36,7 @@ def get_checksum(s): + + + PLUGIN_STATE_FILE = '/var/lib/hp/hplip.state' +-PLUGIN_FALLBACK_LOCATION = 'https://developers.hp.com/sites/default/files/' ++PLUGIN_FALLBACK_LOCATION = 'https://developers.hp.com/sites/default/files/2026-05/' + + + +@@ -281,7 +281,7 @@ class PluginHandle(object): + else: + curl = utils.which("curl", True) + if curl: +- cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl,self.__plugin_path,src) ++ cmd = "%s -f --create-dirs -O --output-dir %s --location %s" % (curl,self.__plugin_path,src) + log.debug(cmd) + status, output = utils.run(cmd) + log.debug("curl returned: %d" % status) +@@ -290,7 +290,7 @@ class PluginHandle(object): + if status != 0 or os_utils.getFileSize(plugin_file) <= 0: + src = os.path.join(PLUGIN_FALLBACK_LOCATION, self.__plugin_name) + log.info("Plugin is not accessible. Trying to download it from fallback location: [%s]" % src) +- cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl,self.__plugin_path,src) ++ cmd = "%s -f --user-agent 'Mozilla/5.0 (compatible; hplip-plugin/1.0)' --create-dirs -O --output-dir %s --location %s" % (curl,self.__plugin_path,src) + log.debug(cmd) + status, output = utils.run(cmd) + +@@ -318,7 +318,7 @@ class PluginHandle(object): + if digsig_url.startswith('file://'): + status, filename = utils.download_from_network(digsig_url, digsig_file, True) + else: +- cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl, self.__plugin_path,digsig_url) ++ cmd = "%s -f --user-agent 'Mozilla/5.0 (compatible; hplip-plugin/1.0)' --create-dirs -O --output-dir %s --location %s" % (curl, self.__plugin_path,digsig_url) + log.debug(cmd) + status, output = utils.run(cmd) + except IOError as e: diff --git a/hplip-locale-format.patch b/hplip-locale-format.patch deleted file mode 100644 index 32fba1e..0000000 --- a/hplip-locale-format.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/base/utils.py b/base/utils.py -index e2de550..55848b8 100644 ---- a/base/utils.py -+++ b/base/utils.py -@@ -474,7 +474,7 @@ def sort_dict_by_value(d): - - - def commafy(val): -- return locale.format("%s", val, grouping=True) -+ return locale.format_string("%s", val, grouping=True) - - - def format_bytes(s, show_bytes=False): diff --git a/hplip-repack.sh b/hplip-repack.sh index a67e7ee..20eb314 100755 --- a/hplip-repack.sh +++ b/hplip-repack.sh @@ -19,7 +19,7 @@ rm hplip-$VERSION/locatedriver tar -cjvf hplip-$VERSION-repack.tar.gz hplip-$VERSION || exit 1 # check whether plugin is available -wget -O hplip-plugin.run https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-$1-plugin.run || wget -O hplip-plugin.run https://developers.hp.com/sites/default/files/hplip-$1-plugin.run || exit 1 +wget -O hplip-plugin.run https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-$1-plugin.run || wget --user-agent='Mozilla/5.0 (compatible; hplip-plugin/1.0)' -O hplip-plugin.run https://developers.hp.com/sites/default/files/2026-05/hplip-$1-plugin.run || exit 1 # check whether the file is sane file --mime hplip-plugin.run | grep 'x-shellscript' || exit 1 diff --git a/hplip-use-raw-strings.patch b/hplip-use-raw-strings.patch index 77d1b87..058539f 100644 --- a/hplip-use-raw-strings.patch +++ b/hplip-use-raw-strings.patch @@ -1,23 +1,7 @@ -diff -up hplip-3.25.2/base/device.py.raw-strings hplip-3.25.2/base/device.py -diff -up hplip-3.25.2/base/g.py.raw-strings hplip-3.25.2/base/g.py -diff -up hplip-3.25.2/base/LedmWifi.py.raw-strings hplip-3.25.2/base/LedmWifi.py ---- hplip-3.25.2/base/LedmWifi.py.raw-strings 2025-02-27 13:12:29.000000000 +0100 -+++ hplip-3.25.2/base/LedmWifi.py 2025-04-11 10:26:18.519166530 +0200 -@@ -31,7 +31,7 @@ from .g import * - from . import device, utils - from .sixext import to_bytes_utf8 - --http_result_pat = re.compile("""HTTP/\d.\d\s(\d+)""", re.I) -+http_result_pat = re.compile(r"""HTTP/\d.\d\s(\d+)""", re.I) - HTTP_OK = 200 - HTTP_ACCEPTED = 202 - HTTP_NOCONTENT = 204 -diff -up hplip-3.25.2/base/logger.py.raw-strings hplip-3.25.2/base/logger.py -diff -up hplip-3.25.2/base/models.py.raw-strings hplip-3.25.2/base/models.py -diff -up hplip-3.25.2/base/password.py.raw-strings hplip-3.25.2/base/password.py -diff -up hplip-3.25.2/base/queues.py.raw-strings hplip-3.25.2/base/queues.py ---- hplip-3.25.2/base/queues.py.raw-strings 2025-04-11 10:26:18.512773352 +0200 -+++ hplip-3.25.2/base/queues.py 2025-04-11 10:26:18.520514306 +0200 +diff --git a/base/queues.py b/base/queues.py +index 0818574..8625f53 100755 +--- a/base/queues.py ++++ b/base/queues.py @@ -46,7 +46,7 @@ HPPS = 3 HPOTHER = 4 @@ -36,12 +20,10 @@ diff -up hplip-3.25.2/base/queues.py.raw-strings hplip-3.25.2/base/queues.py except AttributeError: desc = '' -diff -up hplip-3.25.2/base/status.py.raw-strings hplip-3.25.2/base/status.py -diff -up hplip-3.25.2/base/tui.py.raw-strings hplip-3.25.2/base/tui.py -diff -up hplip-3.25.2/base/utils.py.raw-strings hplip-3.25.2/base/utils.py -diff -up hplip-3.25.2/check.py.raw-strings hplip-3.25.2/check.py ---- hplip-3.25.2/check.py.raw-strings 2025-02-27 13:12:29.000000000 +0100 -+++ hplip-3.25.2/check.py 2025-04-11 10:26:18.521601431 +0200 +diff --git a/check.py b/check.py +index 284b88e..86ca832 100755 +--- a/check.py ++++ b/check.py @@ -627,7 +627,7 @@ class DependenciesCheck(object): status, output = utils.run("%s -d03f0:" % lsusb) @@ -60,9 +42,10 @@ diff -up hplip-3.25.2/check.py.raw-strings hplip-3.25.2/check.py pat = re.compile('''.*:(.*)''') if pat.search(g): out = out +' '+ pat.search(g).group(1) -diff -up hplip-3.25.2/fax/soapfax.py.raw-strings hplip-3.25.2/fax/soapfax.py ---- hplip-3.25.2/fax/soapfax.py.raw-strings 2025-02-27 13:12:29.000000000 +0100 -+++ hplip-3.25.2/fax/soapfax.py 2025-04-11 10:26:18.521745824 +0200 +diff --git a/fax/soapfax.py b/fax/soapfax.py +index 9865726..344cb34 100644 +--- a/fax/soapfax.py ++++ b/fax/soapfax.py @@ -42,7 +42,7 @@ from base.sixext import to_bytes_utf8 # **************************************************************************** # @@ -72,10 +55,10 @@ diff -up hplip-3.25.2/fax/soapfax.py.raw-strings hplip-3.25.2/fax/soapfax.py TIME_FORMAT_AM_PM = 1 -diff -up hplip-3.25.2/installer/dcheck.py.raw-strings hplip-3.25.2/installer/dcheck.py -diff -up hplip-3.25.2/makeuri.py.raw-strings hplip-3.25.2/makeuri.py ---- hplip-3.25.2/makeuri.py.raw-strings 2025-02-27 13:12:29.000000000 +0100 -+++ hplip-3.25.2/makeuri.py 2025-04-11 10:26:18.522024483 +0200 +diff --git a/makeuri.py b/makeuri.py +index 4a10de8..6343e31 100755 +--- a/makeuri.py ++++ b/makeuri.py @@ -46,7 +46,7 @@ USAGE = [ (__doc__, "", "name", True), ("DEVNODE (parallel only):", '"/dev/parportX", X=0,1,2,...', "option", False), ("SERIAL NO. (usb and parallel only):", '"serial no."', "option", True), @@ -85,10 +68,10 @@ diff -up hplip-3.25.2/makeuri.py.raw-strings hplip-3.25.2/makeuri.py ("Show the CUPS URI only (quiet mode):", "-c or --cups", "option", False), ("Show the SANE URI only (quiet mode):", "-s or --sane", "option", False), ("Show the HP Fax URI only (quiet mode):", "-f or --fax", "option", False), -diff -up hplip-3.25.2/prnt/cups.py.raw-strings hplip-3.25.2/prnt/cups.py -diff -up hplip-3.25.2/probe.py.raw-strings hplip-3.25.2/probe.py ---- hplip-3.25.2/probe.py.raw-strings 2025-02-27 13:12:29.000000000 +0100 -+++ hplip-3.25.2/probe.py 2025-04-11 10:26:18.522312569 +0200 +diff --git a/probe.py b/probe.py +index 2041fb6..2b43ece 100755 +--- a/probe.py ++++ b/probe.py @@ -42,11 +42,11 @@ USAGE = [(__doc__, "", "name", True), ("Usage: %s [OPTIONS]" % __mod__, "", "summary", True), utils.USAGE_OPTIONS, @@ -103,21 +86,3 @@ diff -up hplip-3.25.2/probe.py.raw-strings hplip-3.25.2/probe.py ("Search:", "-s or --search=", "option", False), ("", " must be a valid regular expression (not case sensitive)", "option", False), ("Network discovery method:", "-m or --method=: is 'slp'* or 'mdns'.", "option", False), -diff -up hplip-3.25.2/scan.py.raw-strings hplip-3.25.2/scan.py -diff -up hplip-3.25.2/setup.py.raw-strings hplip-3.25.2/setup.py ---- hplip-3.25.2/setup.py.raw-strings 2025-04-11 10:26:18.496992045 +0200 -+++ hplip-3.25.2/setup.py 2025-04-11 10:26:18.522775511 +0200 -@@ -79,11 +79,11 @@ USAGE = [ (__doc__, "", "name", True), - utils.USAGE_SPACE, - utils.USAGE_OPTIONS, - ("Automatic mode:", "-a or --auto (-i mode only)", "option", False), -- ("To specify the port on a multi-port JetDirect:", "--port= (Valid values are 1\*, 2, and 3. \*default)", "option", False), -+ ("To specify the port on a multi-port JetDirect:", r"--port= (Valid values are 1\*, 2, and 3. \*default)", "option", False), - ("No testpage in automatic mode:", "-x (-i mode only)", "option", False), - ("To specify a CUPS printer queue name:", "-p or --printer= (-i mode only)", "option", False), - ("To specify a CUPS fax queue name:", "-f or --fax= (-i mode only)", "option", False), -- ("Type of queue(s) to install:", "-t or --type=. : print*, fax\* (\*default) (-i mode only)", "option", False), -+ ("Type of queue(s) to install:", r"-t or --type=. : print*, fax\* (\*default) (-i mode only)", "option", False), - ("To specify the device URI to install:", "-d or --device= (--qt4 mode only)", "option", False), - ("Remove printers or faxes instead of setting-up:", "-r or --rm or --remove", "option", False), - utils.USAGE_LANGUAGE, diff --git a/hplip.spec b/hplip.spec index ed725d2..284cfa4 100644 --- a/hplip.spec +++ b/hplip.spec @@ -6,8 +6,8 @@ Summary: HP Linux Imaging and Printing Project Name: hplip -Version: 3.25.8 -Release: 2%{?dist} +Version: 3.26.4 +Release: 1%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -237,26 +237,29 @@ Patch67: hplip-use-raw-strings.patch # FTBFS GCC 14 # https://bugs.launchpad.net/hplip/+bug/2048780 Patch68: hplip-hpaio-gcc14.patch -# format is no longer method in locale module -# https://bugs.launchpad.net/hplip/+bug/2045507 -Patch69: hplip-locale-format.patch # function prototype did not specify argument's data types # https://bugs.launchpad.net/hplip/+bug/2096650 -Patch70: hplip-gcc15-stdc23.patch +Patch69: hplip-gcc15-stdc23.patch # status history table shows unformatted QDateTime values # https://bugs.launchpad.net/hplip/+bug/1956547 -Patch71: hplip-format-qdatetime.patch +Patch70: hplip-format-qdatetime.patch # Python 3.14 removed urlopener # https://bugs.launchpad.net/hplip/+bug/2115046 -Patch72: hplip-no-urlopener.patch +Patch71: hplip-no-urlopener.patch # hp-scan command failed to run and gives an error (fedora#2395809) # https://bugs.launchpad.net/hplip/+bug/2124268 -Patch73: hplip-scan-size.patch +Patch72: hplip-scan-size.patch # 3.25.8 brings new implementation for calling commands in subprocess, # but again directs I/O into pipes, which does not work for TUI plugin # installation. Additionally it tracebacks if stdout/stderr is None # https://bugs.launchpad.net/hplip/+bug/2110101 -Patch74: hplip-plugin-stdout.patch +Patch73: hplip-plugin-stdout.patch +# Fallbacking to HP site for plugin does not work for several reasons: +# - curl was not called with -f, so error 404 from openprinting did not propagated, +# - HP fallback URL in hplip does not contain latest changes - it now has YYYY-MM in it, +# - connecting to HP site requires curl/wget to set user-agent to pretend to be a browser +# https://bugs.launchpad.net/hplip/+bug/2154206 +Patch74: hplip-curl-fallback.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -610,19 +613,18 @@ done # FTBFS GCC 14 # https://bugs.launchpad.net/hplip/+bug/2048780 %patch -P 68 -p1 -b .hpaio-gcc14 -# format is no longer method in locale module -# https://bugs.launchpad.net/hplip/+bug/2045507 -%patch -P 69 -p1 -b .locale-format # https://bugs.launchpad.net/hplip/+bug/2096650 -%patch -P 70 -p1 -b .gcc-strc23 +%patch -P 69 -p1 -b .gcc-strc23 # https://bugs.launchpad.net/hplip/+bug/1956547 -%patch -P 71 -p1 -b .format-qdatetime +%patch -P 70 -p1 -b .format-qdatetime # https://bugs.launchpad.net/hplip/+bug/2115046 -%patch -P 72 -p1 -b .no-urlopener +%patch -P 71 -p1 -b .no-urlopener # https://bugs.launchpad.net/hplip/+bug/2124268 -%patch -P 73 -p1 -b .scan-size +%patch -P 72 -p1 -b .scan-size # https://bugs.launchpad.net/hplip/+bug/2110101 -%patch -P 74 -p1 -b .plugin-stdout +%patch -P 73 -p1 -b .plugin-stdout +# https://bugs.launchpad.net/hplip/+bug/2154206 +%patch -P 74 -p1 -b .curl-fallback # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -994,6 +996,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Mon May 25 2026 Zdenek Dohnal - 3.26.4-1 +- 3.26.4 (fedora#2480158), fixes CVE-2026-8631, CVE-2026-8632 + * Fri Jan 23 2026 Benjamin A. Beasley - 3.25.8-2 - Rebuilt for net-snmp 5.9.5.2 diff --git a/sources b/sources index 601b241..0574f21 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (hplip-3.25.8-repack.tar.gz) = e4f82215e2753bee864e5ba643be2ce3566f1691638c35c74016279f92c872713d06e38a066d283f03f3e571d10c8ac2f1539bd32f6bafd1958641d96fe11059 +SHA512 (hplip-3.26.4-repack.tar.gz) = e46eb44780afdc13f975a2de23a7fcef51659d96506125a76f23f9e47135a6bd3aab60f70f4b52ad088714f967031324c9f537b4af21e394a49eae9bb94742f4 From 19434150167f38616b1d307d1b4bb76ba7766bc3 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Tue, 26 May 2026 10:53:55 +0200 Subject: [PATCH 14/22] Fix location+user-agent of plugin in hp-plugin-download --- hp-plugin.in | 4 ++-- hplip.spec | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/hp-plugin.in b/hp-plugin.in index 5bdbab0..8a6155e 100644 --- a/hp-plugin.in +++ b/hp-plugin.in @@ -16,12 +16,12 @@ download() { SOURCE="$1" - @bindir@/curl --create-dirs -O --output-dir ~/.hplip --location ${SOURCE} + @bindir@/curl -f --user-agent 'Mozilla/5.0 (compatible; hplip-plugin/1.0)' --create-dirs -O --output-dir ~/.hplip --location ${SOURCE} } # link to the plugin PLUGIN_SOURCE="https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/${PLUGIN_FILE}" -FALLBACK_SOURCE="https://developers.hp.com/sites/default/files/${PLUGIN_FILE}" +FALLBACK_SOURCE="https://developers.hp.com/sites/default/files/2026-05/${PLUGIN_FILE}" # create a hidden hplip dir to store a file indicating the plugin version after successful install # the directory can be used by other hplip tools, so we don't have to remove it if the failure happens diff --git a/hplip.spec b/hplip.spec index 284cfa4..79f5275 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.26.4 -Release: 1%{?dist} +Release: 2%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -996,6 +996,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Tue May 26 2026 Zdenek Dohnal - 3.26.4-2 +- Fix location+user-agent of plugin in hp-plugin-download + * Mon May 25 2026 Zdenek Dohnal - 3.26.4-1 - 3.26.4 (fedora#2480158), fixes CVE-2026-8631, CVE-2026-8632 From 8a72aa893c09f077d4d077978e158d38f53d7967 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Wed, 3 Jun 2026 20:08:49 +0200 Subject: [PATCH 15/22] Rebuilt for Python 3.15 --- hplip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hplip.spec b/hplip.spec index 79f5275..7d5e38c 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.26.4 -Release: 2%{?dist} +Release: 3%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -996,6 +996,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Wed Jun 03 2026 Python Maint - 3.26.4-3 +- Rebuilt for Python 3.15 + * Tue May 26 2026 Zdenek Dohnal - 3.26.4-2 - Fix location+user-agent of plugin in hp-plugin-download From cdc920743005275ee03c5547a626cdf81019423c Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Fri, 12 Jun 2026 12:36:00 +0200 Subject: [PATCH 16/22] OSH fixes after CVE-2026-8631 --- hplip-CVE-2026-8631-osh.patch | 35 +++++++++++++++++++++++++++++++++++ hplip.spec | 9 ++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 hplip-CVE-2026-8631-osh.patch diff --git a/hplip-CVE-2026-8631-osh.patch b/hplip-CVE-2026-8631-osh.patch new file mode 100644 index 0000000..2e906d9 --- /dev/null +++ b/hplip-CVE-2026-8631-osh.patch @@ -0,0 +1,35 @@ +diff --git a/prnt/hpcups/genPCLm.cpp b/prnt/hpcups/genPCLm.cpp +index 0e1650c..e0c5248 100644 +--- a/prnt/hpcups/genPCLm.cpp ++++ b/prnt/hpcups/genPCLm.cpp +@@ -1917,8 +1917,11 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh + #ifdef SUPPORT_WHITE_STRIPS + int whiteStripLen=0; + if(!safe_mul_int_positive(thisHeight, currSourceWidth, &whiteStripLen) || +- !safe_mul_int_positive(whiteStripLen, srcNumComponents, &whiteStripLen)) ++ !safe_mul_int_positive(thisHeight, srcNumComponents, &whiteStripLen)) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + bool whiteStrip=isWhiteStrip(pInBuffer, whiteStripLen); + if(DebugIt2) + { +@@ -1940,11 +1943,17 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh + ubyte whitePt=0xff; + size_t tmpStripSize=0; + if(!safe_mul_size_t((size_t)scanlineWidth, (size_t)topMarginInPix, &tmpStripSize)) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + + ubyte *tmpStrip=(ubyte*)malloc(tmpStripSize); + if(!tmpStrip) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + memset(tmpStrip,whitePt,tmpStripSize); + + diff --git a/hplip.spec b/hplip.spec index 7d5e38c..79491a8 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.26.4 -Release: 3%{?dist} +Release: 4%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -260,6 +260,8 @@ Patch73: hplip-plugin-stdout.patch # - connecting to HP site requires curl/wget to set user-agent to pretend to be a browser # https://bugs.launchpad.net/hplip/+bug/2154206 Patch74: hplip-curl-fallback.patch +# OSH fixes after CVE-2026-8631 +Patch75: hplip-CVE-2026-8631-osh.patch %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -625,6 +627,8 @@ done %patch -P 73 -p1 -b .plugin-stdout # https://bugs.launchpad.net/hplip/+bug/2154206 %patch -P 74 -p1 -b .curl-fallback +# OSH fixes after CVE-2026-8631 +%patch -P 75 -p1 -b .cve-2026-8631-osh # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -996,6 +1000,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Fri Jun 12 2026 Zdenek Dohnal - 3.26.4-4 +- OSH fixes after CVE-2026-8631 + * Wed Jun 03 2026 Python Maint - 3.26.4-3 - Rebuilt for Python 3.15 From 4a4a2ad197a5030463b9abe5ac1355cb41851d84 Mon Sep 17 00:00:00 2001 From: Yaakov Selkowitz Date: Fri, 12 Jun 2026 18:44:42 -0400 Subject: [PATCH 17/22] Rebuilt for openssl 4.0 --- hplip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hplip.spec b/hplip.spec index 79491a8..14a873e 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.26.4 -Release: 4%{?dist} +Release: 5%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -1000,6 +1000,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Fri Jun 12 2026 Yaakov Selkowitz - 3.26.4-5 +- Rebuilt for openssl 4.0 + * Fri Jun 12 2026 Zdenek Dohnal - 3.26.4-4 - OSH fixes after CVE-2026-8631 From 4a29f321867a39ca24d8d2d726029e20b50d8a2a Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Mon, 15 Jun 2026 10:27:32 +0200 Subject: [PATCH 18/22] Add upstream ticket link --- hplip.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/hplip.spec b/hplip.spec index 14a873e..3f2f2cb 100644 --- a/hplip.spec +++ b/hplip.spec @@ -261,6 +261,7 @@ Patch73: hplip-plugin-stdout.patch # https://bugs.launchpad.net/hplip/+bug/2154206 Patch74: hplip-curl-fallback.patch # OSH fixes after CVE-2026-8631 +# https://bugs.launchpad.net/hplip/+bug/2156584 Patch75: hplip-CVE-2026-8631-osh.patch %if 0%{?fedora} || 0%{?rhel} <= 8 From 0a47faa5bb680e205590af0f06f4e598124ee304 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Mon, 15 Jun 2026 13:00:20 +0200 Subject: [PATCH 19/22] Fix more leaks after CVE-2026-8632 fix --- hplip-CVE-2026-8631-osh.patch | 62 ++++++++++++++++++++++++++++++++++- hplip.spec | 5 ++- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/hplip-CVE-2026-8631-osh.patch b/hplip-CVE-2026-8631-osh.patch index 2e906d9..91baaa7 100644 --- a/hplip-CVE-2026-8631-osh.patch +++ b/hplip-CVE-2026-8631-osh.patch @@ -1,5 +1,5 @@ diff --git a/prnt/hpcups/genPCLm.cpp b/prnt/hpcups/genPCLm.cpp -index 0e1650c..e0c5248 100644 +index 0e1650c..5f83cba 100644 --- a/prnt/hpcups/genPCLm.cpp +++ b/prnt/hpcups/genPCLm.cpp @@ -1917,8 +1917,11 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh @@ -33,3 +33,63 @@ index 0e1650c..e0c5248 100644 memset(tmpStrip,whitePt,tmpStripSize); +@@ -2012,7 +2021,10 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh + { + int sourceLen=0; + if(!safe_mul_int_positive(numLinesThisCall, scanlineWidth, &sourceLen)) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + uint32 len=(uint32)sourceLen; + uLongf destSize=len; + +@@ -2021,12 +2033,18 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh + ubyte whitePt=0xff; + size_t tmpStripSize=0; + if(!safe_mul_size_t((size_t)scanlineWidth, (size_t)topMarginInPix, &tmpStripSize)) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + + // We need to inject a blank image-strip with a height==topMarginInPix + ubyte *tmpStrip=(ubyte*)malloc(tmpStripSize); + if(!tmpStrip) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + uLongf tmpDestSize=destSize; + memset(tmpStrip,whitePt,tmpStripSize); + +@@ -2075,20 +2093,29 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh + { + int sourceLen=0; + if(!safe_mul_int_positive(numLinesThisCall, scanlineWidth, &sourceLen)) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + + if(firstStrip && topMarginInPix) + { + ubyte whitePt=0xff; + size_t tmpStripSize=0; + if(!safe_mul_size_t((size_t)scanlineWidth, (size_t)topMarginInPix, &tmpStripSize)) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + + // We need to inject a blank image-strip with a height==topMarginInPix + + ubyte *tmpStrip=(ubyte*)malloc(tmpStripSize); + if(!tmpStrip) ++ { ++ free(newStripPtr); + return(errorOutAndCleanUp()); ++ } + memset(tmpStrip,whitePt,tmpStripSize); + + for(sint32 stripCntr=0; stripCntr - 3.26.4-6 +- Fix more leaks after CVE-2026-8632 fix + * Fri Jun 12 2026 Yaakov Selkowitz - 3.26.4-5 - Rebuilt for openssl 4.0 From f608b603fdbcb101d3e64b847b965527a12c29cb Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Fri, 3 Jul 2026 10:33:25 +0200 Subject: [PATCH 20/22] fix CVE-2026-14544 - incomplete fix after CVE-2026-8631 (fedora#2496773, fedora#2496772) --- hplip-CVE-2026-8631-osh.patch | 21 +++++++++------------ hplip.spec | 6 +++++- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/hplip-CVE-2026-8631-osh.patch b/hplip-CVE-2026-8631-osh.patch index 91baaa7..226a570 100644 --- a/hplip-CVE-2026-8631-osh.patch +++ b/hplip-CVE-2026-8631-osh.patch @@ -1,13 +1,10 @@ -diff --git a/prnt/hpcups/genPCLm.cpp b/prnt/hpcups/genPCLm.cpp -index 0e1650c..5f83cba 100644 ---- a/prnt/hpcups/genPCLm.cpp -+++ b/prnt/hpcups/genPCLm.cpp -@@ -1917,8 +1917,11 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh - #ifdef SUPPORT_WHITE_STRIPS +diff -up hplip-3.21.2/prnt/hpcups/genPCLm.cpp.CVE-2026-8631-osh hplip-3.21.2/prnt/hpcups/genPCLm.cpp +--- hplip-3.21.2/prnt/hpcups/genPCLm.cpp.CVE-2026-8631-osh 2026-07-03 08:25:17.717888763 +0200 ++++ hplip-3.21.2/prnt/hpcups/genPCLm.cpp 2026-07-03 08:48:22.225130940 +0200 +@@ -1922,7 +1922,10 @@ int PCLmGenerator::Encapsulate(void *pI int whiteStripLen=0; if(!safe_mul_int_positive(thisHeight, currSourceWidth, &whiteStripLen) || -- !safe_mul_int_positive(whiteStripLen, srcNumComponents, &whiteStripLen)) -+ !safe_mul_int_positive(thisHeight, srcNumComponents, &whiteStripLen)) + !safe_mul_int_positive(whiteStripLen, srcNumComponents, &whiteStripLen)) + { + free(newStripPtr); return(errorOutAndCleanUp()); @@ -15,7 +12,7 @@ index 0e1650c..5f83cba 100644 bool whiteStrip=isWhiteStrip(pInBuffer, whiteStripLen); if(DebugIt2) { -@@ -1940,11 +1943,17 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh +@@ -1944,11 +1947,17 @@ int PCLmGenerator::Encapsulate(void *pI ubyte whitePt=0xff; size_t tmpStripSize=0; if(!safe_mul_size_t((size_t)scanlineWidth, (size_t)topMarginInPix, &tmpStripSize)) @@ -33,7 +30,7 @@ index 0e1650c..5f83cba 100644 memset(tmpStrip,whitePt,tmpStripSize); -@@ -2012,7 +2021,10 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh +@@ -2016,7 +2025,10 @@ int PCLmGenerator::Encapsulate(void *pI { int sourceLen=0; if(!safe_mul_int_positive(numLinesThisCall, scanlineWidth, &sourceLen)) @@ -44,7 +41,7 @@ index 0e1650c..5f83cba 100644 uint32 len=(uint32)sourceLen; uLongf destSize=len; -@@ -2021,12 +2033,18 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh +@@ -2025,12 +2037,18 @@ int PCLmGenerator::Encapsulate(void *pI ubyte whitePt=0xff; size_t tmpStripSize=0; if(!safe_mul_size_t((size_t)scanlineWidth, (size_t)topMarginInPix, &tmpStripSize)) @@ -63,7 +60,7 @@ index 0e1650c..5f83cba 100644 uLongf tmpDestSize=destSize; memset(tmpStrip,whitePt,tmpStripSize); -@@ -2075,20 +2093,29 @@ int PCLmGenerator::Encapsulate(void *pInBuffer, int inBufferSize, int thisHeigh +@@ -2079,20 +2097,29 @@ int PCLmGenerator::Encapsulate(void *pI { int sourceLen=0; if(!safe_mul_int_positive(numLinesThisCall, scanlineWidth, &sourceLen)) diff --git a/hplip.spec b/hplip.spec index bfc5286..c0d8219 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.26.4 -Release: 6%{?dist} +Release: 7%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -1001,6 +1001,10 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Fri Jul 03 2026 Zdenek Dohnal - 3.26.4-7 +- fix CVE-2026-14544 - incomplete fix after CVE-2026-8631 (fedora#2496773, + fedora#2496772) + * Mon Jun 15 2026 Zdenek Dohnal - 3.26.4-6 - Fix more leaks after CVE-2026-8632 fix From 55a3f51a16ecc0686bd4cb4a837a94e727defb21 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 16 Jul 2026 03:19:40 +0000 Subject: [PATCH 21/22] Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild --- hplip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hplip.spec b/hplip.spec index c0d8219..3cef2e4 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.26.4 -Release: 7%{?dist} +Release: 8%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -1001,6 +1001,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Thu Jul 16 2026 Fedora Release Engineering - 3.26.4-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + * Fri Jul 03 2026 Zdenek Dohnal - 3.26.4-7 - fix CVE-2026-14544 - incomplete fix after CVE-2026-8631 (fedora#2496773, fedora#2496772) From 47d2d96401bd73d3c5ecd4a0632f1c8965e96eb3 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Wed, 22 Jul 2026 11:08:22 +0200 Subject: [PATCH 22/22] Rebuilt for Python 3.15.0b4 ABI change --- hplip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hplip.spec b/hplip.spec index 3cef2e4..f1d3a86 100644 --- a/hplip.spec +++ b/hplip.spec @@ -7,7 +7,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.26.4 -Release: 8%{?dist} +Release: 9%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG # prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267 @@ -1001,6 +1001,9 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Wed Jul 22 2026 Python Maint - 3.26.4-9 +- Rebuilt for Python 3.15.0b4 ABI change + * Thu Jul 16 2026 Fedora Release Engineering - 3.26.4-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild