SHA256
5
0
forked from pool/hplip

30 Commits

Author SHA256 Message Date
10bfb902d4 Accepting request 1320016 from Printing
Remove dependency on update-desktop-files for factory

OBS-URL: https://build.opensuse.org/request/show/1320016
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=166
2025-11-27 14:19:01 +00:00
7ffbbaa882 OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=280 2025-11-25 14:01:01 +00:00
ee0405583d - Remove unused BuildRequires: update-desktop-files.
OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=279
2025-11-25 13:49:28 +00:00
03fb19a3a4 Rremoved an invisible Unicode U+2002 character in hplip.changes
OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=278
2025-11-19 14:29:40 +00:00
f3d2506529 Accepting request 1309931 from Printing
- Move more utilities from hplip-utils to hplip-base.
  * hplip-base now contains all utilities that are not totally useless
    and can run without the Qt GUI.
- Update fix for support of new GPG key, as the key has now been
  uploaded to GPG keyservers (lp#2120738)
  * drop hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch
  * update hplip-change-pgp-server.patch
- Drop dependency on cups-ppdc. It isn't necessary, as PPD
  generation on target system is done by cups-driverd.
- The old and outdated 'hpijs' driver support is finally dropped
  (the 'hpcups' driver is the default driver since 2009)
  so that there is no need for foomatic-filters (boo#1250481)
- Continue refactoring:
  * move GUI tools to "hplip-utils" subpackage
  * convert "hplip" into an empty metapackage that pulls in hplip-utils 
    and all drivers / PPDs (except hpijs PPDs).
- Refactor package structure:
  * hplip: full set of utilities. Pulls in almost all subpackages
    to deliver the "traditional" hplip experience
  * hplip-base: small set of basic utilities that can be run
    without GUI. Includes hp-probe and hp-plugin
  * hplip-cups: minimal package for printing, without PPDs or
    setup helpers
  * hplip-sane: scanning support (unchanged) 
  * hplip-driver-hpcups: hpcups.drv for generating hpcups PPDs on
    the fly (requires ppdc). The functionality of this package is
    similar to the old (misnamed) "hplip-hpijs" package.
  * hplip-driver-hpijs: hpijs.drv for generating PPDs for the deprecated
    hpijs / foomatic_rip filter. Note that this functionality was not part of
    the late hplip-hpijs package, because upstream hasn't ship foomatic PPDs
    since hplip 3.17.11.
  * hplip-ppds-{hpcups,hpps,postscript,hpijs,fax,plugin}: static PPD
    files for different printer types.
    hplip-ppds-hpcups is an alternative to hplip-driver-hpcups.
  * libhplip0: shared library package, used by hplip-cups and
    hplip-sane
  * hplip-common: configuration files and directories used by
    all hplip packages.
- Other spec file changes:
  * Skip deprecated suse_update_desktop_file by default on TW
  * Don't mess with sane configuration in udev rules
  * Only the hpijs packages depend on foomatic-rip, which is only
    provided by cups-filters-1.x. The other packages can be used
    with cups-filters2.
  * Remove Obsoletes: for ancient predecessor packages
  * Remove outdated comments from spec file
  * Shorten package descriptions
  * Fix a couple of rpmlint issues
    
- Fix printer probing using avahi (lp#2120947)
  * Add hplip-fix-driver-probing-using-avahi.patch
  * Add hplip-fix-python-crash-in-avahi.py.patch

OBS-URL: https://build.opensuse.org/request/show/1309931
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=165
2025-10-10 15:07:41 +00:00
756b74b309 OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=276 2025-10-09 08:43:31 +00:00
497ec9ee78 - Move more utilities from hplip-utils to hplip-base.
* hplip-base now contains all utilities that are not totally useless
    and can run without the Qt GUI.

- Update fix for support of new GPG key, as the key has now been
  uploaded to GPG keyservers (lp#2120738)
  * drop hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch
  * update hplip-change-pgp-server.patch

- Drop dependency on cups-ppdc. It isn't necessary, as PPD
  generation on target system is done by cups-driverd.

- The old and outdated 'hpijs' driver support is finally dropped
  (the 'hpcups' driver is the default driver since 2009)
  so that there is no need for foomatic-filters (boo#1250481)

- Continue refactoring:
  * move GUI tools to "hplip-utils" subpackage
  * convert "hplip" into an empty metapackage that pulls in hplip-utils 
    and all drivers / PPDs (except hpijs PPDs).

- Refactor package structure:
  * hplip: full set of utilities. Pulls in almost all subpackages
    to deliver the "traditional" hplip experience
  * hplip-base: small set of basic utilities that can be run
    without GUI. Includes hp-probe and hp-plugin
  * hplip-cups: minimal package for printing, without PPDs or
    setup helpers
  * hplip-sane: scanning support (unchanged) 
  * hplip-driver-hpcups: hpcups.drv for generating hpcups PPDs on
    the fly (requires ppdc). The functionality of this package is
    similar to the old (misnamed) "hplip-hpijs" package.
  * hplip-driver-hpijs: hpijs.drv for generating PPDs for the deprecated
    hpijs / foomatic_rip filter. Note that this functionality was not part of
    the late hplip-hpijs package, because upstream hasn't ship foomatic PPDs
    since hplip 3.17.11.
  * hplip-ppds-{hpcups,hpps,postscript,hpijs,fax,plugin}: static PPD
    files for different printer types.
    hplip-ppds-hpcups is an alternative to hplip-driver-hpcups.
  * libhplip0: shared library package, used by hplip-cups and
    hplip-sane
  * hplip-common: configuration files and directories used by
    all hplip packages.
- Other spec file changes:
  * Skip deprecated suse_update_desktop_file by default on TW
  * Don't mess with sane configuration in udev rules
  * Only the hpijs packages depend on foomatic-rip, which is only
    provided by cups-filters-1.x. The other packages can be used
    with cups-filters2.
  * Remove Obsoletes: for ancient predecessor packages
  * Remove outdated comments from spec file
  * Shorten package descriptions
  * Fix a couple of rpmlint issues
    
- Fix printer probing using avahi (lp#2120947)
  * Add hplip-fix-driver-probing-using-avahi.patch
  * Add hplip-fix-python-crash-in-avahi.py.patch

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=275
2025-10-09 08:17:23 +00:00
c3f7a8c460 Accepting request 1300306 from Printing
OBS-URL: https://build.opensuse.org/request/show/1300306
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=164
2025-08-20 11:24:51 +00:00
23d046f249 - 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

- 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

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=273
2025-08-19 14:25:36 +00:00
6af0bcd0d2 Accepting request 1299861 from Printing
- Disable hp-scan-utils on Leap 16.0
  Leap does not want to ship scikit-image -> python-pandas

OBS-URL: https://build.opensuse.org/request/show/1299861
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=163
2025-08-16 18:37:09 +00:00
2685c80bcc Fix syntax of "%bcond_with scan_utils"
OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=271
2025-08-15 20:20:18 +00:00
ee64d56499 - Disable hp-scan-utils on Leap 16.0
Leap does not want to ship scikit-image -> python-pandas

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=270
2025-08-15 15:40:10 +00:00
4f46173b7f Accepting request 1295165 from Printing
Automatic submission by obs-autosubmit

OBS-URL: https://build.opensuse.org/request/show/1295165
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=162
2025-07-24 16:34:36 +00:00
c69d1bf3db - Fix ReDoS issue in HPLIP's SLP parser (bsc#1245358)
* add Fix-ReDoS-issue-in-HPLIP-s-SLP-parser.patch

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=268
2025-07-15 17:54:10 +00:00
01111b9fc0 Accepting request 1275594 from Printing
OBS-URL: https://build.opensuse.org/request/show/1275594
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=161
2025-05-09 16:39:34 +00:00
b2ab3cb1c9 - Update to hplip 3.25.2
- Added support for new printers:
  * HP LaserJet Enterprise Flow MFP 8601z
  * HP LaserJet Enterprise Flow MFP 8601z+
  * HP LaserJet Enterprise MFP 8601dn
  * HP Color LaserJet Enterprise MFP 8801dn
  * HP Color LaserJet Enterprise Flow MFP 8801z
  * HP Color LaserJet Enterprise Flow MFP 8801z+
  * HP LaserJet Enterprise 8501dn
  * HP LaserJet Enterprise 8501x
  * HP LaserJet Enterprise 8501x+
  * DEX MFP D826
  * DEX MFP D82640
  * DEX MFP D82650
  * DEX MFP D82660
  * DEX D50145
  * DEX MFP D42540
  * DEX MFP D52645
  * DEX Color D55745
  * DEX Color MFP D57945
  * DEX Color MFP D677
  * DEX Color MFP D67755
  * DEX Color MFP D67765
  * DEX Color MFP D877
  * DEX Color MFP D87740
  * DEX Color MFP D87750
  * DEX Color MFP D87760
  * DEX Color MFP D87770
  * DEX Color MFP D786
  * DEX Colour MFP D78625

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=266
2025-05-08 14:17:16 +00:00
2d0f1b8130 Accepting request 1274854 from Printing
OBS-URL: https://build.opensuse.org/request/show/1274854
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=160
2025-05-07 17:14:50 +00:00
0f6411a364 add hplip-3.24.4-gcc15.patch to fix gcc-15 compile time error
OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=264
2025-05-06 10:04:04 +00:00
18d65bd90a Accepting request 1245683 from Printing
- Add python3-setuptools BuildRequires: replaces the fix to
  manually inject PYTHON_INCLUDEDIR. Fix needed to build against
  Python 3.13.

Fixes build in Staging_A (python 3.13) - and seems to address the real reaason why PYTHON_INCLUDEDIR needed to be injected (forwarded request 1241212 from dimstar)

OBS-URL: https://build.opensuse.org/request/show/1245683
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=159
2025-02-14 18:19:48 +00:00
b4c6de1fe0 - Add python3-setuptools BuildRequires: replaces the fix to
manually inject PYTHON_INCLUDEDIR. Fix needed to build against
  Python 3.13.

Fixes build in Staging_A (python 3.13) - and seems to address the real reaason why PYTHON_INCLUDEDIR needed to be injected

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=262
2025-02-13 14:47:04 +00:00
ecc13f65af Accepting request 1241606 from Printing
Automatic submission by obs-autosubmit

OBS-URL: https://build.opensuse.org/request/show/1241606
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=158
2025-02-03 20:40:38 +00:00
55c3139c15 - Fix error in ConfigBase handling (bsc#1209401)
- add hplip-base-fix-error-in-ConfigBase-handling.patch

- Fix python error on SLE12-SP3 (bsc#1209401, bsc#1234745)
  - add hplip-base-replace-f-string-with-string.format-for-p.patch

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=260
2025-01-24 09:10:34 +00:00
4291a2a098 added jira reference
OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=259
2025-01-17 16:42:26 +00:00
b59d505c60 Accepting request 1238011 from Printing
- hplip.spec: re-introduce macros for SLE12 compatibility, so that
  we can backport security fixes to older releases
  (bsc#1234745, CVE-2020-6923)

OBS-URL: https://build.opensuse.org/request/show/1238011
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=157
2025-01-16 17:31:15 +00:00
fb006c9b16 we can backport security fixes to older releases
(bsc#1234745, CVE-2020-6923)

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=257
2025-01-15 09:35:23 +00:00
1f5e2304f2 - hplip.spec: re-introduce macros for SLE12 compatibility, so that
we can backport security fixes to older releases (bsc#1234745)

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=256
2025-01-14 15:39:17 +00:00
6e09f335a7 Accepting request 1224910 from Printing
add a bug ref

OBS-URL: https://build.opensuse.org/request/show/1224910
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=156
2024-11-18 19:01:38 +00:00
e2859bda9a - Bug fixes:
* hpmud: sanitize printer serial number (bsc#1209401, lp#2012262)

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=254
2024-11-18 16:03:56 +00:00
462d0be98f Accepting request 1187617 from Printing
OBS-URL: https://build.opensuse.org/request/show/1187617
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/hplip?expand=0&rev=155
2024-07-17 13:13:40 +00:00
95e3708c4c - Add hplip-pserror-c99.patch hplip-scan-hpaio-include.patch
hplip-scan-orblite-c99.patch hplip-sclpml-strcasestr.patch
  hplip-hpaio-gcc14.patch to avoid C99 violations which prevent
  building with GCC 14. [boo#1225777]

The patches were taken from
bbb19dff5e
and
d726b77698

If the request is OK, please forward it to Factory soon-ish too so
that we can switch the default compiler.  Thanks!

OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=252
2024-07-15 19:10:46 +00:00
26 changed files with 1379 additions and 418 deletions

View File

@@ -0,0 +1,48 @@
From 4315485efe9318b18bf859c5bf1a810b9235ae2e Mon Sep 17 00:00:00 2001
From: Wolfgang Frisch <wfrisch@suse.de>
Date: Tue, 15 Jul 2025 19:12:53 +0200
Subject: [PATCH] Fix ReDoS issue in HPLIP's SLP parser
Patch for the ReDoS issue in HPLIP's SLP parser (bsc#1245358).
https://bugs.launchpad.net/hplip/+bug/2115626
An unauthenticated denial-of-service attack in the local network is possible
against HPLIP's SLP network printer discovery. This vulnerability arises from
an algorithmic complexity attack on regular expressions within the SLP parser
(`base/slp.py`).
Signed-off-by: Wolfgang Frisch <wfrisch@suse.de>
---
base/slp.py | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/base/slp.py b/base/slp.py
index 8e2d8f9..06a00aa 100644
--- a/base/slp.py
+++ b/base/slp.py
@@ -33,14 +33,14 @@ from .g import *
from . import utils
from .sixext import to_bytes_utf8, to_unicode, to_string_utf8
-prod_pat = re.compile(r"""\(\s*x-hp-prod_id\s*=\s*(.*?)\s*\)""", re.IGNORECASE)
-mac_pat = re.compile(r"""\(\s*x-hp-mac\s*=\s*(.*?)\s*\)""", re.IGNORECASE)
-num_port_pat = re.compile(r"""\(\s*x-hp-num_port\s*=\s*(.*?)\s*\)""", re.IGNORECASE)
-ip_pat = re.compile(r"""\(\s*x-hp-ip\s*=\s*(.*?)\s*\)""", re.IGNORECASE)
-p1_pat = re.compile(r"""\(\s*x-hp-p1\s*=(?:\d\)|\s*(.*?)\s*\))""", re.IGNORECASE)
-p2_pat = re.compile(r"""\(\s*x-hp-p2\s*=(?:\d\)|\s*(.*?)\s*\))""", re.IGNORECASE)
-p3_pat = re.compile(r"""\(\s*x-hp-p3\s*=(?:\d\)|\s*(.*?)\s*\))""", re.IGNORECASE)
-hn_pat = re.compile(r"""\(\s*x-hp-hn\s*=\s*(.*?)\s*\)""", re.IGNORECASE)
+prod_pat = re.compile(r"""\(\s*x-hp-prod_id\s*=\s*([^\s]*)\s*\)""", re.IGNORECASE)
+mac_pat = re.compile(r"""\(\s*x-hp-mac\s*=\s*([^\s]*)\s*\)""", re.IGNORECASE)
+num_port_pat = re.compile(r"""\(\s*x-hp-num_port\s*=\s*([^\s]*)\s*\)""", re.IGNORECASE)
+ip_pat = re.compile(r"""\(\s*x-hp-ip\s*=\s*([^\s]*)\s*\)""", re.IGNORECASE)
+p1_pat = re.compile(r"""\(\s*x-hp-p1\s*=(?:\d\)|\s*([^\s]*)\s*\))""", re.IGNORECASE)
+p2_pat = re.compile(r"""\(\s*x-hp-p2\s*=(?:\d\)|\s*([^\s]*)\s*\))""", re.IGNORECASE)
+p3_pat = re.compile(r"""\(\s*x-hp-p3\s*=(?:\d\)|\s*([^\s]*)\s*\))""", re.IGNORECASE)
+hn_pat = re.compile(r"""\(\s*x-hp-hn\s*=\s*([^\s]*)\s*\)""", re.IGNORECASE)
def createSocketsWithsetOption(ttl=4):
s=None
--
2.50.0

View File

@@ -2,7 +2,7 @@ Index: b/data/rules/56-hpmud.rules
===================================================================
--- a/data/rules/56-hpmud.rules
+++ b/data/rules/56-hpmud.rules
@@ -1,8 +1,33 @@
@@ -1,8 +1,31 @@
# HPLIP udev rules file. Notify console user if plugin support is required for this device.
+#
+# SUSE changed:
@@ -27,8 +27,6 @@ Index: b/data/rules/56-hpmud.rules
+# is also used to upload firmware into printers that need it
+# see https://bugs.launchpad.net/bugs/1220628
+# a rule that only uploads firmware into printers that need it is added.
+#
+# If possible activate hpaio backend support in /etc/sane.d/dll.conf.
ACTION!="add", GOTO="hpmud_rules_end"
-SUBSYSTEM=="ppdev", OWNER="root", GROUP="lp", MODE="0664"
@@ -37,7 +35,7 @@ Index: b/data/rules/56-hpmud.rules
GOTO="hpmud_rules_end"
LABEL="hpmud_usb_rules"
@@ -13,6 +38,12 @@ ENV{ID_USB_INTERFACES}=="", IMPORT{built
@@ -13,6 +38,9 @@ ENV{ID_USB_INTERFACES}=="", IMPORT{built
ATTR{idVendor}=="03f0", ENV{ID_USB_INTERFACES}=="*:0701??:*|*:ffcc00:", OWNER="root", GROUP="lp", MODE="0664", ENV{libsane_matched}="yes", ENV{hp_test}="yes", ENV{ID_HPLIP}="1"
# This rule will check the smart install feature, plugin status and firmware download for the required printers.
@@ -45,9 +43,6 @@ Index: b/data/rules/56-hpmud.rules
+#ENV{hp_test}=="yes", PROGRAM="/bin/sh -c 'logger -p user.info loading HP Device $env{BUSNUM} $env{DEVNUM}'", RUN+="/bin/sh -c '/usr/bin/nohup /usr/bin/hp-config_usb_printer $env{BUSNUM}:$env{DEVNUM}'"
+# This rule uploads firmware to HP USB printer devices if needed:
+ENV{hp_test}=="yes", PROGRAM="/bin/logger -p user.info udev hpmud.rules runs hp-firmware to test if HP device with USB vendor ID $attr{idVendor} and USB product ID $attr{idProduct} at USB bus ID $env{BUSNUM} and USB device ID $env{DEVNUM} needs firmware and if yes to upload it", RUN+="/usr/bin/hp-firmware -s $env{BUSNUM}:$env{DEVNUM}"
+
+# If possible activate hpaio backend support in /etc/sane.d/dll.conf:
+ENV{libsane_matched}=="yes", RUN+="/bin/sh -c 'if test -w /etc/sane.d/dll.conf ; then sed -i -e /hpaio/d /etc/sane.d/dll.conf ; echo hpaio >>/etc/sane.d/dll.conf ; fi'"
LABEL="hpmud_rules_end"
+

View File

@@ -0,0 +1,28 @@
From 216b15eb68bd5cacd26ff554e244fc4ea50a1acf Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
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

View File

@@ -0,0 +1,28 @@
From e95a9cb2e946bec33d7f0afa04850f93ae258477 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Wed, 7 May 2025 15:53:46 +0200
Subject: [PATCH] hpcups: fix compilation on SLE12
SLE12-SP5 is not using C++11 by default, thus nullptr is not
defined. NULL is used elsewhere in the file, so we can just
replace nullptr with NULL.
---
prnt/hpcups/HPCupsFilter.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/prnt/hpcups/HPCupsFilter.cpp b/prnt/hpcups/HPCupsFilter.cpp
index 6750684..7d397ed 100644
--- a/prnt/hpcups/HPCupsFilter.cpp
+++ b/prnt/hpcups/HPCupsFilter.cpp
@@ -435,7 +435,7 @@ DRIVER_ERROR HPCupsFilter::startPage (cups_page_header2_t *cups_header)
if (m_JA.media_attributes.PageSizeName[0] == '\0') {
// Copy the value of cups_header->cupsPageSizeName if it isnot null
- if (cups_header->cupsPageSizeName != nullptr) {
+ if (cups_header->cupsPageSizeName != NULL) {
strncpy(m_JA.media_attributes.PageSizeName, cups_header->cupsPageSizeName, sizeof(m_JA.media_attributes.PageSizeName));
}
}
--
2.49.0

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fb60642e55839c311ee8037bfc739ffc7c77555c176beef5bdbc4f965e322b61
size 682

16
hplip-3.24.4-gcc15.patch Normal file
View File

@@ -0,0 +1,16 @@
bugs.launchpad.net/hplip/+bug/2096650
src.fedoraproject.org/rpms/hplip/blob/f42/f/hplip-gcc15-stdc23.patch
--- a/scan/sane/ledmi.h 2025-02-27 13:12:29.000000000 +0100
+++ b/scan/sane/ledmi.h 2025-05-05 12:28:33.445527226 +0200
@@ -162,7 +162,7 @@
int bb_open(struct ledm_session*);
int bb_close(struct ledm_session*);
int bb_get_parameters(struct ledm_session*, SANE_Parameters*, int);
-int bb_is_paper_in_adf(); /* 0 = no paper in adf, 1 = paper in adf, -1 = error */
+int bb_is_paper_in_adf(struct ledm_session *); /* 0 = no paper in adf, 1 = paper in adf, -1 = error */
SANE_Status bb_start_scan(struct ledm_session*);
int bb_get_image_data(struct ledm_session*, int);
int bb_end_page(struct ledm_session*, int);

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5d7643831893a5e2addf9d42d581a5dbfe5aaf023626886b8762c5645da0f1fb
size 30217933

View File

@@ -1,6 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iF0EABECAB0WIQRKui9m29WpWJSRDgZz13DNpZBHuQUCZk13yQAKCRBz13DNpZBH
uc7TAKDAX4308SYP7pgb85UTMbPbhfivmgCghMp2sBrpiCvOZTeozYO4WVzW1mg=
=CKxG
-----END PGP SIGNATURE-----

BIN
hplip-3.25.6.tar.gz LFS Normal file

Binary file not shown.

11
hplip-3.25.6.tar.gz.asc Normal file
View File

@@ -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-----

View File

@@ -0,0 +1,29 @@
From 2a13a15b7f533606667e8586ff5ed736f038f2e8 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Thu, 23 Jan 2025 12:47:43 +0100
Subject: [PATCH 1/2] hplip/base: fix error in ConfigBase handling
The code in question was apparently meant to handle the replacement
of ConfigParser.readfp() by ConfigParser.read_file(). But the code
is obviously broken, trying read_file() first and then read_file()
again.
---
base/g.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/base/g.py b/base/g.py
index 0d1c986..c1f5d24 100644
--- a/base/g.py
+++ b/base/g.py
@@ -128,7 +128,7 @@ class ConfigBase(object):
try:
fp = open(self.filename, "r")
try:
- self.conf.read_file(fp)
+ self.conf.readfp(fp)
except AttributeError as e:
log.error(f"Error: {e}. Retrying with read_file")
try:
--
2.48.1

View File

@@ -0,0 +1,32 @@
From f1fef1ed07951fbc6e81d90ab43172974979eeeb Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Wed, 22 Jan 2025 17:44:04 +0100
Subject: [PATCH 2/2] hplip/base: replace f-string with string.format for
python2 compatibility
---
base/g.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/base/g.py b/base/g.py
index c1f5d24..a3b6191 100644
--- a/base/g.py
+++ b/base/g.py
@@ -130,12 +130,12 @@ class ConfigBase(object):
try:
self.conf.readfp(fp)
except AttributeError as e:
- log.error(f"Error: {e}. Retrying with read_file")
+ log.error("Error: {0}. Retrying with read_file".format(e))
try:
# Attempting to use read_file as a fallback
self.conf.read_file(fp)
except Exception as e:
- log.error(f"Reading file with read_file also failed. Error: {e}")
+ log.error("Reading file with read_file also failed. Error: {0}".format(e))
except configparser.MissingSectionHeaderError:
print("")
log.error("Found No Section in %s. Please set the http proxy for root and try again." % self.filename)
--
2.48.1

View File

@@ -7,7 +7,7 @@ Index: hplip-3.19.6/base/validation.py
class GPG_Verification(DigiSign_Verification):
- def __init__(self, pgp_site = 'pgp.mit.edu', key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9):
+ def __init__(self, pgp_site = 'pgp.surf.nl', key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9):
+ def __init__(self, pgp_site = 'keyserver.ubuntu.com', key = 0x82FFA7C6AA7411D934BDE173AC69536A2CF3A243):
self.__pgp_site = pgp_site
self.__key = key
self.__gpg = utils.which('gpg',True)

View File

@@ -0,0 +1,62 @@
From d68d0748c4493ef3192e4f59756ece2bd2fbb004 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Tue, 19 Aug 2025 12:06:17 +0200
Subject: [PATCH] hplip: fix driver probing using avahi
- _printer._tcp doesn't work for my printer (HP Smart Tank 7300 series).
mdns.py uses _pdl-datastream._tcp, which works.
- my printer sends `usb_MDL` property, which mdns.py accepts as alternative
for `ty`.
- "bonjour" search protocol exists nowhere else in the code. "avahi" does.
---
base/avahi.py | 8 ++++++--
probe.py | 4 ++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/base/avahi.py b/base/avahi.py
index 51795dd..b82a089 100755
--- a/base/avahi.py
+++ b/base/avahi.py
@@ -37,6 +37,9 @@ def detectNetworkDevices(ttl=4, timeout=10):
# Obtain all the resolved services which has service type '_printer._tcp' from avahi-browse
p = Popen(['avahi-browse', '-kprt', '_printer._tcp'], stdout=PIPE)
output = to_string_utf8(p.communicate()[0])
+ p = Popen(['avahi-browse', '-kprt', '_pdl-datastream._tcp'], stdout=PIPE)
+ output += to_string_utf8(p.communicate()[0])
+
for line in output.splitlines():
if line.startswith('='):
bits = line.split(';')
@@ -55,11 +58,12 @@ def detectNetworkDevices(ttl=4, timeout=10):
details = bits[9].split('" "')
for item in details:
key, value = item.split('=', 1)
- if key == 'ty':
+ if key == 'ty' or key == 'usb_MDL':
y['mdns'] = value
y['device1'] = "MFG:Hewlett-Packard;MDL:%s;CLS:PRINTER;" % value
break
- found_devices[y['ip']] = y
+ if y['ip'] not in found_devices:
+ found_devices[y['ip']] = y
#log.debug("ip=%s hn=%s ty=%s" %(ip,y['hn'], y['mdns']))
except socket.gaierror:
pass
diff --git a/probe.py b/probe.py
index 82e5de9..3bf3ba8 100755
--- a/probe.py
+++ b/probe.py
@@ -93,8 +93,8 @@ try:
elif o in ('-m', '--method'):
method = a.lower().strip()
- if method not in ('slp', 'mdns', 'bonjour'):
- mod.usage(error_msg=["Invalid network search protocol name. Must be 'slp' or 'mdns'."])
+ if method not in ('slp', 'mdns', 'avahi'):
+ mod.usage(error_msg=["Invalid network search protocol name. Must be 'slp', 'mdns', or 'avahi'."])
else:
bus = ['net']
--
2.50.1

View File

@@ -0,0 +1,28 @@
From 5bdb75b1b3397abd58a69aba18c6aacf8d70df77 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Tue, 19 Aug 2025 23:38:24 +0200
Subject: [PATCH] hplip: fix python crash in avahi.py
The avahi search method may crash on MDNS records that have
an empty "details" field (field 9). This can happen e.g. for
existing shared local printers advertized by cups.
---
base/avahi.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/base/avahi.py b/base/avahi.py
index b82a089..f168585 100755
--- a/base/avahi.py
+++ b/base/avahi.py
@@ -43,7 +43,7 @@ def detectNetworkDevices(ttl=4, timeout=10):
for line in output.splitlines():
if line.startswith('='):
bits = line.split(';')
- if bits[2] == 'IPv4' and len(bits[7].split('.')) == 4:
+ if bits[2] == 'IPv4' and len(bits[7].split('.')) == 4 and bits[9] != "":
ip = bits[7]
port = bits[8]
# Run through the offered addresses and see if we have a bound local
--
2.50.1

114
hplip-hpaio-gcc14.patch Normal file
View File

@@ -0,0 +1,114 @@
diff --git a/scan/sane/hpaio.c b/scan/sane/hpaio.c
index 57d1dde..3475929 100644
--- a/scan/sane/hpaio.c
+++ b/scan/sane/hpaio.c
@@ -379,7 +379,7 @@ extern SANE_Status sane_hpaio_get_devices(const SANE_Device ***deviceList, SANE_
ResetDeviceList(&DeviceList);
DevDiscovery(localOnly);
*deviceList = (const SANE_Device **)DeviceList;
- SANE_Device*** devList;
+ const SANE_Device*** devList;
orblite_get_devices(devList, localOnly);
return SANE_STATUS_GOOD;
diff --git a/scan/sane/orblite.c b/scan/sane/orblite.c
index 2eb7aba..4eaa468 100644
--- a/scan/sane/orblite.c
+++ b/scan/sane/orblite.c
@@ -64,28 +64,28 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_SCAN_TL_X, SANE_TITLE_SCAN_TL_X, SANE_DESC_SCAN_TL_X, // name, title, desc
SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeLeft // constraint_type, constraint
+ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeLeft // constraint_type, constraint
},
{
SANE_NAME_SCAN_TL_Y, SANE_TITLE_SCAN_TL_Y, SANE_DESC_SCAN_TL_Y, // name, title, desc
SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeTop // constraint_type, constraint
+ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeTop // constraint_type, constraint
},
{
SANE_NAME_SCAN_BR_X, SANE_TITLE_SCAN_BR_X, SANE_DESC_SCAN_BR_X, // name, title, desc
SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeRight // constraint_type, constraint
+ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeRight // constraint_type, constraint
},
{
SANE_NAME_SCAN_BR_Y, SANE_TITLE_SCAN_BR_Y, SANE_DESC_SCAN_BR_Y, // name, title, desc
SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeBottom // constraint_type, constraint
+ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeBottom // constraint_type, constraint
},
// optResolution, // resolution group
@@ -93,7 +93,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_SCAN_RESOLUTION, SANE_TITLE_SCAN_RESOLUTION, SANE_DESC_SCAN_RESOLUTION, // name, title, desc
SANE_TYPE_INT, SANE_UNIT_DPI, sizeof(SANE_Word), // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_WORD_LIST, (SANE_Char**)SANE_resolutions // constraint type, constraint
+ SANE_CONSTRAINT_WORD_LIST, (const SANE_Char**)SANE_resolutions // constraint type, constraint
},
// optMode, // color/depth group
@@ -101,7 +101,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_SCAN_MODE, SANE_TITLE_SCAN_MODE, SANE_DESC_SCAN_MODE, // name, title, desc
SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_modes // constraint type, constraint
+ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_modes // constraint type, constraint
},
// optSource,
@@ -109,7 +109,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_SCAN_SOURCE, SANE_TITLE_SCAN_SOURCE, SANE_DESC_SCAN_SOURCE, // name, title, desc
SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_sources // constraint type, constraint
+ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_sources // constraint type, constraint
},
// optPaperSize,
@@ -117,7 +117,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_PAPER_SIZE, SANE_TITLE_PAPER_SIZE, SANE_DESC_PAPER_SIZE, // name, title, desc
SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_paper_sizes // constraint type, constraint
+ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_paper_sizes // constraint type, constraint
},
// optPaperSize,
@@ -125,7 +125,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_PAPER_SIZE, SANE_TITLE_PAPER_SIZE, SANE_DESC_PAPER_SIZE, // name, title, desc
SANE_TYPE_INT, SANE_UNIT_DPI, sizeof(SANE_Word), // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_WORD_LIST, (SANE_Char**)SANE_resolutions // constraint type, constraint
+ SANE_CONSTRAINT_WORD_LIST, (const SANE_Char**)SANE_resolutions // constraint type, constraint
},
#ifdef NOTDEF
// default template
@@ -274,6 +274,7 @@ orblite_open (SANE_String_Const devicename, SANE_Handle * handle)
SANE_Auth_Callback authorize;
const SANE_Device *** device_list;
SANE_Bool local_only;
+ void * temp_handle;
// Allocate handle, set all handle values to zero
@@ -305,7 +306,9 @@ orblite_open (SANE_String_Const devicename, SANE_Handle * handle)
if (stat != SANE_STATUS_GOOD)
return stat;
- stat = g_handle->bb_orblite_open(devicename, &g_handle);
+ temp_handle = g_handle;
+ stat = g_handle->bb_orblite_open(devicename, &temp_handle);
+ g_handle = temp_handle;
if (stat == SANE_STATUS_GOOD)
*handle = g_handle;

79
hplip-no-urlopener.patch Normal file
View File

@@ -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)

17
hplip-pserror-c99.patch Normal file
View File

@@ -0,0 +1,17 @@
prnt/pserror.c: Replace an implicit int with an explicit int
Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
diff --git a/prnt/hpps/pserror.c b/prnt/hpps/pserror.c
index 114d7e1b5fa364fb..493b49c27917a7e6 100644
--- a/prnt/hpps/pserror.c
+++ b/prnt/hpps/pserror.c
@@ -24,7 +24,7 @@ extern char *program ; /* Defined by main program, giving program name */
void message(int flags, char *format, ...)
{
va_list args ;
- static column = 0 ; /* current screen column for message wrap */
+ static int column = 0 ; /* current screen column for message wrap */
char msgbuf[MAX_MESSAGE] ; /* buffer in which to put the message */
char *bufptr = msgbuf ; /* message buffer pointer */

View File

@@ -2,8 +2,5 @@ from Config import *
addFilter("arch-dependent-file-in-usr-share")
# Ignore any duplicate files
addFilter("files-duplicate .*/hplip/.*/__init__.py")
addFilter("files-duplicate .*/hplip/*/__init__.*pyc")
addFilter("files-duplicate .*/hplip/.*/__pycache__/__init__.*.pyc")
#
addFilter("files-duplicate .*/hplip/.*/__init__.py")
addFilter("non-executable-script /usr/share/hplip/.*")

View File

@@ -0,0 +1,19 @@
scam/sane/hpaio.c: Include orblite.h for more function prototypes
Otherwise the build fails with compilers which do not support
implicit function declarations.
Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
diff --git a/scan/sane/hpaio.c b/scan/sane/hpaio.c
index d342626822fc2190..57d1ddea32fb5816 100644
--- a/scan/sane/hpaio.c
+++ b/scan/sane/hpaio.c
@@ -50,6 +50,7 @@
#include "sclpml.h"
#include "escl.h"
#include "io.h"
+#include "orblite.h"
#include "orblitei.h"

View File

@@ -0,0 +1,48 @@
scan/sane/orblite: Include <dflcn.h> for function prototypes
This is required for C99 compatibility. Also delete the unused
bb_unload function because it calls a call to the undefined
_DBG function/macro.
Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
diff --git a/scan/sane/orblite.c b/scan/sane/orblite.c
index ba86640c7528fc9c..ac59dda9c2dba593 100644
--- a/scan/sane/orblite.c
+++ b/scan/sane/orblite.c
@@ -20,6 +20,7 @@
#include "orblitei.h"
#include "orblite.h"//Added New
#include <math.h>
+#include <dlfcn.h>
#include "utils.h"
#include "io.h"
@@ -193,27 +194,6 @@ bugout:
}
-static int bb_unload(SANE_THandle ps)
-{
- _DBG("Calling orblite bb_unload: \n");
- if (ps->bb_handle)
- {
- dlclose(ps->bb_handle);
- ps->bb_handle = NULL;
- }
- if (ps->hpmud_handle)
- {
- dlclose(ps->hpmud_handle);
- ps->hpmud_handle = NULL;
- }
-// if (ps->math_handle)
-// {
-// dlclose(ps->math_handle);
-// ps->math_handle = NULL;
-// }
- return 0;
-}
-
SANE_Status
orblite_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
{

View File

@@ -0,0 +1,20 @@
Kludge to support building C99 mode. This should no longer be needed
once glibc declares strcasestr by default, and not just with
-D_GNU_SOURCE.
Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
diff --git a/scan/sane/sclpml.c b/scan/sane/sclpml.c
index dc8b32ce02ad1202..f2cacd53e86800ce 100644
--- a/scan/sane/sclpml.c
+++ b/scan/sane/sclpml.c
@@ -47,6 +47,9 @@
#define DEBUG_DECLARE_ONLY
#include "sanei_debug.h"
+/* This file is not built with _GNU_SOURCE. */
+char *strcasestr(const char *, const char *);
+
//# define SCLPML_DEBUG
# ifdef SCLPML_DEBUG
# define _DBG(args...) syslog(LOG_INFO, __FILE__ " " STRINGIZE(__LINE__) ": " args)

View File

@@ -0,0 +1,68 @@
From 8d14912a48e589bee05e0c377c29218132083145 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Wed, 7 May 2025 15:23:17 +0200
Subject: [PATCH] hplip/utils: Fix plugin verification with sha256
https://bugs.launchpad.net/hplip/+bug/2110100
---
base/smart_install.py | 2 +-
base/utils.py | 12 +++++++++++-
installer/pluginhandler.py | 4 ++--
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/base/smart_install.py b/base/smart_install.py
index cff5924..699f70f 100755
--- a/base/smart_install.py
+++ b/base/smart_install.py
@@ -155,7 +155,7 @@ def validate(mode, smart_install_run, smart_install_asc, req_checksum=''):
calc_checksum = utils.get_checksum(open(smart_install_run, 'r').read())
log.debug("File checksum=%s" % calc_checksum)
- if req_checksum and req_checksum != calc_checksum:
+ if utils.sha256_checksum(req_checksum) != calc_checksum:
return ERROR_FILE_CHECKSUM, queryString(ERROR_CHECKSUM_ERROR, 0, plugin_file)
#Validate Digital Signature
diff --git a/base/utils.py b/base/utils.py
index d5b3a49..f9de94e 100644
--- a/base/utils.py
+++ b/base/utils.py
@@ -72,8 +72,18 @@ import hashlib
def get_checksum(s):
return hashlib.sha256(s).hexdigest()
+__sha1_sha256_map = {
+ "bd99405113d43447e7a37ed46d75187785774cff":
+ "9a2cf8d5661e846548dbbb595231a5448a5cb63729cc93df8d1f652dfd167a54"
+}
-
+def sha256_checksum(s):
+ if not s:
+ return ""
+ elif s in __sha1_sha256_map:
+ return __sha1_sha256_map[s]
+ else:
+ return s
# Local
from .g import *
diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py
index a37db39..26b0033 100755
--- a/installer/pluginhandler.py
+++ b/installer/pluginhandler.py
@@ -217,9 +217,9 @@ class PluginHandle(object):
def __validatePlugin(self,plugin_file, digsig_file, req_checksum):
#Validate Checksum
- calc_checksum = get_checksum(open(plugin_file, 'rb').read())
+ calc_checksum = utils.get_checksum(open(plugin_file, 'rb').read())
log.debug("D/L file checksum=%s" % calc_checksum)
- if req_checksum and req_checksum != calc_checksum:
+ if utils.sha256_checksum(req_checksum) != calc_checksum:
return ERROR_CHECKSUM_ERROR, queryString(ERROR_CHECKSUM_ERROR, 0, plugin_file)
#Validate Digital Signatures
--
2.49.0

View File

@@ -1,3 +1,215 @@
-------------------------------------------------------------------
Sat Nov 22 21:18:02 CET 2025 - Stanislav Brabec <sbrabec@suse.com>
- Remove unused BuildRequires: update-desktop-files.
-------------------------------------------------------------------
Wed Oct 8 20:43:58 UTC 2025 - Martin Wilck <mwilck@suse.com>
- Move more utilities from hplip-utils to hplip-base.
* hplip-base now contains all utilities that are not totally useless
and can run without the Qt GUI.
-------------------------------------------------------------------
Wed Oct 8 14:55:02 UTC 2025 - Martin Wilck <mwilck@suse.com>
- Update fix for support of new GPG key, as the key has now been
uploaded to GPG keyservers (lp#2120738)
* drop hplip-hardcode-new-signing-key-AC69536A2CF3A243.patch
* update hplip-change-pgp-server.patch
-------------------------------------------------------------------
Wed Oct 8 14:28:09 UTC 2025 - Martin Wilck <mwilck@suse.com>
- Drop dependency on cups-ppdc. It isn't necessary, as PPD
generation on target system is done by cups-driverd.
-------------------------------------------------------------------
Mon Sep 29 13:13:08 UTC 2025 - Johannes Meixner <jsmeix@suse.com>
- The old and outdated 'hpijs' driver support is finally dropped
(the 'hpcups' driver is the default driver since 2009)
so that there is no need for foomatic-filters (boo#1250481)
-------------------------------------------------------------------
Thu Aug 21 10:50:17 UTC 2025 - Martin Wilck <martin.wilck@suse.com>
- Continue refactoring:
* move GUI tools to "hplip-utils" subpackage
* convert "hplip" into an empty metapackage that pulls in hplip-utils
and all drivers / PPDs (except hpijs PPDs).
-------------------------------------------------------------------
Tue Aug 19 13:33:02 UTC 2025 - Martin Wilck <mwilck@suse.com>
- Refactor package structure:
* hplip: full set of utilities. Pulls in almost all subpackages
to deliver the "traditional" hplip experience
* hplip-base: small set of basic utilities that can be run
without GUI. Includes hp-probe and hp-plugin
* hplip-cups: minimal package for printing, without PPDs or
setup helpers
* hplip-sane: scanning support (unchanged)
* hplip-driver-hpcups: hpcups.drv for generating hpcups PPDs on
the fly (requires ppdc). The functionality of this package is
similar to the old (misnamed) "hplip-hpijs" package.
* hplip-driver-hpijs: hpijs.drv for generating PPDs for the deprecated
hpijs / foomatic_rip filter. Note that this functionality was not part of
the late hplip-hpijs package, because upstream hasn't ship foomatic PPDs
since hplip 3.17.11.
* hplip-ppds-{hpcups,hpps,postscript,hpijs,fax,plugin}: static PPD
files for different printer types.
hplip-ppds-hpcups is an alternative to hplip-driver-hpcups.
* libhplip0: shared library package, used by hplip-cups and
hplip-sane
* hplip-common: configuration files and directories used by
all hplip packages.
- Other spec file changes:
* Skip deprecated suse_update_desktop_file by default on TW
* Don't mess with sane configuration in udev rules
* Only the hpijs packages depend on foomatic-rip, which is only
provided by cups-filters-1.x. The other packages can be used
with cups-filters2.
* Remove Obsoletes: for ancient predecessor packages
* Remove outdated comments from spec file
* Shorten package descriptions
* Fix a couple of rpmlint issues
- Fix printer probing using avahi (lp#2120947)
* Add hplip-fix-driver-probing-using-avahi.patch
* Add hplip-fix-python-crash-in-avahi.py.patch
-------------------------------------------------------------------
Fri Aug 15 21:38:25 UTC 2025 - Martin Wilck <mwilck@suse.com>
- 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 <mwilck@suse.com>
- 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 <lubos.kocman@suse.com>
- 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 <mwilck@suse.com>
- Fix ReDoS issue in HPLIP's SLP parser (bsc#1245358)
* add Fix-ReDoS-issue-in-HPLIP-s-SLP-parser.patch
-------------------------------------------------------------------
Wed May 7 13:33:02 UTC 2025 - Martin Wilck <mwilck@suse.com>
- Update to hplip 3.25.2
- Added support for new printers:
* HP LaserJet Enterprise Flow MFP 8601z
* HP LaserJet Enterprise Flow MFP 8601z+
* HP LaserJet Enterprise MFP 8601dn
* HP Color LaserJet Enterprise MFP 8801dn
* HP Color LaserJet Enterprise Flow MFP 8801z
* HP Color LaserJet Enterprise Flow MFP 8801z+
* HP LaserJet Enterprise 8501dn
* HP LaserJet Enterprise 8501x
* HP LaserJet Enterprise 8501x+
* DEX MFP D826
* DEX MFP D82640
* DEX MFP D82650
* DEX MFP D82660
* DEX D50145
* DEX MFP D42540
* DEX MFP D52645
* DEX Color D55745
* DEX Color MFP D57945
* DEX Color MFP D677
* DEX Color MFP D67755
* DEX Color MFP D67765
* DEX Color MFP D877
* DEX Color MFP D87740
* DEX Color MFP D87750
* DEX Color MFP D87760
* DEX Color MFP D87770
* DEX Color MFP D786
* DEX Colour MFP D78625
* DEX Color MFP D78630
* DEX Color MFP D78635
* DEX MFP D731
* DEX MFP D73130
* DEX MFP D73135
* DEX MFP D73140
- Fix plugin verification with sha256 (lp#2110100)
* add hplip-utils-Fix-plugin-verification-with-sha256.patch
- Fix C++ compilation on SLE12
* add hpcups-fix-compilation-on-SLE12.patch
-------------------------------------------------------------------
Mon May 5 11:07:28 UTC 2025 - Friedrich Haubensak <hsk17@mail.de>
- Add hplip-3.24.4-gcc15.patch to fix gcc-15 compile time error
(lp#2096650)
-------------------------------------------------------------------
Wed Jan 29 14:51:04 UTC 2025 - Dominique Leuenberger <dimstar@opensuse.org>
- Add python3-setuptools BuildRequires: replaces the fix to
manually inject PYTHON_INCLUDEDIR. Fix needed to build against
Python 3.13.
-------------------------------------------------------------------
Thu Jan 23 11:52:26 UTC 2025 - Martin Wilck <mwilck@suse.com>
- Fix error in ConfigBase handling (bsc#1209401)
- add hplip-base-fix-error-in-ConfigBase-handling.patch
-------------------------------------------------------------------
Wed Jan 22 16:52:17 UTC 2025 - Martin Wilck <mwilck@suse.com>
- Fix python error on SLE12-SP3 (bsc#1209401, bsc#1234745)
- add hplip-base-replace-f-string-with-string.format-for-p.patch
-------------------------------------------------------------------
Tue Jan 14 11:34:35 UTC 2025 - Martin Wilck <mwilck@suse.com>
- hplip.spec: re-introduce macros for SLE12 compatibility, so that
we can backport security fixes to older releases
(bsc#1234745, CVE-2020-6923, jsc#PED-11978)
-------------------------------------------------------------------
Mon Jul 15 15:19:58 UTC 2024 - Martin Jambor <mjambor@suse.com>
- Add hplip-pserror-c99.patch hplip-scan-hpaio-include.patch
hplip-scan-orblite-c99.patch hplip-sclpml-strcasestr.patch
hplip-hpaio-gcc14.patch to avoid C99 violations which prevent
building with GCC 14. [boo#1225777]
-------------------------------------------------------------------
Fri Jun 21 21:30:55 UTC 2024 - Martin Wilck <martin.wilck@suse.com>
@@ -9,6 +221,8 @@ Fri Jun 21 21:30:55 UTC 2024 - Martin Wilck <martin.wilck@suse.com>
* HP OfficeJet Pro 8130 All-in-One series
* HP OfficeJet Pro 9720 Series
* HP OfficeJet Pro 9730 Series
- Bug fixes:
* hpmud: sanitize printer serial number (bsc#1209401, lp#2012262)
-------------------------------------------------------------------
Thu Feb 22 07:51:33 UTC 2024 - Dominique Leuenberger <dimstar@opensuse.org>
@@ -28,7 +242,7 @@ Wed Jan 3 16:11:11 UTC 2024 - Martin Wilck <mwilck@suse.com>
* HP OfficeJet Pro 9110b series
* HP Color LaserJet Enterprise Flow MFP X58045z
* HP Color LaserJet Enterprise Flow MFP X58045zs
* HP Color LaserJet Enterprise MFP X58045dn
* HP Color LaserJet Enterprise MFP X58045dn
* HP Color LaserJet Enterprise MFP X58045
* HP LaserJet Pro P1106 plus
* HP LaserJet Pro P1108 plus

View File

@@ -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-----

File diff suppressed because it is too large Load Diff