Compare commits

...
Sign in to create a new pull request.

108 commits

Author SHA1 Message Date
Zdenek Dohnal
075cac0afb hplip-3.25.8 is available (fedora#2415311) 2026-01-09 13:04:20 +01:00
Zdenek Dohnal
be70bd6792 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.
2025-09-17 14:08:07 +02:00
Zdenek Dohnal
334237ac68 hp-scan command failed to run and gives an error (fedora#2395809) 2025-09-17 14:01:58 +02:00
Zdenek Dohnal
01d1e50f44 hplip-3.25.6 is available (fedora#2386814) 2025-08-12 13:31:19 +02:00
Fedora Release Engineering
5ad054fcdb Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-24 17:04:43 +00:00
Zdenek Dohnal
73678936ce 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.
2025-06-20 11:24:48 +02:00
Zdenek Dohnal
a995e312cb Switch tests to Centos Stream 2025-06-03 08:11:29 +02:00
Python Maint
b1ef7ae35e Rebuilt for Python 3.14 2025-06-02 22:22:15 +02:00
Zdenek Dohnal
8541ecd6f8 hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501) 2025-05-26 15:25:23 +02:00
Zdenek Dohnal
61a4f33d3a plugin.conf now looks to use sha256 as well per email comms with HP, drop the revert 2025-05-12 10:03:00 +02:00
Zdenek Dohnal
f66385472f hp-plugin failed checksum due usage of different hashes (fedora#2361230)
output is not seen after installing plugin (fedora#2361230)
2025-05-07 10:44:05 +02:00
Zdenek Dohnal
ae17763066 remove Recommends on hplip-gui due complaint at (fedora#2360020) 2025-04-16 17:14:15 +02:00
Zdenek Dohnal
4cfd5e5ec3 hplip-3.25.2 is available (fedora#2353147) 2025-04-11 12:04:43 +02:00
FeRD (Frank Dana)
f08eed6ffd hp-plugin: Use rpm queryformat to get version
Eliminates dependency on gawk.
2025-04-03 14:26:15 -04:00
FeRD (Frank Dana)
8104c07571 Use weak rich dependency for hplip-gui 2025-04-03 14:47:14 +02:00
FeRD (Frank Dana)
ea1621b02f Format QDateTime strings in Status History table, elsewhere 2025-04-02 17:26:07 +02:00
Zdenek Dohnal
c5b4c3d5cb hp-plugin-download did not follow redirections and was missing '-o' in grep 2025-04-02 09:35:29 +02:00
Zdenek Dohnal
b549b17216 enable following links with curl in all use cases (fedora#2349177) 2025-03-03 14:32:38 +01:00
Brian J. Murrell
4a5cbec2d3 curl needs --location to follow redirects
In the patch, only one of the curl commands is using the --location argument
to direct curl to follow 301 redirects.  All curl invocations need to use that
argument.

Signed-off-by: Brian J. Murrell <brian@interlinx.bc.ca>
2025-03-01 17:20:18 +00:00
Zdenek Dohnal
690f2e34e8 Require setup for lp group 2025-02-11 11:35:11 +01:00
Zdenek Dohnal
b6d5d44957 fix FTBFS (fedora#2340616) 2025-01-24 10:34:06 +01:00
Fedora Release Engineering
25bd7772e9 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-17 06:01:15 +00:00
Zdenek Dohnal
ee555b54af Update plans 2024-07-26 08:50:57 +02:00
Zdenek Dohnal
489909d19a rpminspect.yaml: include /usr/lib/ too 2024-07-26 08:46:15 +02:00
Zdenek Dohnal
46b9593576 Add rpminspect.yaml to waive badfuncs of rpminspect 2024-07-26 06:51:00 +02:00
Zdenek Dohnal
c78ccf59f8 2292623 - hplip-3.24.4 is available 2024-07-23 16:32:38 +02:00
Fedora Release Engineering
dbdc2cce2a Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-18 09:21:06 +00:00
Python Maint
48d1741f8d Rebuilt for Python 3.13 2024-06-07 10:31:56 +02:00
Zdenek Dohnal
19b7cb0614 plans: fix url 2024-05-23 13:40:39 +02:00
Zdenek Dohnal
3f33fc6240 Remove additional License tags, merged into one 2024-05-07 17:20:13 +02:00
Zdenek Dohnal
0b780c93e6 Update gating.yaml 2024-04-15 15:09:27 +02:00
Zdenek Dohnal
d5743e6d63 hp-plugin-download - curl removed --create-dir parameter 2024-03-21 14:13:55 +01:00
Zdenek Dohnal
a13fbe55d3 2270031 - hp-firmware: module 'locale' not longer provides method 'format', causing traceback 2024-03-18 16:07:00 +01:00
Fedora Release Engineering
dabcff0237 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-24 21:45:51 +00:00
Fedora Release Engineering
639b6e999f Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-20 22:11:36 +00:00
Zdenek Dohnal
187b064062 add fallback url to hp-plugin-download 2024-01-19 09:23:18 +01:00
Zdenek Dohnal
d726b77698 Fix build with GCC 14 2024-01-09 15:35:15 +01:00
Zdenek Dohnal
a6c2c2b70b 2252302 - hplip-3.23.12 is available 2024-01-09 11:20:27 +01:00
Zdenek Dohnal
b7a8b0b5a8 Merge #12 Rebase to 3.23.8 2023-10-09 05:48:48 +00:00
Mikhail Gavrilov
f488895f79 fix --max-time and add follow to redirections 2023-10-09 03:27:14 +05:00
Zdenek Dohnal
b77080962d Rebase to 3.23.8 2023-10-04 16:43:50 +02:00
Zdenek Dohnal
6d550c7123 SPDX finished review of one license - take it as BSD-2-Clause 2023-10-03 16:31:24 +02:00
Zdenek Dohnal
249ea11cfb SPDX finished review of one license - take it as BSD-2-Clause 2023-09-11 13:15:54 +02:00
Zdenek Dohnal
66bf018624 hp-check: use pkgconf when checking for cups version 2023-08-24 16:34:43 +02:00
Zdenek Dohnal
606f617bde hp-plugin.in: Add brackets to prevent early exit 2023-08-03 16:56:06 +02:00
Zdenek Dohnal
31a7a6c1ee Fallback to proprietary plugin for Hbpl1 printers
Since files for Hbpl1 printers were removed until the licensing is
cleared up, try to fall back to proprietary plugin.
2023-08-03 14:47:42 +02:00
Zdenek Dohnal
4fa25e2888 Add license upstream tracker 2023-07-28 14:14:20 +02:00
Zdenek Dohnal
ac09a5bddc SPDX migration 2023-07-28 14:12:45 +02:00
Zdenek Dohnal
e174e9103e Update hplip-covscan.patch, because genPCLm.cpp was removed 2023-07-28 09:30:06 +02:00
Zdenek Dohnal
76d7fdfefc remove redundant files 2023-07-27 19:25:15 +02:00
Zdenek Dohnal
f9aafff426 Fix more warnings 2023-07-27 17:12:37 +02:00
Zdenek Dohnal
a15ae7afb4 Fix syntax warnings 2023-07-21 12:57:24 +02:00
Zdenek Dohnal
f22496015e Use raw strings to eliminate syntax warnings 2023-07-21 12:54:51 +02:00
Zdenek Dohnal
aef1ccce5b Fix tier1-internal 2023-07-21 11:34:46 +02:00
Zdenek Dohnal
c775adaac1 Fix conditional 2023-07-21 11:17:20 +02:00
Zdenek Dohnal
ec4e2f53cc Enable Fedora CI and gating 2023-07-21 10:47:20 +02:00
Fedora Release Engineering
a3f2418e3a Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-20 06:25:09 +00:00
Adam Williamson
65ca3e41cf Require curl, not curl-minimal
Requiring curl-minimal is not safe. The full curl package does
not provide curl-minimal, and the two conflict. So if you have
full curl installed, you cannot update, because installing
curl-minimal to satisfy hplip's requirement would require the
removal of full curl.

curl-minimal provides curl, so for a quick fix, just changing
this to "Requires: curl", which is satisfied by either. As a
refinement we might be able to add something like
"Suggests: curl-minimal" to 'cue' the use of curl-minimal rather
than curl if neither is currently installed, but I just wanted
to make the minimum change necessary to stop breaking openQA
tests for now.
2023-07-18 11:42:36 -07:00
Zdenek Dohnal
9a35bb2322 Add missing curl patch 2023-07-18 16:54:50 +02:00
Zdenek Dohnal
83a6c95d49 hplip.spec: recommend python3-gobject in hplip 2023-07-18 10:26:16 +02:00
Zdenek Dohnal
eb5e881525 2221311 - [python3.12] hplip tools/binaries crash due depending on removed configparser.readfp() 2023-07-17 18:43:31 +02:00
Zdenek Dohnal
0426012736 switch to curl when downloading plugin 2023-07-17 18:28:12 +02:00
Zdenek Dohnal
f616afe827 pstotiff: don't use SAFER with WRITESYSTEMDICT per upstream warning 2023-07-17 13:19:28 +02:00
Zdenek Dohnal
031349c9fd 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed 2023-07-17 13:16:47 +02:00
Zdenek Dohnal
363dc1639d Remove unused files 2023-06-28 15:30:01 +02:00
Python Maint
850284dda4 Rebuilt for Python 3.12 2023-06-13 22:00:33 +02:00
Zdenek Dohnal
ac182d7612 2184067 - hplip-3.23.5 is available 2023-06-06 16:15:52 +02:00
Fedora Release Engineering
2cf2a6900a Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-19 12:12:56 +00:00
Zdenek Dohnal
a3d30bea25 2148210 - hplip: pcardext Python extension broken
stop shipping hp-unload, since it depends on pcardext
2022-12-01 11:19:14 +01:00
Florian Weimer
bbb19dff5e C99 compatibility fixes
Stop building the pcardext Python extension because it unusable
(#2148210).

Related to:

  <https://fedoraproject.org/wiki/Changes/PortingToModernC>
  <https://fedoraproject.org/wiki/Toolchain/PortingToModernC>
2022-11-24 17:46:17 +01:00
Zdenek Dohnal
a960ac4214 2139309 - hplip-3.22.10 is available 2022-11-24 12:04:27 +01:00
Zdenek Dohnal
ca1713968e distutils will be removed in Python3.12, use setuptools now 2022-10-19 14:05:07 +02:00
Zdenek Dohnal
652db6693c 2129849 - hp-plugin unable to load plugin.conf - add a new backup download script 2022-10-13 15:07:30 +02:00
Zdenek Dohnal
09cd5eff22 2129849 - hp-plugin unable to load plugin.conf - add a new backup download script 2022-10-13 15:06:24 +02:00
Zdenek Dohnal
6cb741bb45 2129849 - hp-plugin unable to load plugin.conf 2022-10-13 14:43:35 +02:00
Fedora Release Engineering
cc60476218 Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-21 13:44:10 +00:00
Zdenek Dohnal
cfce1c8fa6 recommend libsane-hpaio - duplicated scanners are better than no scanner
2101790 - hplip-3.22.6 is available
2022-07-19 16:20:46 +02:00
Zdenek Dohnal
3c7687254d hplip-repack.sh: Merge hplip-repack and hplip-rebase 2022-07-18 12:10:41 +02:00
Zdenek Dohnal
c7dbb064bd recommend libsane-hpaio - duplicated scanners are better than no scanner 2022-07-18 11:57:36 +02:00
Python Maint
e4d8f7e061 Rebuilt for Python 3.11 2022-06-13 17:35:17 +02:00
Zdenek Dohnal
297f625d95 2080235 - Misleading errors about missing shared libraries when scanning 2022-05-17 12:53:06 +02:00
Zdenek Dohnal
eabb56cabe Fix prep phase 2022-05-11 13:38:09 +02:00
Zdenek Dohnal
129beeedb9 2079740 - hplip-3.22.4 is available 2022-05-11 13:32:21 +02:00
Zdenek Dohnal
0933ecaffa 2079740 - hplip-3.22.4 is available 2022-05-11 13:31:08 +02:00
Zdenek Dohnal
121a2286ef make libsane-hpaio only suggested to prevent possible duplicated scanner devices
ipp-usb is pulled in automatically now, so newer devices can be supported by two backends,
sane-airscan and libsane-hpaio, which can be confusing. So make libsane-hpaio only suggested
to prevent that.
2022-03-28 20:09:25 +02:00
Zdenek Dohnal
21fc6a9ec6 2059085 - hplip-3.22.2 is available 2022-03-10 09:38:26 +01:00
Fedora Release Engineering
94e3b4a4c0 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-20 12:25:43 +00:00
Zdenek Dohnal
fea1bc106d 2015910 - [GUI] hp-setup crashes when loading smart_install module
1959242 - hplip-3.21.12 is available
2022-01-17 16:12:31 +01:00
Zdenek Dohnal
11664de4a6 1959242 - hplip-3.21.12 is available 2022-01-17 15:55:49 +01:00
Zdenek Dohnal
7153ae8af4 2028697 - hp-setup trackbacks when hplip-gui RPM is not installed 2021-12-03 08:30:44 +01:00
Zdenek Dohnal
d6bd8532ea 2025853 - hplip: double "and" in license 2021-11-23 13:03:13 +01:00
Zdenek Dohnal
302fef07d8 2015428 - python3.10 doesn't do an implicit conversion for integer arguments 2021-10-26 13:35:26 +02:00
Zdenek Dohnal
437db9d451 hplip-osname-mismatch.patch: adjust osname for Fedora CoreOS/Linux 2021-10-26 13:35:26 +02:00
Zdenek Dohnal
416b1932b5 GUI hp-setup uses avahi-browse 2021-10-26 13:35:26 +02:00
Zdenek Dohnal
8d02f877eb 2015428 - python3.10 has Callable in collections.abc 2021-10-26 13:35:24 +02:00
Sahana Prasad
8f08be8b1f Rebuilt with OpenSSL 3.0.0 2021-09-14 19:04:18 +02:00
Zdenek Dohnal
53aab4a410 1995647 - Hplip package shows as proprietary in Gnome Software 2021-09-03 11:19:33 +02:00
Zdenek Dohnal
43689ff8e0 1985251 - Incorrect permission for gpg directory
1987141 - hp-plugin installs malformed udev files
fixed warning: redhatenterpriselinux distro is not found in AUTH_TYPES
2021-07-30 07:46:03 +02:00
Zdenek Dohnal
d360f3c690 1985251 - Incorrect permission for gpg directory
1987141 - hp-plugin installs malformed udev files
2021-07-30 07:18:24 +02:00
Zdenek Dohnal
581db10c37 1985251 - Incorrect permission for gpg directory 2021-07-29 14:10:24 +02:00
Fedora Release Engineering
0b9d626c35 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-22 07:42:40 +00:00
Zdenek Dohnal
58b699ef49 1976465 - [hplip] PY_SSIZE_T_CLEAN macro must be defined for '#' formats
require usbutils - needed by hp-diagnose_queues
2021-07-02 07:30:43 +02:00
Zdenek Dohnal
9c9af2ba19 sleep after utils.run() (related #1963114) 2021-06-28 06:55:57 +02:00
Zdenek Dohnal
b7addb99c0 1963114 - patch for hplip firmware load timeout fix 2021-06-11 08:34:11 +02:00
Zdenek Dohnal
17cee5bcf6 hplip.spec: fix typo 2021-06-09 13:37:45 +02:00
Zdenek Dohnal
32191b2666 track hplip-repack.sh as source, to have it in srpm 2021-06-09 13:17:41 +02:00
Zdenek Dohnal
f5837c16e5 remove redundant files 2021-06-09 10:11:27 +02:00
Python Maint
4769a36684 Rebuilt for Python 3.10 2021-06-04 20:07:14 +02:00
62 changed files with 2053 additions and 1166 deletions

1
.fmf/version Normal file
View file

@ -0,0 +1 @@
1

14
.gitignore vendored
View file

@ -102,3 +102,17 @@ hplip-3.10.6.tar.gz
/hplip-3.20.9.tar.gz
/hplip-3.20.11.tar.gz
/hplip-3.21.2.tar.gz
/hplip-3.21.2-repack.tar.gz
/hplip-3.21.12-repack.tar.gz
/hplip-3.22.2-repack.tar.gz
/hplip-3.22.4-repack.tar.gz
/hplip-3.22.6-repack.tar.gz
/hplip-3.22.10-repack.tar.gz
/hplip-3.23.3-repack.tar.gz
/hplip-3.23.5-repack.tar.gz
/hplip-3.23.8-repack.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
/hplip-3.25.8-repack.tar.gz

View file

@ -1,16 +1,17 @@
diff -up hplip-3.21.2/Makefile.am.libimageprocessor-removal hplip-3.21.2/Makefile.am
--- hplip-3.21.2/Makefile.am.libimageprocessor-removal 2021-02-24 12:38:31.707900421 +0100
+++ hplip-3.21.2/Makefile.am 2021-02-24 12:38:31.735900172 +0100
diff --git a/Makefile.am b/Makefile.am
index f65afea..12317dc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -167,7 +167,7 @@ if !HPLIP_CLASS_DRIVER
dist_hplip_SCRIPTS = hpssd.py __init__.py hpdio.py
endif #HPLIP_CLASS_DRIVER
-dist_noinst_DATA += prnt/drv/hpijs.drv.in.template prnt/drv/hpcups.drv.in.template prnt/hpcups/libImageProcessor-x86_64.so prnt/hpcups/libImageProcessor-x86_32.so
+dist_noinst_DATA += prnt/drv/hpijs.drv.in.template prnt/drv/hpcups.drv.in.template
dist_noinst_SCRIPTS += dat2drv.py install.py hplip-install init-suse-firewall init-iptables-firewall class_rpm_build.sh hplipclassdriver.spec createPPD.sh Makefile_dat2drv hpijs-drv
if !HPLIP_CLASS_DRIVER
@@ -595,7 +595,7 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilte
dist_noinst_DATA += prnt/ipp-usb/HPLIP.conf
dist_noinst_SCRIPTS += dat2drv.py install.py hplip-install init-suse-firewall init-iptables-firewall class_rpm_build.sh hplipclassdriver.spec createPPD.sh Makefile_dat2drv hpijs-drv
@@ -597,7 +597,7 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilter.cpp prnt/hpcups/HPCupsFilter.h prnt/hp
prnt/hpcups/ImageProcessor.h
hpcups_CXXFLAGS = $(APDK_ENDIAN_FLAG) $(DBUS_CFLAGS)
@ -19,7 +20,7 @@ diff -up hplip-3.21.2/Makefile.am.libimageprocessor-removal hplip-3.21.2/Makefil
#else
#hpcupsdir = $(cupsfilterdir)
#hpcups_PROGRAMS = hpcups
@@ -685,16 +685,6 @@ endif #HPLIP_CLASS_DRIVER
@@ -687,16 +687,6 @@ endif #HPLIP_CLASS_DRIVER
install-data-hook:
if HPLIP_BUILD
@ -33,80 +34,6 @@ diff -up hplip-3.21.2/Makefile.am.libimageprocessor-removal hplip-3.21.2/Makefil
- chmod 775 $(libdir)/libImageProcessor-x86_32.so ; \
- ln -sf $(libdir)/libImageProcessor-x86_32.so $(libdir)/libImageProcessor.so ; \
- fi
if !HPLIP_CLASS_DRIVER
# If scanner build, add hpaio entry to sane dll.conf.
if [ "$(scan_build)" = "yes" ]; then \
diff -up hplip-3.21.2/prnt/hpcups/HPCupsFilter.cpp.libimageprocessor-removal hplip-3.21.2/prnt/hpcups/HPCupsFilter.cpp
--- hplip-3.21.2/prnt/hpcups/HPCupsFilter.cpp.libimageprocessor-removal 2021-02-24 12:38:31.701900474 +0100
+++ hplip-3.21.2/prnt/hpcups/HPCupsFilter.cpp 2021-02-24 12:42:49.445720549 +0100
@@ -31,7 +31,6 @@
\*****************************************************************************/
#include "HPCupsFilter.h"
-#include "ImageProcessor.h"
#include <signal.h>
#include <sys/wait.h>
@@ -659,21 +658,8 @@ int HPCupsFilter::processRasterData(cups
snprintf(hpPreProcessedRasterFile, sizeof (hpPreProcessedRasterFile), "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name);
- image_processor_t* imageProcessor=NULL;
- IMAGE_PROCESSOR_ERROR result;
- //added if condition to check if pinter language is "ljzjstream"
- //If so, then bypass imageprocessing functions while running HPCUPS filter.
- if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0){
- imageProcessor = imageProcessorCreate();
- }
while (cupsRasterReadHeader2(cups_raster, &cups_header))
{
- if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0){
- result = imageProcessorStartPage(imageProcessor, &cups_header);
- if (result != IPE_SUCCESS){
- dbglog("DEBUG: imageProcessorStartPage failed result = %d\n", result);
- }
- }
current_page_number++;
if (current_page_number == 1) {
@@ -772,14 +758,6 @@ int HPCupsFilter::processRasterData(cups
color_raster = rgbRaster;
black_raster = kRaster;
- if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0)
- {
- result = imageProcessorProcessLine(imageProcessor, m_pPrinterBuffer, cups_header.cupsBytesPerLine);
- if (result != IPE_SUCCESS){
- dbglog("DEBUG: imageProcessorProcessLine failed result = %d\n", result);
- }
- }
-
if ((y == 0) && !is_ljmono) {
//For ljmono, make sure that first line is not a blankRaster line.Otherwise printer
//may not skip blank lines before actual data
@@ -809,14 +787,6 @@ int HPCupsFilter::processRasterData(cups
}
} // for() loop end
- if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0)
- {
- result = imageProcessorEndPage(imageProcessor);
- if (result != IPE_SUCCESS){
- dbglog("DEBUG: imageProcessorEndPage failed result = %d\n", result);
- }
- }
-
m_Job.NewPage();
if (err != NO_ERROR) {
break;
@@ -832,10 +802,6 @@ int HPCupsFilter::processRasterData(cups
}
- if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0)
- {
- imageProcessorDestroy(imageProcessor);
- }
unlink(hpPreProcessedRasterFile);
return ret_status;
}
if [ -d "/usr/share/ipp-usb/quirks/" ]; then \
echo "ipp-usb directory exists"; \
cp prnt/ipp-usb/HPLIP.conf /usr/share/ipp-usb/quirks/ ; \

View file

@ -1,45 +1,108 @@
From 95a73bbc9bd65602a0f9411469ab511bc80a01d0 Mon Sep 17 00:00:00 2001
From: Till Kamppeter <till.kamppeter@gmail.com>
Date: Wed, 3 Oct 2018 15:13:00 +0200
Subject: Call QMessageBox constructors of PyQT5 with the correct parameters
The whole Python source code of HPLIP contains 40 incorrect calls of
the QMessageBox constructurs, mostly the list of buttons was given as
separate arguments instead of a bitwise OR of each button's
representation value. If the flow of the code hits one of these
calls (usually when some error or warnings message should be
displayed or an "Are you sure?" question asked) the GUI app crashes.
See https://pythonspot.com/pyqt5-messagebox/ for QMessageBox
documentation.
This patch corrects all these calls.
Bug-Debian: https://bugs.debian.org/912768
Bug-Ubuntu: https://bugs.launchpad.net/bugs/1745383
---
ui/devmgr4.py | 16 ++++++++--------
ui/faxaddrbookform.py | 6 +++---
ui/faxsendjobform.py | 6 +++---
ui/firmwaredialog.py | 2 +-
ui/makecopiesform.py | 4 ++--
ui/nodevicesform.py | 2 +-
ui/pluginform2.py | 4 ++--
ui/printerform.py | 2 +-
ui/settingsdialog.py | 4 ++--
ui/setupform.py | 10 +++++-----
ui/unloadform.py | 2 +-
ui/upgradeform.py | 4 ++--
ui5/devmgr5.py | 6 ++----
ui5/fabwindow.py | 2 +-
ui5/nodevicesdialog.py | 3 +--
ui5/plugindialog.py | 2 +-
ui5/queuesconf.py | 2 +-
ui5/setupdialog.py | 6 +++---
18 files changed, 40 insertions(+), 43 deletions(-)
diff --git a/ui/devmgr4.py b/ui/devmgr4.py
index cc2552f91..a868ccac0 100644
--- a/ui/devmgr4.py
+++ b/ui/devmgr4.py
diff -up hplip-3.23.3/ui5/devmgr5.py.qmsgbox-typos-fix hplip-3.23.3/ui5/devmgr5.py
--- hplip-3.23.3/ui5/devmgr5.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/devmgr5.py 2023-05-29 13:48:48.429731297 +0200
@@ -144,8 +144,7 @@ class PluginInstall(QObject):
install_plugin = QMessageBox.warning(self.parent,
self.parent.windowTitle(),
self.__tr("<b>The HPLIP plugin is already installed.</b><p>Do you want to continue and re-install it?"),
- QMessageBox.Yes,
- QMessageBox.No,
+ QMessageBox.Yes | QMessageBox.No,
QMessageBox.NoButton) == QMessageBox.Yes
if install_plugin:
@@ -154,8 +153,7 @@ class PluginInstall(QObject):
QMessageBox.critical(self.parent,
self.parent.windowTitle(),
self.__tr("<b>Unable to find an appropriate su/sudo utility to run hp-plugin.</b><p>Install kdesu, gnomesu, or gksu.</p>"),
- QMessageBox.Ok,
- QMessageBox.NoButton,
+ QMessageBox.Ok | QMessageBox.NoButton,
QMessageBox.NoButton)
diff -up hplip-3.23.3/ui5/fabwindow.py.qmsgbox-typos-fix hplip-3.23.3/ui5/fabwindow.py
--- hplip-3.23.3/ui5/fabwindow.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/fabwindow.py 2023-05-29 13:48:48.429731297 +0200
@@ -344,7 +344,7 @@ class FABWindow(QMainWindow, Ui_MainWin
new_name = to_unicode(self.NameLineEdit.text())
if new_name != self.name:
if QMessageBox.question(self, self.__tr("Rename?"), "Rename '%s' to '%s'?"%(self.name,new_name), \
- QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
self.db.rename(self.name, new_name)
log.debug("Rename %s to %s" % (self.name, new_name))
diff -up hplip-3.23.3/ui5/nodevicesdialog.py.qmsgbox-typos-fix hplip-3.23.3/ui5/nodevicesdialog.py
--- hplip-3.23.3/ui5/nodevicesdialog.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/nodevicesdialog.py 2023-05-29 13:48:48.429731297 +0200
@@ -64,8 +64,7 @@ class NoDevicesDialog(QDialog, Ui_NoDevi
QMessageBox.critical(self,
self.windowTitle(),
self.__tr("<b>An error occurred.</b><p>Please re-start the Device Manager and try again."),
- QMessageBox.Ok,
- QMessageBox.NoButton,
+ QMessageBox.Ok | QMessageBox.NoButton,
QMessageBox.NoButton)
diff -up hplip-3.23.3/ui5/plugindialog.py.qmsgbox-typos-fix hplip-3.23.3/ui5/plugindialog.py
--- hplip-3.23.3/ui5/plugindialog.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/plugindialog.py 2023-05-29 13:48:48.429731297 +0200
@@ -252,7 +252,7 @@ class PluginDialog(QDialog, Ui_Dialog):
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?" %error_str),
- QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) != QMessageBox.Yes:
self.pluginObj.deleteInstallationFiles(download_plugin_file)
self.close()
diff -up hplip-3.23.3/ui5/queuesconf.py.qmsgbox-typos-fix hplip-3.23.3/ui5/queuesconf.py
--- hplip-3.23.3/ui5/queuesconf.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/queuesconf.py 2023-05-29 13:48:48.430731291 +0200
@@ -245,7 +245,7 @@ class QueuesDiagnose(QDialog, Ui_Dialog)
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate this tool prior to installation.</p>Do you still want to run Smart Install disabler?" %error_str),
- QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
# Disabling without verification.
sts, out = utils.run("sh %s"%smart_install_run)
diff -up hplip-3.23.3/ui5/setupdialog.py.qmsgbox-typos-fix hplip-3.23.3/ui5/setupdialog.py
--- hplip-3.23.3/ui5/setupdialog.py.qmsgbox-typos-fix 2023-05-29 13:48:48.430731291 +0200
+++ hplip-3.23.3/ui5/setupdialog.py 2023-05-29 13:54:03.236851925 +0200
@@ -886,7 +886,7 @@ class SetupDialog(QDialog, Ui_Dialog):
self.windowTitle(),
warn_text,
QMessageBox.Yes |
- QMessageBox.No |
+ QMessageBox.No,
QMessageBox.NoButton) == QMessageBox.Yes):
i = 2
while True:
@@ -1171,7 +1171,7 @@ class SetupDialog(QDialog, Ui_Dialog):
if QMessageBox.critical(self,
self.windowTitle(),
error_text,
- QMessageBox.Retry | QMessageBox.Default,
+ QMessageBox.Retry | QMessageBox.Default |\
QMessageBox.Cancel | QMessageBox.Escape,
QMessageBox.NoButton) == QMessageBox.Cancel:
break
@@ -1223,7 +1223,7 @@ class SetupDialog(QDialog, Ui_Dialog):
if QMessageBox.critical(self,
self.windowTitle(),
error_text,
- QMessageBox.Retry | QMessageBox.Default,
+ QMessageBox.Retry | QMessageBox.Default |\
QMessageBox.Cancel | QMessageBox.Escape,
QMessageBox.NoButton) == QMessageBox.Cancel:
break
diff -up hplip-3.23.3/ui/devmgr4.py.qmsgbox-typos-fix hplip-3.23.3/ui/devmgr4.py
--- hplip-3.23.3/ui/devmgr4.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/devmgr4.py 2023-05-29 13:48:48.424731328 +0200
@@ -1422,7 +1422,7 @@ class DevMgr4(DevMgr4_base):
QMessageBox.critical(self,
self.caption(),
@ -112,11 +175,10 @@ index cc2552f91..a868ccac0 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/faxaddrbookform.py b/ui/faxaddrbookform.py
index 109462207..b23364410 100644
--- a/ui/faxaddrbookform.py
+++ b/ui/faxaddrbookform.py
@@ -228,7 +228,7 @@ class FaxAddrBookGroupsForm(FaxAddrBookGroupsForm_base):
diff -up hplip-3.23.3/ui/faxaddrbookform.py.qmsgbox-typos-fix hplip-3.23.3/ui/faxaddrbookform.py
--- hplip-3.23.3/ui/faxaddrbookform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/faxaddrbookform.py 2023-05-29 13:48:48.424731328 +0200
@@ -228,7 +228,7 @@ class FaxAddrBookGroupsForm(FaxAddrBookG
x = QMessageBox.critical(self,
self.caption(),
self.__tr("<b>Annoying Confirmation: Are you sure you want to delete this group?</b>"),
@ -125,7 +187,7 @@ index 109462207..b23364410 100644
QMessageBox.No | QMessageBox.Default,
QMessageBox.NoButton)
if x == QMessageBox.Yes:
@@ -421,7 +421,7 @@ class FaxAddrBookForm(FaxAddrBookForm_base):
@@ -421,7 +421,7 @@ class FaxAddrBookForm(FaxAddrBookForm_ba
if QMessageBox.critical(self,
self.caption(),
self.__tr("<b>Annoying Confirmation: Are you sure you want to delete this address book entry?</b>"),
@ -134,7 +196,7 @@ index 109462207..b23364410 100644
QMessageBox.No | QMessageBox.Default,
QMessageBox.NoButton) == QMessageBox.Yes:
db.delete(self.current.entry['name'])
@@ -451,7 +451,7 @@ class FaxAddrBookForm(FaxAddrBookForm_base):
@@ -451,7 +451,7 @@ class FaxAddrBookForm(FaxAddrBookForm_ba
QMessageBox.critical(self,
self.caption(),
QString(error_text),
@ -143,10 +205,9 @@ index 109462207..b23364410 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/faxsendjobform.py b/ui/faxsendjobform.py
index 106215c5e..69f424c42 100644
--- a/ui/faxsendjobform.py
+++ b/ui/faxsendjobform.py
diff -up hplip-3.23.3/ui/faxsendjobform.py.qmsgbox-typos-fix hplip-3.23.3/ui/faxsendjobform.py
--- hplip-3.23.3/ui/faxsendjobform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/faxsendjobform.py 2023-05-29 13:48:48.424731328 +0200
@@ -210,7 +210,7 @@ class FaxSendJobForm(QMainWindow):
QMessageBox.information(self,
self.caption(),
@ -174,11 +235,10 @@ index 106215c5e..69f424c42 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/firmwaredialog.py b/ui/firmwaredialog.py
index 16b313374..0bcee1164 100644
--- a/ui/firmwaredialog.py
+++ b/ui/firmwaredialog.py
@@ -109,7 +109,7 @@ class FirmwareDialog(QDialog, FirmwareDialog_Base):
diff -up hplip-3.23.3/ui/firmwaredialog.py.qmsgbox-typos-fix hplip-3.23.3/ui/firmwaredialog.py
--- hplip-3.23.3/ui/firmwaredialog.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/firmwaredialog.py 2023-05-29 13:48:48.424731328 +0200
@@ -109,7 +109,7 @@ class FirmwareDialog(QDialog, FirmwareDi
QMessageBox.critical(self,
self.caption(),
error_text,
@ -187,10 +247,9 @@ index 16b313374..0bcee1164 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/makecopiesform.py b/ui/makecopiesform.py
index 27f144b36..0fbb573e3 100644
--- a/ui/makecopiesform.py
+++ b/ui/makecopiesform.py
diff -up hplip-3.23.3/ui/makecopiesform.py.qmsgbox-typos-fix hplip-3.23.3/ui/makecopiesform.py
--- hplip-3.23.3/ui/makecopiesform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/makecopiesform.py 2023-05-29 13:48:48.424731328 +0200
@@ -156,7 +156,7 @@ class MakeCopiesForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@ -209,10 +268,9 @@ index 27f144b36..0fbb573e3 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/nodevicesform.py b/ui/nodevicesform.py
index 01f6ae53b..57a696375 100644
--- a/ui/nodevicesform.py
+++ b/ui/nodevicesform.py
diff -up hplip-3.23.3/ui/nodevicesform.py.qmsgbox-typos-fix hplip-3.23.3/ui/nodevicesform.py
--- hplip-3.23.3/ui/nodevicesform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/nodevicesform.py 2023-05-29 13:48:48.424731328 +0200
@@ -67,7 +67,7 @@ class NoDevicesForm(NoDevicesForm_base):
QMessageBox.critical(self,
self.caption(),
@ -222,10 +280,9 @@ index 01f6ae53b..57a696375 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/pluginform2.py b/ui/pluginform2.py
index 64e64aa77..76cb0238b 100644
--- a/ui/pluginform2.py
+++ b/ui/pluginform2.py
diff -up hplip-3.23.3/ui/pluginform2.py.qmsgbox-typos-fix hplip-3.23.3/ui/pluginform2.py
--- hplip-3.23.3/ui/pluginform2.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/pluginform2.py 2023-05-29 13:48:48.424731328 +0200
@@ -173,7 +173,7 @@ class PluginForm2(PluginForm2_base):
QMessageBox.critical(self,
self.caption(),
@ -244,10 +301,9 @@ index 64e64aa77..76cb0238b 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/printerform.py b/ui/printerform.py
index 0c6c4f39e..7c10ab07b 100644
--- a/ui/printerform.py
+++ b/ui/printerform.py
diff -up hplip-3.23.3/ui/printerform.py.qmsgbox-typos-fix hplip-3.23.3/ui/printerform.py
--- hplip-3.23.3/ui/printerform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/printerform.py 2023-05-29 13:48:48.425731321 +0200
@@ -154,7 +154,7 @@ class PrinterForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@ -257,11 +313,10 @@ index 0c6c4f39e..7c10ab07b 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/settingsdialog.py b/ui/settingsdialog.py
index 92da22546..24f02fd84 100644
--- a/ui/settingsdialog.py
+++ b/ui/settingsdialog.py
@@ -146,7 +146,7 @@ class SettingsDialog(SettingsDialog_base):
diff -up hplip-3.23.3/ui/settingsdialog.py.qmsgbox-typos-fix hplip-3.23.3/ui/settingsdialog.py
--- hplip-3.23.3/ui/settingsdialog.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/settingsdialog.py 2023-05-29 13:48:48.425731321 +0200
@@ -146,7 +146,7 @@ class SettingsDialog(SettingsDialog_base
## QMessageBox.warning(self,
## self.caption(),
## self.__tr("<b>One or more email addresses are missing.</b><p>Please enter this information and try again."),
@ -270,7 +325,7 @@ index 92da22546..24f02fd84 100644
## QMessageBox.NoButton,
## QMessageBox.NoButton)
## return
@@ -163,7 +163,7 @@ class SettingsDialog(SettingsDialog_base):
@@ -163,7 +163,7 @@ class SettingsDialog(SettingsDialog_base
## QMessageBox.information(self,
## self.caption(),
## self.__tr("<p><b>Please check your email for a test message.</b><p>If the message doesn't arrive, please check your settings and try again."),
@ -279,10 +334,9 @@ index 92da22546..24f02fd84 100644
## QMessageBox.NoButton,
## QMessageBox.NoButton)
diff --git a/ui/setupform.py b/ui/setupform.py
index 307917b02..78863fdd8 100644
--- a/ui/setupform.py
+++ b/ui/setupform.py
diff -up hplip-3.23.3/ui/setupform.py.qmsgbox-typos-fix hplip-3.23.3/ui/setupform.py
--- hplip-3.23.3/ui/setupform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/setupform.py 2023-05-29 13:48:48.425731321 +0200
@@ -602,7 +602,7 @@ class SetupForm(SetupForm_base):
if ( QMessageBox.warning(self,
self.caption(),
@ -328,10 +382,9 @@ index 307917b02..78863fdd8 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/unloadform.py b/ui/unloadform.py
index 8397a689c..ae363e01e 100644
--- a/ui/unloadform.py
+++ b/ui/unloadform.py
diff -up hplip-3.23.3/ui/unloadform.py.qmsgbox-typos-fix hplip-3.23.3/ui/unloadform.py
--- hplip-3.23.3/ui/unloadform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/unloadform.py 2023-05-29 13:48:48.425731321 +0200
@@ -135,7 +135,7 @@ class UnloadForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@ -341,10 +394,9 @@ index 8397a689c..ae363e01e 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/upgradeform.py b/ui/upgradeform.py
index 6b9acf5cc..d0b418419 100644
--- a/ui/upgradeform.py
+++ b/ui/upgradeform.py
diff -up hplip-3.23.3/ui/upgradeform.py.qmsgbox-typos-fix hplip-3.23.3/ui/upgradeform.py
--- hplip-3.23.3/ui/upgradeform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/upgradeform.py 2023-05-29 13:48:48.425731321 +0200
@@ -118,7 +118,7 @@ class UpgradeForm(UpgradeForm_base):
QMessageBox.critical(self,
self.caption(),
@ -363,111 +415,3 @@ index 6b9acf5cc..d0b418419 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py
index 495883f72..0ca016820 100644
--- a/ui5/devmgr5.py
+++ b/ui5/devmgr5.py
@@ -139,8 +139,7 @@ class PluginInstall(QObject):
install_plugin = QMessageBox.warning(self.parent,
self.parent.windowTitle(),
self.__tr("<b>The HPLIP plugin is already installed.</b><p>Do you want to continue and re-install it?"),
- QMessageBox.Yes,
- QMessageBox.No,
+ QMessageBox.Yes | QMessageBox.No,
QMessageBox.NoButton) == QMessageBox.Yes
if install_plugin:
@@ -149,8 +148,7 @@ class PluginInstall(QObject):
QMessageBox.critical(self.parent,
self.parent.windowTitle(),
self.__tr("<b>Unable to find an appropriate su/sudo utility to run hp-plugin.</b><p>Install kdesu, gnomesu, or gksu.</p>"),
- QMessageBox.Ok,
- QMessageBox.NoButton,
+ QMessageBox.Ok | QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui5/fabwindow.py b/ui5/fabwindow.py
index 488b6bbd5..0b95c94f1 100644
--- a/ui5/fabwindow.py
+++ b/ui5/fabwindow.py
@@ -344,7 +344,7 @@ class FABWindow(QMainWindow, Ui_MainWindow):
new_name = to_unicode(self.NameLineEdit.text())
if new_name != self.name:
if QMessageBox.question(self, self.__tr("Rename?"), "Rename '%s' to '%s'?"%(self.name,new_name), \
- QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
self.db.rename(self.name, new_name)
log.debug("Rename %s to %s" % (self.name, new_name))
diff --git a/ui5/nodevicesdialog.py b/ui5/nodevicesdialog.py
index 6083f6d4b..ca86bfcda 100644
--- a/ui5/nodevicesdialog.py
+++ b/ui5/nodevicesdialog.py
@@ -64,8 +64,7 @@ class NoDevicesDialog(QDialog, Ui_NoDevicesDialog_base):
QMessageBox.critical(self,
self.windowTitle(),
self.__tr("<b>An error occurred.</b><p>Please re-start the Device Manager and try again."),
- QMessageBox.Ok,
- QMessageBox.NoButton,
+ QMessageBox.Ok | QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui5/plugindialog.py b/ui5/plugindialog.py
index e3007f911..1c6b33868 100644
--- a/ui5/plugindialog.py
+++ b/ui5/plugindialog.py
@@ -252,7 +252,7 @@ class PluginDialog(QDialog, Ui_Dialog):
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?" %error_str),
- QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) != QMessageBox.Yes:
self.pluginObj.deleteInstallationFiles(download_plugin_file)
self.close()
diff --git a/ui5/queuesconf.py b/ui5/queuesconf.py
index cf2206490..e3c2a0278 100644
--- a/ui5/queuesconf.py
+++ b/ui5/queuesconf.py
@@ -245,7 +245,7 @@ class QueuesDiagnose(QDialog, Ui_Dialog):
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate this tool prior to installation.</p>Do you still want to run Smart Install disabler?" %error_str),
- QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
# Disabling without verification.
sts, out = utils.run("sh %s"%smart_install_run)
diff --git a/ui5/setupdialog.py b/ui5/setupdialog.py
index fbfe5ac9b..120ee1587 100644
--- a/ui5/setupdialog.py
+++ b/ui5/setupdialog.py
@@ -873,7 +873,7 @@ class SetupDialog(QDialog, Ui_Dialog):
self.windowTitle(),
warn_text,
QMessageBox.Yes|\
- QMessageBox.No|\
+ QMessageBox.No,
QMessageBox.NoButton) == QMessageBox.Yes ):
i = 2
while True:
@@ -1108,7 +1108,7 @@ class SetupDialog(QDialog, Ui_Dialog):
if QMessageBox.critical(self,
self.windowTitle(),
error_text,
- QMessageBox.Retry | QMessageBox.Default,
+ QMessageBox.Retry | QMessageBox.Default |\
QMessageBox.Cancel | QMessageBox.Escape,
QMessageBox.NoButton) == QMessageBox.Cancel:
break
@@ -1138,7 +1138,7 @@ class SetupDialog(QDialog, Ui_Dialog):
if QMessageBox.critical(self,
self.windowTitle(),
error_text,
- QMessageBox.Retry | QMessageBox.Default,
+ QMessageBox.Retry | QMessageBox.Default |\
QMessageBox.Cancel | QMessageBox.Escape,
QMessageBox.NoButton) == QMessageBox.Cancel:
break

1
ci.fmf Normal file
View file

@ -0,0 +1 @@
resultsdb-testcase: separate

25
gating.yaml Normal file
View file

@ -0,0 +1,25 @@
--- !Policy
product_versions:
- fedora-*
decision_context: bodhi_update_push_testing
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional}
#Rawhide
--- !Policy
product_versions:
- fedora-*
decision_context: bodhi_update_push_stable
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional}
#gating rhel
--- !Policy
product_versions:
- rhel-*
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-public.functional}
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-internal.functional}

62
hp-plugin.in Normal file
View file

@ -0,0 +1,62 @@
#!/usr/bin/bash
# get version from base hplip rpm
VER=$(@bindir@/rpm -q hplip --queryformat='%{version}')
if test "x$VER" = "x"
then
@bindir@/echo "Version was not acquired - exiting..."
exit 1
fi
# plugin name
PLUGIN_FILE="hplip-${VER}-plugin.run"
download()
{
SOURCE="$1"
@bindir@/curl --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}"
# 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
if [ ! -d ~/.hplip ]
then
@bindir@/mkdir ~/.hplip || (@bindir@/echo "Cannot create the ~/.hplip dir, exiting" && exit 1)
fi
for link in ${PLUGIN_SOURCE} ${FALLBACK_SOURCE}
do
download ${link}
if test "x$(file --mime ~/.hplip/${PLUGIN_FILE} | grep -o 'text/x-shellscript')" = "xtext/x-shellscript"
then
break
fi
done
if test "x$(file --mime ~/.hplip/${PLUGIN_FILE} | grep -o 'text/x-shellscript')" = "x"
then
@bindir@/echo "The downloaded file does not exist or is not a shell script - error during downloading, exiting..."
exit 1
fi
@bindir@/bash ~/.hplip/${PLUGIN_FILE}
if [ $? -ne 0 ]
then
@bindir@/echo "Plugin installation failed, exiting..."
@bindir@/rm -f ~/.hplip/${PLUGIN_FILE} &> /dev/null
exit 1
fi
@bindir@/rm -f ~/.hplip/${PLUGIN_FILE} &> /dev/null
@bindir@/rm -f ~/.hplip/plugin-installed-* &> /dev/null
@bindir@/touch ~/.hplip/plugin-installed-$VER
exit 0

View file

@ -1,7 +0,0 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iEYEABECAAYFAmApuOMACgkQc9dwzaWQR7kddgCeNSUemyt9lpIk8a37ItEiX7XO
xXYAnjgAIdzPYdmSMFJ5Bqv1JLTv7RiC
=oTOD
-----END PGP SIGNATURE-----

View file

@ -1,28 +1,14 @@
diff --git a/setup.py b/setup.py
index 976a42c..3604dd7 100755
--- a/setup.py
+++ b/setup.py
@@ -558,6 +558,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 --git a/ui5/setupdialog.py b/ui5/setupdialog.py
index ac45357..a6dacf0 100644
--- a/ui5/setupdialog.py
+++ b/ui5/setupdialog.py
@@ -772,9 +772,9 @@ class SetupDialog(QDialog, Ui_Dialog):
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
@@ -765,10 +765,9 @@ class SetupDialog(QDialog, Ui_Dialog):
pass
def OtherPPDButton_clicked(self, b):
- ppd_file = to_unicode(QFileDialog.getOpenFileName(self, self.__tr("Select PPD File"),
- sys_conf.get('dirs', 'ppd'),
- self.__tr("PPD Files (*.ppd *.ppd.gz);;All Files (*)")))
- sys_conf.get(
- 'dirs', 'ppd'),
- self.__tr("PPD Files (*.ppd *.ppd.gz);;All Files (*)")))
+ ppd_file = QFileDialog.getOpenFileName(self, self.__tr("Select PPD File"),
+ sys_conf.get('dirs', 'ppd'),
+ self.__tr("PPD Files (*.ppd *.ppd.gz);;All Files (*)"))[0]

View file

@ -1,16 +1,17 @@
diff -up hplip-3.17.11/installer/core_install.py.check-cups hplip-3.17.11/installer/core_install.py
--- hplip-3.17.11/installer/core_install.py.check-cups 2017-12-07 15:34:24.855761874 +0100
+++ hplip-3.17.11/installer/core_install.py 2017-12-07 15:38:44.749568860 +0100
@@ -349,9 +349,9 @@ class CoreInstall(object):
diff --git a/installer/core_install.py b/installer/core_install.py
index a6654e2..0bd1e9c 100644
--- a/installer/core_install.py
+++ b/installer/core_install.py
@@ -362,9 +362,9 @@ class CoreInstall(object):
'automake': (True, ['prnt'], AUTOMAKE_STR, self.check_automake, DEPENDENCY_RUN_AND_COMPILE_TIME, '-', None, GENERALDEP),
'libjpeg': (True, ['base', 'prnt'], JPEG_STR, self.check_libjpeg, DEPENDENCY_RUN_AND_COMPILE_TIME, '-', None, GENERALDEP),
'libtool': (True, ['base', 'prnt'], LIBTOOL_STR, self.check_libtool, DEPENDENCY_COMPILE_TIME, '-', 'libtool --version', COMPILEDEP),
- 'cups': (True, ['base', 'prnt'], CUPS_STR, self.check_cups, DEPENDENCY_RUN_TIME, '1.1', 'cups-config --version', EXTERNALDEP),
- 'cups-devel': (True, ['base', 'prnt'], CUPS_DEV_STR, self.check_cups_devel, DEPENDENCY_COMPILE_TIME, '-', 'cups-config --version', GENERALDEP),
- 'cups-image': (True, ['base', 'prnt'], CUPS_IMG_STR, self.check_cups_image, DEPENDENCY_COMPILE_TIME, '-', 'cups-config --version', GENERALDEP),
+ 'cups': (True, ['base', 'prnt'], CUPS_STR, self.check_cups, DEPENDENCY_RUN_TIME, '1.1', 'lpstat -r', EXTERNALDEP),
+ 'cups-devel': (True, ['base', 'prnt'], CUPS_DEV_STR, self.check_cups_devel, DEPENDENCY_COMPILE_TIME, '-', 'lpstat -r', GENERALDEP),
+ 'cups-image': (True, ['base', 'prnt'], CUPS_IMG_STR, self.check_cups_image, DEPENDENCY_COMPILE_TIME, '-', 'lpstat -r', GENERALDEP),
+ 'cups': (True, ['base', 'prnt'], CUPS_STR, self.check_cups, DEPENDENCY_RUN_TIME, '-', None, EXTERNALDEP),
+ 'cups-devel': (True, ['base', 'prnt'], CUPS_DEV_STR, self.check_cups_devel, DEPENDENCY_COMPILE_TIME, '1.1', 'pkgconf --modversion cups', GENERALDEP),
+ 'cups-image': (True, ['base', 'prnt'], CUPS_IMG_STR, self.check_cups_image, DEPENDENCY_COMPILE_TIME, '1.1', 'pkgconf --modversion cups', GENERALDEP),
'gcc': (True, ['base', 'prnt'], GCC_STR, self.check_gcc, DEPENDENCY_COMPILE_TIME, '-', 'gcc --version', COMPILEDEP),
'make': (True, ['base', 'prnt'], MAKE_STR, self.check_make, DEPENDENCY_COMPILE_TIME, '3.0', 'make --version', COMPILEDEP),
'libpthread': (True, ['base', 'prnt'], THREAD_STR, self.check_libpthread, DEPENDENCY_RUN_AND_COMPILE_TIME, '-', 'FUNC#get_libpthread_version', GENERALDEP),

View file

@ -1,33 +0,0 @@
diff --git a/base/password.py b/base/password.py
index bd68f2a..bff9f80 100644
--- a/base/password.py
+++ b/base/password.py
@@ -157,6 +157,28 @@ class Password(object):
log.warn("%s distro is not found in AUTH_TYPES" % distro_name)
self.__authType = 'su'
+ # check if caller is in wheel group - use 'su' if he isnt -
+ # or if the caller is root (just for showing 'root' username)
+ # in the prompt
+ import os
+ from grp import getgrnam
+
+ user = os.getenv('USER')
+
+ try:
+ members = getgrnam('wheel').gr_mem
+ except KeyError:
+ try:
+ members = getgrnam('sudo').gr_mem
+ except:
+ return
+
+ if user in members:
+ self.__authType = 'sudo'
+ else:
+ self.__authType = 'su'
+
+
def __getPasswordDisplayString(self):
if self.__authType == "su":
return "Please enter the root/superuser password: "

View file

@ -28,8 +28,8 @@ diff -up hplip-3.20.9/configure.in.configure-python hplip-3.20.9/configure.in
+ AC_MSG_ERROR([Cannot get Python libs via python3-config], 6)
+fi
+
+SAVE_CFLAGS=$CFLAGS
+SAVE_LIBS=$LIBS
+SAVE_CFLAGS="$CFLAGS"
+SAVE_LIBS="$LIBS"
+
+CFLAGS="$CFLAGS $PYTHON_INCLUDES"
+LIBS="$LIBS $PYTHON_LIBS"

View file

@ -1,38 +1,6 @@
diff --git a/Makefile.am b/Makefile.am
index 62a25d3..2c4d6f8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3,7 +3,7 @@
#
# (c) 2004-2015 Copyright HP Development Company, LP
# Author: David Suffield, Naga Samrat Chowdary Narla, Sarbeswar Meher
-INCLUDES = -Iip -Iio/hpmud -Iscan/sane -Iprnt/hpijs -Icommon/
+INCLUDES = -Iip -Iio/hpmud -Iscan/sane -Iprnt/hpijs -Icommon/ -Iprotocol
CFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
CXXFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
@@ -304,7 +304,7 @@ dist_pcard_DATA = pcard/__init__.py pcard/photocard.py
pcardextdir = $(pyexecdir)
pcardext_LTLIBRARIES = pcardext.la
pcardext_la_LDFLAGS = -module -avoid-version
-pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c
+pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c pcard/pcardext/pcardext.h
pcardext_la_CFLAGS = -I$(PYTHONINCLUDEDIR)
# prnt
@@ -316,7 +316,7 @@ lib_LTLIBRARIES += libhpipp.la
#hpipp_LTLIBRARIES = hpipp.la
#hpipp_la_LDFLAGS = -module -avoid-version
libhpipp_la_SOURCES = protocol/hp_ipp.c protocol/hp_ipp.h protocol/hp_ipp_i.h
-libhpipp_la_CFLAGS = -DCONFDIR=\"$(hplip_confdir)\"
+libhpipp_la_CFLAGS = -DCONFDIR=\"$(hplip_confdir)\" -D_GNU_SOURCE
libhpipp_la_LDFLAGS = -version-info 0:1:0
libhpipp_la_LIBADD = libhpmud.la
diff --git a/common/utils.c b/common/utils.c
index d8ecee9..def4e47 100644
--- a/common/utils.c
+++ b/common/utils.c
diff -up hplip-3.25.2/common/utils.c.covscan hplip-3.25.2/common/utils.c
--- hplip-3.25.2/common/utils.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/common/utils.c 2025-04-11 10:21:58.034950818 +0200
@@ -1,5 +1,9 @@
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
@ -44,11 +12,10 @@ index d8ecee9..def4e47 100644
#include <dlfcn.h>
#include <sys/stat.h>
#include <errno.h>
diff --git a/io/hpmud/hpmud.c b/io/hpmud/hpmud.c
index 0eb6fff..358f279 100644
--- a/io/hpmud/hpmud.c
+++ b/io/hpmud/hpmud.c
@@ -759,6 +759,7 @@ enum HPMUD_RESULT hpmud_get_dstat(HPMUD_DEVICE dd, struct hpmud_dstat *ds)
diff -up hplip-3.25.2/io/hpmud/hpmud.c.covscan hplip-3.25.2/io/hpmud/hpmud.c
--- hplip-3.25.2/io/hpmud/hpmud.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/io/hpmud/hpmud.c 2025-04-11 10:21:58.035151792 +0200
@@ -769,6 +769,7 @@ enum HPMUD_RESULT hpmud_get_dstat(HPMUD_
}
strncpy(ds->uri, msp->device[dd].uri, sizeof(ds->uri));
@ -56,10 +23,9 @@ index 0eb6fff..358f279 100644
ds->io_mode = msp->device[dd].io_mode;
ds->channel_cnt = msp->device[dd].channel_cnt;
ds->mlc_up = msp->device[dd].mlc_up;
diff --git a/io/hpmud/jd.c b/io/hpmud/jd.c
index 06f5072..20df27a 100644
--- a/io/hpmud/jd.c
+++ b/io/hpmud/jd.c
diff -up hplip-3.25.2/io/hpmud/jd.c.covscan hplip-3.25.2/io/hpmud/jd.c
--- hplip-3.25.2/io/hpmud/jd.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/io/hpmud/jd.c 2025-04-11 10:21:58.035328288 +0200
@@ -31,6 +31,7 @@
#endif
@ -68,10 +34,9 @@ index 06f5072..20df27a 100644
#include "hpmud.h"
#include "hpmudi.h"
diff --git a/io/hpmud/model.c b/io/hpmud/model.c
index 4ea8990..a917d69 100644
--- a/io/hpmud/model.c
+++ b/io/hpmud/model.c
diff -up hplip-3.25.2/io/hpmud/model.c.covscan hplip-3.25.2/io/hpmud/model.c
--- hplip-3.25.2/io/hpmud/model.c.covscan 2025-04-11 10:21:58.023885145 +0200
+++ hplip-3.25.2/io/hpmud/model.c 2025-04-11 10:21:58.035487541 +0200
@@ -117,6 +117,7 @@ static int ReadConfig()
if (rcbuf[0] == '[')
{
@ -88,11 +53,10 @@ index 4ea8990..a917d69 100644
break; /* done */
}
}
diff --git a/io/hpmud/musb.c b/io/hpmud/musb.c
index 6e99c15..755493e 100644
--- a/io/hpmud/musb.c
+++ b/io/hpmud/musb.c
@@ -775,7 +775,7 @@ static int device_id(int fd, unsigned char *buffer, int size)
diff -up hplip-3.25.2/io/hpmud/musb.c.covscan hplip-3.25.2/io/hpmud/musb.c
--- hplip-3.25.2/io/hpmud/musb.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/io/hpmud/musb.c 2025-04-11 10:21:58.035717762 +0200
@@ -776,7 +776,7 @@ static int device_id(int fd, unsigned ch
len = size-1; /* leave byte for zero termination */
if (len > 2)
len -= 2;
@ -101,11 +65,10 @@ index 6e99c15..755493e 100644
buffer[len]=0;
DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
diff --git a/io/hpmud/pp.c b/io/hpmud/pp.c
index 74c5fdc..021d627 100644
--- a/io/hpmud/pp.c
+++ b/io/hpmud/pp.c
@@ -632,7 +632,7 @@ static int device_id(int fd, char *buffer, int size)
diff -up hplip-3.25.2/io/hpmud/pp.c.covscan hplip-3.25.2/io/hpmud/pp.c
--- hplip-3.25.2/io/hpmud/pp.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/io/hpmud/pp.c 2025-04-11 10:21:58.035977040 +0200
@@ -632,7 +632,7 @@ static int device_id(int fd, char *buffe
len = size-1; /* leave byte for zero termination */
if (len > 2)
len -= 2;
@ -114,10 +77,39 @@ index 74c5fdc..021d627 100644
buffer[len]=0;
DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
diff --git a/pcard/fat.c b/pcard/fat.c
index caa383f..e1425c0 100644
--- a/pcard/fat.c
+++ b/pcard/fat.c
diff -up hplip-3.25.2/Makefile.am.covscan hplip-3.25.2/Makefile.am
--- hplip-3.25.2/Makefile.am.covscan 2025-04-11 10:21:58.010155532 +0200
+++ hplip-3.25.2/Makefile.am 2025-04-11 10:22:52.826357214 +0200
@@ -3,7 +3,7 @@
#
# (c) 2004-2015 Copyright HP Development Company, LP
# Author: David Suffield, Naga Samrat Chowdary Narla, Sarbeswar Meher
-INCLUDES = -Iip -Iio/hpmud -Iscan/sane -Iprnt/hpijs -Icommon/
+INCLUDES = -Iip -Iio/hpmud -Iscan/sane -Iprnt/hpijs -Icommon/ -Iprotocol
CFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
CXXFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
@@ -310,7 +310,7 @@ dist_pcard_DATA = pcard/__init__.py pcar
pcardextdir = $(PYTHONEXECDIR)
pcardext_LTLIBRARIES = pcardext.la
pcardext_la_LDFLAGS = -module -avoid-version
-pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c
+pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c pcard/pcardext/pcardext.h
pcardext_la_CFLAGS = -I$(PYTHONINCLUDEDIR)
# prnt
@@ -322,7 +322,7 @@ lib_LTLIBRARIES += libhpipp.la
#hpipp_LTLIBRARIES = hpipp.la
#hpipp_la_LDFLAGS = -module -avoid-version
libhpipp_la_SOURCES = protocol/hp_ipp.c protocol/hp_ipp.h protocol/hp_ipp_i.h
-libhpipp_la_CFLAGS = -DCONFDIR=\"$(hplip_confdir)\"
+libhpipp_la_CFLAGS = -DCONFDIR=\"$(hplip_confdir)\" -D_GNU_SOURCE
libhpipp_la_LDFLAGS = -version-info 0:1:0
libhpipp_la_LIBADD = libhpmud.la
diff -up hplip-3.25.2/pcard/fat.c.covscan hplip-3.25.2/pcard/fat.c
--- hplip-3.25.2/pcard/fat.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/pcard/fat.c 2025-04-11 10:21:58.036450105 +0200
@@ -519,14 +519,17 @@ int FatFreeSpace(void)
int FatDiskAttributes( PHOTO_CARD_ATTRIBUTES * pa )
@ -147,48 +139,9 @@ index caa383f..e1425c0 100644
cwd.StartSector = ConvertClusterToSector(fa.StartCluster);
cwd.CurrSector = cwd.StartSector;
cwd.StartCluster = fa.StartCluster;
diff --git a/prnt/hpcups/genPCLm.cpp b/prnt/hpcups/genPCLm.cpp
index c0cdc73..4db4bde 100644
--- a/prnt/hpcups/genPCLm.cpp
+++ b/prnt/hpcups/genPCLm.cpp
@@ -1237,11 +1237,16 @@ void PCLmGenerator::writeJobTicket()
char orientation[256];
char duplex[256];
char colorthemes[256];
- strncpy(colorthemes,getColorThemesString(m_pPCLmSSettings->colorTheme),256);
- strncpy(inputBin,getInputBinString(m_pPCLmSSettings->userInputBin),256);
- strncpy(outputBin,getOutputBin(m_pPCLmSSettings->userOutputBin),256);
- strncpy(orientation,getOrientationString(m_pPCLmSSettings->userOrientation),256);
- strncpy(duplex,getDuplexString(currDuplexDisposition),256);
+ strncpy(colorthemes,getColorThemesString(m_pPCLmSSettings->colorTheme), sizeof(colorthemes));
+ colorthemes[sizeof(colorthemes)-1] = '\0';
+ strncpy(inputBin,getInputBinString(m_pPCLmSSettings->userInputBin), sizeof(inputBin));
+ inputBin[sizeof(inputBin)-1] = '\0';
+ strncpy(outputBin,getOutputBin(m_pPCLmSSettings->userOutputBin), sizeof(outputBin));
+ outputBin[sizeof(outputBin)-1] = '\0';
+ strncpy(orientation,getOrientationString(m_pPCLmSSettings->userOrientation), sizeof(orientation));
+ orientation[sizeof(orientation)-1] = '\0';
+ strncpy(duplex,getDuplexString(currDuplexDisposition), sizeof(duplex));
+ duplex[sizeof(duplex)-1] = '\0';
snprintf(pOutStr,OUT_STR_SIZE,"%% genPCLm (Ver: %f)\n",PCLM_Ver); writeStr2OutBuff(pOutStr);
snprintf(pOutStr,OUT_STR_SIZE,"%%============= Job Ticket =============\n"); writeStr2OutBuff(pOutStr);
@@ -1635,7 +1640,10 @@ int PCLmGenerator::StartPage(PCLmPageSetup *PCLmPageContent, void **pOutBuffer,
}
if(strlen(PCLmPageContent->mediaSizeName))
- strncpy(currMediaName,PCLmPageContent->mediaSizeName,256);
+ {
+ strncpy(currMediaName,PCLmPageContent->mediaSizeName, sizeof(currMediaName));
+ currMediaName[sizeof(currMediaName)-1] = '\0';
+ }
currStripHeight=PCLmPageContent->stripHeight;
if(!currStripHeight)
diff --git a/prnt/hpijs/context2.cpp b/prnt/hpijs/context2.cpp
index c3df482..19490b1 100644
--- a/prnt/hpijs/context2.cpp
+++ b/prnt/hpijs/context2.cpp
diff -up hplip-3.25.2/prnt/hpijs/context2.cpp.covscan hplip-3.25.2/prnt/hpijs/context2.cpp
--- hplip-3.25.2/prnt/hpijs/context2.cpp.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/prnt/hpijs/context2.cpp 2025-04-11 10:21:58.036656862 +0200
@@ -1302,6 +1302,7 @@ DRIVER_ERROR PrintContext::SelectDevice
if(0 == strnlen((const char *)pSS->strDevID, DevIDBuffSize))
{
@ -197,11 +150,10 @@ index c3df482..19490b1 100644
}
thePrinter = pPFI->CreatePrinter (pSS, familyHandle);
if (thePrinter->constructor_error != NO_ERROR)
diff --git a/prnt/hpijs/systemservices.cpp b/prnt/hpijs/systemservices.cpp
index 95f5a64..f5b4bb5 100644
--- a/prnt/hpijs/systemservices.cpp
+++ b/prnt/hpijs/systemservices.cpp
@@ -396,7 +396,10 @@ void SystemServices::AdjustIO(IO_MODE IM, const char* model)
diff -up hplip-3.25.2/prnt/hpijs/systemservices.cpp.covscan hplip-3.25.2/prnt/hpijs/systemservices.cpp
--- hplip-3.25.2/prnt/hpijs/systemservices.cpp.covscan 2025-02-27 13:12:44.000000000 +0100
+++ hplip-3.25.2/prnt/hpijs/systemservices.cpp 2025-04-11 10:21:58.036891582 +0200
@@ -396,7 +396,10 @@ void SystemServices::AdjustIO(IO_MODE IM
IOMode.bDevID =IM.bDevID && IOMode.bDevID;
if (model)
@ -212,11 +164,10 @@ index 95f5a64..f5b4bb5 100644
}
APDK_END_NAMESPACE
diff --git a/prnt/hpps/hppsfilter.c b/prnt/hpps/hppsfilter.c
index 5879a70..d246041 100644
--- a/prnt/hpps/hppsfilter.c
+++ b/prnt/hpps/hppsfilter.c
@@ -230,13 +230,13 @@ static void WriteHeader(char **argument)
diff -up hplip-3.25.2/prnt/hpps/hppsfilter.c.covscan hplip-3.25.2/prnt/hpps/hppsfilter.c
--- hplip-3.25.2/prnt/hpps/hppsfilter.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/prnt/hpps/hppsfilter.c 2025-04-11 10:21:58.037072084 +0200
@@ -329,13 +329,13 @@ static void WriteHeader(char **argument)
/* Writing Header Information
argument[1] = JOB ID , argument[2]= USERNAME, argument[3] = TITLE */
hpwrite("\x1b%-12345X@PJL JOBNAME=", strlen("\x1b%-12345X@PJL JOBNAME="));
@ -233,25 +184,24 @@ index 5879a70..d246041 100644
hpwrite(buffer, strlen(buffer));
fprintf(stderr, "HP PS filter func = WriteHeader : WRITING PJL HEADER INFO\n");
return;
diff --git a/protocol/hp_ipp.h b/protocol/hp_ipp.h
index 3853f84..de76202 100644
--- a/protocol/hp_ipp.h
+++ b/protocol/hp_ipp.h
@@ -166,5 +166,10 @@ int getCupsPrinters(printer_t **printer_list);
HPIPP_RESULT parseResponseHeader(char* header, int *content_length, int *chunked, int* header_size);
HPIPP_RESULT prepend_http_header(raw_ipp *raw_request);
diff -up hplip-3.25.2/protocol/hp_ipp.h.covscan hplip-3.25.2/protocol/hp_ipp.h
--- hplip-3.25.2/protocol/hp_ipp.h.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/protocol/hp_ipp.h 2025-04-11 10:21:58.037239020 +0200
@@ -168,6 +168,11 @@ HPIPP_RESULT parseResponseHeader(char* h
HPIPP_RESULT prepend_http_header(raw_ipp *raw_request,const char *resource);
enum HPMUD_RESULT sendUSBRequest(char *buf, int size, raw_ipp *responseptr, char * device_uri);
enum HPMUD_RESULT sendUSBFileRequest(char *buf, int size, int fileHandle,raw_ipp *responseptr, char *device_uri);
+void _releaseCupsInstance();
+int addCupsPrinter(char *name, char *device_uri, char *location, char *ppd_file, char *model, char *info);
+int delCupsPrinter(char *pr_name);
+int setDefaultCupsPrinter(char *pr_name);
+int controlCupsPrinter(char *pr_name, int op);
# endif //_IPP_H
diff --git a/scan/sane/bb_ledm.c b/scan/sane/bb_ledm.c
index b233d1e..7ba0edf 100644
--- a/scan/sane/bb_ledm.c
+++ b/scan/sane/bb_ledm.c
ipp_t * createFaxDetailRequest(const char *printer_name);
ipp_t * getDeviceFaxModemAttributes(char* device_uri,char* printer_name, int *count);
diff -up hplip-3.25.2/scan/sane/bb_ledm.c.covscan hplip-3.25.2/scan/sane/bb_ledm.c
--- hplip-3.25.2/scan/sane/bb_ledm.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/bb_ledm.c 2025-04-11 10:21:58.037378913 +0200
@@ -26,6 +26,7 @@
# include "http.h"
# include "xml.h"
@ -260,10 +210,9 @@ index b233d1e..7ba0edf 100644
# include <stdint.h>
diff --git a/scan/sane/common.h b/scan/sane/common.h
index 0f67542..e496a74 100644
--- a/scan/sane/common.h
+++ b/scan/sane/common.h
diff -up hplip-3.25.2/scan/sane/common.h.covscan hplip-3.25.2/scan/sane/common.h
--- hplip-3.25.2/scan/sane/common.h.covscan 2025-04-11 10:21:57.806326475 +0200
+++ hplip-3.25.2/scan/sane/common.h 2025-04-11 10:21:58.037532413 +0200
@@ -36,7 +36,7 @@
#define _STRINGIZE(x) #x
#define STRINGIZE(x) _STRINGIZE(x)
@ -273,11 +222,10 @@ index 0f67542..e496a74 100644
#define BUG_DUMP(data, size) bugdump((data), (size))
#define BUG_SZ(args...) {syslog(LOG_ERR, args); DBG(2, args);}
diff --git a/scan/sane/escl.c b/scan/sane/escl.c
index af45bff..4f59b21 100644
--- a/scan/sane/escl.c
+++ b/scan/sane/escl.c
@@ -795,7 +795,7 @@ SANE_Status escl_control_option(SANE_Handle handle, SANE_Int option, SANE_Action
diff -up hplip-3.25.2/scan/sane/escl.c.covscan hplip-3.25.2/scan/sane/escl.c
--- hplip-3.25.2/scan/sane/escl.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/escl.c 2025-04-11 10:21:58.037677793 +0200
@@ -849,7 +849,7 @@ SANE_Status escl_control_option(SANE_Han
//DBG8("escl_control_option (option=%s) action=%d\n", ps->option[option].name, action);
if (stat != SANE_STATUS_GOOD)
{
@ -286,7 +234,7 @@ index af45bff..4f59b21 100644
}
return stat;
@@ -1102,7 +1102,7 @@ void escl_close(SANE_Handle handle)
@@ -1159,7 +1159,7 @@ void escl_close(SANE_Handle handle)
if (ps == NULL || ps != session)
{
@ -295,10 +243,9 @@ index af45bff..4f59b21 100644
return;
}
diff --git a/scan/sane/http.c b/scan/sane/http.c
index 800df91..45668cd 100644
--- a/scan/sane/http.c
+++ b/scan/sane/http.c
diff -up hplip-3.25.2/scan/sane/http.c.covscan hplip-3.25.2/scan/sane/http.c
--- hplip-3.25.2/scan/sane/http.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/http.c 2025-04-11 10:21:58.037859247 +0200
@@ -36,6 +36,7 @@
#include <string.h>
#include <syslog.h>
@ -307,11 +254,10 @@ index 800df91..45668cd 100644
#include "hpmud.h"
#include "http.h"
diff --git a/scan/sane/io.c b/scan/sane/io.c
index 4508458..7bbddea 100755
--- a/scan/sane/io.c
+++ b/scan/sane/io.c
@@ -50,7 +50,7 @@ int __attribute__ ((visibility ("hidden"))) InitDbus(void)
diff -up hplip-3.25.2/scan/sane/io.c.covscan hplip-3.25.2/scan/sane/io.c
--- hplip-3.25.2/scan/sane/io.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/io.c 2025-04-11 10:21:58.037998005 +0200
@@ -50,7 +50,7 @@ int __attribute__ ((visibility ("hidden"
if (dbus_error_is_set(&dbus_err))
{
@ -320,7 +266,7 @@ index 4508458..7bbddea 100755
dbus_error_free(&dbus_err);
}
@@ -79,7 +79,7 @@ int __attribute__ ((visibility ("hidden"))) SendScanEvent(char *device_uri, int
@@ -79,7 +79,7 @@ int __attribute__ ((visibility ("hidden"
if (NULL == msg)
{
@ -329,7 +275,7 @@ index 4508458..7bbddea 100755
return 0;
}
@@ -94,7 +94,7 @@ int __attribute__ ((visibility ("hidden"))) SendScanEvent(char *device_uri, int
@@ -94,7 +94,7 @@ int __attribute__ ((visibility ("hidden"
if (!dbus_connection_send(dbus_conn, msg, NULL))
{
@ -338,11 +284,10 @@ index 4508458..7bbddea 100755
return 0;
}
diff --git a/scan/sane/ledm.c b/scan/sane/ledm.c
index 9a1ff02..07ab5b0 100644
--- a/scan/sane/ledm.c
+++ b/scan/sane/ledm.c
@@ -802,7 +802,7 @@ SANE_Status ledm_control_option(SANE_Handle handle, SANE_Int option, SANE_Action
diff -up hplip-3.25.2/scan/sane/ledm.c.covscan hplip-3.25.2/scan/sane/ledm.c
--- hplip-3.25.2/scan/sane/ledm.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/ledm.c 2025-04-11 10:21:58.038131991 +0200
@@ -813,7 +813,7 @@ SANE_Status ledm_control_option(SANE_Han
if (stat != SANE_STATUS_GOOD)
{
@ -351,7 +296,7 @@ index 9a1ff02..07ab5b0 100644
}
return stat;
@@ -1067,7 +1067,7 @@ void ledm_close(SANE_Handle handle)
@@ -1078,7 +1078,7 @@ void ledm_close(SANE_Handle handle)
if (ps == NULL || ps != session)
{
@ -360,11 +305,10 @@ index 9a1ff02..07ab5b0 100644
return;
}
diff --git a/scan/sane/marvell.c b/scan/sane/marvell.c
index ad267a3..236f7c9 100644
--- a/scan/sane/marvell.c
+++ b/scan/sane/marvell.c
@@ -134,7 +134,7 @@ static int get_ip_data(struct marvell_session *ps, SANE_Byte *data, SANE_Int max
diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell.c
--- hplip-3.25.2/scan/sane/marvell.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/marvell.c 2025-04-11 10:21:58.038309394 +0200
@@ -134,7 +134,7 @@ static int get_ip_data(struct marvell_se
if (!ps->ip_handle)
{
@ -373,7 +317,7 @@ index ad267a3..236f7c9 100644
goto bugout;
}
@@ -335,7 +335,7 @@ static struct marvell_session *create_session()
@@ -335,7 +335,7 @@ static struct marvell_session *create_se
if ((ps = malloc(sizeof(struct marvell_session))) == NULL)
{
@ -382,7 +326,7 @@ index ad267a3..236f7c9 100644
return NULL;
}
memset(ps, 0, sizeof(struct marvell_session));
@@ -402,7 +402,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
@@ -402,7 +402,7 @@ SANE_Status marvell_open(SANE_String_Con
if (session)
{
@ -391,7 +335,7 @@ index ad267a3..236f7c9 100644
return SANE_STATUS_DEVICE_BUSY;
}
@@ -431,7 +431,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
@@ -431,7 +431,7 @@ SANE_Status marvell_open(SANE_String_Con
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@ -400,7 +344,7 @@ index ad267a3..236f7c9 100644
goto bugout;
free(session);
@@ -441,7 +441,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
@@ -441,7 +441,7 @@ SANE_Status marvell_open(SANE_String_Con
if (hpmud_open_channel(session->dd, HPMUD_S_MARVELL_SCAN_CHANNEL, &session->cd) != HPMUD_R_OK)
{
@ -418,7 +362,7 @@ index ad267a3..236f7c9 100644
return;
}
@@ -849,7 +849,7 @@ SANE_Status marvell_control_option(SANE_Handle handle, SANE_Int option, SANE_Act
@@ -849,7 +849,7 @@ SANE_Status marvell_control_option(SANE_
stat = SANE_STATUS_GOOD;
break;
}
@ -427,7 +371,7 @@ index ad267a3..236f7c9 100644
}
else
{ /* Set default. */
@@ -866,7 +866,7 @@ SANE_Status marvell_control_option(SANE_Handle handle, SANE_Int option, SANE_Act
@@ -866,7 +866,7 @@ SANE_Status marvell_control_option(SANE_
if (stat != SANE_STATUS_GOOD)
{
@ -436,7 +380,7 @@ index ad267a3..236f7c9 100644
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
@@ -905,7 +905,7 @@ SANE_Status marvell_start(SANE_Handle handle)
@@ -905,7 +905,7 @@ SANE_Status marvell_start(SANE_Handle ha
if (set_extents(ps))
{
@ -445,7 +389,7 @@ index ad267a3..236f7c9 100644
ps->currentTlx, ps->currentTly, ps->currentBrx, ps->currentBry, ps->min_width, ps->min_height, ps->tlxRange.max, ps->tlyRange.max);
stat = SANE_STATUS_INVAL;
goto bugout;
@@ -963,7 +963,7 @@ SANE_Status marvell_start(SANE_Handle handle)
@@ -963,7 +963,7 @@ SANE_Status marvell_start(SANE_Handle ha
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@ -454,7 +398,7 @@ index ad267a3..236f7c9 100644
stat = SANE_STATUS_INVAL;
goto bugout;
}
@@ -1023,7 +1023,7 @@ SANE_Status marvell_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength
@@ -1023,7 +1023,7 @@ SANE_Status marvell_read(SANE_Handle han
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{
@ -463,10 +407,9 @@ index ad267a3..236f7c9 100644
goto bugout;
}
diff --git a/scan/sane/sclpml.c b/scan/sane/sclpml.c
index 9a5975f..dc8b32c 100644
--- a/scan/sane/sclpml.c
+++ b/scan/sane/sclpml.c
diff -up hplip-3.25.2/scan/sane/sclpml.c.covscan hplip-3.25.2/scan/sane/sclpml.c
--- hplip-3.25.2/scan/sane/sclpml.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/sclpml.c 2025-04-11 10:21:58.038605168 +0200
@@ -30,6 +30,7 @@
#include <unistd.h>
#include <fcntl.h>
@ -484,11 +427,10 @@ index 9a5975f..dc8b32c 100644
return;
}
diff --git a/scan/sane/soap.c b/scan/sane/soap.c
index 07106fe..0d22e52 100644
--- a/scan/sane/soap.c
+++ b/scan/sane/soap.c
@@ -142,7 +142,7 @@ static int get_ip_data(struct soap_session *ps, SANE_Byte *data, SANE_Int maxLen
diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
--- hplip-3.25.2/scan/sane/soap.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/soap.c 2025-04-11 10:21:58.038894758 +0200
@@ -142,7 +142,7 @@ static int get_ip_data(struct soap_sessi
if (!ps->ip_handle)
{
@ -497,7 +439,7 @@ index 07106fe..0d22e52 100644
goto bugout;
}
@@ -219,7 +219,7 @@ static struct soap_session *create_session()
@@ -219,7 +219,7 @@ static struct soap_session *create_sessi
if ((ps = malloc(sizeof(struct soap_session))) == NULL)
{
@ -506,7 +448,7 @@ index 07106fe..0d22e52 100644
return NULL;
}
memset(ps, 0, sizeof(struct soap_session));
@@ -418,7 +418,7 @@ SANE_Status soap_open(SANE_String_Const device, SANE_Handle *handle)
@@ -418,7 +418,7 @@ SANE_Status soap_open(SANE_String_Const
if (session)
{
@ -515,7 +457,7 @@ index 07106fe..0d22e52 100644
return SANE_STATUS_DEVICE_BUSY;
}
@@ -434,7 +434,7 @@ SANE_Status soap_open(SANE_String_Const device, SANE_Handle *handle)
@@ -434,7 +434,7 @@ SANE_Status soap_open(SANE_String_Const
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@ -533,7 +475,7 @@ index 07106fe..0d22e52 100644
return;
}
@@ -824,7 +824,7 @@ SANE_Status soap_control_option(SANE_Handle handle, SANE_Int option, SANE_Action
@@ -824,7 +824,7 @@ SANE_Status soap_control_option(SANE_Han
if (stat != SANE_STATUS_GOOD)
{
@ -542,7 +484,7 @@ index 07106fe..0d22e52 100644
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
@@ -862,7 +862,7 @@ SANE_Status soap_start(SANE_Handle handle)
@@ -862,7 +862,7 @@ SANE_Status soap_start(SANE_Handle handl
ps->user_cancel = 0;
if (set_extents(ps))
{
@ -551,7 +493,7 @@ index 07106fe..0d22e52 100644
ps->currentTlx, ps->currentTly, ps->currentBrx, ps->currentBry, ps->min_width, ps->min_height, ps->tlxRange.max, ps->tlyRange.max);
stat = SANE_STATUS_INVAL;
goto bugout;
@@ -913,7 +913,7 @@ SANE_Status soap_start(SANE_Handle handle)
@@ -913,7 +913,7 @@ SANE_Status soap_start(SANE_Handle handl
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@ -560,7 +502,7 @@ index 07106fe..0d22e52 100644
stat = SANE_STATUS_INVAL;
goto bugout;
}
@@ -955,7 +955,7 @@ SANE_Status soap_start(SANE_Handle handle)
@@ -955,7 +955,7 @@ SANE_Status soap_start(SANE_Handle handl
if (ret & (IP_INPUT_ERROR | IP_FATAL_ERROR | IP_DONE))
{
@ -569,7 +511,7 @@ index 07106fe..0d22e52 100644
stat = SANE_STATUS_IO_ERROR;
goto bugout;
}
@@ -1007,7 +1007,7 @@ SANE_Status soap_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength, S
@@ -1007,7 +1007,7 @@ SANE_Status soap_read(SANE_Handle handle
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{
@ -578,11 +520,10 @@ index 07106fe..0d22e52 100644
goto bugout;
}
diff --git a/scan/sane/soapht.c b/scan/sane/soapht.c
index 269ab21..139100d 100644
--- a/scan/sane/soapht.c
+++ b/scan/sane/soapht.c
@@ -136,7 +136,7 @@ static int get_ip_data(struct soap_session *ps, SANE_Byte *data, SANE_Int maxLen
diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
--- hplip-3.25.2/scan/sane/soapht.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/soapht.c 2025-04-11 10:21:58.039106018 +0200
@@ -136,7 +136,7 @@ static int get_ip_data(struct soap_sessi
if (!ps->ip_handle)
{
@ -591,7 +532,7 @@ index 269ab21..139100d 100644
goto bugout;
}
@@ -435,7 +435,7 @@ static struct soap_session *create_session()
@@ -435,7 +435,7 @@ static struct soap_session *create_sessi
if ((ps = malloc(sizeof(struct soap_session))) == NULL)
{
@ -600,7 +541,7 @@ index 269ab21..139100d 100644
return NULL;
}
memset(ps, 0, sizeof(struct soap_session));
@@ -459,7 +459,7 @@ SANE_Status soapht_open(SANE_String_Const device, SANE_Handle *handle)
@@ -459,7 +459,7 @@ SANE_Status soapht_open(SANE_String_Cons
if (session)
{
@ -609,7 +550,7 @@ index 269ab21..139100d 100644
return SANE_STATUS_DEVICE_BUSY;
}
@@ -475,7 +475,7 @@ SANE_Status soapht_open(SANE_String_Const device, SANE_Handle *handle)
@@ -475,7 +475,7 @@ SANE_Status soapht_open(SANE_String_Cons
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@ -627,7 +568,7 @@ index 269ab21..139100d 100644
return;
}
@@ -904,7 +904,7 @@ SANE_Status soapht_control_option(SANE_Handle handle, SANE_Int option, SANE_Acti
@@ -904,7 +904,7 @@ SANE_Status soapht_control_option(SANE_H
if (stat != SANE_STATUS_GOOD)
{
@ -636,7 +577,7 @@ index 269ab21..139100d 100644
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
@@ -946,7 +946,7 @@ SANE_Status soapht_start(SANE_Handle handle)
@@ -946,7 +946,7 @@ SANE_Status soapht_start(SANE_Handle han
if (set_extents(ps))
{
@ -645,7 +586,7 @@ index 269ab21..139100d 100644
ps->currentTlx, ps->currentTly, ps->currentBrx, ps->currentBry, ps->min_width, ps->min_height, ps->tlxRange.max, ps->tlyRange.max);
stat = SANE_STATUS_INVAL;
goto bugout;
@@ -1032,7 +1032,7 @@ SANE_Status soapht_start(SANE_Handle handle)
@@ -1032,7 +1032,7 @@ SANE_Status soapht_start(SANE_Handle han
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@ -654,7 +595,7 @@ index 269ab21..139100d 100644
stat = SANE_STATUS_INVAL;
goto bugout;
}
@@ -1075,7 +1075,7 @@ SANE_Status soapht_start(SANE_Handle handle)
@@ -1075,7 +1075,7 @@ SANE_Status soapht_start(SANE_Handle han
if (ret & (IP_INPUT_ERROR | IP_FATAL_ERROR | IP_DONE))
{
@ -663,7 +604,7 @@ index 269ab21..139100d 100644
stat = SANE_STATUS_IO_ERROR;
goto bugout;
}
@@ -1124,7 +1124,7 @@ SANE_Status soapht_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength,
@@ -1124,7 +1124,7 @@ SANE_Status soapht_read(SANE_Handle hand
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{

View file

@ -2,15 +2,6 @@ diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py
index c23957a..48b248f 100644
--- a/ui5/devmgr5.py
+++ b/ui5/devmgr5.py
@@ -2247,7 +2247,7 @@ class PasswordDialog(QDialog):
self.prompt = prompt
Layout= QGridLayout(self)
- Layout.setMargin(11)
+ Layout.setContentsMargins(11, 11, 11, 11)
Layout.setSpacing(6)
self.PromptTextLabel = QLabel(self)
@@ -2300,14 +2300,15 @@ class PasswordDialog(QDialog):
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

View file

@ -32,47 +32,3 @@ index fdb48e8..345ed82 100644
self.cleanup(EVENT_PCARD_UNABLE_TO_MOUNT)
return False
diff --git a/ui4/wifisetupdialog.py b/ui4/wifisetupdialog.py
index 9fd1786..4d36f83 100644
--- a/ui4/wifisetupdialog.py
+++ b/ui4/wifisetupdialog.py
@@ -256,7 +256,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog):
try:
self.dev = device.Device(self.device_uri)
except Error as e:
- FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, QString(e[0])))
+ FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, QString(e.msg)))
if self.dev is not None:
self.dev.close()
@@ -834,7 +834,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog):
def showIOError(self, e):
- FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % QString(e[0])))
+ FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % QString(e.msg)))
if self.dev is not None:
self.dev.close()
diff --git a/ui5/wifisetupdialog.py b/ui5/wifisetupdialog.py
index e0c7aee..74cc0ef 100644
--- a/ui5/wifisetupdialog.py
+++ b/ui5/wifisetupdialog.py
@@ -259,7 +259,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog):
try:
self.dev = device.Device(self.device_uri)
except Error as e:
- FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, str(e[0])))
+ FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, str(e.msg)))
if self.dev is not None:
self.dev.close()
@@ -840,7 +840,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog):
def showIOError(self, e):
- FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % str(e[0])))
+ FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % str(e.msg)))
if self.dev is not None:
self.dev.close()

View file

@ -1,13 +0,0 @@
diff --git a/ui5/fabwindow.py b/ui5/fabwindow.py
index 0b95c94..631727c 100644
--- a/ui5/fabwindow.py
+++ b/ui5/fabwindow.py
@@ -518,7 +518,7 @@ class FABWindow(QMainWindow, Ui_MainWindow):
self.__tr("Import fax addresses from LDIF or vCard"),
#user_conf.workingDirectory(),
self.user_settings.working_dir,
- "vCard (*.vcf);;LDIF (*.ldif *.ldi)"))
+ "vCard (*.vcf);;LDIF (*.ldif *.ldi)")[0])
if result:
working_directory = to_unicode(os.path.dirname(result))

View file

@ -5,7 +5,7 @@ index d493b54..401dc41 100644
@@ -727,8 +727,8 @@ def canEnterGUIMode4(): # qt4
except ImportError:
try:
import ui5
import ui5.setupdialog
- except ImportError as e:
- log.warn(e)
+ except ImportError:
@ -22,7 +22,7 @@ index d493b54..401dc41 100644
log.error("PyQt not installed. GUI not available. Exiting.")
@@ -800,6 +801,7 @@ def checkPyQtImport4():
import ui5
import ui5.setupdialog
except ImportError:
log.debug('GUI not available.')
+ log.error('hplip-gui not installed. GUI not available.')

View file

@ -1,14 +1,3 @@
--- hplip-3.20.3/prnt/hpps/hppsfilter.c.orig 2020-03-25 01:09:51.585129957 +0000
+++ hplip-3.20.3/prnt/hpps/hppsfilter.c 2020-03-25 01:10:15.610058293 +0000
@@ -104,7 +104,7 @@ static void open_tempbookletfile(char *m
if(ptempbooklet_file == NULL)
{
fprintf(stderr, "ERROR: Unable to open temp file %s\n", temp_filename);
- return 1;
+ return;
}
chmod(temp_filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
--- hplip-3.20.3/scan/sane/hpaio.c.orig 2020-03-25 01:24:15.558732638 +0000
+++ hplip-3.20.3/scan/sane/hpaio.c 2020-03-25 02:48:36.097054366 +0000
@@ -406,20 +406,34 @@ extern SANE_Status sane_hpaio_open(SANE_

View file

@ -0,0 +1,13 @@
diff --git a/base/queues.py b/base/queues.py
index 2f56c8a..0818574 100755
--- a/base/queues.py
+++ b/base/queues.py
@@ -101,7 +101,7 @@ def parseQueues(mode):
try:
match = LPSTAT_PATTERN.search(p)
printer_name = match.group(1)
- device_uri = match.group(2)
+ device_uri = match.group(3)
cups_printers.append((printer_name, device_uri))
except AttributeError:
pass

View file

@ -0,0 +1,53 @@
From 839a216f17ce17a5667eecd54de2a70b1383df2c Mon Sep 17 00:00:00 2001
From: "FeRD (Frank Dana)" <ferdnyc@gmail.com>
Date: Wed, 5 Jan 2022 21:57:06 -0500
Subject: [PATCH 1/2] Info dlg: Use QDateTime.toString()
---
ui5/infodialog.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui5/infodialog.py b/ui5/infodialog.py
index 0de62fb..eaa846d 100644
--- a/ui5/infodialog.py
+++ b/ui5/infodialog.py
@@ -186,7 +186,7 @@ class InfoDialog(QDialog, Ui_Dialog):
for row, h in enumerate(history):
dt = QDateTime()
dt.setTime_t(int(h.timedate))
- dt = value_str(dt)
+ dt = value_str(dt.toString())
ess = device.queryString(h.event_code, 0)
--
2.33.1
From f6e7ab1542afe7fbcd2d29b6cb15b97484e3779c Mon Sep 17 00:00:00 2001
From: "FeRD (Frank Dana)" <ferdnyc@gmail.com>
Date: Wed, 5 Jan 2022 21:56:39 -0500
Subject: [PATCH 2/2] value_str: Handle QDateTime correctly
---
ui5/ui_utils.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/ui5/ui_utils.py b/ui5/ui_utils.py
index caba339..225ca1c 100644
--- a/ui5/ui_utils.py
+++ b/ui5/ui_utils.py
@@ -105,7 +105,10 @@ def value_str(data):
if data is None:
return ""
try:
- if not PY3:
+ if PY3:
+ if isinstance(data, QDateTime):
+ data = data.toString()
+ else:
try:
data = data.toString()
except AttributeError as e:
--
2.33.1

13
hplip-gcc15-stdc23.patch Normal file
View file

@ -0,0 +1,13 @@
diff --git a/scan/sane/ledmi.h b/scan/sane/ledmi.h
index a987c5d..f72847b 100644
--- a/scan/sane/ledmi.h
+++ b/scan/sane/ledmi.h
@@ -162,7 +162,7 @@ struct ledm_session
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);

13
hplip-gpgdir-perms.patch Normal file
View file

@ -0,0 +1,13 @@
diff --git a/base/validation.py b/base/validation.py
index 96e65be..35f22eb 100644
--- a/base/validation.py
+++ b/base/validation.py
@@ -58,7 +58,7 @@ class GPG_Verification(DigiSign_Verification):
if not os.path.exists(self.__gpg_dir):
try:
- os.mkdir(self.__gpg_dir, 0o755)
+ os.mkdir(self.__gpg_dir, 0o700)
except OSError:
log.error("Failed to create %s" % self.__gpg_dir)
self.__change_owner()

View file

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

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;

View file

@ -0,0 +1,24 @@
diff --git a/config_usb_printer.py b/config_usb_printer.py
index 946a2d4..8db097e 100755
--- a/config_usb_printer.py
+++ b/config_usb_printer.py
@@ -28,6 +28,7 @@ __doc__ = "Udev invokes this tool. Tool detects the plugin, Smart Install (C/DVD
# Std Lib
import sys
import os
+import time
# Local
from base.g import *
@@ -181,9 +182,10 @@ try:
# ******************************* RUNNING FIRMWARE DOWNLOAD TO DEVICE FOR SUPPORTED PRINTER'S
fw_download_req = mq.get('fw-download', False)
if fw_download_req:
- fw_cmd = "hp-firmware -y3 -s %s"%param
+ fw_cmd = "hp-firmware -n -y3 -s %s"%param
log.info(fw_cmd)
fw_sts, fw_out = utils.run(fw_cmd)
+ time.sleep(5)
if fw_sts == 0:
log.debug("Firmware downloaded to %s "%device_uri)
else:

View file

@ -1,7 +1,6 @@
diff --git a/setup.py b/setup.py
index 5d48aaa..88e663f 100755
--- a/setup.py
+++ b/setup.py
diff -up hplip-3.23.3/setup.py.hpsetup-noscanjets hplip-3.23.3/setup.py
--- hplip-3.23.3/setup.py.hpsetup-noscanjets 2023-05-29 14:16:26.148133678 +0200
+++ hplip-3.23.3/setup.py 2023-05-29 14:16:26.220133253 +0200
@@ -399,9 +399,19 @@ else: # INTERACTIVE_MODE
#log.warning("Cannot setup fax - device does not have fax feature.")
setup_fax = False
@ -23,13 +22,12 @@ index 5d48aaa..88e663f 100755
plugin = mq.get('plugin', PLUGIN_NONE)
if ignore_plugin_check is False and plugin > PLUGIN_NONE:
diff --git a/ui5/setupdialog.py b/ui5/setupdialog.py
index c6f234b..a5041c1 100644
--- a/ui5/setupdialog.py
+++ b/ui5/setupdialog.py
@@ -1326,6 +1326,18 @@ class SetupDialog(QDialog, Ui_Dialog):
self.mq = device.queryModelByURI(self.device_uri)
back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(self.device_uri)
diff -up hplip-3.23.3/ui5/setupdialog.py.hpsetup-noscanjets hplip-3.23.3/ui5/setupdialog.py
--- hplip-3.23.3/ui5/setupdialog.py.hpsetup-noscanjets 2023-05-29 14:16:26.220133253 +0200
+++ hplip-3.23.3/ui5/setupdialog.py 2023-05-29 14:18:12.475041454 +0200
@@ -1391,6 +1391,18 @@ class SetupDialog(QDialog, Ui_Dialog):
back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(
self.device_uri)
self.model = models.normalizeModelName(model).lower()
+ if 'scanjet' in self.model:
+ FailureUI(self,

View file

@ -1,6 +1,7 @@
diff -up hplip-3.20.3/base/tui.py.keyserver hplip-3.20.3/base/tui.py
--- hplip-3.20.3/base/tui.py.keyserver 2020-03-10 09:01:53.000000000 +0100
+++ hplip-3.20.3/base/tui.py 2020-04-07 08:44:44.319710001 +0200
diff --git a/base/tui.py b/base/tui.py
index 99bda7b..0f90f92 100644
--- a/base/tui.py
+++ b/base/tui.py
@@ -241,6 +241,7 @@ class ProgressMeter(object):
sys.stdout.write(y)
@ -9,52 +10,3 @@ diff -up hplip-3.20.3/base/tui.py.keyserver hplip-3.20.3/base/tui.py
self.prev_length = len(y)
self.spinner_pos = (self.spinner_pos + 1) % 8
diff -up hplip-3.20.3/base/validation.py.keyserver hplip-3.20.3/base/validation.py
--- hplip-3.20.3/base/validation.py.keyserver 2020-03-10 09:01:53.000000000 +0100
+++ hplip-3.20.3/base/validation.py 2020-04-07 08:45:46.657132415 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# (c) Copyright 2015 HP Development Company, L.P.
@@ -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 = ['pool.sks-keyservers.net',
+ 'keyserver.ubuntu.com',
+ 'sks-keyservers.net', '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_Verifica
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)

View file

@ -1,14 +0,0 @@
diff -up hplip-3.14.6/scan.py.lineart hplip-3.14.6/scan.py
--- hplip-3.14.6/scan.py.lineart 2014-07-23 12:30:52.361517852 +0100
+++ hplip-3.14.6/scan.py 2014-07-23 12:32:17.052940000 +0100
@@ -977,8 +977,8 @@ try:
try:
pixels_per_line = bytes_per_line * 8 # Calculation of pixels_per_line for Lineart must be 8 time of bytes_per_line
# Otherwise, scanned image will be corrupted (slanted)
- im = Image.frombuffer('RGBA', (pixels_per_line, lines), buffer.read(),
- 'raw', 'RGBA', 0, 1).convert('L')
+ im = Image.frombuffer('1', (pixels_per_line, lines), buffer.read(),
+ 'raw', '1', 0, 1).convert('L')
except ValueError:
log.error("Did not read enough data from scanner (I/O Error?)")
sys.exit(1)

13
hplip-locale-format.patch Normal file
View file

@ -0,0 +1,13 @@
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):

View file

@ -1,18 +1,18 @@
diff -up hplip-3.21.2/prnt/hpcups/HPCupsFilter.cpp.logdir hplip-3.21.2/prnt/hpcups/HPCupsFilter.cpp
--- hplip-3.21.2/prnt/hpcups/HPCupsFilter.cpp.logdir 2021-02-19 07:46:48.334843864 +0100
+++ hplip-3.21.2/prnt/hpcups/HPCupsFilter.cpp 2021-02-19 07:48:18.052963216 +0100
@@ -656,7 +656,7 @@ int HPCupsFilter::processRasterData(cups
diff -up hplip-3.21.12/prnt/hpcups/HPCupsFilter.cpp.logdir hplip-3.21.12/prnt/hpcups/HPCupsFilter.cpp
--- hplip-3.21.12/prnt/hpcups/HPCupsFilter.cpp.logdir 2022-01-12 11:27:25.509348511 +0100
+++ hplip-3.21.12/prnt/hpcups/HPCupsFilter.cpp 2022-01-12 11:29:11.507661838 +0100
@@ -669,7 +669,7 @@ int HPCupsFilter::processRasterData(cups
char hpPreProcessedRasterFile[MAX_FILE_PATH_LEN]; //temp file needed to store raster data with swaped pages.
- sprintf(hpPreProcessedRasterFile, "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name);
+ snprintf(hpPreProcessedRasterFile, sizeof (hpPreProcessedRasterFile), "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name);
image_processor_t* imageProcessor=NULL;
IMAGE_PROCESSOR_ERROR result;
diff -up hplip-3.21.2/prnt/hpcups/SystemServices.cpp.logdir hplip-3.21.2/prnt/hpcups/SystemServices.cpp
--- hplip-3.21.2/prnt/hpcups/SystemServices.cpp.logdir 2021-02-15 00:55:21.000000000 +0100
+++ hplip-3.21.2/prnt/hpcups/SystemServices.cpp 2021-02-19 07:46:48.334843864 +0100
#ifndef DISABLE_IMAGEPROCESSOR
image_processor_t* imageProcessor=NULL;
IMAGE_PROCESSOR_ERROR result;
diff -up hplip-3.21.12/prnt/hpcups/SystemServices.cpp.logdir hplip-3.21.12/prnt/hpcups/SystemServices.cpp
--- hplip-3.21.12/prnt/hpcups/SystemServices.cpp.logdir 2021-12-13 10:07:36.000000000 +0100
+++ hplip-3.21.12/prnt/hpcups/SystemServices.cpp 2022-01-12 11:27:25.509348511 +0100
@@ -38,7 +38,7 @@ SystemServices::SystemServices(int iLogL
if (iLogLevel & SAVE_OUT_FILE)
{

View file

@ -1,25 +1,25 @@
diff -up hplip-3.20.6/cups_drv.inc.missing-drivers hplip-3.20.6/cups_drv.inc
--- hplip-3.20.6/cups_drv.inc.missing-drivers 2020-06-09 13:23:14.000000000 +0200
+++ hplip-3.20.6/cups_drv.inc 2020-06-17 13:49:39.110952720 +0200
@@ -407,6 +407,7 @@ cups_ppd_printers = \
diff -up hplip-3.22.2/cups_drv.inc.missing-drivers hplip-3.22.2/cups_drv.inc
--- hplip-3.22.2/cups_drv.inc.missing-drivers 2022-02-23 08:42:29.000000000 +0100
+++ hplip-3.22.2/cups_drv.inc 2022-03-10 09:11:00.337315604 +0100
@@ -411,6 +411,7 @@ cups_ppd_printers = \
ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \
ppd/hpcups/hp-laserjet_cp1025.ppd.gz \
ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \
+ ppd/hpcups/hp-laserjet_cp_1025nw.ppd.gz \
ppd/hpcups/hp-laserjet_m1005.ppd.gz \
ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \
ppd/hpcups/hp-laserjet_m1120_mfp.ppd.gz \
@@ -520,6 +521,7 @@ cups_ppd_printers = \
ppd/hpcups/hp-laserjet_m109-m112.ppd.gz \
@@ -527,6 +528,7 @@ cups_ppd_printers = \
ppd/hpcups/hp-laserjet_professional_p1607dn.ppd.gz \
ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \
ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \
+ ppd/hpcups/hp-laserjet_professional_p1102w.ppd.gz \
ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \
ppd/hpcups/hp-mopier_240-pcl3.ppd.gz \
ppd/hpcups/hp-mopier_320-pcl3.ppd.gz \
diff -up hplip-3.20.6/data/models/models.dat.missing-drivers hplip-3.20.6/data/models/models.dat
--- hplip-3.20.6/data/models/models.dat.missing-drivers 2020-06-17 13:49:39.080953000 +0200
+++ hplip-3.20.6/data/models/models.dat 2020-06-17 13:49:39.120952626 +0200
ppd/hpcups/hp-laserjet_tank_1020.ppd.gz \
ppd/hpcups/hp-laserjet_tank_150x.ppd.gz \
diff -up hplip-3.22.2/data/models/models.dat.missing-drivers hplip-3.22.2/data/models/models.dat
--- hplip-3.22.2/data/models/models.dat.missing-drivers 2022-03-10 09:10:13.601066235 +0100
+++ hplip-3.22.2/data/models/models.dat 2022-03-10 09:10:13.622066347 +0100
@@ -2104,7 +2104,7 @@ usb-pid=411
usb-vid=3f0
wifi-config=0
@ -532,45 +532,45 @@ diff -up hplip-3.20.6/data/models/models.dat.missing-drivers hplip-3.20.6/data/m
[hp_laserjet_professional_p1102]
align-type=0
clean-type=0
diff -up hplip-3.20.6/Makefile.in.missing-drivers hplip-3.20.6/Makefile.in
--- hplip-3.20.6/Makefile.in.missing-drivers 2020-06-09 13:23:20.000000000 +0200
+++ hplip-3.20.6/Makefile.in 2020-06-17 13:49:39.110952720 +0200
@@ -1571,6 +1571,7 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-lase
diff -up hplip-3.22.2/Makefile.in.missing-drivers hplip-3.22.2/Makefile.in
--- hplip-3.22.2/Makefile.in.missing-drivers 2022-02-23 08:42:31.000000000 +0100
+++ hplip-3.22.2/Makefile.in 2022-03-10 09:11:45.915558795 +0100
@@ -1613,6 +1613,7 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-lase
ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \
ppd/hpcups/hp-laserjet_cp1025.ppd.gz \
ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \
+ ppd/hpcups/hp-laserjet_cp_1025nw.ppd.gz \
ppd/hpcups/hp-laserjet_m1005.ppd.gz \
ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \
ppd/hpcups/hp-laserjet_m1120_mfp.ppd.gz \
@@ -1685,6 +1686,7 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-lase
ppd/hpcups/hp-laserjet_m109-m112.ppd.gz \
@@ -1729,6 +1730,7 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-lase
ppd/hpcups/hp-laserjet_professional_p1607dn.ppd.gz \
ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \
ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \
ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \
+ ppd/hpcups/hp-laserjet_professional_p1102w.ppd.gz \
ppd/hpcups/hp-mopier_240-pcl3.ppd.gz \
ppd/hpcups/hp-mopier_320-pcl3.ppd.gz \
ppd/hpcups/hp-neverstop_laser_100x.ppd.gz \
@@ -3961,6 +3963,7 @@ dist_unrel_DATA =
ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \
ppd/hpcups/hp-laserjet_tank_1020.ppd.gz \
ppd/hpcups/hp-laserjet_tank_150x.ppd.gz \
@@ -4090,6 +4092,7 @@ dist_unrel_DATA =
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp1025.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \
+@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp_1025nw.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m1005.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m1120_mfp.ppd.gz \
@@ -4074,6 +4077,7 @@ dist_unrel_DATA =
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m109-m112.ppd.gz \
@@ -4206,6 +4209,7 @@ dist_unrel_DATA =
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1607dn.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \
+@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1102w.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-mopier_240-pcl3.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-mopier_320-pcl3.ppd.gz \
diff -up hplip-3.20.6/prnt/drv/hpcups.drv.in.missing-drivers hplip-3.20.6/prnt/drv/hpcups.drv.in
--- hplip-3.20.6/prnt/drv/hpcups.drv.in.missing-drivers 2020-06-17 13:49:39.009953663 +0200
+++ hplip-3.20.6/prnt/drv/hpcups.drv.in 2020-06-17 13:51:49.576733820 +0200
@@ -22319,6 +22319,14 @@ Group "RLT/HP Real Life Technologies"
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_tank_1020.ppd.gz \
@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_tank_150x.ppd.gz \
diff -up hplip-3.22.2/prnt/drv/hpcups.drv.in.missing-drivers hplip-3.22.2/prnt/drv/hpcups.drv.in
--- hplip-3.22.2/prnt/drv/hpcups.drv.in.missing-drivers 2022-03-10 09:10:13.554065984 +0100
+++ hplip-3.22.2/prnt/drv/hpcups.drv.in 2022-03-10 09:10:13.629066384 +0100
@@ -22693,6 +22693,14 @@ Group "RLT/HP Real Life Technologies"
Attribute "Product" "" "(HP LaserJet Professional p1102s Printer)"
}
{
@ -585,7 +585,7 @@ diff -up hplip-3.20.6/prnt/drv/hpcups.drv.in.missing-drivers hplip-3.20.6/prnt/d
ModelName "HP LaserJet Professional p1106"
Attribute "NickName" "" "HP LaserJet Professional p1106, hpcups $Version"
Attribute "ShortNickName" "" "HP LJ Pro p1106 hpijs"
@@ -22752,6 +22760,14 @@ Group "RLT/HP Real Life Technologies"
@@ -23126,6 +23134,14 @@ Group "RLT/HP Real Life Technologies"
PCFileName "hp-laserjet_cp1025nw.ppd"
Attribute "Product" "" "(HP LaserJet Pro cp1025nw Color Printer Series)"
}

View file

@ -1,9 +1,8 @@
diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py
index 4d7c1b8..1af8d85 100755
--- a/installer/pluginhandler.py
+++ b/installer/pluginhandler.py
@@ -164,7 +164,7 @@ class PluginHandle(object):
for src, trg, link in copies:
diff -up hplip-3.21.12/installer/pluginhandler.py.missing-links hplip-3.21.12/installer/pluginhandler.py
--- hplip-3.21.12/installer/pluginhandler.py.missing-links 2022-01-12 16:55:39.761934879 +0100
+++ hplip-3.21.12/installer/pluginhandler.py 2022-01-12 17:22:33.367435334 +0100
@@ -167,7 +167,7 @@ class PluginHandle(object):
continue
if link != "":
if not utils.check_library(link):
- self.__plugin_state = PLUGIN_FILES_CORRUPTED

View file

@ -0,0 +1,108 @@
diff --git a/scan/sane/escl.c b/scan/sane/escl.c
index 9fbbcaf..bc9e0b5 100644
--- a/scan/sane/escl.c
+++ b/scan/sane/escl.c
@@ -37,18 +37,12 @@ static int bb_load(struct escl_session *ps, const char *so)
int stat=1;
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- {
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- goto bugout;
- }
+ if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
+ goto bugout;
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
- if ((ps->math_handle = load_library("libm.so")) == NULL)
- {
- if ((ps->math_handle = load_library("libm.so.6")) == NULL)
- goto bugout;
- }
+ if ((ps->math_handle = load_library("libm.so.6")) == NULL)
+ goto bugout;
if ((ps->bb_handle = load_plugin_library(UTILS_SCAN_PLUGIN_LIBRARY, so)) == NULL)
{
SendScanEvent(ps->uri, EVENT_PLUGIN_FAIL);
diff --git a/scan/sane/marvell.c b/scan/sane/marvell.c
index 236f7c9..793104c 100644
--- a/scan/sane/marvell.c
+++ b/scan/sane/marvell.c
@@ -60,18 +60,12 @@ static int bb_load(struct marvell_session *ps, const char *so)
int stat=1;
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
- if ((ps->hpmud_handle = load_library("libhpmud.so")) == NULL)
- {
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- goto bugout;
- }
+ if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
+ goto bugout;
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
- if ((ps->math_handle = load_library("libm.so")) == NULL)
- {
- if ((ps->math_handle = load_library("libm.so.6")) == NULL)
- goto bugout;
- }
+ if ((ps->math_handle = load_library("libm.so.6")) == NULL)
+ goto bugout;
if ((ps->bb_handle = load_plugin_library(UTILS_SCAN_PLUGIN_LIBRARY, so)) == NULL)
{
diff --git a/scan/sane/soap.c b/scan/sane/soap.c
index 0d22e52..dcd8c7c 100644
--- a/scan/sane/soap.c
+++ b/scan/sane/soap.c
@@ -68,18 +68,12 @@ static int bb_load(struct soap_session *ps, const char *so)
int stat=1;
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
- if ((ps->hpmud_handle = load_library("libhpmud.so")) == NULL)
- {
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- goto bugout;
- }
+ if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
+ goto bugout;
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
- if ((ps->math_handle = load_library("libm.so")) == NULL)
- {
- if ((ps->math_handle = load_library("libm.so.6")) == NULL)
- goto bugout;
- }
+ if ((ps->math_handle = load_library("libm.so.6")) == NULL)
+ goto bugout;
if ((ps->bb_handle = load_plugin_library(UTILS_SCAN_PLUGIN_LIBRARY, so)) == NULL)
{
diff --git a/scan/sane/soapht.c b/scan/sane/soapht.c
index 139100d..74e8391 100644
--- a/scan/sane/soapht.c
+++ b/scan/sane/soapht.c
@@ -62,18 +62,12 @@ static int bb_load(struct soap_session *ps, const char *so)
int stat=1;
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- {
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- goto bugout;
- }
+ if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
+ goto bugout;
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
- if ((ps->math_handle = load_library("libm.so")) == NULL)
- {
- if ((ps->math_handle = load_library("libm.so.6")) == NULL)
- goto bugout;
- }
+ if ((ps->math_handle = load_library("libm.so.6")) == NULL)
+ goto bugout;
if ((ps->bb_handle = load_plugin_library(UTILS_SCAN_PLUGIN_LIBRARY, so)) == NULL)
{

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)

View file

@ -1,7 +1,7 @@
diff -up hplip-3.17.4/Makefile.am.no-ernie hplip-3.17.4/Makefile.am
--- hplip-3.17.4/Makefile.am.no-ernie 2017-04-26 16:28:35.398099978 +0200
+++ hplip-3.17.4/Makefile.am 2017-04-26 16:29:02.235879035 +0200
@@ -519,7 +519,7 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilte
diff -up hplip-3.23.3/Makefile.am.no-ernie hplip-3.23.3/Makefile.am
--- hplip-3.23.3/Makefile.am.no-ernie 2023-05-29 13:15:58.008610471 +0200
+++ hplip-3.23.3/Makefile.am 2023-05-29 13:15:58.134609689 +0200
@@ -562,7 +562,7 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilte
prnt/hpcups/Mode2.cpp prnt/hpcups/Mode2.h prnt/hpcups/Mode3.cpp prnt/hpcups/Mode3.h \
prnt/hpcups/Mode9.cpp prnt/hpcups/Mode9.h prnt/hpcups/Mode10.cpp prnt/hpcups/Mode10.h \
prnt/hpcups/ModeDeltaPlus.cpp prnt/hpcups/ModeDeltaPlus.h prnt/hpcups/ModeJbig.cpp prnt/hpcups/ModeJbig.h \
@ -10,9 +10,9 @@ diff -up hplip-3.17.4/Makefile.am.no-ernie hplip-3.17.4/Makefile.am
prnt/hpcups/Encapsulator.cpp prnt/hpcups/Encapsulator.h prnt/hpcups/Pcl3.cpp prnt/hpcups/Pcl3.h \
prnt/hpcups/Pcl3Gui.cpp prnt/hpcups/Pcl3Gui.h prnt/hpcups/Pcl3Gui2.cpp prnt/hpcups/Pcl3Gui2.h \
prnt/hpcups/LJMono.cpp prnt/hpcups/LJMono.h prnt/hpcups/LJColor.cpp prnt/hpcups/LJColor.h \
diff -up hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp
--- hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp.no-ernie 2017-04-26 16:28:39.525066003 +0200
+++ hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp 2017-04-26 16:29:46.987510614 +0200
diff -up hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp
--- hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp.no-ernie 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp 2023-05-29 13:17:02.468210361 +0200
@@ -30,7 +30,6 @@
#include "CommonDefinitions.h"
@ -26,7 +26,7 @@ diff -up hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.17.4/prnt/hpcups
{
speed_mech_enabled = true;
- m_run_ernie_filter = true;
crd_type = eCrd_both;
crd_type = eCrd_color_only; // pcl3 printers support RGB only ref:hplip-1701
strcpy(m_szLanguage, "PCL3GUI");
}
@@ -59,21 +57,6 @@ DRIVER_ERROR Pcl3Gui2::Configure(Pipelin
@ -51,9 +51,9 @@ diff -up hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.17.4/prnt/hpcups
if (crd_type != eCrd_black_only) {
Mode10 *pMode10;
diff -up hplip-3.17.4/prnt/hpcups/Pcl3Gui2.h.no-ernie hplip-3.17.4/prnt/hpcups/Pcl3Gui2.h
--- hplip-3.17.4/prnt/hpcups/Pcl3Gui2.h.no-ernie 2017-04-26 16:28:43.277035115 +0200
+++ hplip-3.17.4/prnt/hpcups/Pcl3Gui2.h 2017-04-26 16:30:05.826355522 +0200
diff -up hplip-3.23.3/prnt/hpcups/Pcl3Gui2.h.no-ernie hplip-3.23.3/prnt/hpcups/Pcl3Gui2.h
--- hplip-3.23.3/prnt/hpcups/Pcl3Gui2.h.no-ernie 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/prnt/hpcups/Pcl3Gui2.h 2023-05-29 13:15:58.134609689 +0200
@@ -60,7 +60,6 @@ private:
DRIVER_ERROR encapsulateRaster(BYTE *input_raster, unsigned int num_bytes, COLORTYPE c_type);
bool speed_mech_enabled;

View file

@ -0,0 +1,18 @@
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
-pcardext_la_CFLAGS = -I$(PYTHONINCLUDEDIR)
-
# prnt
prntdir = $(hplipdir)/prnt
dist_prnt_DATA = prnt/cups.py prnt/__init__.py prnt/ldl.py prnt/pcl.py prnt/colorcal.py

58
hplip-plugin-curl.patch Normal file
View file

@ -0,0 +1,58 @@
diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py
index 56683fb..031ceec 100755
--- a/installer/pluginhandler.py
+++ b/installer/pluginhandler.py
@@ -185,14 +185,16 @@ class PluginHandle(object):
if self.__plugin_conf_file.startswith('file://'):
status, filename = utils.download_from_network(self.__plugin_conf_file, local_conf, True)
else:
- wget = utils.which("wget", True)
- if wget:
- status, output = utils.run("%s --tries=3 --timeout=60 --output-document=%s %s --cache=off" %(wget, local_conf, self.__plugin_conf_file))
+ curl = utils.which("curl", True)
+ if curl:
+ cmd = "%s --retry 3 --max-time 10 --output %s --location %s" %(curl, local_conf, self.__plugin_conf_file)
+ log.debug(cmd)
+ status, output = utils.run(cmd)
if status:
log.error("Plugin download failed with error code = %d" %status)
return status, url, check_sum
else:
- log.error("Please install wget package to download the plugin.")
+ log.error("Please install curl package to download the plugin.")
return status, url, check_sum
except IOError as e:
log.error("I/O Error: %s" % e.strerror)
@@ -284,18 +284,18 @@ class PluginHandle(object):
if src.startswith('file://'):
status, filename = utils.download_from_network(src, plugin_file, True)
else:
- wget = utils.which("wget", True)
- if wget:
- cmd = "%s --cache=off -P %s %s" % (wget,self.__plugin_path,src)
+ curl = utils.which("curl", True)
+ if curl:
+ cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl,self.__plugin_path,src)
log.debug(cmd)
status, output = utils.run(cmd)
- log.debug("wget returned: %d" % status)
+ log.debug("curl returned: %d" % status)
#Check whether plugin is accessible in Openprinting.org website otherwise dowload plugin from alternate location.
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 --cache=off -P %s %s" % (wget,self.__plugin_path,src)
+ cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl,self.__plugin_path,src)
log.debug(cmd)
status, output = utils.run(cmd)
@@ -323,7 +323,7 @@ class PluginHandle(object):
if digsig_url.startswith('file://'):
status, filename = utils.download_from_network(digsig_url, digsig_file, True)
else:
- cmd = "%s --cache=off -P %s %s" % (wget,self.__plugin_path,digsig_url)
+ cmd = "%s --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:

28
hplip-plugin-script.patch Normal file
View file

@ -0,0 +1,28 @@
diff --git a/Makefile.am b/Makefile.am
index bb4195c..ddac16a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -680,6 +680,12 @@ if HPLIP_CLASS_DRIVER
filterdir=$(cupsfilterdir)
printpluginsdir=$(cupsfilterdir)
+#
+# HP Plugin
+#
+
+pkgplugindir=$(bindir)
+pkgplugin_DATA=hp-plugin
dist_filter_DATA = hpcups hpps dat2drv
dist_printplugins_DATA = prnt/plugins/hbpl1-arm32.so prnt/plugins/hbpl1-arm64.so prnt/plugins/hbpl1-x86_32.so prnt/plugins/hbpl1-x86_64.so prnt/plugins/lj-arm32.so prnt/plugins/lj-arm64.so prnt/plugins/lj-x86_32.so prnt/plugins/lj-x86_64.so
diff --git a/configure.in b/configure.in
index f8f1a28..7fa5d12 100644
--- a/configure.in
+++ b/configure.in
@@ -801,5 +801,5 @@ AC_SUBST(udev_sysfs_rules)
AC_SUBST(epm_class_driver)
AC_SUBST(epm_class_install)
-AC_CONFIG_FILES(Makefile hplip.conf hplip.desktop hp-uiscan.desktop hplip-systray.desktop prnt/drv/hpijs.drv prnt/drv/hpcups.drv hplip.list data/policykit/com.hp.hplip.service)
+AC_CONFIG_FILES(Makefile hplip.conf hplip.desktop hp-uiscan.desktop hplip-systray.desktop prnt/drv/hpijs.drv prnt/drv/hpcups.drv hplip.list data/policykit/com.hp.hplip.service hp-plugin)
AC_OUTPUT

41
hplip-plugin-stdout.patch Normal file
View file

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

View file

@ -0,0 +1,26 @@
diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py
index 1af8d85..5c498ab 100755
--- a/installer/pluginhandler.py
+++ b/installer/pluginhandler.py
@@ -403,7 +403,20 @@ class PluginHandle(object):
log.error("Target file %s does not exist. File copy failed." % trg)
continue
else:
- os.chmod(trg, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
+ if trg == '/etc/udev/rules.d/S99-2000S1.rules' or \
+ trg == '/etc/udev/rules.d/40-libsane.rules':
+ os.chmod(trg, 0o644)
+ with open(trg, 'r') as udev_f:
+ content = udev_f.read()
+
+ content = content.replace('libsane_rules_end', 'libsane_usb_rules_end')
+ content = content.replace('GROUP="scanner", ', '')
+
+ with open(trg, 'w') as udev_f:
+ udev_f.write(content)
+
+ else:
+ os.chmod(trg, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
if link:
if os.path.exists(link):

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

@ -57,8 +57,8 @@ diff -up hplip-3.15.2/fax/filters/pstotiff.pstotiff-is-rubbish hplip-3.15.2/fax/
+TMPFILE=`mktemp /tmp/pstotiff.XXXXXX` || exit 1
+gs -I/usr/share/cups/fonts -sDEVICE=tiffg4 -dMaxStripSize=0 -r204x196 \
+ -dNOPAUSE -dBATCH -dSAFER -dPARANOIDSAFER \
+ -dSHORTERRORS -dWRITESYSTEMDICT -dGHOSTSCRIPT \
+ -sstdout=%stderr -sOutputFile="$TMPFILE" "$IN"
+ -dSHORTERRORS -dGHOSTSCRIPT -sstdout=%stderr \
+ -sOutputFile="$TMPFILE" "$IN"
+RET=$?
+cat "$TMPFILE"
+rm -f "$TMPFILE"

View file

@ -1,25 +0,0 @@
#!/bin/sh
if [ "$1" == "-h" -o "$1" == "--help" ]
then
echo "Usage: ./hplip-rebase.sh X.Y.Z"
echo " X.Y.Z - new hplip version"
exit 0
fi
wget -O hplip-plugin.run http://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-$1-plugin.run
if [ $? -gt 0 ]
then
echo "Error while downloading plugin. Check version passed by argument or internet connection. For usage run script with -h or --help argument."
rm hplip-plugin.run
exit 1
fi
rm hplip-plugin.run
fedpkg mockbuild
if [ $? -gt 0 ]
then
echo "Error during mockbuild."
exit 1
fi
exit 0

32
hplip-repack.sh Executable file
View file

@ -0,0 +1,32 @@
#!/usr/bin/bash
VERSION=$1
if [ "${VERSION:="*"}" == "*" ]
then
echo "Define a version of hplip as an argument."
exit 1
fi
# extract the original tarball
tar -xaf hplip-$VERSION.tar.gz || exit 1
# remove unwanted files - license-related ones reported here https://bugs.launchpad.net/hplip/+bug/2028938
rm hplip-$VERSION/locatedriver
# compress into a new tarball
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
# check whether the file is sane
file --mime hplip-plugin.run | grep 'x-shellscript' || exit 1
echo "hplip-${VERSION}-repack.tar.gz is prepared for uploading..."
exit 0
# upload a new source tarball
#fedpkg new-sources hplip-$VERSION-repack.tar.gz || exit 1

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,21 @@
diff --git a/scan/sane/orblite.c b/scan/sane/orblite.c
index ba86640..2eb7aba 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"
@@ -195,7 +196,7 @@ bugout:
static int bb_unload(SANE_THandle ps)
{
- _DBG("Calling orblite bb_unload: \n");
+ DBG("Calling orblite bb_unload: \n");
if (ps->bb_handle)
{
dlclose(ps->bb_handle);

37
hplip-scan-size.patch Normal file
View file

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

View file

@ -0,0 +1,16 @@
Switch the whole libsane-hpaio to get proper definition of strcasestr() used in
sclpml.c
diff --git a/Makefile.am b/Makefile.am
index 15d953a..7105f74 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -73,7 +73,7 @@ endif
# The following is a interlibrary dependency that must be compiled first.
libsane_hpaio_la_LIBADD = libhpip.la libhpmud.la libhpipp.la $(DBUS_LIBS) -lcups -ldl
#libsane_hpaio_la_CFLAGS = -DWITH_NONAMESPACES -DSOAP_DEBUG
-libsane_hpaio_la_CFLAGS = $(DBUS_CFLAGS) -Iprotocol
+libsane_hpaio_la_CFLAGS = $(DBUS_CFLAGS) -Iprotocol -D_GNU_SOURCE
if NETWORK_BUILD
libsane_hpaio_la_LIBADD += libhpdiscovery.la

View file

@ -1,7 +1,7 @@
diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp
--- hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy 2015-01-21 16:52:44.066497631 +0000
+++ hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp 2015-01-21 16:59:46.216434376 +0000
@@ -203,6 +203,7 @@ HPCupsFilter::HPCupsFilter() : m_pPrinte
diff -up hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp
--- hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy 2025-04-11 10:16:00.438702562 +0200
+++ hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp 2025-04-11 10:21:25.088096376 +0200
@@ -211,6 +211,7 @@ HPCupsFilter::HPCupsFilter() : m_pPrinte
adj_k_width = 0;
black_raster = NULL;
color_raster = NULL;
@ -9,7 +9,7 @@ diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/h
}
HPCupsFilter::~HPCupsFilter()
@@ -384,9 +385,9 @@ DRIVER_ERROR HPCupsFilter::startPage (cu
@@ -428,15 +429,15 @@ DRIVER_ERROR HPCupsFilter::startPage (cu
m_JA.media_attributes.physical_height = cups_header->PageSize[1];
m_JA.media_attributes.printable_width = ((cups_header->ImagingBoundingBox[2]-cups_header->ImagingBoundingBox[0]) * horz_res) / 72;
m_JA.media_attributes.printable_height = ((cups_header->ImagingBoundingBox[3]-cups_header->ImagingBoundingBox[1]) * vert_res) / 72;
@ -20,11 +20,18 @@ diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/h
+ strncpy(m_JA.media_attributes.MediaTypeName, cups_header->MediaType, sizeof(m_JA.media_attributes.MediaTypeName)-1);
+ strncpy(m_JA.quality_attributes.hbpl1_print_quality, cups_header->OutputType, sizeof(m_JA.quality_attributes.hbpl1_print_quality)-1);
m_JA.color_mode = cups_header->cupsRowStep;
if (m_JA.media_attributes.PageSizeName[0] == '\0') {
// Copy the value of cups_header->cupsPageSizeName if it isnot null
if (cups_header->cupsPageSizeName != nullptr) {
- strncpy(m_JA.media_attributes.PageSizeName, cups_header->cupsPageSizeName, sizeof(m_JA.media_attributes.PageSizeName));
+ strncpy(m_JA.media_attributes.PageSizeName, cups_header->cupsPageSizeName, sizeof(m_JA.media_attributes.PageSizeName) - 1);
}
}
}
else {
diff -up hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpijs.cpp
--- hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy 2015-01-21 17:00:03.225512410 +0000
+++ hplip-3.14.10/prnt/hpijs/hpijs.cpp 2015-01-21 17:04:59.308870785 +0000
diff -up hplip-3.25.2/prnt/hpijs/hpijs.cpp.strncpy hplip-3.25.2/prnt/hpijs/hpijs.cpp
--- hplip-3.25.2/prnt/hpijs/hpijs.cpp.strncpy 2025-04-11 10:16:00.434453252 +0200
+++ hplip-3.25.2/prnt/hpijs/hpijs.cpp 2025-04-11 10:16:00.501228045 +0200
@@ -605,7 +605,7 @@ int main (int argc, char *argv[], char *
}
@ -34,9 +41,9 @@ diff -up hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpi
#ifdef HAVE_LIBHPIP
char *pDev;
diff -up hplip-3.14.10/prnt/hpijs/hpijsfax.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpijsfax.cpp
--- hplip-3.14.10/prnt/hpijs/hpijsfax.cpp.strncpy 2015-01-21 17:05:06.585904171 +0000
+++ hplip-3.14.10/prnt/hpijs/hpijsfax.cpp 2015-01-21 17:05:15.787946389 +0000
diff -up hplip-3.25.2/prnt/hpijs/hpijsfax.cpp.strncpy hplip-3.25.2/prnt/hpijs/hpijsfax.cpp
--- hplip-3.25.2/prnt/hpijs/hpijsfax.cpp.strncpy 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/prnt/hpijs/hpijsfax.cpp 2025-04-11 10:16:00.501403513 +0200
@@ -282,7 +282,7 @@ int hpijsFaxServer (int argc, char **arg
char user_name[32]={0,};

View file

@ -1,14 +0,0 @@
diff --git a/base/module.py b/base/module.py
index 04ac5b8..56be168 100644
--- a/base/module.py
+++ b/base/module.py
@@ -301,6 +301,9 @@ class Module(object):
if UI_TOOLKIT_QT4 in self.supported_ui_toolkits and UI_TOOLKIT_QT4 in self.installed_ui_toolkits:
long_params.extend(['qt4', 'use-qt4'])
+ if UI_TOOLKIT_QT5 in self.supported_ui_toolkits and UI_TOOLKIT_QT5 in self.installed_ui_toolkits:
+ long_params.extend(['qt5', 'use-qt5'])
+
if extra_params is not None:
params = ''.join([params, extra_params])

View file

@ -1,93 +0,0 @@
diff --git a/copier/copier.py b/copier/copier.py
index a595baa..7794f48 100644
--- a/copier/copier.py
+++ b/copier/copier.py
@@ -73,13 +73,13 @@ class PMLCopyDevice(device.Device):
def isCopyActive(self):
if self.copy_thread is not None:
- return self.copy_thread.isAlive()
+ return self.copy_thread.is_alive()
else:
return False
def waitForCopyThread(self):
if self.copy_thread is not None and \
- self.copy_thread.isAlive():
+ self.copy_thread.is_alive():
self.copy_thread.join()
diff --git a/fax/fax.py b/fax/fax.py
index 3d69226..0878a64 100644
--- a/fax/fax.py
+++ b/fax/fax.py
@@ -478,13 +478,13 @@ class FaxDevice(device.Device):
def isSendFaxActive(self):
if self.send_fax_thread is not None:
- return self.send_fax_thread.isAlive()
+ return self.send_fax_thread.is_alive()
else:
return False
def waitForSendFaxThread(self):
if self.send_fax_thread is not None and \
- self.send_fax_thread.isAlive():
+ self.send_fax_thread.is_alive():
try:
self.send_fax_thread.join()
diff --git a/fax/pmlfax.py b/fax/pmlfax.py
index b68ff6a..b1020d0 100644
--- a/fax/pmlfax.py
+++ b/fax/pmlfax.py
@@ -179,13 +179,13 @@ class PMLFaxDevice(FaxDevice):
def isUploadLogActive(self):
if self.upload_log_thread is not None:
- return self.upload_log_thread.isAlive()
+ return self.upload_log_thread.is_alive()
else:
return False
def waitForUploadLogThread(self):
if self.upload_log_thread is not None and \
- self.upload_log_thread.isAlive():
+ self.upload_log_thread.is_alive():
self.upload_log_thread.join()
diff --git a/scan/sane.py b/scan/sane.py
index b6c4acd..e8f8db8 100755
--- a/scan/sane.py
+++ b/scan/sane.py
@@ -378,14 +378,14 @@ class ScanDevice:
def isScanActive(self):
if self.scan_thread is not None:
- return self.scan_thread.isAlive() and self.scan_thread.scan_active
+ return self.scan_thread.is_alive() and self.scan_thread.scan_active
else:
return False
def waitForScanDone(self):
if self.scan_thread is not None and \
- self.scan_thread.isAlive() and \
+ self.scan_thread.is_alive() and \
self.scan_thread.scan_active:
try:
@@ -398,9 +398,9 @@ class ScanDevice:
#time.sleep(0.5)
if self.scan_thread is not None:
while True:
- #print self.scan_thread.isAlive()
+ #print self.scan_thread.is_alive()
#print self.scan_thread.scan_active
- if self.scan_thread.isAlive() and \
+ if self.scan_thread.is_alive() and \
self.scan_thread.scan_active:
return

View file

@ -1,12 +0,0 @@
diff --git a/prnt/hpcups/CommonDefinitions.h b/prnt/hpcups/CommonDefinitions.h
index 082aec9..86763d4 100644
--- a/prnt/hpcups/CommonDefinitions.h
+++ b/prnt/hpcups/CommonDefinitions.h
@@ -48,7 +48,6 @@
#include <syslog.h>
#include <assert.h>
#include <time.h>
-#include <sys/timeb.h>
#include <string.h>
#ifndef _GNU_SOURCE

View file

@ -27,7 +27,7 @@ index 98437a3..9b8813b 100644
+ import ui4
+ except ImportError:
+ try:
+ import ui5
+ import ui5.setupdialog
+ except ImportError as e:
+ log.warn(e)
+ return False
@ -58,7 +58,7 @@ index 98437a3..9b8813b 100644
- return False
+ try:
+ import PyQt5
+ import ui5
+ import ui5.setupdialog
+ except ImportError:
+ log.debug('GUI not available.')
+ return False

123
hplip-use-raw-strings.patch Normal file
View file

@ -0,0 +1,123 @@
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
@@ -46,7 +46,7 @@ HPPS = 3
HPOTHER = 4
DEVICE_URI_PATTERN = re.compile(r"""(.*):/(.*?)/(\S*?)\?(?:serial=(\S*)|device=(\S*)|ip=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^&]*)|zc=(\S+))(?:&port=(\d))?""", re.I)
-NICKNAME_PATTERN = re.compile(b'''\*NickName:\s*\"(.*)"''', re.MULTILINE)
+NICKNAME_PATTERN = re.compile(r'''\*NickName:\s*\"(.*)"''', re.MULTILINE)
NET_PATTERN = re.compile(r"""(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})""")
NET_ZC_PATTERN = re.compile(r'''zc=(.*)''',re.IGNORECASE)
NET_OTHER_PATTERN = re.compile(r'''(.*)://(.*)''',re.IGNORECASE)
@@ -149,7 +149,7 @@ def parseQueues(mode):
desc=''
else:
try:
- desc = to_string_utf8( NICKNAME_PATTERN.search(fileptr).group(1) )
+ desc = to_string_utf8( NICKNAME_PATTERN.search(fileptr.decode('utf-8')).group(1) )
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
@@ -627,7 +627,7 @@ class DependenciesCheck(object):
status, output = utils.run("%s -d03f0:" % lsusb)
if output:
- lsusb_pat = re.compile("""^Bus\s([0-9a-fA-F]{3,3})\sDevice\s([0-9a-fA-F]{3,3}):\sID\s([0-9a-fA-F]{4,4}):([0-9a-fA-F]{4,4})(.*)""", re.IGNORECASE)
+ lsusb_pat = re.compile(r"""^Bus\s([0-9a-fA-F]{3,3})\sDevice\s([0-9a-fA-F]{3,3}):\sID\s([0-9a-fA-F]{4,4}):([0-9a-fA-F]{4,4})(.*)""", re.IGNORECASE)
log.debug(output)
try:
hpmudext = utils.import_ext('hpmudext')
@@ -682,7 +682,7 @@ class DependenciesCheck(object):
out =''
for g in getfacl_out_list:
- if 'getfacl' not in g and '' is not g and 'file' not in g:
+ if 'getfacl' not in g and '' != g and 'file' not in g:
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
@@ -42,7 +42,7 @@ from base.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)
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
@@ -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),
utils.USAGE_OPTIONS,
- ("To specify the port on a multi-port JetDirect:", "-p<port> or --port=<port> (Valid values are 1\*, 2, and 3. \*default)", "option", False),
+ ("To specify the port on a multi-port JetDirect:", r"-p<port> or --port=<port> (Valid values are 1\*, 2, and 3. \*default)", "option", False),
("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
@@ -42,11 +42,11 @@ USAGE = [(__doc__, "", "name", True),
("Usage: %s [OPTIONS]" % __mod__, "", "summary", True),
utils.USAGE_OPTIONS,
("Bus to probe:", "-b<bus> or --bus=<bus>", "option", False),
- ("", "<bus>: cups, usb\*, net, bt, fw, par (\*default) (Note: bt and fw not supported in this release.)", "option", False),
+ ("", r"<bus>: cups, usb\*, net, bt, fw, par (\*default) (Note: bt and fw not supported in this release.)", "option", False),
("Set Time to Live (TTL):", "-t<ttl> or --ttl=<ttl> (Default is 4).", "option", False),
("Set timeout:", "-o<timeout in secs.> or --timeout=<timeout is secs.>", "option", False),
("Filter by functionality:", "-e<filter list> or --filter=<filter list>", "option", False),
- ("", "<filter list>: comma separated list of one or more of: scan, pcard, fax, copy, or none\*. (\*none is the default)", "option", False),
+ ("", r"<filter list>: comma separated list of one or more of: scan, pcard, fax, copy, or none\*. (\*none is the default)", "option", False),
("Search:", "-s<search re> or --search=<search re>", "option", False),
("", "<search re> must be a valid regular expression (not case sensitive)", "option", False),
("Network discovery method:", "-m<method> or --method=<method>: <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=<port> (Valid values are 1\*, 2, and 3. \*default)", "option", False),
+ ("To specify the port on a multi-port JetDirect:", r"--port=<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<printer> or --printer=<printer> (-i mode only)", "option", False),
("To specify a CUPS fax queue name:", "-f<fax> or --fax=<fax> (-i mode only)", "option", False),
- ("Type of queue(s) to install:", "-t<typelist> or --type=<typelist>. <typelist>: print*, fax\* (\*default) (-i mode only)", "option", False),
+ ("Type of queue(s) to install:", r"-t<typelist> or --type=<typelist>. <typelist>: print*, fax\* (\*default) (-i mode only)", "option", False),
("To specify the device URI to install:", "-d<device> or --device=<device> (--qt4 mode only)", "option", False),
("Remove printers or faxes instead of setting-up:", "-r or --rm or --remove", "option", False),
utils.USAGE_LANGUAGE,

View file

@ -1,12 +1,12 @@
diff -up hplip-3.19.6/ui5/wifisetupdialog.py.wifisetup-bad-call-fix hplip-3.19.6/ui5/wifisetupdialog.py
--- hplip-3.19.6/ui5/wifisetupdialog.py.wifisetup-bad-call-fix 2019-07-12 08:46:56.873167869 +0200
+++ hplip-3.19.6/ui5/wifisetupdialog.py 2019-07-12 08:49:36.813769803 +0200
@@ -570,7 +570,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog
try:
diff -up hplip-3.23.3/ui5/wifisetupdialog.py.wifisetup-bad-call-fix hplip-3.23.3/ui5/wifisetupdialog.py
--- hplip-3.23.3/ui5/wifisetupdialog.py.wifisetup-bad-call-fix 2023-05-29 13:45:35.830961640 +0200
+++ hplip-3.23.3/ui5/wifisetupdialog.py 2023-05-29 13:48:05.939993288 +0200
@@ -665,7 +665,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog
self.ip,_,addressmode, subnetmask, gateway, pridns, sec_dns= self.wifiObj.getIPConfiguration(self.dev, self.adapterName)
if self.ip == "0.0.0.0":
- self.ip, subnetmask, gateway, pri_dns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
+ self.ip, subnetmask, gateway, pridns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
if not self.wifiObj == CdmWifi:
- self.ip, subnetmask, gateway, pri_dns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
+ self.ip, subnetmask, gateway, pridns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
vsa_codes = self.wifiObj.getVSACodes(self.dev, self.adapterName)
ss_max, ss_min, ss_val, ss_dbm = self.wifiObj.getSignalStrength(self.dev, self.adapterName,self.network, self.adaptor_id)
self.hn = self.wifiObj.getHostname(self.dev)

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2014 Richard Hughes <richard@hughsie.com> -->
<component type="desktop-application">
<id>HP-hplip.desktop</id>
<component type="desktop">
<id>hplip.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0 and MIT and BSD-2-Clause</project_license>
<project_license>GPL-2.0+</project_license>
<name>HPLIP Graphic Tools</name>
<summary>HPLIP GUI tools and GUI part of other HPLIP tools</summary>
<description>

File diff suppressed because it is too large Load diff

37
plans.fmf Normal file
View file

@ -0,0 +1,37 @@
/tier1-internal:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/tier1/internal
/tier1-public:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/tier1/public
/tier2-tier3-internal:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/tier2-tier3/internal
/tier2-tier3-public:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/tier2-tier3/public
/others-internal:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/others/internal
/others-public:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/others/public

10
rpminspect.yaml Normal file
View file

@ -0,0 +1,10 @@
---
badfuncs:
allowed:
# printers usually do not live on networks which would require
# IPv6 due having too many hosts on one network, so it is not
# a priority to have IPv6 support.
# It is reported upstream at https://bugzilla.redhat.com/show_bug.cgi?id=2275938
/usr/lib*/libhpmud.so.*:
- gethostbyname
- inet_addr

View file

@ -1 +1 @@
SHA512 (hplip-3.21.2.tar.gz) = 73ba37275cfe34a58b81c9656514e15da67c1a69af5471ad132a1538d324efe640879cb7e60c359915607e41b63e653e7ae757661e553235f6e83e378ab46474
SHA512 (hplip-3.25.8-repack.tar.gz) = e4f82215e2753bee864e5ba643be2ce3566f1691638c35c74016279f92c872713d06e38a066d283f03f3e571d10c8ac2f1539bd32f6bafd1958641d96fe11059

View file

@ -1,30 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.10 (GNU/Linux)
mQGiBEsnpscRBACyclffkMVkXXdtY2qTT2+B6HN4hBoUxBwZBULyHFuSP9lsB7wK
16Hl5ZTu+oy+GegzzFRrHWxBLN9i67T0plNkqDJhWUrmXR7xvX+dFc+Qrl+uPR0i
CY1NMnWwnFh01YtYb9NAlb3bLn8RLBH8Zo60i7wfwdW9Wi1mgzmUT/UI9wCg7y6R
VmF4RjNWJ2WRdL/jVeAB8H0D/0xfePoYWrSGzOp7+Vl+xYo5TdSrzohUUnly6xla
UIKwlBCG/jpQqKH17803GpkFyh5FxG1Db7VWsciDv7flcBLPtn75gU2fPHXL+gnv
r1eJ+ugQwCl4/8d4iJ5TMXmHQOW2Pd0U47OmbZYNNgtA+lXhF8n8+6w3GRhqubLF
/9b/A/4wH37bv1shLhdLpP+9WYHc8z9+jmStVUFdAGoD/n6vOpBX+GQYaEY5Y8RS
Wf0DFhMF6CFYNZ2ngDyvPt53M2jU7hrxXIfs/b5bLMqG2et9M/avdEWGUKTsC7wu
0zeGtD07r9EA3WDIhxN9QEGZAq5Q3NSbedMHIVE4Ynq7VNCdsrQ0SFBMSVAgKEhQ
IExpbnV4IEltYWdpbmcgYW5kIFByaW50aW5nKSA8aHBsaXBAaHAuY29tPohgBBMR
AgAgBQJLJ6bHAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQc9dwzaWQR7n4
dQCghZgIpxuTC+GhiQIO0dK9wTlbMmoAoOB252fEOvf73v8Ya8qmN1GlmYiXuQIN
BEsnpscQCACEO/wh+X9Apok41vn+qby5YLvSuXNcub1iVSlsByv+28KQbbvXDNPh
LP9wdO9DmzfIGwarj0uLtn0h9UWTnEpXSZ0bKJnCYc7GZpUvcNyjIuSs69hK2rLd
38MSb1hoBaICLjZERUhe+ZGwlx7zvAIghj+ss1udwpc6PcdPNaimp+ck9/+eSpir
BZsWRDEyYZ8r0Tzh0vCMZG3AJZvm439gsze5ImvAt+xFluYRCHMAkXaYimXAipHd
Hudqu5B1/KNp3kRc68pDw/kzFSJ4bEdSW/3Qu5gJxb4y9XDTMipyFt1YZrP4sYJN
EMAjIllnMHqQsK4efdNY/JSk92wEjmN/AAQLB/42X5RSrDQc9k/2RdgbRUQPXAXF
YRySDMt4XfaQNAYiU2nQ1thxJuLzFLnp8VumzMD4tmsmBNmacVFTAMJyWZrum6eP
dvyczSBG0e+4t6e2YCGdA8hfxJYNHCEE0i6NI7FCu2OPDqgXKsyViql7vchQAAg3
N4ILBlcoO86JOCbugj+Yjp8mI2tzw2o3GEZLgHPD+t7ECFmeB6QypH02CXGTsTNQ
6qt99zr86urV8Ta39Q0A6pVV81fkXaGIg1eLX7LCE5g4lV9D/G6KXYWYju3EBz/t
eZRyrE3BrKM7MEqVUcgBwjIswBPDfJFW+H6B7Ma9RsT0efJgeruc712Z6cztiEkE
GBECAAkFAksnpscCGwwACgkQc9dwzaWQR7mkswCcD+QNKEcLN9XmWhlzJfwzjW3N
JgMAniNROBBXr37dCkmawTcagKSwhiUx
=2aUQ
-----END PGP PUBLIC KEY BLOCK-----