diff --git a/.fmf/version b/.fmf/version
deleted file mode 100644
index d00491f..0000000
--- a/.fmf/version
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/.gitignore b/.gitignore
index 00397c1..242bd0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -108,11 +108,3 @@ hplip-3.10.6.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
diff --git a/0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch b/0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch
index c0b26ec..ef7d370 100644
--- a/0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch
+++ b/0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch
@@ -1,108 +1,45 @@
-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("The HPLIP plugin is already installed.
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("Unable to find an appropriate su/sudo utility to run hp-plugin.
Install kdesu, gnomesu, or gksu.
"),
-- 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("An error occurred.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("%s
Without this, it is not possible to authenticate and validate the plug-in prior to installation.
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("%sWithout this, it is not possible to authenticate and validate this tool prior to installation.
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
+From 95a73bbc9bd65602a0f9411469ab511bc80a01d0 Mon Sep 17 00:00:00 2001
+From: Till Kamppeter
+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
@@ -1422,7 +1422,7 @@ class DevMgr4(DevMgr4_base):
QMessageBox.critical(self,
self.caption(),
@@ -175,10 +112,11 @@ diff -up hplip-3.23.3/ui/devmgr4.py.qmsgbox-typos-fix hplip-3.23.3/ui/devmgr4.py
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+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):
x = QMessageBox.critical(self,
self.caption(),
self.__tr("Annoying Confirmation: Are you sure you want to delete this group?"),
@@ -187,7 +125,7 @@ diff -up hplip-3.23.3/ui/faxaddrbookform.py.qmsgbox-typos-fix hplip-3.23.3/ui/fa
QMessageBox.No | QMessageBox.Default,
QMessageBox.NoButton)
if x == QMessageBox.Yes:
-@@ -421,7 +421,7 @@ class FaxAddrBookForm(FaxAddrBookForm_ba
+@@ -421,7 +421,7 @@ class FaxAddrBookForm(FaxAddrBookForm_base):
if QMessageBox.critical(self,
self.caption(),
self.__tr("Annoying Confirmation: Are you sure you want to delete this address book entry?"),
@@ -196,7 +134,7 @@ diff -up hplip-3.23.3/ui/faxaddrbookform.py.qmsgbox-typos-fix hplip-3.23.3/ui/fa
QMessageBox.No | QMessageBox.Default,
QMessageBox.NoButton) == QMessageBox.Yes:
db.delete(self.current.entry['name'])
-@@ -451,7 +451,7 @@ class FaxAddrBookForm(FaxAddrBookForm_ba
+@@ -451,7 +451,7 @@ class FaxAddrBookForm(FaxAddrBookForm_base):
QMessageBox.critical(self,
self.caption(),
QString(error_text),
@@ -205,9 +143,10 @@ diff -up hplip-3.23.3/ui/faxaddrbookform.py.qmsgbox-typos-fix hplip-3.23.3/ui/fa
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+diff --git a/ui/faxsendjobform.py b/ui/faxsendjobform.py
+index 106215c5e..69f424c42 100644
+--- a/ui/faxsendjobform.py
++++ b/ui/faxsendjobform.py
@@ -210,7 +210,7 @@ class FaxSendJobForm(QMainWindow):
QMessageBox.information(self,
self.caption(),
@@ -235,10 +174,11 @@ diff -up hplip-3.23.3/ui/faxsendjobform.py.qmsgbox-typos-fix hplip-3.23.3/ui/fax
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+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):
QMessageBox.critical(self,
self.caption(),
error_text,
@@ -247,9 +187,10 @@ diff -up hplip-3.23.3/ui/firmwaredialog.py.qmsgbox-typos-fix hplip-3.23.3/ui/fir
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+diff --git a/ui/makecopiesform.py b/ui/makecopiesform.py
+index 27f144b36..0fbb573e3 100644
+--- a/ui/makecopiesform.py
++++ b/ui/makecopiesform.py
@@ -156,7 +156,7 @@ class MakeCopiesForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@@ -268,9 +209,10 @@ diff -up hplip-3.23.3/ui/makecopiesform.py.qmsgbox-typos-fix hplip-3.23.3/ui/mak
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+diff --git a/ui/nodevicesform.py b/ui/nodevicesform.py
+index 01f6ae53b..57a696375 100644
+--- a/ui/nodevicesform.py
++++ b/ui/nodevicesform.py
@@ -67,7 +67,7 @@ class NoDevicesForm(NoDevicesForm_base):
QMessageBox.critical(self,
self.caption(),
@@ -280,9 +222,10 @@ diff -up hplip-3.23.3/ui/nodevicesform.py.qmsgbox-typos-fix hplip-3.23.3/ui/node
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+diff --git a/ui/pluginform2.py b/ui/pluginform2.py
+index 64e64aa77..76cb0238b 100644
+--- a/ui/pluginform2.py
++++ b/ui/pluginform2.py
@@ -173,7 +173,7 @@ class PluginForm2(PluginForm2_base):
QMessageBox.critical(self,
self.caption(),
@@ -301,9 +244,10 @@ diff -up hplip-3.23.3/ui/pluginform2.py.qmsgbox-typos-fix hplip-3.23.3/ui/plugin
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+diff --git a/ui/printerform.py b/ui/printerform.py
+index 0c6c4f39e..7c10ab07b 100644
+--- a/ui/printerform.py
++++ b/ui/printerform.py
@@ -154,7 +154,7 @@ class PrinterForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@@ -313,10 +257,11 @@ diff -up hplip-3.23.3/ui/printerform.py.qmsgbox-typos-fix hplip-3.23.3/ui/printe
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+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):
## QMessageBox.warning(self,
## self.caption(),
## self.__tr("One or more email addresses are missing.Please enter this information and try again."),
@@ -325,7 +270,7 @@ diff -up hplip-3.23.3/ui/settingsdialog.py.qmsgbox-typos-fix hplip-3.23.3/ui/set
## 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("
Please check your email for a test message.
If the message doesn't arrive, please check your settings and try again."),
@@ -334,9 +279,10 @@ diff -up hplip-3.23.3/ui/settingsdialog.py.qmsgbox-typos-fix hplip-3.23.3/ui/set
## QMessageBox.NoButton,
## QMessageBox.NoButton)
-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
+diff --git a/ui/setupform.py b/ui/setupform.py
+index 307917b02..78863fdd8 100644
+--- a/ui/setupform.py
++++ b/ui/setupform.py
@@ -602,7 +602,7 @@ class SetupForm(SetupForm_base):
if ( QMessageBox.warning(self,
self.caption(),
@@ -382,9 +328,10 @@ diff -up hplip-3.23.3/ui/setupform.py.qmsgbox-typos-fix hplip-3.23.3/ui/setupfor
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+diff --git a/ui/unloadform.py b/ui/unloadform.py
+index 8397a689c..ae363e01e 100644
+--- a/ui/unloadform.py
++++ b/ui/unloadform.py
@@ -135,7 +135,7 @@ class UnloadForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@@ -394,9 +341,10 @@ diff -up hplip-3.23.3/ui/unloadform.py.qmsgbox-typos-fix hplip-3.23.3/ui/unloadf
QMessageBox.NoButton,
QMessageBox.NoButton)
-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
+diff --git a/ui/upgradeform.py b/ui/upgradeform.py
+index 6b9acf5cc..d0b418419 100644
+--- a/ui/upgradeform.py
++++ b/ui/upgradeform.py
@@ -118,7 +118,7 @@ class UpgradeForm(UpgradeForm_base):
QMessageBox.critical(self,
self.caption(),
@@ -415,3 +363,111 @@ diff -up hplip-3.23.3/ui/upgradeform.py.qmsgbox-typos-fix hplip-3.23.3/ui/upgrad
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("The HPLIP plugin is already installed.
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("Unable to find an appropriate su/sudo utility to run hp-plugin.
Install kdesu, gnomesu, or gksu.
"),
+- 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("An error occurred.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("%s
Without this, it is not possible to authenticate and validate the plug-in prior to installation.
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("%sWithout this, it is not possible to authenticate and validate this tool prior to installation.
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
diff --git a/ci.fmf b/ci.fmf
deleted file mode 100644
index c5aa0e0..0000000
--- a/ci.fmf
+++ /dev/null
@@ -1 +0,0 @@
-resultsdb-testcase: separate
diff --git a/gating.yaml b/gating.yaml
deleted file mode 100644
index 71d105b..0000000
--- a/gating.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
---- !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}
diff --git a/hp-plugin.in b/hp-plugin.in
index 5bdbab0..c3e7bd3 100644
--- a/hp-plugin.in
+++ b/hp-plugin.in
@@ -1,7 +1,7 @@
#!/usr/bin/bash
-# get version from base hplip rpm
-VER=$(@bindir@/rpm -q hplip --queryformat='%{version}')
+# get version from base hplip rpm - it is always in the second column
+VER=$(@bindir@/rpm -q hplip | @bindir@/awk -F '-' '{print $2}')
if test "x$VER" = "x"
then
@@ -9,40 +9,24 @@ then
exit 1
fi
+# link to the plugin
+PLUGIN_SOURCE="https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-${VER}-plugin.run"
+
# 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)
+ @bindir@/mkdir ~/.hplip || @bindir@/echo "Cannot create the ~/.hplip dir, exiting" && exit 1
fi
-for link in ${PLUGIN_SOURCE} ${FALLBACK_SOURCE}
-do
- download ${link}
+@bindir@/wget -O ~/.hplip/${PLUGIN_FILE} ${PLUGIN_SOURCE}
- 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"
+if [ ! -f ~/.hplip/${PLUGIN_FILE} ]
then
- @bindir@/echo "The downloaded file does not exist or is not a shell script - error during downloading, exiting..."
+ @bindir@/echo "The downloaded file does not exist - error during downloading, exiting..."
exit 1
fi
diff --git a/hplip-3.21.2.tar.gz.asc b/hplip-3.21.2.tar.gz.asc
new file mode 100644
index 0000000..c99a1cd
--- /dev/null
+++ b/hplip-3.21.2.tar.gz.asc
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.11 (GNU/Linux)
+
+iEYEABECAAYFAmApuOMACgkQc9dwzaWQR7kddgCeNSUemyt9lpIk8a37ItEiX7XO
+xXYAnjgAIdzPYdmSMFJ5Bqv1JLTv7RiC
+=oTOD
+-----END PGP SIGNATURE-----
diff --git a/hplip-add-ppd-crash.patch b/hplip-add-ppd-crash.patch
index beb070d..7117860 100644
--- a/hplip-add-ppd-crash.patch
+++ b/hplip-add-ppd-crash.patch
@@ -1,14 +1,28 @@
-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
+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):
+
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]
diff --git a/hplip-check-cups.patch b/hplip-check-cups.patch
index e0f1570..053eb50 100644
--- a/hplip-check-cups.patch
+++ b/hplip-check-cups.patch
@@ -1,17 +1,16 @@
-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):
+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):
'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, '-', 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),
++ '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),
'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),
diff --git a/hplip-check-userperms.patch b/hplip-check-userperms.patch
new file mode 100644
index 0000000..9204c0b
--- /dev/null
+++ b/hplip-check-userperms.patch
@@ -0,0 +1,33 @@
+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: "
diff --git a/hplip-covscan.patch b/hplip-covscan.patch
index 29384dc..bb6314b 100644
--- a/hplip-covscan.patch
+++ b/hplip-covscan.patch
@@ -1,6 +1,38 @@
-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
+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
@@ -1,5 +1,9 @@
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
@@ -12,10 +44,11 @@ diff -up hplip-3.25.2/common/utils.c.covscan hplip-3.25.2/common/utils.c
#include
#include
#include
-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_
+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)
}
strncpy(ds->uri, msp->device[dd].uri, sizeof(ds->uri));
@@ -23,9 +56,10 @@ diff -up hplip-3.25.2/io/hpmud/hpmud.c.covscan hplip-3.25.2/io/hpmud/hpmud.c
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 -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
+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
@@ -31,6 +31,7 @@
#endif
@@ -34,9 +68,10 @@ diff -up hplip-3.25.2/io/hpmud/jd.c.covscan hplip-3.25.2/io/hpmud/jd.c
#include "hpmud.h"
#include "hpmudi.h"
-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
+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
@@ -117,6 +117,7 @@ static int ReadConfig()
if (rcbuf[0] == '[')
{
@@ -53,10 +88,11 @@ diff -up hplip-3.25.2/io/hpmud/model.c.covscan hplip-3.25.2/io/hpmud/model.c
break; /* done */
}
}
-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
+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)
len = size-1; /* leave byte for zero termination */
if (len > 2)
len -= 2;
@@ -65,10 +101,11 @@ diff -up hplip-3.25.2/io/hpmud/musb.c.covscan hplip-3.25.2/io/hpmud/musb.c
buffer[len]=0;
DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
-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
+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)
len = size-1; /* leave byte for zero termination */
if (len > 2)
len -= 2;
@@ -77,39 +114,10 @@ diff -up hplip-3.25.2/io/hpmud/pp.c.covscan hplip-3.25.2/io/hpmud/pp.c
buffer[len]=0;
DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
-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
+diff --git a/pcard/fat.c b/pcard/fat.c
+index caa383f..e1425c0 100644
+--- a/pcard/fat.c
++++ b/pcard/fat.c
@@ -519,14 +519,17 @@ int FatFreeSpace(void)
int FatDiskAttributes( PHOTO_CARD_ATTRIBUTES * pa )
@@ -139,9 +147,48 @@ diff -up hplip-3.25.2/pcard/fat.c.covscan hplip-3.25.2/pcard/fat.c
cwd.StartSector = ConvertClusterToSector(fa.StartCluster);
cwd.CurrSector = cwd.StartSector;
cwd.StartCluster = fa.StartCluster;
-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
+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
@@ -1302,6 +1302,7 @@ DRIVER_ERROR PrintContext::SelectDevice
if(0 == strnlen((const char *)pSS->strDevID, DevIDBuffSize))
{
@@ -150,10 +197,11 @@ diff -up hplip-3.25.2/prnt/hpijs/context2.cpp.covscan hplip-3.25.2/prnt/hpijs/co
}
thePrinter = pPFI->CreatePrinter (pSS, familyHandle);
if (thePrinter->constructor_error != NO_ERROR)
-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
+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)
IOMode.bDevID =IM.bDevID && IOMode.bDevID;
if (model)
@@ -164,10 +212,11 @@ diff -up hplip-3.25.2/prnt/hpijs/systemservices.cpp.covscan hplip-3.25.2/prnt/hp
}
APDK_END_NAMESPACE
-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)
+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)
/* Writing Header Information
argument[1] = JOB ID , argument[2]= USERNAME, argument[3] = TITLE */
hpwrite("\x1b%-12345X@PJL JOBNAME=", strlen("\x1b%-12345X@PJL JOBNAME="));
@@ -184,24 +233,25 @@ diff -up hplip-3.25.2/prnt/hpps/hppsfilter.c.covscan hplip-3.25.2/prnt/hpps/hpps
hpwrite(buffer, strlen(buffer));
fprintf(stderr, "HP PS filter func = WriteHeader : WRITING PJL HEADER INFO\n");
return;
-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);
+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);
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);
- 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
+ # 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
@@ -26,6 +26,7 @@
# include "http.h"
# include "xml.h"
@@ -210,9 +260,10 @@ diff -up hplip-3.25.2/scan/sane/bb_ledm.c.covscan hplip-3.25.2/scan/sane/bb_ledm
# include
-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
+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
@@ -36,7 +36,7 @@
#define _STRINGIZE(x) #x
#define STRINGIZE(x) _STRINGIZE(x)
@@ -222,10 +273,11 @@ diff -up hplip-3.25.2/scan/sane/common.h.covscan hplip-3.25.2/scan/sane/common.h
#define BUG_DUMP(data, size) bugdump((data), (size))
#define BUG_SZ(args...) {syslog(LOG_ERR, args); DBG(2, args);}
-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
+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
//DBG8("escl_control_option (option=%s) action=%d\n", ps->option[option].name, action);
if (stat != SANE_STATUS_GOOD)
{
@@ -234,7 +286,7 @@ diff -up hplip-3.25.2/scan/sane/escl.c.covscan hplip-3.25.2/scan/sane/escl.c
}
return stat;
-@@ -1159,7 +1159,7 @@ void escl_close(SANE_Handle handle)
+@@ -1102,7 +1102,7 @@ void escl_close(SANE_Handle handle)
if (ps == NULL || ps != session)
{
@@ -243,9 +295,10 @@ diff -up hplip-3.25.2/scan/sane/escl.c.covscan hplip-3.25.2/scan/sane/escl.c
return;
}
-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
+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
@@ -36,6 +36,7 @@
#include
#include
@@ -254,10 +307,11 @@ diff -up hplip-3.25.2/scan/sane/http.c.covscan hplip-3.25.2/scan/sane/http.c
#include "hpmud.h"
#include "http.h"
-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"
+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)
if (dbus_error_is_set(&dbus_err))
{
@@ -266,7 +320,7 @@ diff -up hplip-3.25.2/scan/sane/io.c.covscan hplip-3.25.2/scan/sane/io.c
dbus_error_free(&dbus_err);
}
-@@ -79,7 +79,7 @@ int __attribute__ ((visibility ("hidden"
+@@ -79,7 +79,7 @@ int __attribute__ ((visibility ("hidden"))) SendScanEvent(char *device_uri, int
if (NULL == msg)
{
@@ -275,7 +329,7 @@ diff -up hplip-3.25.2/scan/sane/io.c.covscan hplip-3.25.2/scan/sane/io.c
return 0;
}
-@@ -94,7 +94,7 @@ int __attribute__ ((visibility ("hidden"
+@@ -94,7 +94,7 @@ int __attribute__ ((visibility ("hidden"))) SendScanEvent(char *device_uri, int
if (!dbus_connection_send(dbus_conn, msg, NULL))
{
@@ -284,10 +338,11 @@ diff -up hplip-3.25.2/scan/sane/io.c.covscan hplip-3.25.2/scan/sane/io.c
return 0;
}
-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
+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
if (stat != SANE_STATUS_GOOD)
{
@@ -296,7 +351,7 @@ diff -up hplip-3.25.2/scan/sane/ledm.c.covscan hplip-3.25.2/scan/sane/ledm.c
}
return stat;
-@@ -1078,7 +1078,7 @@ void ledm_close(SANE_Handle handle)
+@@ -1067,7 +1067,7 @@ void ledm_close(SANE_Handle handle)
if (ps == NULL || ps != session)
{
@@ -305,10 +360,11 @@ diff -up hplip-3.25.2/scan/sane/ledm.c.covscan hplip-3.25.2/scan/sane/ledm.c
return;
}
-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
+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
if (!ps->ip_handle)
{
@@ -317,7 +373,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
goto bugout;
}
-@@ -335,7 +335,7 @@ static struct marvell_session *create_se
+@@ -335,7 +335,7 @@ static struct marvell_session *create_session()
if ((ps = malloc(sizeof(struct marvell_session))) == NULL)
{
@@ -326,7 +382,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
return NULL;
}
memset(ps, 0, sizeof(struct marvell_session));
-@@ -402,7 +402,7 @@ SANE_Status marvell_open(SANE_String_Con
+@@ -402,7 +402,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
if (session)
{
@@ -335,7 +391,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
return SANE_STATUS_DEVICE_BUSY;
}
-@@ -431,7 +431,7 @@ SANE_Status marvell_open(SANE_String_Con
+@@ -431,7 +431,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@@ -344,7 +400,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
goto bugout;
free(session);
-@@ -441,7 +441,7 @@ SANE_Status marvell_open(SANE_String_Con
+@@ -441,7 +441,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
if (hpmud_open_channel(session->dd, HPMUD_S_MARVELL_SCAN_CHANNEL, &session->cd) != HPMUD_R_OK)
{
@@ -362,7 +418,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
return;
}
-@@ -849,7 +849,7 @@ SANE_Status marvell_control_option(SANE_
+@@ -849,7 +849,7 @@ SANE_Status marvell_control_option(SANE_Handle handle, SANE_Int option, SANE_Act
stat = SANE_STATUS_GOOD;
break;
}
@@ -371,7 +427,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
}
else
{ /* Set default. */
-@@ -866,7 +866,7 @@ SANE_Status marvell_control_option(SANE_
+@@ -866,7 +866,7 @@ SANE_Status marvell_control_option(SANE_Handle handle, SANE_Int option, SANE_Act
if (stat != SANE_STATUS_GOOD)
{
@@ -380,7 +436,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
-@@ -905,7 +905,7 @@ SANE_Status marvell_start(SANE_Handle ha
+@@ -905,7 +905,7 @@ SANE_Status marvell_start(SANE_Handle handle)
if (set_extents(ps))
{
@@ -389,7 +445,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
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 ha
+@@ -963,7 +963,7 @@ SANE_Status marvell_start(SANE_Handle handle)
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@@ -398,7 +454,7 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
stat = SANE_STATUS_INVAL;
goto bugout;
}
-@@ -1023,7 +1023,7 @@ SANE_Status marvell_read(SANE_Handle han
+@@ -1023,7 +1023,7 @@ SANE_Status marvell_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{
@@ -407,9 +463,10 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
goto bugout;
}
-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
+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
@@ -30,6 +30,7 @@
#include
#include
@@ -427,10 +484,11 @@ diff -up hplip-3.25.2/scan/sane/sclpml.c.covscan hplip-3.25.2/scan/sane/sclpml.c
return;
}
-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
+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
if (!ps->ip_handle)
{
@@ -439,7 +497,7 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
goto bugout;
}
-@@ -219,7 +219,7 @@ static struct soap_session *create_sessi
+@@ -219,7 +219,7 @@ static struct soap_session *create_session()
if ((ps = malloc(sizeof(struct soap_session))) == NULL)
{
@@ -448,7 +506,7 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
return NULL;
}
memset(ps, 0, sizeof(struct soap_session));
-@@ -418,7 +418,7 @@ SANE_Status soap_open(SANE_String_Const
+@@ -418,7 +418,7 @@ SANE_Status soap_open(SANE_String_Const device, SANE_Handle *handle)
if (session)
{
@@ -457,7 +515,7 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
return SANE_STATUS_DEVICE_BUSY;
}
-@@ -434,7 +434,7 @@ SANE_Status soap_open(SANE_String_Const
+@@ -434,7 +434,7 @@ SANE_Status soap_open(SANE_String_Const device, SANE_Handle *handle)
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@@ -475,7 +533,7 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
return;
}
-@@ -824,7 +824,7 @@ SANE_Status soap_control_option(SANE_Han
+@@ -824,7 +824,7 @@ SANE_Status soap_control_option(SANE_Handle handle, SANE_Int option, SANE_Action
if (stat != SANE_STATUS_GOOD)
{
@@ -484,7 +542,7 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
-@@ -862,7 +862,7 @@ SANE_Status soap_start(SANE_Handle handl
+@@ -862,7 +862,7 @@ SANE_Status soap_start(SANE_Handle handle)
ps->user_cancel = 0;
if (set_extents(ps))
{
@@ -493,7 +551,7 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
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 handl
+@@ -913,7 +913,7 @@ SANE_Status soap_start(SANE_Handle handle)
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@@ -502,7 +560,7 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
stat = SANE_STATUS_INVAL;
goto bugout;
}
-@@ -955,7 +955,7 @@ SANE_Status soap_start(SANE_Handle handl
+@@ -955,7 +955,7 @@ SANE_Status soap_start(SANE_Handle handle)
if (ret & (IP_INPUT_ERROR | IP_FATAL_ERROR | IP_DONE))
{
@@ -511,7 +569,7 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
stat = SANE_STATUS_IO_ERROR;
goto bugout;
}
-@@ -1007,7 +1007,7 @@ SANE_Status soap_read(SANE_Handle handle
+@@ -1007,7 +1007,7 @@ SANE_Status soap_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength, S
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{
@@ -520,10 +578,11 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
goto bugout;
}
-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
+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
if (!ps->ip_handle)
{
@@ -532,7 +591,7 @@ diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
goto bugout;
}
-@@ -435,7 +435,7 @@ static struct soap_session *create_sessi
+@@ -435,7 +435,7 @@ static struct soap_session *create_session()
if ((ps = malloc(sizeof(struct soap_session))) == NULL)
{
@@ -541,7 +600,7 @@ diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
return NULL;
}
memset(ps, 0, sizeof(struct soap_session));
-@@ -459,7 +459,7 @@ SANE_Status soapht_open(SANE_String_Cons
+@@ -459,7 +459,7 @@ SANE_Status soapht_open(SANE_String_Const device, SANE_Handle *handle)
if (session)
{
@@ -550,7 +609,7 @@ diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
return SANE_STATUS_DEVICE_BUSY;
}
-@@ -475,7 +475,7 @@ SANE_Status soapht_open(SANE_String_Cons
+@@ -475,7 +475,7 @@ SANE_Status soapht_open(SANE_String_Const device, SANE_Handle *handle)
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@@ -568,7 +627,7 @@ diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
return;
}
-@@ -904,7 +904,7 @@ SANE_Status soapht_control_option(SANE_H
+@@ -904,7 +904,7 @@ SANE_Status soapht_control_option(SANE_Handle handle, SANE_Int option, SANE_Acti
if (stat != SANE_STATUS_GOOD)
{
@@ -577,7 +636,7 @@ diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
-@@ -946,7 +946,7 @@ SANE_Status soapht_start(SANE_Handle han
+@@ -946,7 +946,7 @@ SANE_Status soapht_start(SANE_Handle handle)
if (set_extents(ps))
{
@@ -586,7 +645,7 @@ diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
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 han
+@@ -1032,7 +1032,7 @@ SANE_Status soapht_start(SANE_Handle handle)
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@@ -595,7 +654,7 @@ diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
stat = SANE_STATUS_INVAL;
goto bugout;
}
-@@ -1075,7 +1075,7 @@ SANE_Status soapht_start(SANE_Handle han
+@@ -1075,7 +1075,7 @@ SANE_Status soapht_start(SANE_Handle handle)
if (ret & (IP_INPUT_ERROR | IP_FATAL_ERROR | IP_DONE))
{
@@ -604,7 +663,7 @@ diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
stat = SANE_STATUS_IO_ERROR;
goto bugout;
}
-@@ -1124,7 +1124,7 @@ SANE_Status soapht_read(SANE_Handle hand
+@@ -1124,7 +1124,7 @@ SANE_Status soapht_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength,
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{
diff --git a/hplip-dialog-infinite-loop.patch b/hplip-dialog-infinite-loop.patch
index cfd635b..dbb04e7 100644
--- a/hplip-dialog-infinite-loop.patch
+++ b/hplip-dialog-infinite-loop.patch
@@ -2,6 +2,15 @@ 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
diff --git a/hplip-fix-Wreturn-type-warning.patch b/hplip-fix-Wreturn-type-warning.patch
index aa40e1a..e128078 100644
--- a/hplip-fix-Wreturn-type-warning.patch
+++ b/hplip-fix-Wreturn-type-warning.patch
@@ -1,3 +1,14 @@
+--- 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_
diff --git a/hplip-fix-parsing-lpstat.patch b/hplip-fix-parsing-lpstat.patch
deleted file mode 100644
index d6028ab..0000000
--- a/hplip-fix-parsing-lpstat.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-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
diff --git a/hplip-format-qdatetime.patch b/hplip-format-qdatetime.patch
deleted file mode 100644
index 9517e65..0000000
--- a/hplip-format-qdatetime.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 839a216f17ce17a5667eecd54de2a70b1383df2c Mon Sep 17 00:00:00 2001
-From: "FeRD (Frank Dana)"
-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)"
-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
-
diff --git a/hplip-gcc15-stdc23.patch b/hplip-gcc15-stdc23.patch
deleted file mode 100644
index a18f245..0000000
--- a/hplip-gcc15-stdc23.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-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);
diff --git a/hplip-gui-close-trace.patch b/hplip-gui-close-trace.patch
deleted file mode 100644
index 39d8f01..0000000
--- a/hplip-gui-close-trace.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py
-index 79f8fa8..28a77b3 100644
---- a/ui5/devmgr5.py
-+++ b/ui5/devmgr5.py
-@@ -816,6 +816,9 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow):
-
-
- def updateWindowTitle(self):
-+ if self.cur_device is None or self.cur_device_uri is None:
-+ return
-+
- if self.cur_device.device_type == DEVICE_TYPE_FAX:
- self.setWindowTitle(self.__tr("HP Device Manager - %s (Fax)"%self.cur_device.model_ui))
- else:
-@@ -1876,6 +1879,9 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow):
-
-
- def updatePrintControlTab(self):
-+ if self.cur_device is None or self.cur_printer is None:
-+ return
-+
- if self.cur_device.device_type == DEVICE_TYPE_PRINTER:
- self.PrintControlPrinterNameLabel.setText(self.__tr("Printer Name:"))
- self.groupBox.setTitle(QApplication.translate("MainWindow", "Printer Queue Control", None))
diff --git a/hplip-hpaio-gcc14.patch b/hplip-hpaio-gcc14.patch
deleted file mode 100644
index f7d195e..0000000
--- a/hplip-hpaio-gcc14.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-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;
-
diff --git a/hplip-hpsetup-noscanjets.patch b/hplip-hpsetup-noscanjets.patch
index 52a4690..5c956a0 100644
--- a/hplip-hpsetup-noscanjets.patch
+++ b/hplip-hpsetup-noscanjets.patch
@@ -1,6 +1,7 @@
-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
+diff --git a/setup.py b/setup.py
+index 5d48aaa..88e663f 100755
+--- a/setup.py
++++ b/setup.py
@@ -399,9 +399,19 @@ else: # INTERACTIVE_MODE
#log.warning("Cannot setup fax - device does not have fax feature.")
setup_fax = False
@@ -22,12 +23,13 @@ diff -up hplip-3.23.3/setup.py.hpsetup-noscanjets hplip-3.23.3/setup.py
plugin = mq.get('plugin', PLUGIN_NONE)
if ignore_plugin_check is False and plugin > PLUGIN_NONE:
-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)
+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)
self.model = models.normalizeModelName(model).lower()
+ if 'scanjet' in self.model:
+ FailureUI(self,
diff --git a/hplip-keyserver.patch b/hplip-keyserver.patch
index c525503..9b457f1 100644
--- a/hplip-keyserver.patch
+++ b/hplip-keyserver.patch
@@ -10,3 +10,47 @@ index 99bda7b..0f90f92 100644
self.prev_length = len(y)
self.spinner_pos = (self.spinner_pos + 1) % 8
+diff --git a/base/validation.py b/base/validation.py
+index ee6b05a..5e955dc 100644
+--- a/base/validation.py
++++ b/base/validation.py
+@@ -42,8 +42,11 @@ class DigiSign_Verification(object):
+
+
+ class GPG_Verification(DigiSign_Verification):
+- def __init__(self, pgp_site = 'pgp.mit.edu', key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9):
+- self.__pgp_site = pgp_site
++ def __init__(self, keyservers = ['keyserver.ubuntu.com',
++ 'pgp.surf.nl',
++ 'pgp.mit.edu'],
++ key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9):
++ self.__keyservers = keyservers
+ self.__key = key
+ self.__gpg = utils.which('gpg',True)
+
+@@ -82,13 +85,18 @@ class GPG_Verification(DigiSign_Verification):
+
+
+ def __acquire_gpg_key(self):
+-
+- cmd = '%s --homedir %s --no-permission-warning --keyserver %s --recv-keys 0x%X' \
+- % (self.__gpg, self.__gpg_dir, self.__pgp_site, self.__key)
+-
+- log.info("Receiving digital keys: %s" % cmd)
+- status, output = utils.run(cmd)
+- log.debug(output)
++ for kserver in self.__keyservers:
++ cmd = '%s --homedir %s --no-permission-warning --keyserver %s --recv-keys 0x%X' \
++ % (self.__gpg, self.__gpg_dir, kserver, self.__key)
++
++ log.info("Receiving digital keys: %s" % cmd)
++ status, output = utils.run(cmd)
++ log.debug(output)
++
++ if not status:
++ break
++ log.info("Receiving keys from {} failed, trying the next keyserver."
++ .format(kserver))
+
+ self.__change_owner(True)
+
diff --git a/hplip-lineart.patch b/hplip-lineart.patch
new file mode 100644
index 0000000..1580086
--- /dev/null
+++ b/hplip-lineart.patch
@@ -0,0 +1,14 @@
+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)
diff --git a/hplip-locale-format.patch b/hplip-locale-format.patch
deleted file mode 100644
index 32fba1e..0000000
--- a/hplip-locale-format.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/base/utils.py b/base/utils.py
-index e2de550..55848b8 100644
---- a/base/utils.py
-+++ b/base/utils.py
-@@ -474,7 +474,7 @@ def sort_dict_by_value(d):
-
-
- def commafy(val):
-- return locale.format("%s", val, grouping=True)
-+ return locale.format_string("%s", val, grouping=True)
-
-
- def format_bytes(s, show_bytes=False):
diff --git a/hplip-no-urlopener.patch b/hplip-no-urlopener.patch
deleted file mode 100644
index 903fbbc..0000000
--- a/hplip-no-urlopener.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-diff --git a/base/device.py b/base/device.py
-index 2fdb29c..ca0d97e 100644
---- a/base/device.py
-+++ b/base/device.py
-@@ -2526,9 +2526,9 @@ Content-length: %d\r
- data = None
-
- log.debug("Opening: %s" % url2)
-- opener = LocalOpener({})
-+ opener = LocalOpener()
- try:
-- f = opener.open(url2, data)
-+ f = opener.open_hp(url2, data)
-
- except Error:
- log.error("Status read failed: %s" % url2)
-@@ -2548,7 +2548,7 @@ Content-length: %d\r
- try:
- url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
- data = self
-- opener = LocalOpenerEWS_LEDM({})
-+ opener = LocalOpenerEWS_LEDM()
- try:
- if footer:
- return opener.open_hp(url2, data, footer)
-@@ -2563,7 +2563,7 @@ Content-length: %d\r
- try:
- url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
- data = self
-- opener = LocalOpener_LEDM({})
-+ opener = LocalOpener_LEDM()
- try:
- if footer:
- return opener.open_hp(url2, data, footer)
-@@ -2580,7 +2580,7 @@ Content-length: %d\r
- url="/cdm/supply/v1/suppliesPublic"
- url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
- data = self
-- opener = LocalOpener_CDM({})
-+ opener = LocalOpener_CDM()
- try:
- if footer:
- return opener.open_hp(url2, data, footer)
-@@ -2688,7 +2688,7 @@ Content-length: %d\r
-
-
- # URLs: hp:/usb/HP_LaserJet_3050?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
--class LocalOpener(urllib_request.URLopener):
-+class LocalOpener():
- def open_hp(self, url, dev):
- log.debug("open_hp(%s)" % url)
-
-@@ -2718,7 +2718,7 @@ class LocalOpener(urllib_request.URLopener):
- return response#.fp
-
- # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
--class LocalOpenerEWS_LEDM(urllib_request.URLopener):
-+class LocalOpenerEWS_LEDM():
- def open_hp(self, url, dev, foot=""):
- log.debug("open_hp(%s)" % url)
-
-@@ -2744,7 +2744,7 @@ class LocalOpenerEWS_LEDM(urllib_request.URLopener):
-
-
- # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
--class LocalOpener_LEDM(urllib_request.URLopener):
-+class LocalOpener_LEDM():
- def open_hp(self, url, dev, foot=""):
- log.debug("open_hp(%s)" % url)
-
-@@ -2771,7 +2771,7 @@ class LocalOpener_LEDM(urllib_request.URLopener):
-
-
- # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
--class LocalOpener_CDM(urllib_request.URLopener):
-+class LocalOpener_CDM():
- def open_hp(self, url, dev, foot=""):
- log.debug("open_hp(%s)" % url)
- match_obj = http_pat_url.search(url)
diff --git a/hplip-noernie.patch b/hplip-noernie.patch
index 47bb9d0..4ac83b4 100644
--- a/hplip-noernie.patch
+++ b/hplip-noernie.patch
@@ -1,7 +1,7 @@
-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
+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
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.23.3/Makefile.am.no-ernie hplip-3.23.3/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.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
+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
@@ -30,7 +30,6 @@
#include "CommonDefinitions.h"
@@ -26,7 +26,7 @@ diff -up hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.23.3/prnt/hpcups
{
speed_mech_enabled = true;
- m_run_ernie_filter = true;
- crd_type = eCrd_color_only; // pcl3 printers support RGB only ref:hplip-1701
+ crd_type = eCrd_both;
strcpy(m_szLanguage, "PCL3GUI");
}
@@ -59,21 +57,6 @@ DRIVER_ERROR Pcl3Gui2::Configure(Pipelin
@@ -51,9 +51,9 @@ diff -up hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.23.3/prnt/hpcups
if (crd_type != eCrd_black_only) {
Mode10 *pMode10;
-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
+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
@@ -60,7 +60,6 @@ private:
DRIVER_ERROR encapsulateRaster(BYTE *input_raster, unsigned int num_bytes, COLORTYPE c_type);
bool speed_mech_enabled;
diff --git a/hplip-pcardext-disable.patch b/hplip-pcardext-disable.patch
index 158379d..adcac1d 100644
--- a/hplip-pcardext-disable.patch
+++ b/hplip-pcardext-disable.patch
@@ -1,13 +1,29 @@
-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
+The pcardext Python extension cannot be loaded because it has not been
+ported to Python 3:
+
+>>> import pcardext
+Traceback (most recent call last):
+ File "", line 1, in
+ImportError: /usr/lib64/python3.11/site-packages/pcardext.so: undefined symbol: PyString_AsStringAndSize
+>>>
+
+Stop building this extension because it breaks the build if the
+compiler lacks support for implicit function declarations.
+
+Bug:
+
+Submitted upstream:
+
+diff --git a/Makefile.am b/Makefile.am
+index ddac16a9dd514008..15d953af9150c09e 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -306,13 +306,6 @@ if !HPLIP_CLASS_DRIVER
pcarddir = $(hplipdir)/pcard
dist_pcard_DATA = pcard/__init__.py pcard/photocard.py
-# pcardext
--pcardextdir = $(PYTHONEXECDIR)
--pcardextdir = $(PYTHONEXECDIR)
+-pcardextdir = $(pyexecdir)
-pcardext_LTLIBRARIES = pcardext.la
-pcardext_la_LDFLAGS = -module -avoid-version
-pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c pcard/pcardext/pcardext.h
diff --git a/hplip-plugin-curl.patch b/hplip-plugin-curl.patch
deleted file mode 100644
index 380ce9b..0000000
--- a/hplip-plugin-curl.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-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:
diff --git a/hplip-plugin-stdout.patch b/hplip-plugin-stdout.patch
deleted file mode 100644
index 92f8016..0000000
--- a/hplip-plugin-stdout.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-diff --git a/base/os_utils.py b/base/os_utils.py
-index 82a8b42..d918822 100644
---- a/base/os_utils.py
-+++ b/base/os_utils.py
-@@ -26,6 +26,7 @@ import locale
- import stat
- import subprocess
- import shlex
-+import sys
-
- #Local
- from . import logger
-@@ -37,17 +38,22 @@ def execute(cmd):
- try:
- # Use shlex.split to safely split the command into arguments
- args = shlex.split(cmd)
-- process = subprocess.Popen(args,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-+ process = subprocess.Popen(args,stdout=sys.stdout, stderr=sys.stderr, stdin=sys.stdin)
- process.wait()
- stdout, stderr = process.communicate()
-- log.debug(f"Command executed: {cmd}\n{stdout.decode()}")
-+
-+ log.debug(f"Command executed: {cmd}{f'\n{stdout.decode()}' if stdout else ''}")
-+
- if process.returncode != 0:
-- error_message = f"Command failed with return code {process.returncode}: {cmd}\n{stderr.decode()}"
-- log.error(error_message)
-+ log.error(f"Command failed with return code" \
-+ f"{process.returncode}: {cmd}" \
-+ f"{f'\n{stderr.decode()}' if stderr else ''}")
-+
- return process.returncode
- except subprocess.CalledProcessError as e:
-- error_message = f"Command failed with return code {e.returncode}: {cmd}\n{e.stderr.decode()}"
-- log.error(error_message)
-+ log.error(f"Command failed with return code" \
-+ f"{e.returncode}: {cmd}" \
-+ f"{f'\n{e.stderr.decode()}' if e.stderr else ''}")
- return e.returncode
- except Exception as e:
- log.error(f"Error executing command: {cmd}\n{str(e)}")
diff --git a/hplip-pstotiff-is-rubbish.patch b/hplip-pstotiff-is-rubbish.patch
index 901e6a2..014e2cf 100644
--- a/hplip-pstotiff-is-rubbish.patch
+++ b/hplip-pstotiff-is-rubbish.patch
@@ -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 -dGHOSTSCRIPT -sstdout=%stderr \
-+ -sOutputFile="$TMPFILE" "$IN"
++ -dSHORTERRORS -dWRITESYSTEMDICT -dGHOSTSCRIPT \
++ -sstdout=%stderr -sOutputFile="$TMPFILE" "$IN"
+RET=$?
+cat "$TMPFILE"
+rm -f "$TMPFILE"
diff --git a/hplip-repack.sh b/hplip-repack.sh
index a67e7ee..c25fbb0 100755
--- a/hplip-repack.sh
+++ b/hplip-repack.sh
@@ -12,14 +12,14 @@ 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
+# remove unwanted files
+rm hplip-$VERSION/prnt/hpcups/ErnieFilter.{cpp,h} hplip-$VERSION/prnt/hpijs/ernieplatform.h || exit 1
# 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
+wget -O hplip-plugin.run https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-$1-plugin.run || exit 1
# check whether the file is sane
file --mime hplip-plugin.run | grep 'x-shellscript' || exit 1
diff --git a/hplip-scan-size.patch b/hplip-scan-size.patch
deleted file mode 100644
index 1ff8cb3..0000000
--- a/hplip-scan-size.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff --git a/scan.py b/scan.py
-index b262ef2..cb0ffc1 100755
---- a/scan.py
-+++ b/scan.py
-@@ -83,7 +83,7 @@ edge_erase_value = 0
- contrast = 0
- set_contrast = False
-
--page_size = ''
-+page_size = 'a4'
- size_desc = ''
- page_units = 'mm'
- default_res = 300
-@@ -1615,7 +1615,7 @@ try:
- else:
- im = im.convert("RGB")
-
-- #im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[size],res)
-+ #im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[page_size],res)
- if barcode_count>0:
- if barcode_first_occurence == True:
- if barcode_first_page == False:
-@@ -1718,12 +1718,12 @@ try:
- #so that the output image size matches with the input scan area
- #for Flatbad
- if im:
-- im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[size],res)
-+ im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[page_size],res)
- """
- #for ADF
- for Image_file in adf_page_files:
- image = Image.open(Image_file)
-- resized_image = imageprocessing.resize_to_scan_area(image,PAGE_SIZES[size],res)
-+ resized_image = imageprocessing.resize_to_scan_area(image,PAGE_SIZES[page_size],res)
- resized_image.save(Image_file)
- """
- if adf and (save_file =='jpg' or save_file == 'png' or save_file == 'tiff' or save_file == 'pdf' or save_file == 'bmp'):
diff --git a/hplip-snprintf-format.patch b/hplip-snprintf-format.patch
new file mode 100644
index 0000000..221f1d1
--- /dev/null
+++ b/hplip-snprintf-format.patch
@@ -0,0 +1,50 @@
+diff --git a/protocol/hp_ipp.c b/protocol/hp_ipp.c
+index 97d827d..af25b3e 100644
+--- a/protocol/hp_ipp.c
++++ b/protocol/hp_ipp.c
+@@ -110,9 +110,9 @@ int addCupsPrinter(char *name, char *device_uri, char *location, char *ppd_file,
+ }
+
+ if ( info == NULL )
+- snprintf( info,sizeof(info), name );
++ info = name;
+
+- sprintf( printer_uri, "ipp://localhost/printers/%s", name );
++ snprintf( printer_uri, sizeof(printer_uri), "ipp://localhost/printers/%s", name);
+
+ cupsSetUser ("root");
+ /* Connect to the HTTP server */
+@@ -511,27 +511,27 @@ int __parsePrinterAttributes(ipp_t *response, printer_t **printer_list)
+
+ if ( strcmp(attr_name, "printer-name") == 0 &&
+ val_tag == IPP_TAG_NAME ) {
+- snprintf(t_printer->name, sizeof(t_printer->name),ippGetString(attr, 0, NULL) );
++ snprintf(t_printer->name, sizeof(t_printer->name), "%s", ippGetString(attr, 0, NULL));
+ }
+ else if ( strcmp(attr_name, "device-uri") == 0 &&
+ val_tag == IPP_TAG_URI ) {
+- snprintf(t_printer->device_uri,sizeof(t_printer->device_uri), ippGetString(attr, 0, NULL) );
++ snprintf(t_printer->device_uri, sizeof(t_printer->device_uri), "%s", ippGetString(attr, 0, NULL));
+ }
+ else if ( strcmp(attr_name, "printer-uri-supported") == 0 &&
+ val_tag == IPP_TAG_URI ) {
+- snprintf(t_printer->printer_uri,sizeof(t_printer->printer_uri), ippGetString(attr, 0, NULL) );
++ snprintf(t_printer->printer_uri, sizeof(t_printer->printer_uri), "%s", ippGetString(attr, 0, NULL));
+ }
+ else if ( strcmp(attr_name, "printer-info") == 0 &&
+ val_tag == IPP_TAG_TEXT ) {
+- snprintf(t_printer->info,sizeof(t_printer->info), ippGetString(attr, 0, NULL) );
++ snprintf(t_printer->info, sizeof(t_printer->info), "%s", ippGetString(attr, 0, NULL));
+ }
+ else if ( strcmp(attr_name, "printer-location") == 0 &&
+ val_tag == IPP_TAG_TEXT ) {
+- snprintf(t_printer->location,sizeof(t_printer->location),ippGetString(attr, 0, NULL) );
++ snprintf(t_printer->location, sizeof(t_printer->location), "%s", ippGetString(attr, 0, NULL));
+ }
+ else if ( strcmp(attr_name, "printer-make-and-model") == 0 &&
+ val_tag == IPP_TAG_TEXT ) {
+- snprintf(t_printer->make_model,sizeof(t_printer->make_model),ippGetString(attr, 0, NULL) );
++ snprintf(t_printer->make_model, sizeof(t_printer->make_model), "%s", ippGetString(attr, 0, NULL));
+ }
+ else if ( strcmp(attr_name, "printer-state") == 0 &&
+ val_tag == IPP_TAG_ENUM ) {
diff --git a/hplip-strncpy.patch b/hplip-strncpy.patch
index cbd262d..eac29b8 100644
--- a/hplip-strncpy.patch
+++ b/hplip-strncpy.patch
@@ -1,7 +1,7 @@
-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
+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
adj_k_width = 0;
black_raster = NULL;
color_raster = NULL;
@@ -9,7 +9,7 @@ diff -up hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.25.2/prnt/hpc
}
HPCupsFilter::~HPCupsFilter()
-@@ -428,15 +429,15 @@ DRIVER_ERROR HPCupsFilter::startPage (cu
+@@ -384,9 +385,9 @@ 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,18 +20,11 @@ diff -up hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.25.2/prnt/hpc
+ 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);
- }
- }
}
-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
+ 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
@@ -605,7 +605,7 @@ int main (int argc, char *argv[], char *
}
@@ -41,9 +34,9 @@ diff -up hplip-3.25.2/prnt/hpijs/hpijs.cpp.strncpy hplip-3.25.2/prnt/hpijs/hpijs
#ifdef HAVE_LIBHPIP
char *pDev;
-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
+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
@@ -282,7 +282,7 @@ int hpijsFaxServer (int argc, char **arg
char user_name[32]={0,};
diff --git a/hplip-use-raw-strings.patch b/hplip-use-raw-strings.patch
deleted file mode 100644
index 77d1b87..0000000
--- a/hplip-use-raw-strings.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-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 or --port= (Valid values are 1\*, 2, and 3. \*default)", "option", False),
-+ ("To specify the port on a multi-port JetDirect:", r"-p or --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 or --bus=", "option", False),
-- ("", ": cups, usb\*, net, bt, fw, par (\*default) (Note: bt and fw not supported in this release.)", "option", False),
-+ ("", r": cups, usb\*, net, bt, fw, par (\*default) (Note: bt and fw not supported in this release.)", "option", False),
- ("Set Time to Live (TTL):", "-t or --ttl= (Default is 4).", "option", False),
- ("Set timeout:", "-o or --timeout=", "option", False),
- ("Filter by functionality:", "-e or --filter=", "option", False),
-- ("", ": comma separated list of one or more of: scan, pcard, fax, copy, or none\*. (\*none is the default)", "option", False),
-+ ("", r": comma separated list of one or more of: scan, pcard, fax, copy, or none\*. (\*none is the default)", "option", False),
- ("Search:", "-s or --search=", "option", False),
- ("", " must be a valid regular expression (not case sensitive)", "option", False),
- ("Network discovery method:", "-m or --method=: is 'slp'* or 'mdns'.", "option", False),
-diff -up hplip-3.25.2/scan.py.raw-strings hplip-3.25.2/scan.py
-diff -up hplip-3.25.2/setup.py.raw-strings hplip-3.25.2/setup.py
---- hplip-3.25.2/setup.py.raw-strings 2025-04-11 10:26:18.496992045 +0200
-+++ hplip-3.25.2/setup.py 2025-04-11 10:26:18.522775511 +0200
-@@ -79,11 +79,11 @@ USAGE = [ (__doc__, "", "name", True),
- utils.USAGE_SPACE,
- utils.USAGE_OPTIONS,
- ("Automatic mode:", "-a or --auto (-i mode only)", "option", False),
-- ("To specify the port on a multi-port JetDirect:", "--port= (Valid values are 1\*, 2, and 3. \*default)", "option", False),
-+ ("To specify the port on a multi-port JetDirect:", r"--port= (Valid values are 1\*, 2, and 3. \*default)", "option", False),
- ("No testpage in automatic mode:", "-x (-i mode only)", "option", False),
- ("To specify a CUPS printer queue name:", "-p or --printer= (-i mode only)", "option", False),
- ("To specify a CUPS fax queue name:", "-f or --fax= (-i mode only)", "option", False),
-- ("Type of queue(s) to install:", "-t or --type=. : print*, fax\* (\*default) (-i mode only)", "option", False),
-+ ("Type of queue(s) to install:", r"-t or --type=. : print*, fax\* (\*default) (-i mode only)", "option", False),
- ("To specify the device URI to install:", "-d or --device= (--qt4 mode only)", "option", False),
- ("Remove printers or faxes instead of setting-up:", "-r or --rm or --remove", "option", False),
- utils.USAGE_LANGUAGE,
diff --git a/hplip-wifisetup.patch b/hplip-wifisetup.patch
index a7dc21b..7247b01 100644
--- a/hplip-wifisetup.patch
+++ b/hplip-wifisetup.patch
@@ -1,12 +1,12 @@
-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
+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:
self.ip,_,addressmode, subnetmask, gateway, pridns, sec_dns= self.wifiObj.getIPConfiguration(self.dev, self.adapterName)
if self.ip == "0.0.0.0":
- 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)
+- 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)
diff --git a/hplip.spec b/hplip.spec
index d6b78cd..928c464 100644
--- a/hplip.spec
+++ b/hplip.spec
@@ -6,18 +6,9 @@
Summary: HP Linux Imaging and Printing Project
Name: hplip
-Version: 3.25.8
-Release: 1%{?dist}
-# most files (base/*, *, ui*/...) - GPL2+
-# prnt/hpijs/ jpeg related files - IJG
-# prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267
-# base/exif.py - BSD-2-Clause - reported as https://gitlab.com/fedora/legal/fedora-license-data/-/issues/268
-# base/ldif.py - python-ldap - reported https://gitlab.com/fedora/legal/fedora-license-data/-/issues/269
-# io/*, scan/* - MIT
-# protocol/discovery/* - LGPL-2.1-or-later
-# protocol/* - GPL2only
-# scan/sane/sane.h - Public Domain
-License: GPL-2.0-or-later AND MIT AND BSD-3-Clause-HP AND IJG AND GPL-2.0-only AND LGPL-2.1-or-later AND BSD-2-Clause AND LicenseRef-Fedora-Public-Domain AND python-ldap
+Version: 3.22.10
+Release: 3%{?dist}
+License: GPLv2+ and MIT and BSD and IJG and GPLv2+ with exceptions and ISC
Url: https://developers.hp.com/hp-linux-imaging-and-printing
# Original source tarball
@@ -76,8 +67,6 @@ Patch30: hplip-hpfax-importerror-print.patch
Patch31: hplip-wifisetup.patch
# pgp.mit.edu keyserver got bad connection, so we need to have pool of keyservers
# to choose (Bz#1641100, launchpad#1799212)
-# F42+ update: HP has new key, and currently only on Ubuntu keyserver - so this patch now
-# only adjust terminal output, we will see if connection problems reappear
Patch32: hplip-keyserver.patch
# QMessagebox call was copy-pasted from Qt4 version, but Qt5 has different arguments,
# This patch solves most of them
@@ -179,19 +168,22 @@ Patch52: hplip-clean-ldl.patch
# - it will cause malfunction of printing and scanning for them
# https://bugs.launchpad.net/hplip/+bug/1883898
Patch53: hplip-revert-plugins.patch
+# non-sudoers cannot authenticate
+# reported upstream https://bugs.launchpad.net/hplip/+bug/1904888
+Patch54: hplip-check-userperms.patch
# if an user tries to install scanner via hp-setup (printer/fax utility)
# it fails further down - break out earlier with a message
# reported upstream as https://bugs.launchpad.net/hplip/+bug/1916114
-Patch54: hplip-hpsetup-noscanjets.patch
+Patch55: hplip-hpsetup-noscanjets.patch
# 1963114 - patch for hplip firmware load timeout fix
# reported upstream https://bugs.launchpad.net/hplip/+bug/1922404
-Patch55: hplip-hpfirmware-timeout.patch
+Patch56: hplip-hpfirmware-timeout.patch
# 1985251 - Incorrect permission for gpg directory
# reported upstream https://bugs.launchpad.net/hplip/+bug/1938442
-Patch56: hplip-gpgdir-perms.patch
+Patch57: hplip-gpgdir-perms.patch
# 1987141 - hp-plugin installs malformed udev files
# reported upstream https://bugs.launchpad.net/hplip/+bug/1847477
-Patch57: hplip-plugin-udevissues.patch
+Patch58: hplip-plugin-udevissues.patch
# 2080235 - Misleading errors about missing shared libraries when scanning
# downstream patch to prevent errors:
# - when loading libhpmud.so - unversioned .so files belong into devel packages,
@@ -200,63 +192,32 @@ Patch57: hplip-plugin-udevissues.patch
# package (if libhpmud.so had been moved to -devel) the dlopen on unversioned .so file was
# removed
# - /lib64/libm.so is not symlink but ld script, which cannot be used in dlopen()
-Patch58: hplip-no-libhpmud-libm-warnings.patch
-Patch59: hplip-plugin-script.patch
+Patch59: hplip-no-libhpmud-libm-warnings.patch
+# hplip 3.22.6 doesn't use the correct arguments for snprintf
+# reported as https://bugs.launchpad.net/hplip/+bug/1982185
+Patch60: hplip-snprintf-format.patch
+Patch61: hplip-plugin-script.patch
# C99 compatibility fixes by fweimer - use explicit int
# Submitted upstream:
-Patch60: hplip-pserror-c99.patch
+Patch62: hplip-pserror-c99.patch
# C99 compatibility patch by fweimer - several undefined functions in hpaio
# backend are declared in orblite.h
# Submitted upstream:
-Patch61: hplip-scan-hpaio-include.patch
+Patch63: hplip-scan-hpaio-include.patch
# C99 compatibility patch by fweimer - undefined _DBG() and dynamic linking funcs in orblite.c
# - _DBG() looks like typo and new header is added for funcs
# Submitted upstream:
-Patch62: hplip-scan-orblite-c99.patch
+Patch64: hplip-scan-orblite-c99.patch
# C99 compatibility patch by fweimer:
# PyString_AsStringAndSize is removed in Python3, remove its compilation for now
# in case there is a request for compiling it again, there is a possible solution
# for the function py3 alternative https://opendev.org/openstack/pyeclib/commit/19c8313986
# - disabling removes hp-unload and /usr/share/hplip/pcard as well
# Submitted upstream:
-Patch63: hplip-pcardext-disable.patch
+Patch65: hplip-pcardext-disable.patch
# undefined strcasestr() in sclpml.c - build with _GNU_SOURCE
# Submitted upstream:
-Patch64: hplip-sclpml-strcasestr.patch
-# 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed
-# https://bugs.launchpad.net/hplip/+bug/2027972
-Patch65: hplip-fix-parsing-lpstat.patch
-# switch to curl by downstream patch from wget to workaround openstack dropping IPv6
-# which causes great delays...
-# Remove this once internal openstack handles IPv6 better - test by pinging IPv6 in OpenStack,
-# it should not hang.
-Patch66: hplip-plugin-curl.patch
-# fix SyntaxWarning from python3.12
-# https://bugs.launchpad.net/hplip/+bug/2029480
-Patch67: hplip-use-raw-strings.patch
-# FTBFS GCC 14
-# https://bugs.launchpad.net/hplip/+bug/2048780
-Patch68: hplip-hpaio-gcc14.patch
-# format is no longer method in locale module
-# https://bugs.launchpad.net/hplip/+bug/2045507
-Patch69: hplip-locale-format.patch
-# function prototype did not specify argument's data types
-# https://bugs.launchpad.net/hplip/+bug/2096650
-Patch70: hplip-gcc15-stdc23.patch
-# status history table shows unformatted QDateTime values
-# https://bugs.launchpad.net/hplip/+bug/1956547
-Patch71: hplip-format-qdatetime.patch
-# Python 3.14 removed urlopener
-# https://bugs.launchpad.net/hplip/+bug/2115046
-Patch72: hplip-no-urlopener.patch
-# hp-scan command failed to run and gives an error (fedora#2395809)
-# https://bugs.launchpad.net/hplip/+bug/2124268
-Patch73: hplip-scan-size.patch
-# 3.25.8 brings new implementation for calling commands in subprocess,
-# but again directs I/O into pipes, which does not work for TUI plugin
-# installation. Additionally it tracebacks if stdout/stderr is None
-# https://bugs.launchpad.net/hplip/+bug/2110101
-Patch74: hplip-plugin-stdout.patch
+Patch66: hplip-sclpml-strcasestr.patch
%if 0%{?fedora} || 0%{?rhel} <= 8
# mention hplip-gui if you want to have GUI
@@ -309,22 +270,14 @@ BuildRequires: sane-backends-devel
# macros: %%{_tmpfilesdir}, %%{_udevrulesdir}
BuildRequires: systemd
-%if 0%{?fedora} || 0%{?rhel} <= 8
-Suggests: hplip-gui
-%endif
# uses avahi-browse for discovering IPP-over-USB printers
Recommends: avahi-tools
# 1733449 - Scanner on an HP AIO printer is not detected unless libsane-hpaio is installed
Recommends: libsane-hpaio%{?_isa} = %{version}-%{release}
-# downloaded plugin requires python3-gobject to work even via CLI...
-# but make it weak dependency, so users which don't need the plugin and have servers
-# can remove the python3-gobject which is used by desktop apps
-Recommends: python3-gobject
Requires: cups
-# switch to curl by downstream patch from wget to workaround openstack dropping IPv6
-# which causes great delays...
-Requires: curl
+# for bash script acting as hp-plugin (Source7)
+Requires: gawk
# set require directly to /usr/bin/gpg, because gnupg2 and gnupg ships it,
# but gnupg will be deprecated in the future
Requires: %{_bindir}/gpg
@@ -333,14 +286,13 @@ Requires: python3-dbus
%if 0%{?rhel} <= 8 || 0%{?fedora}
Requires: python3-pillow
%endif
-# user+group lp
-Requires: setup
# /usr/lib/udev/rules.d
Requires: systemd
# 1788643 - Fedora minimal does not ship tar by default
Requires: tar
# require usbutils, hp-diagnose_queues needs lsusb
Requires: usbutils
+Requires: wget
# require coreutils, because timeout binary is needed in post scriptlet,
# because hpcups-update-ppds script can freeze in certain situation and
@@ -353,12 +305,14 @@ drivers for HP printers and multi-function peripherals.
%package common
Summary: Files needed by the HPLIP printer and scanner drivers
+License: GPLv2+
%description common
Files needed by the HPLIP printer and scanner drivers.
%package libs
Summary: HPLIP libraries
+License: GPLv2+ and MIT
Requires: %{name}-common%{?_isa} = %{version}-%{release}
Requires: python3
@@ -368,13 +322,12 @@ Libraries needed by HPLIP.
%if 0%{?rhel} <= 8 || 0%{?fedora}
%package gui
Summary: HPLIP graphical tools
+License: BSD
BuildRequires: libappstream-glib
# for avahi-browse - looks for devices on local network
Recommends: avahi-tools
Recommends: libsane-hpaio%{?_isa} = %{version}-%{release}
-# for hp-check
-Recommends: pkgconf
Requires: %{name}%{?_isa} = %{version}-%{release}
# hpssd.py
@@ -388,6 +341,7 @@ HPLIP graphical tools.
%package -n libsane-hpaio
Summary: SANE driver for scanners in HP's multi-function devices
+License: GPLv2+
Requires: sane-backends
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
@@ -399,21 +353,21 @@ SANE driver for scanners in HP's multi-function devices (from HPOJ).
%setup -q
# The pstotiff filter is rubbish so replace it (launchpad #528394).
-%patch -P 1 -p1 -b .pstotiff-is-rubbish
+%patch1 -p1 -b .pstotiff-is-rubbish
# Fix compilation.
-%patch -P 2 -p1 -b .strstr-const
+%patch2 -p1 -b .strstr-const
# Make utils.checkPyQtImport() look for the gui sub-package (bug #243273).
-%patch -P 3 -p1 -b .ui-optional
+%patch3 -p1 -b .ui-optional
# Make sure to avoid handwritten asm.
-%patch -P 4 -p1 -b .no-asm
+%patch4 -p1 -b .no-asm
# Corrected several IEEE 1284 Device IDs using foomatic data.
# Color LaserJet 2500 series (bug #659040)
# LaserJet 4100 Series/2100 Series (bug #659039)
-%patch -P 5 -p1 -b .deviceIDs-drv
+%patch5 -p1 -b .deviceIDs-drv
chmod +x %{SOURCE2}
mv prnt/drv/hpijs.drv.in{,.deviceIDs-drv-hpijs}
%{SOURCE2} prnt/drv/hpcups.drv.in \
@@ -421,28 +375,28 @@ mv prnt/drv/hpijs.drv.in{,.deviceIDs-drv-hpijs}
> prnt/drv/hpijs.drv.in
# Move udev rules from /etc/ to /usr/lib/ (bug #748208).
-%patch -P 6 -p1 -b .udev-rules
+%patch6 -p1 -b .udev-rules
# Retry when connecting to device fails (bug #532112).
-%patch -P 7 -p1 -b .retry-open
+%patch7 -p1 -b .retry-open
# Mark SNMP quirks in PPD for HP OfficeJet Pro 8500 (bug #581825).
-%patch -P 8 -p1 -b .snmp-quirks
+%patch8 -p1 -b .snmp-quirks
# Fixed bogus low ink warnings from hpijs driver (bug #643643).
-%patch -P 9 -p1 -b .hpijs-marker-supply
+%patch9 -p1 -b .hpijs-marker-supply
# Clear old printer-state-reasons we used to manage (bug #510926).
-%patch -P 10 -p1 -b .clear-old-state-reasons
+%patch10 -p1 -b .clear-old-state-reasons
# Avoid busy loop in hpcups when backend has exited (bug #525944).
-%patch -P 11 -p1 -b .hpcups-sigpipe
+%patch11 -p1 -b .hpcups-sigpipe
# CUPS filters should use TMPDIR when available (bug #865603).
-%patch -P 12 -p1 -b .logdir
+%patch12 -p1 -b .logdir
# Fixed Device ID parsing code in hpijs's dj9xxvip.c (bug #510926).
-%patch -P 13 -p1 -b .bad-low-ink-warning
+%patch13 -p1 -b .bad-low-ink-warning
# Add Device ID for
# HP LaserJet Color M451dn (bug #1159380)
@@ -450,7 +404,7 @@ for ppd_file in $(grep '^diff' %{PATCH14} | cut -d " " -f 4);
do
gunzip ${ppd_file#*/}.gz
done
-%patch -P 14 -p1 -b .deviceIDs-ppd
+%patch14 -p1 -b .deviceIDs-ppd
for ppd_file in $(grep '^diff' %{PATCH14} | cut -d " " -f 4);
do
gzip -n ${ppd_file#*/}
@@ -461,173 +415,152 @@ for ppd_file in $(grep '^diff' %{PATCH15} | cut -d " " -f 4);
do
gunzip ${ppd_file#*/}.gz
done
-%patch -P 15 -p1 -b .ImageableArea
+%patch15 -p1 -b .ImageableArea
for ppd_file in $(grep '^diff' %{PATCH15} | cut -d " " -f 4);
do
gzip -n ${ppd_file#*/}
done
# Scan to /var/tmp instead of /tmp (bug #1076954).
-%patch -P 16 -p1 -b .scan-tmp
+%patch16 -p1 -b .scan-tmp
# Treat logging before importing of logger module (bug #984699).
-%patch -P 17 -p1 -b .log-stderr
+%patch17 -p1 -b .log-stderr
# Fix parsing of avahi-daemon output (bug #1096939).
-%patch -P 18 -p1 -b .parsing
+%patch18 -p1 -b .parsing
# Fixed left/right margins for HP DeskJet 990C (LP #1405212).
-%patch -P 19 -p1 -b .dj990c-margin
+%patch19 -p1 -b .dj990c-margin
# Fixed uses of strncpy throughout.
-%patch -P 20 -p1 -b .strncpy
+%patch20 -p1 -b .strncpy
# Don't try to write bytecode cache for hpfax backend (bug #1192761)
# or hp-config_usb_printer (bug #1266903)
# or hpps filter (bug #1241548).
-%patch -P 21 -p1 -b .no-write-bytecode
+%patch21 -p1 -b .no-write-bytecode
# Ignore IOError when logging output (bug #712537).
-%patch -P 22 -p1 -b .silence-ioerror
+%patch22 -p1 -b .silence-ioerror
# [abrt] hplip: hp-scan:663::NameError: name 'source_option' is not defined (bug #1341304)
-%patch -P 23 -p1 -b .sourceoption
+%patch23 -p1 -b .sourceoption
# hplip license problem (bug #1364711)
-%patch -P 24 -p1 -b .no-ernie
+%patch24 -p1 -b .no-ernie
# hplip appdata
-%patch -P 25 -p1 -b .appdata
+%patch25 -p1 -b .appdata
# hp-check shows 'CUPS incompatible or not running' even if CUPS is running (bug #1456467)
-%patch -P 26 -p1 -b .check-cups
+%patch26 -p1 -b .check-cups
# hp-firmware:NameError: name 'INTERACTIVE_MODE4' is not defined (bug #1533869)
-%patch -P 27 -p1 -b .typo
+%patch27 -p1 -b .typo
-%patch -P 28 -p1 -b .use-binary-str
+%patch28 -p1 -b .use-binary-str
# TypeError: 'Error' object does not support indexing (bug #1564770)
# upstream bug: https://bugs.launchpad.net/ubuntu/+source/hplip/+bug/1718129
# in python2 it was possible to acces Exception message by index [0].
# in python3 this is no longer possible and it causes TypeError.
-%patch -P 29 -p1 -b .error-print-fix
+%patch29 -p1 -b .error-print-fix
# TypeError: not all arguments converted during string formatting (bug #1566938)
# upstream bug: https://bugs.launchpad.net/ubuntu/+source/hplip/+bug/616450
# bug caused by more arguments than argument specifiers in formatted string
-%patch -P 30 -p1 -b .hpfax-import-error-print
+%patch30 -p1 -b .hpfax-import-error-print
# 'WifiSetupDialog' object has no attribute 'wifiobj' (bug #1626877)
# upstream bug: https://bugs.launchpad.net/hplip/+bug/1752060
# bug caused by typo in wifisetupdialog wifiObj property call
-%patch -P 31 -p1 -b .wifisetup-bad-call-fix
+%patch31 -p1 -b .wifisetup-bad-call-fix
# have pool of keyservers to choose
-%patch -P 32 -p1 -b .keyserver
+%patch32 -p1 -b .keyserver
# TypeError: argument 5 has unexpected type 'StandardButtons' (bug #1594602)
# upstream bug: https://bugs.launchpad.net/ubuntu/+source/hplip/+bug/1745383
# bug caused by typo in QMessageBox constructor call
# this patch fixes more of those typos - some fixed by tkorbar, some taken from ubuntu fix
-%patch -P 33 -p1 -b .qmsgbox-typos-fix
+%patch33 -p1 -b .qmsgbox-typos-fix
# removal of non open source code, taken from ubuntu
-%patch -P 34 -p1 -b .libimageprocessor-removal
+%patch34 -p1 -b .libimageprocessor-removal
%{_bindir}/rm prnt/hpcups/libImageProcessor-x86*
-%patch -P 35 -p1 -b .toolbox-crash
+%patch35 -p1 -b .toolbox-crash
# part of https://bugzilla.redhat.com/show_bug.cgi?id=1666076
-%patch -P 36 -p1 -b .add-ppd-crash
+%patch36 -p1 -b .add-ppd-crash
# 1671513 - after 'successful' plugin installation it is not installed
-%patch -P 37 -p1 -b .missing-links
+%patch37 -p1 -b .missing-links
# 1684434 - Scanning broken for HP LaserJet 3052
-%patch -P 38 -p1 -b .hp-laserjet-3052-broken-scanning
+%patch38 -p1 -b .hp-laserjet-3052-broken-scanning
# 1694663 - Cannot scan with M281fdw LaserJet - failed: Error during device I/O (part 1)
-%patch -P 39 -p1 -b .hpmud-string-parse
+%patch39 -p1 -b .hpmud-string-parse
# 1694663 - Cannot scan with M281fdw LaserJet - failed: Error during device I/O (part 2)
-%patch -P 40 -p1 -b .m278-m281-needs-plugin
+%patch40 -p1 -b .m278-m281-needs-plugin
# 1695716 - hpcups crashes in Compressor destructor
-%patch -P 41 -p1 -b .hpcups-crash
+%patch41 -p1 -b .hpcups-crash
# fixing issues found by coverity scan
-%patch -P 42 -p1 -b .covscan
+%patch42 -p1 -b .covscan
# segfault during logging (1727162)
-%patch -P 43 -p1 -b .logging-segfault
+%patch43 -p1 -b .logging-segfault
# 1738321 - [abrt] hp-systray:BlockingIOError: [Errno 11] Resource temporarily unavailable
-%patch -P 44 -p1 -b .systray-blockerror
+%patch44 -p1 -b .systray-blockerror
# 1742949, 1740132, 1739855 - missing drivers
-%patch -P 45 -p1 -b .missing-drivers
+%patch45 -p1 -b .missing-drivers
# 1772698 - Can't setup printer (HP LJ 2200): no attributes found in model.dat
-%patch -P 46 -p1 -b .model-mismatch
+%patch46 -p1 -b .model-mismatch
# 1573430 - sixext.py:to_string_utf8:UnicodeDecodeError: 'utf-8' codec can't decode bytes
-%patch -P 47 -p1 -b .unicodeerror
-%patch -P 48 -p1 -b .Wreturn-fix
-%patch -P 49 -p1 -b .configure-python
-%patch -P 50 -p1 -b .dialog-infinite-loop
+%patch47 -p1 -b .unicodeerror
+%patch48 -p1 -b .Wreturn-fix
+%patch49 -p1 -b .configure-python
+%patch50 -p1 -b .dialog-infinite-loop
# 1590014 - hplip PPD search doesn't expect '-' in device name
-%patch -P 51 -p1 -b .find-driver
+%patch51 -p1 -b .find-driver
# 1833308 - hp-clean cannot clean HP PSC1410 - Device I/O error
-%patch -P 52 -p1 -b .clean-ldl
-%patch -P 53 -p1 -b .revert-plugins
+%patch52 -p1 -b .clean-ldl
+%patch53 -p1 -b .revert-plugins
+# 1899410 - non-sudoers cannot authenticate because of bad username in prompt
+%patch54 -p1 -b .check-userperms
# if an user tries to install scanner via hp-setup (printer/fax utility)
# it fails further down - break out earlier with a message
-%patch -P 54 -p1 -b .hpsetup-noscanjets
+%patch55 -p1 -b .hpsetup-noscanjets
# 1963114 - patch for hplip firmware load timeout fix
-%patch -P 55 -p1 -b .hpfirmware-timeout
+%patch56 -p1 -b .hpfirmware-timeout
# 1985251 - Incorrect permission for gpg directory
-%patch -P 56 -p1 -b .gpgdir-perms
+%patch57 -p1 -b .gpgdir-perms
# 1987141 - hp-plugin installs malformed udev files
-%patch -P 57 -p1 -b .hpplugin-udevperms
+%patch58 -p1 -b .hpplugin-udevperms
# 2080235 - Misleading errors about missing shared libraries when scanning
-%patch -P 58 -p1 -b .no-libm-libhpmud-warn
-%patch -P 59 -p1 -b .plugin-patch
+%patch59 -p1 -b .no-libm-libhpmud-warn
+# hplip 3.22.6 doesn't use proper arguments for snprintf
+%patch60 -p1 -b .snprintf-format
+%patch61 -p1 -b .plugin-patch
# C99 compatibility fixes by fweimer - use explicit int
# Submitted upstream:
-%patch -P 60 -p1 -b .pserror-int
+%patch62 -p1 -b .pserror-int
# C99 compatibility patch by fweimer - several undefined functions in hpaio
# backend are declared in orblite.h
# Submitted upstream:
-%patch -P 61 -p1 -b .hpaio-orblite-defs
+%patch63 -p1 -b .hpaio-orblite-defs
# C99 compatibility patch by fweimer - undefined _DBG() and dynamic linking funcs in orblite.c
# - _DBG() looks like typo and new header is added for funcs
# Submitted upstream:
-%patch -P 62 -p1 -b .orblite-undefs
+%patch64 -p1 -b .orblite-undefs
# C99 compatibility patch by fweimer - python2 PyString_AsStringAndSize in python3 code
# gives undefined reference - removed for now with dependent hp-unload
-%patch -P 63 -p1 -b .pcardext-disable
+%patch65 -p1 -b .pcardext-disable
# C99 compatibility patch by fweimer - undefined strcasestr() in sclpml.c - build with _GNU_SOURCE
-%patch -P 64 -p1 -b .sclpml-strcasestr
-# 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed
-# https://bugs.launchpad.net/hplip/+bug/2027972
-%patch -P 65 -p1 -b .lpstat-parse
-# switch to curl by downstream patch from wget to workaround openstack dropping IPv6
-# which causes great delays...
-%patch -P 66 -p1 -b .curl-switch
-# fix warnings
-# upstream https://bugs.launchpad.net/hplip/+bug/2029480
-%patch -P 67 -p1 -b .raw-strings
-# FTBFS GCC 14
-# https://bugs.launchpad.net/hplip/+bug/2048780
-%patch -P 68 -p1 -b .hpaio-gcc14
-# format is no longer method in locale module
-# https://bugs.launchpad.net/hplip/+bug/2045507
-%patch -P 69 -p1 -b .locale-format
-# https://bugs.launchpad.net/hplip/+bug/2096650
-%patch -P 70 -p1 -b .gcc-strc23
-# https://bugs.launchpad.net/hplip/+bug/1956547
-%patch -P 71 -p1 -b .format-qdatetime
-# https://bugs.launchpad.net/hplip/+bug/2115046
-%patch -P 72 -p1 -b .no-urlopener
-# https://bugs.launchpad.net/hplip/+bug/2124268
-%patch -P 73 -p1 -b .scan-size
-# https://bugs.launchpad.net/hplip/+bug/2110101
-%patch -P 74 -p1 -b .plugin-stdout
+%patch66 -p1 -b .sclpml-strcasestr
# Fedora specific patches now, don't put a generic patches under it
%if 0%{?fedora} || 0%{?rhel} <= 8
# mention hplip-gui should be installed if you want GUI
-%patch -P 1000 -p1 -b .fedora-gui
+%patch1000 -p1 -b .fedora-gui
%endif
@@ -642,12 +575,13 @@ sed -i.env-python -e 's,^#!/usr/bin/env python,#!%{__python3},' \
prnt/filters/hpps \
fax/filters/pstotiff
+rm locatedriver
+
cp -p %{SOURCE4} %{SOURCE5} ppd/hpcups
# 2129849 - move hp-plugin script into srcdir
cp -p %{SOURCE7} .
-
%build
# Work-around Makefile.am imperfections.
sed -i 's|^AM_INIT_AUTOMAKE|AM_INIT_AUTOMAKE([foreign])|g' configure.in
@@ -878,7 +812,6 @@ find doc/images -type f -exec chmod 644 {} \;
%{_cups_serverbin}/backend/hp
%{_cups_serverbin}/backend/hpfax
# ex-hpijs
-%{_cups_serverbin}/filter/hpcdmfax
%{_cups_serverbin}/filter/hpcups
%{_cups_serverbin}/filter/hpcupsfax
%{_cups_serverbin}/filter/hpps
@@ -994,133 +927,6 @@ find doc/images -type f -exec chmod 644 {} \;
%config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio
%changelog
-* Fri Jan 09 2026 Zdenek Dohnal - 3.25.8-1
-- hplip-3.25.8 is available (fedora#2415311)
-
-* Wed Sep 17 2025 Zdenek Dohnal - 3.25.6-1
-- hp-scan command failed to run and gives an error (fedora#2395809)
-- use new GPG key from HP - new key was used as fix for CVE-2025-43023
-
-* Tue Aug 12 2025 Zdenek Dohnal - 3.25.6-1
-- hplip-3.25.6 is available (fedora#2386814)
-
-* Thu Jul 24 2025 Fedora Release Engineering - 3.25.2-8
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
-
-* Thu Jun 19 2025 Zdenek Dohnal - 3.25.2-7
-- Python 3.14 removed URLopener
-
-* Mon Jun 02 2025 Python Maint - 3.25.2-6
-- Rebuilt for Python 3.14
-
-* Mon May 26 2025 Zdenek Dohnal - 3.25.2-5
-- hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501)
-
-* Mon May 12 2025 Zdenek Dohnal - 3.25.2-4
-- plugin.conf now looks to use sha256 as well per email comms with HP, drop the revert
-
-* Wed May 07 2025 Zdenek Dohnal - 3.25.2-3
-- hp-plugin failed checksum due usage of different hashes (fedora#2361230)
-- output is not seen after installing plugin (fedora#2361230)
-
-* Wed Apr 16 2025 Zdenek Dohnal - 3.25.2-2
-- remove Recommends on hplip-gui due complaint at (fedora#2360020)
-
-* Fri Apr 11 2025 Zdenek Dohnal - 3.25.2-1
-- hplip-3.25.2 is available (fedora#2353147)
-
-* Thu Apr 03 2025 FeRD (Frank Dana) - 3.24.5-5
-- hp-plugin: Use rpm queryformat to get version (no gawk dependency)
-
-* Thu Apr 03 2025 FeRD (Frank Dana) - 3.24.4-5
-- Use weak rich dependency for hplip-gui
-
-* Wed Apr 02 2025 FeRD (Frank Dana) - 3.24.4-5
-- Format QDateTime strings in Status History table, elsewhere
-
-* Wed Apr 02 2025 Zdenek Dohnal - 3.24.4-5
-- hp-plugin-download did not follow redirections and was missing '-o' in grep
-
-* Mon Mar 03 2025 Zdenek Dohnal - 3.24.4-4
-- enable following links with curl in all use cases (fedora#2349177)
-
-* Tue Feb 11 2025 Zdenek Dohnal - 3.24.4-3
-- require setup because of lp group
-
-* Fri Jan 24 2025 Zdenek Dohnal - 3.24.4-2
-- fix FTBFS (fedora#2340616)
-
-* Fri Jan 17 2025 Fedora Release Engineering - 3.24.4-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
-
-* Tue Jul 23 2024 Zdenek Dohnal - 3.24.4-1
-- 2292623 - hplip-3.24.4 is available
-
-* Thu Jul 18 2024 Fedora Release Engineering - 3.23.12-8
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
-
-* Fri Jun 07 2024 Python Maint - 3.23.12-7
-- Rebuilt for Python 3.13
-
-* Thu Mar 21 2024 Zdenek Dohnal - 3.23.12-6
-- hp-plugin-download - curl removed --create-dir parameter
-
-* Mon Mar 18 2024 Zdenek Dohnal - 3.23.12-5
-- 2270031 - hp-firmware: module 'locale' not longer provides method 'format', causing traceback
-
-* Wed Jan 24 2024 Fedora Release Engineering - 3.23.12-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
-
-* Sat Jan 20 2024 Fedora Release Engineering - 3.23.12-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
-
-* Fri Jan 19 2024 Zdenek Dohnal - 3.23.12-2
-- add fallback url to hp-plugin-download
-
-* Mon Jan 08 2024 Zdenek Dohnal - 3.23.12-1
-- 2252302 - hplip-3.23.12 is available
-
-* Tue Oct 03 2023 Zdenek Dohnal - 3.23.8-1
-- 2239465 - hplip-3.23.8 is available
-
-* Tue Oct 03 2023 Zdenek Dohnal - 3.23.5-10
-- BSD-3-Clause-HP and python-ldap are added into SPDX list
-
-* Thu Aug 24 2023 Zdenek Dohnal - 3.23.5-9
-- hp-check: use pkgconf when checking for cups version
-
-* Thu Aug 03 2023 Zdenek Dohnal - 3.23.5-8
-- fallback to using external plugin for Hbpl1 printers
-
-* Fri Jul 28 2023 Zdenek Dohnal - 3.23.5-7
-- SPDX migration
-
-* Thu Jul 27 2023 Zdenek Dohnal - 3.23.5-6
-- remove redundant files
-
-* Fri Jul 21 2023 Zdenek Dohnal - 3.23.5-6
-- fix syntax warnings
-
-* Thu Jul 20 2023 Fedora Release Engineering - 3.23.5-5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
-
-* Tue Jul 18 2023 Adam Williamson - 3.23.5-4
-- Require curl, not curl-minimal, due to conflicts
-
-* Mon Jul 17 2023 Zdenek Dohnal - 3.23.5-3
-- 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed
-- switch to curl when downloading plugin
-- 2221311 - [python3.12] hplip tools/binaries crash due depending on removed configparser.readfp()
-
-* Tue Jun 13 2023 Python Maint - 3.23.5-2
-- Rebuilt for Python 3.12
-
-* Tue Jun 06 2023 Zdenek Dohnal - 3.23.5-1
-- 2184067 - hplip-3.23.5 is available
-
-* Thu Jan 19 2023 Fedora Release Engineering - 3.22.10-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
-
* Thu Dec 01 2022 Zdenek Dohnal - 3.22.10-3
- 2148210 - hplip: pcardext Python extension broken
- stop shipping hp-unload, since it depends on pcardext
diff --git a/plans.fmf b/plans.fmf
deleted file mode 100644
index f4c2755..0000000
--- a/plans.fmf
+++ /dev/null
@@ -1,37 +0,0 @@
-/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
-
diff --git a/rpminspect.yaml b/rpminspect.yaml
deleted file mode 100644
index 3092346..0000000
--- a/rpminspect.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-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
diff --git a/sources b/sources
index 601b241..b462c5f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (hplip-3.25.8-repack.tar.gz) = e4f82215e2753bee864e5ba643be2ce3566f1691638c35c74016279f92c872713d06e38a066d283f03f3e571d10c8ac2f1539bd32f6bafd1958641d96fe11059
+SHA512 (hplip-3.22.10-repack.tar.gz) = cc7cc12ed04e08cbded581351280b71e13525b06a333d43078d67ae591baeecd29773a7f7fb5ebfc3dd842b1e4c9a84af9c5747987ef1941d1eef405ecb65fc1
diff --git a/upstream-key.gpg b/upstream-key.gpg
new file mode 100644
index 0000000..bccc555
--- /dev/null
+++ b/upstream-key.gpg
@@ -0,0 +1,30 @@
+-----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-----