diff --git a/.abf.yml b/.abf.yml index 12320fb..2599129 100644 --- a/.abf.yml +++ b/.abf.yml @@ -1,6 +1,7 @@ ---- +removed_sources: + hplip-3.13.10.tar.gz: 8c570ea4ed64a7e1a199f70de0f72178e07de026 + hplip-3.13.8.tar.gz: c91fd5231e056f03dc7e715a84afcb13074364d1 sources: + SmartInstallDisable-Tool.run: c82103aa609cd7e58f43b090266bb77216933937 hp-sendfax.png: 2201320c59c2eaba10abce5c40306c6461e79beb hplip-3.13.11.tar.gz: 240dcaf52c75a23cd5ab6a4426364245e7c2474e - SmartInstallDisable-Tool.run: c82103aa609cd7e58f43b090266bb77216933937 - \ No newline at end of file diff --git a/10_shebang_fixes.dpatch b/10_shebang_fixes.dpatch new file mode 100644 index 0000000..ac660ab --- /dev/null +++ b/10_shebang_fixes.dpatch @@ -0,0 +1,16 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 10_hashbang_fixes.dpatch by Henrique de Moraes Holschuh +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix missing, weird or otherwise broken shebang lines + +@DPATCH@ +Index: hplip-3.12.4/__init__.py +=================================================================== +--- hplip-3.12.4.orig/__init__.py 2012-04-10 18:35:13.000000000 +1000 ++++ hplip-3.12.4/__init__.py 2012-05-26 10:21:29.000000000 +1000 +@@ -1,3 +1,4 @@ ++#!/usr/bin/env python + # -*- coding: utf-8 -*- + # + # (c) Copyright 2003-2007 Hewlett-Packard Development Company, L.P. diff --git a/87_move_documentation.dpatch b/87_move_documentation.dpatch new file mode 100644 index 0000000..0437b02 --- /dev/null +++ b/87_move_documentation.dpatch @@ -0,0 +1,24 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 87_move_documentation.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: place html documentation under hplip-doc/HTML/ + +@DPATCH@ +--- a/Makefile.am ++++ b/Makefile.am +@@ -29,11 +29,11 @@ + + if DOC_BUILD + wwwsrc = doc +-www0dir = $(docdir) ++www0dir = $(hpdocdir)/HTML + dist_www0_DATA = $(wwwsrc)/index.html $(wwwsrc)/commandline.html $(wwwsrc)/copying.html $(wwwsrc)/devicemanager.html $(wwwsrc)/faxtrouble.html $(wwwsrc)/gettinghelp.html $(wwwsrc)/hpscan.html $(wwwsrc)/mainttask.html $(wwwsrc)/plugins.html $(wwwsrc)/print.html $(wwwsrc)/printing.html $(wwwsrc)/printoptions.html $(wwwsrc)/printtroubleshooting.html $(wwwsrc)/scanning.html $(wwwsrc)/scantrouble.html $(wwwsrc)/sendfax.html $(wwwsrc)/setup.html $(wwwsrc)/systray.html $(wwwsrc)/troubleshooting.html $(wwwsrc)/uninstalling.html $(wwwsrc)/upgrading.html +-www3dir = $(docdir)/styles ++www3dir = $(www0dir)/styles + dist_www3_DATA = $(wwwsrc)/styles/* +-www4dir = $(docdir)/images ++www4dir = $(www0dir)/images + dist_www4_DATA = $(wwwsrc)/images/* + endif + diff --git a/fix-uninitialized-variables.patch b/fix-uninitialized-variables.patch new file mode 100644 index 0000000..c84eee3 --- /dev/null +++ b/fix-uninitialized-variables.patch @@ -0,0 +1,11 @@ +--- ip/xmatrix.c.orig 2004-02-18 23:43:44.000000000 +0100 ++++ ip/xmatrix.c 2005-05-17 13:48:17.000000000 +0200 +@@ -380,7 +380,7 @@ + + while (pwOut < (WORD*)pOutAfter) + { +- int prod0, prod1, prod2; ++ int prod0 = 0, prod1 = 0, prod2 = 0; + + /* The fixed-point calculations below are as follows: + * 17.15 = input pixel diff --git a/hp-mkuri-take-into-account-already-installed-plugin-also-for-exit-value.dpatch b/hp-mkuri-take-into-account-already-installed-plugin-also-for-exit-value.dpatch new file mode 100644 index 0000000..22dbc3f --- /dev/null +++ b/hp-mkuri-take-into-account-already-installed-plugin-also-for-exit-value.dpatch @@ -0,0 +1,43 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## hp-mkuri-take-into-account-already-installed-plugin-also-for-exit-value.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +Index: hplip-3.12.4/io/hpmud/hp-mkuri.c +=================================================================== +--- hplip-3.12.4.orig/io/hpmud/hp-mkuri.c 2012-04-10 18:35:06.000000000 +1000 ++++ hplip-3.12.4/io/hpmud/hp-mkuri.c 2012-05-26 10:23:52.000000000 +1000 +@@ -385,17 +385,23 @@ + } + + ret = 0; +- if (plugin == HPMUD_PLUGIN_TYPE_REQUIRED) +- ret = 2; +- else if (plugin == HPMUD_PLUGIN_TYPE_OPTIONAL) +- ret = 3; +- if (fax > 0) ++ if (!plugin_installed) + { +- ret = 4; + if (plugin == HPMUD_PLUGIN_TYPE_REQUIRED) +- ret = 5; ++ ret = 2; + else if (plugin == HPMUD_PLUGIN_TYPE_OPTIONAL) +- ret = 6; ++ ret = 3; ++ } ++ if (fax > 0) ++ { ++ ret = 4; ++ if (!plugin_installed) ++ { ++ if (plugin == HPMUD_PLUGIN_TYPE_REQUIRED) ++ ret = 5; ++ else if (plugin == HPMUD_PLUGIN_TYPE_OPTIONAL) ++ ret = 6; ++ } + } + + bugout: diff --git a/hp-setup-prompt-for-custom-PPD.dpatch b/hp-setup-prompt-for-custom-PPD.dpatch new file mode 100644 index 0000000..768e76c --- /dev/null +++ b/hp-setup-prompt-for-custom-PPD.dpatch @@ -0,0 +1,32 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## hp-setup-prompt-for-custom-PPD.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +Index: hplip-3.12.4/setup.py +=================================================================== +--- hplip-3.12.4.orig/setup.py 2012-04-10 18:35:14.000000000 +1000 ++++ hplip-3.12.4/setup.py 2012-05-26 10:21:29.000000000 +1000 +@@ -487,14 +487,13 @@ + print_ppd, desc = print_ppd + log.info("\nFound PPD file: %s" % print_ppd) + +- if desc: +- log.info("Description: %s" % desc) ++ log.info("Description: %s" % desc) + # +- if not auto: +- log.info("\nNote: The model number may vary slightly from the actual model number on the device.") +- ok, ans = tui.enter_yes_no("\nDoes this PPD file appear to be the correct one") +- if not ok: sys.exit(0) +- if not ans: enter_ppd = True ++ if not auto: ++ log.info("\nNote: The model number may vary slightly from the actual model number on the device.") ++ ok, ans = tui.enter_yes_no("\nDoes this PPD file appear to be the correct one") ++ if not ok: sys.exit(0) ++ if not ans: enter_ppd = True + + + if enter_ppd: diff --git a/hplip-3.12.9-addprinter.patch b/hplip-3.12.9-addprinter.patch new file mode 100644 index 0000000..6d0a340 --- /dev/null +++ b/hplip-3.12.9-addprinter.patch @@ -0,0 +1,10 @@ +--- hplip-3.12.9/prnt/cupsext/cupsext.c.addprinter 2012-09-04 14:31:10.000000000 +0200 ++++ hplip-3.12.9/prnt/cupsext/cupsext.c 2012-09-11 16:42:26.229950718 +0200 +@@ -324,6 +324,7 @@ PyObject * getPrinters( PyObject * self, + }; + + /* Connect to the HTTP server */ ++ cupsSetUser ("root"); + if ( ( http = httpConnectEncrypt( cupsServer(), ippPort(), cupsEncryption() ) ) == NULL ) + { + goto abort; diff --git a/hplip-3.13.10-fix-systray-x.patch b/hplip-3.13.10-fix-systray-x.patch new file mode 100644 index 0000000..19d14fb --- /dev/null +++ b/hplip-3.13.10-fix-systray-x.patch @@ -0,0 +1,12 @@ +diff -Naur hplip-3.13.10.orig/hplip-systray.desktop.in hplip-3.13.10/hplip-systray.desktop.in +--- hplip-3.13.10.orig/hplip-systray.desktop.in 2013-11-13 16:27:03.130195952 +0400 ++++ hplip-3.13.10/hplip-systray.desktop.in 2013-11-13 16:28:12.465200259 +0400 +@@ -4,7 +4,7 @@ + Name=HP System Tray Service + GenericName=Printer Status Applet + Comment=HP System Tray Service +-Exec=hp-systray -x ++Exec=hp-systray + Icon=@abs_datadir@/hplip/data/images/128x128/hp_logo.png + Terminal=false + Categories=Application;Utility; diff --git a/hplip-3.13.10-fix-udev-rules.patch b/hplip-3.13.10-fix-udev-rules.patch deleted file mode 100644 index 7a3f75f..0000000 --- a/hplip-3.13.10-fix-udev-rules.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- hplip-3.13.10/data/rules/56-hpmud_sysfs.rules 2013-10-11 09:38:53.000000000 +0000 -+++ hplip-3.13.10/data/rules/56-hpmud_sysfs.rules.tpg 2013-10-19 11:15:57.196603385 +0000 -@@ -14,9 +14,6 @@ - # For RHEL 5, centos 5.. - ENV{hp_test}=="yes", PROGRAM="/bin/sh -c 'X=%k; X=$${X#usbdev}; B=$${X%%%%.*}; D=$${X#*.}; logger -p user.info loading HP Device $$B $$D; printf %%03i:%%03i $$B $$D'", RUN+="/bin/sh -c '/usr/bin/python hp-config_usb_printer %c '" - --# This rule will add the printer and install plugin --ENV{hp_test}=="yes", PROGRAM="/bin/sh -c 'logger -p user.info loading HP Device $env{BUSNUM} $env{DEVNUM}'", RUN+="/bin/sh -c 'if [ -f /usr/bin/systemctl ]; then /usr/bin/systemctl --no-block start hplip-printer@$env{BUSNUM}:$env{DEVNUM}.service; else /usr/bin/nohup /usr/bin/python /usr/bin/hp-config_usb_printer $env{BUSNUM}:$env{DEVNUM} ; fi'" -- - # If sane-bankends is installed add hpaio backend support to dll.conf if needed. - ENV{sane_hpaio}=="yes", RUN+="/bin/sh -c 'grep -q ^#hpaio /etc/sane.d/dll.conf;if [ $$? -eq 0 ];then sed -i -e s/^#hpaio/hpaio/ /etc/sane.d/dll.conf;else grep -q ^hpaio /etc/sane.d/dll.conf;if [ $$? -ne 0 ];then echo hpaio >>/etc/sane.d/dll.conf;fi;fi'" - diff --git a/hplip-CVE-2013-4325.patch b/hplip-CVE-2013-4325.patch new file mode 100644 index 0000000..9cc9f1e --- /dev/null +++ b/hplip-CVE-2013-4325.patch @@ -0,0 +1,46 @@ +diff --git a/hplip/0001-pkit-Pass-system-bus-name-as-subject-not-pid.patch b/hplip/0001-pkit-Pass-system-bus-name-as-subject-not-pid.patch +new file mode 100644 +index 0000000..ab21134 +--- /dev/null ++++ b/hplip/0001-pkit-Pass-system-bus-name-as-subject-not-pid.patch +@@ -0,0 +1,38 @@ ++From 6d7ddfd19733f2a8197c1e7ad8fdfef2b7e17c1a Mon Sep 17 00:00:00 2001 ++From: Colin Walters ++Date: Thu, 22 Aug 2013 17:37:31 -0400 ++Subject: [PATCH] pkit: Pass system-bus-name as subject, not pid ++ ++Previously, we were forcing polkit to scrape /proc/pid itself for the ++uid, which is subject to a race condition if the caller execve()s a ++setuid binary. Passing system-bus-name as a subject allows polkit to ++use the valid information from the system bus. ++--- ++ base/pkit.py | 9 ++------- ++ 1 files changed, 2 insertions(+), 7 deletions(-) ++ ++diff --git a/base/pkit.py b/base/pkit.py ++index 0acc124..08bebc8 100644 ++--- a/base/pkit.py +++++ b/base/pkit.py ++@@ -176,15 +176,10 @@ class PolicyKitService(dbus.service.Object): ++ "/org/freedesktop/PolicyKit1/Authority", ++ "org.freedesktop.PolicyKit1.Authority") ++ policy_kit = dbus.Interface(obj, "org.freedesktop.PolicyKit1.Authority") ++- info = dbus.Interface(connection.get_object("org.freedesktop.DBus", ++- "/org/freedesktop/DBus/Bus", ++- False), ++- "org.freedesktop.DBus") ++- pid = info.GetConnectionUnixProcessID(sender) ++ ++ subject = ( ++- 'unix-process', ++- { 'pid' : dbus.UInt32(pid, variant_level = 1) } +++ 'system-bus-name', +++ { 'name' : dbus.String(sender, variant_level = 1) } ++ ) ++ details = { '' : '' } ++ flags = dbus.UInt32(1) # AllowUserInteraction = 0x00000001 ++-- ++1.7.1 ++ + + diff --git a/hplip-UnicodeDecodeError.patch b/hplip-UnicodeDecodeError.patch new file mode 100644 index 0000000..6bdd9dc --- /dev/null +++ b/hplip-UnicodeDecodeError.patch @@ -0,0 +1,12 @@ +diff -up hplip-3.10.9/ui4/printsettingstoolbox.py.UnicodeDecodeError hplip-3.10.9/ui4/printsettingstoolbox.py +--- hplip-3.10.9/ui4/printsettingstoolbox.py.UnicodeDecodeError 2010-09-26 19:07:19.000000000 +0200 ++++ hplip-3.10.9/ui4/printsettingstoolbox.py 2010-10-22 15:01:13.000000000 +0200 +@@ -459,7 +459,7 @@ class PrintSettingsToolbox(QToolBox): + + self.beginControlGroup(g, QString(text)) + +- log.debug(" Text: %s" % unicode(text)) ++ log.debug(" Text: %s" % repr(text)) + log.debug("Num subgroups: %d" % num_subgroups) + + options = cups.getOptionList(g) diff --git a/hplip-check.patch b/hplip-check.patch new file mode 100644 index 0000000..1cd3b85 --- /dev/null +++ b/hplip-check.patch @@ -0,0 +1,41 @@ +diff -up hplip-3.12.10a/check.py.check hplip-3.12.10a/check.py +diff -up hplip-3.12.10a/installer/core_install.py.check hplip-3.12.10a/installer/core_install.py +--- hplip-3.12.10a/installer/core_install.py.check 2012-11-22 13:22:58.527444444 +0000 ++++ hplip-3.12.10a/installer/core_install.py 2012-11-22 13:27:11.319338942 +0000 +@@ -1153,18 +1153,24 @@ class CoreInstall(object): + + def check_hpaio(self): + found = False +- log.debug("'Checking for hpaio' in '/etc/sane.d/dll.conf'...") +- try: +- f = file('/etc/sane.d/dll.conf', 'r') +- except IOError: +- log.error("'/etc/sane.d/dll.conf' not found. Is SANE installed?") +- else: +- for line in f: +- lineNoSpace = re.sub(r'\s', '', line) +- hpaiomatched=re.match('hpaio',lineNoSpace) +- if hpaiomatched: +- found = True +- break ++ for path in ['/etc/sane.d/dll.conf', ++ '/etc/sane.d/dll.d/hpaio']: ++ log.debug("'Checking for hpaio' in '%s'..." % path) ++ try: ++ f = file(path, 'r') ++ except IOError: ++ log.error("'%s' not found. Is SANE installed?" % path) ++ else: ++ for line in f: ++ lineNoSpace = re.sub(r'\s', '', line) ++ hpaiomatched=re.match('hpaio',lineNoSpace) ++ if hpaiomatched: ++ found = True ++ break ++ ++ if found: ++ break ++ + return found + + def update_hpaio(self): diff --git a/hplip-dbglog-newline.patch b/hplip-dbglog-newline.patch new file mode 100644 index 0000000..c962ff4 --- /dev/null +++ b/hplip-dbglog-newline.patch @@ -0,0 +1,188 @@ +diff -up hplip-3.12.6/prnt/hpcups/HPCupsFilter.cpp.dbglog-newline hplip-3.12.6/prnt/hpcups/HPCupsFilter.cpp +--- hplip-3.12.6/prnt/hpcups/HPCupsFilter.cpp.dbglog-newline 2012-06-19 11:01:38.000000000 +0200 ++++ hplip-3.12.6/prnt/hpcups/HPCupsFilter.cpp 2012-06-19 11:02:52.150529477 +0200 +@@ -440,7 +440,7 @@ DRIVER_ERROR HPCupsFilter::startPage (cu + m_DBusComm.sendEvent(EVENT_PRINT_FAILED_MISSING_PLUGIN, "Plugin missing", m_JA.job_id, m_JA.user_name); + + } +- dbglog ("m_Job initialization failed with error = %d", err); ++ dbglog ("m_Job initialization failed with error = %d\n", err); + ppdClose(m_ppd); + m_ppd = NULL; + return err; +@@ -533,7 +533,7 @@ int HPCupsFilter::StartPrintJob(int arg + close(fd); + } + if (m_iLogLevel & BASIC_LOG) +- dbglog("HPCUPS: processRasterData returned %d, calling closeFilter()", err); ++ dbglog("HPCUPS: processRasterData returned %d, calling closeFilter()\n", err); + closeFilter(); + cupsRasterClose(cups_raster); + return 1; +@@ -543,7 +543,7 @@ int HPCupsFilter::StartPrintJob(int arg + close(fd); + } + if (m_iLogLevel & BASIC_LOG) +- dbglog("HPCUPS: StartPrintJob end of job, calling closeFilter()"); ++ dbglog("HPCUPS: StartPrintJob end of job, calling closeFilter()\n"); + closeFilter(); + cupsRasterClose(cups_raster); + return 0; +@@ -678,7 +678,7 @@ int HPCupsFilter::processRasterData(cups + //Need to revisit to crosscheck if it is a firmware issue. + + *m_pPrinterBuffer = 0x01; +- dbglog("First raster data plane.." ); ++ dbglog("First raster data plane..\n" ); + } + + if (this->isBlankRaster((BYTE *) m_pPrinterBuffer, &cups_header)) { +diff -up hplip-3.12.6/prnt/hpcups/Lidil.cpp.dbglog-newline hplip-3.12.6/prnt/hpcups/Lidil.cpp +--- hplip-3.12.6/prnt/hpcups/Lidil.cpp.dbglog-newline 2012-06-18 12:40:17.000000000 +0200 ++++ hplip-3.12.6/prnt/hpcups/Lidil.cpp 2012-06-19 11:01:39.598521705 +0200 +@@ -103,7 +103,7 @@ DRIVER_ERROR Lidil::Configure(Pipeline * + if (m_pPM->BaseResX != m_pQA->horizontal_resolution || + m_pPM->BaseResY != m_pQA->vertical_resolution) + { +- dbglog("Requested resolution not supported with requested printmode"); ++ dbglog("Requested resolution not supported with requested printmode\n"); + return UNSUPPORTED_PRINTMODE; + } + +@@ -166,7 +166,7 @@ DRIVER_ERROR Lidil::StartJob(SystemServi + + if (!selectPrintMode()) + { +- dbglog("selectPrintMode failed, PrintMode name = %s", m_pQA->print_mode_name); ++ dbglog("selectPrintMode failed, PrintMode name = %s\n", m_pQA->print_mode_name); + return UNSUPPORTED_PRINTMODE; + } + +@@ -174,7 +174,7 @@ DRIVER_ERROR Lidil::StartJob(SystemServi + if (m_pPM->BaseResX != m_pQA->horizontal_resolution || + m_pPM->BaseResY != m_pQA->vertical_resolution) + { +- dbglog("Requested resolution not supported with requested printmode"); ++ dbglog("Requested resolution not supported with requested printmode\n"); + dbglog(" m_pPM->BaseResX = %d\n",m_pPM->BaseResX); + dbglog(" m_pPM->BaseResY = %d\n",m_pPM->BaseResY); + dbglog(" m_pQA->horizontal_resolution = %d\n",m_pQA->horizontal_resolution); +@@ -193,7 +193,7 @@ DRIVER_ERROR Lidil::StartJob(SystemServi + err = allocateSwathBuffers(); + if (err != NO_ERROR) + { +- dbglog("allocateSwathBuffers failed, err = %d", err); ++ dbglog("allocateSwathBuffers failed, err = %d\n", err); + return err; + } + +@@ -625,7 +625,7 @@ bool Lidil::selectPrintMode() + { + if (m_pJA->printer_platform[0] == 0) + { +- dbglog("printer_platform is undefined"); ++ dbglog("printer_platform is undefined\n"); + return false; + } + for (unsigned int i = 0; i < sizeof(lidil_print_modes_table) / sizeof(lidil_print_modes_table[0]); i++) +@@ -635,7 +635,7 @@ bool Lidil::selectPrintMode() + return selectPrintMode(i); + } + } +- dbglog("Unsupported printer_platform: %s", m_pJA->printer_platform); ++ dbglog("Unsupported printer_platform: %s\n", m_pJA->printer_platform); + return false; + } + +diff -up hplip-3.12.6/prnt/hpcups/Pcl3.cpp.dbglog-newline hplip-3.12.6/prnt/hpcups/Pcl3.cpp +--- hplip-3.12.6/prnt/hpcups/Pcl3.cpp.dbglog-newline 2012-06-18 12:40:17.000000000 +0200 ++++ hplip-3.12.6/prnt/hpcups/Pcl3.cpp 2012-06-19 11:01:39.599521691 +0200 +@@ -66,13 +66,13 @@ DRIVER_ERROR Pcl3::Configure(Pipeline ** + + if (!selectPrintMode()) + { +- dbglog("selectPrintMode failed, PrintMode name = %s", m_pQA->print_mode_name); ++ dbglog("selectPrintMode failed, PrintMode name = %s\n", m_pQA->print_mode_name); + return UNSUPPORTED_PRINTMODE; + } + if (m_pPM->BaseResX != m_pQA->horizontal_resolution || + m_pPM->BaseResY != m_pQA->vertical_resolution) + { +- dbglog("Requested resolution not supported with requested printmode"); ++ dbglog("Requested resolution not supported with requested printmode\n"); + return UNSUPPORTED_PRINTMODE; + } + +@@ -220,7 +220,7 @@ void Pcl3::configureRasterData() + { + if (m_pPM == NULL) + { +- dbglog("configureRasterData: m_pPM is NULL"); ++ dbglog("configureRasterData: m_pPM is NULL\n"); + return; + } + BYTE *p = cur_pcl_buffer_ptr; +@@ -255,7 +255,7 @@ bool Pcl3::selectPrintMode() + { + if (m_pJA->printer_platform[0] == 0) + { +- dbglog("printer_platform is undefined"); ++ dbglog("printer_platform is undefined\n"); + return false; + } + for (unsigned int i = 0; i < sizeof(pcl3_print_modes_table) / sizeof(pcl3_print_modes_table[0]); i++) +@@ -265,7 +265,7 @@ bool Pcl3::selectPrintMode() + return selectPrintMode(i); + } + } +- dbglog("Unsupported printer_platform: %s", m_pJA->printer_platform); ++ dbglog("Unsupported printer_platform: %s\n", m_pJA->printer_platform); + return false; + } + +diff -up hplip-3.12.6/prnt/hpcups/Pcl3Gui.cpp.dbglog-newline hplip-3.12.6/prnt/hpcups/Pcl3Gui.cpp +--- hplip-3.12.6/prnt/hpcups/Pcl3Gui.cpp.dbglog-newline 2012-06-18 12:40:17.000000000 +0200 ++++ hplip-3.12.6/prnt/hpcups/Pcl3Gui.cpp 2012-06-19 11:01:39.599521691 +0200 +@@ -66,13 +66,13 @@ DRIVER_ERROR Pcl3Gui::Configure(Pipeline + + if (!selectPrintMode()) + { +- dbglog("selectPrintMode failed, PrintMode name = %s", m_pQA->print_mode_name); ++ dbglog("selectPrintMode failed, PrintMode name = %s\n", m_pQA->print_mode_name); + return UNSUPPORTED_PRINTMODE; + } + if (m_pPM->BaseResX != m_pQA->horizontal_resolution || + m_pPM->BaseResY != m_pQA->vertical_resolution) + { +- dbglog("Requested resolution not supported with requested printmode"); ++ dbglog("Requested resolution not supported with requested printmode\n"); + return UNSUPPORTED_PRINTMODE; + } + +@@ -224,7 +224,7 @@ void Pcl3Gui::configureRasterData() + { + if (m_pPM == NULL) + { +- dbglog("configureRasterData: m_pPM is NULL"); ++ dbglog("configureRasterData: m_pPM is NULL\n"); + return; + } + BYTE *p = cur_pcl_buffer_ptr; +@@ -259,7 +259,7 @@ bool Pcl3Gui::selectPrintMode() + { + if (m_pJA->printer_platform[0] == 0) + { +- dbglog("printer_platform is undefined"); ++ dbglog("printer_platform is undefined\n"); + return false; + } + for (unsigned int i = 0; i < sizeof(pcl3_gui_print_modes_table) / sizeof(pcl3_gui_print_modes_table[0]); i++) +@@ -269,7 +269,7 @@ bool Pcl3Gui::selectPrintMode() + return selectPrintMode(i); + } + } +- dbglog("Unsupported printer_platform: %s", m_pJA->printer_platform); ++ dbglog("Unsupported printer_platform: %s\n", m_pJA->printer_platform); + return false; + } + diff --git a/hplip-discovery-method.patch b/hplip-discovery-method.patch new file mode 100644 index 0000000..cb277a3 --- /dev/null +++ b/hplip-discovery-method.patch @@ -0,0 +1,11 @@ +diff -up hplip-3.9.8/ui4/setupdialog.py.discovery-method hplip-3.9.8/ui4/setupdialog.py +--- hplip-3.9.8/ui4/setupdialog.py.discovery-method 2009-08-04 22:37:22.000000000 +0100 ++++ hplip-3.9.8/ui4/setupdialog.py 2009-09-16 15:34:36.509431266 +0100 +@@ -171,6 +171,7 @@ class SetupDialog(QDialog, Ui_Dialog): + QTimer.singleShot(0, self.showRemovePage) + else: + if self.skip_discovery: ++ self.discovery_method = 1 # mDNS + QTimer.singleShot(0, self.showDevicesPage) + else: + QTimer.singleShot(0, self.showDiscoveryPage) diff --git a/hplip-hpaio-localonly.patch b/hplip-hpaio-localonly.patch new file mode 100644 index 0000000..0a315ba --- /dev/null +++ b/hplip-hpaio-localonly.patch @@ -0,0 +1,45 @@ +diff -up hplip-3.11.10/scan/sane/hpaio.c~ hplip-3.11.10/scan/sane/hpaio.c +--- hplip-3.11.10/scan/sane/hpaio.c~ 2011-10-02 04:04:48.000000000 +0100 ++++ hplip-3.11.10/scan/sane/hpaio.c 2011-10-20 16:00:38.016534755 +0100 +@@ -272,25 +272,28 @@ static int DevDiscovery(int localOnly) + } + } + +- /* Ignore localOnly flag (used by saned) and always look for network all-in-one scan devices (defined by cups). */ +- cnt = GetCupsPrinters(&cups_printer); +- for (i=0; i 0) +- { ++ cnt = GetCupsPrinters(&cups_printer); ++ for (i=0; i 0) ++ { + hpmud_get_uri_model(cups_printer[i], model, sizeof(model)); + AddDeviceList(cups_printer[i], model, &DeviceList); + total++; +- } +- else +- { ++ } ++ else ++ { + DBG(6,"unsupported scantype=%d %s\n", ma.scantype, cups_printer[i]); +- } +- free(cups_printer[i]); ++ } ++ free(cups_printer[i]); ++ } ++ if (cups_printer) ++ free(cups_printer); + } +- if (cups_printer) +- free(cups_printer); + + bugout: + return total; diff --git a/hplip-ipp-accessors.patch b/hplip-ipp-accessors.patch new file mode 100644 index 0000000..d390df1 --- /dev/null +++ b/hplip-ipp-accessors.patch @@ -0,0 +1,392 @@ +diff -up hplip-3.12.6/prnt/cupsext/cupsext.c.ipp_accessors hplip-3.12.6/prnt/cupsext/cupsext.c +--- hplip-3.12.6/prnt/cupsext/cupsext.c.ipp_accessors 2012-06-18 12:41:19.000000000 +0200 ++++ hplip-3.12.6/prnt/cupsext/cupsext.c 2012-07-19 17:11:47.606524137 +0200 +@@ -87,6 +87,46 @@ typedef int Py_ssize_t; + #define PY_SSIZE_T_MIN INT_MIN + #endif + ++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) ++#define HAVE_CUPS_1_6 1 ++#endif ++ ++#ifndef HAVE_CUPS_1_6 ++#define ippGetCount(attr) attr->num_values ++#define ippGetGroupTag(attr) attr->group_tag ++#define ippGetValueTag(attr) attr->value_tag ++#define ippGetName(attr) attr->name ++#define ippGetBoolean(attr, element) attr->values[element].boolean ++#define ippGetInteger(attr, element) attr->values[element].integer ++#define ippGetStatusCode(ipp) ipp->request.status.status_code ++#define ippGetString(attr, element, language) attr->values[element].string.text ++ ++static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp ) ++{ ++ if (!ipp) ++ return (NULL); ++ return (ipp->current = ipp->attrs); ++} ++ ++static ipp_attribute_t * ippNextAttribute( ipp_t *ipp ) ++{ ++ if (!ipp || !ipp->current) ++ return (NULL); ++ return (ipp->current = ipp->current->next); ++} ++ ++static int ippSetOperation( ipp_t *ipp, ipp_op_t op ) ++{ ++ ipp->request.op.operation_id = op; ++ return (1); ++} ++ ++static int ippSetRequestId( ipp_t *ipp, int request_id ) ++{ ++ ipp->request.any.request_id = request_id; ++ return (1); ++} ++#endif + + int g_num_options = 0; + cups_option_t * g_options; +@@ -333,8 +373,8 @@ PyObject * getPrinters( PyObject * self, + request = ippNew(); + language = cupsLangDefault(); + +- request->request.op.operation_id = CUPS_GET_PRINTERS; +- request->request.any.request_id = 1; ++ ippSetOperation( request, CUPS_GET_PRINTERS ); ++ ippSetRequestId ( request, 1); + + ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, + "attributes-charset", NULL, cupsLangEncoding( language ) ); +@@ -378,10 +418,10 @@ PyObject * getPrinters( PyObject * self, + ipp_pstate_t state; + int i = 0; + +- for ( attr = response->attrs; attr != NULL; attr = attr->next ) ++ for ( attr = ippFirstAttribute( response ); attr != NULL; attr = ippNextAttribute( response ) ) + { +- while ( attr != NULL && attr->group_tag != IPP_TAG_PRINTER ) +- attr = attr->next; ++ while ( attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER ) ++ attr = ippNextAttribute( response ); + + if ( attr == NULL ) + break; +@@ -390,41 +430,41 @@ PyObject * getPrinters( PyObject * self, + state = IPP_PRINTER_IDLE; + accepting = 0; + +- while ( attr != NULL && attr->group_tag == IPP_TAG_PRINTER ) ++ while ( attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER ) + { +- if ( strcmp( attr->name, "printer-name" ) == 0 && +- attr->value_tag == IPP_TAG_NAME ) +- name = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "device-uri" ) == 0 && +- attr->value_tag == IPP_TAG_URI ) +- device_uri = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-uri-supported" ) == 0 && +- attr->value_tag == IPP_TAG_URI ) +- printer_uri = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-info" ) == 0 && +- attr->value_tag == IPP_TAG_TEXT ) +- info = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-location" ) == 0 && +- attr->value_tag == IPP_TAG_TEXT ) +- location = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-make-and-model" ) == 0 && +- attr->value_tag == IPP_TAG_TEXT ) +- make_model = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-state" ) == 0 && +- attr->value_tag == IPP_TAG_ENUM ) +- state = ( ipp_pstate_t ) attr->values[ 0 ].integer; +- +- else if (!strcmp(attr->name, "printer-is-accepting-jobs") && +- attr->value_tag == IPP_TAG_BOOLEAN) +- accepting = attr->values[ 0 ].boolean; ++ if ( strcmp( ippGetName( attr ), "printer-name" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_NAME ) ++ name = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "device-uri" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_URI ) ++ device_uri = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-uri-supported" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_URI ) ++ printer_uri = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-info" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_TEXT ) ++ info = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-location" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_TEXT ) ++ location = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-make-and-model" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_TEXT ) ++ make_model = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-state" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_ENUM ) ++ state = ( ipp_pstate_t ) ippGetInteger( attr, 0 ); ++ ++ else if (!strcmp(ippGetName( attr ), "printer-is-accepting-jobs") && ++ ippGetValueTag( attr ) == IPP_TAG_BOOLEAN) ++ accepting = ippGetBoolean( attr, 0 ); + +- attr = attr->next; ++ attr = ippNextAttribute( response ); + } + + if ( device_uri == NULL ) +@@ -522,8 +562,8 @@ PyObject * addPrinter( PyObject * self, + request = ippNew(); + language = cupsLangDefault(); + +- request->request.op.operation_id = CUPS_ADD_PRINTER; +- request->request.any.request_id = 1; ++ ippSetOperation( request, CUPS_ADD_PRINTER ); ++ ippSetRequestId ( request, 1 ); + + ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, + "attributes-charset", NULL, cupsLangEncoding( language ) ); +@@ -568,7 +608,7 @@ PyObject * addPrinter( PyObject * self, + } + else + { +- status = response->request.status.status_code; ++ status = ippGetStatusCode( response ); + //ippDelete( response ); + r = 1; + } +@@ -631,8 +671,8 @@ PyObject * delPrinter( PyObject * self, + */ + request = ippNew(); + +- request->request.op.operation_id = CUPS_DELETE_PRINTER; +- request->request.op.request_id = 1; ++ ippSetOperation( request, CUPS_DELETE_PRINTER ); ++ ippSetRequestId ( request, 1 ); + + language = cupsLangDefault(); + +@@ -650,7 +690,7 @@ PyObject * delPrinter( PyObject * self, + */ + response = cupsDoRequest( http, request, "/admin/" ); + +- if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) ) ++ if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) ) + { + r = 1; + } +@@ -721,8 +761,8 @@ PyObject * setDefaultPrinter( PyObject * + + request = ippNew(); + +- request->request.op.operation_id = CUPS_SET_DEFAULT; +- request->request.op.request_id = 1; ++ ippSetOperation( request, CUPS_SET_DEFAULT ); ++ ippSetRequestId ( request, 1 ); + + language = cupsLangDefault(); + +@@ -743,7 +783,7 @@ PyObject * setDefaultPrinter( PyObject * + + response = cupsDoRequest( http, request, "/admin/" ); + +- if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) ) ++ if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) ) + { + r = 1; + } +@@ -797,8 +837,8 @@ PyObject * controlPrinter( PyObject * se + + request = ippNew(); + +- request->request.op.operation_id = op; +- request->request.op.request_id = 1; ++ ippSetOperation( request, op ); ++ ippSetRequestId ( request, 1 ); + + language = cupsLangDefault(); + +@@ -822,7 +862,7 @@ PyObject * controlPrinter( PyObject * se + + response = cupsDoRequest(http, request, "/admin/"); + +- if (( response != NULL ) && (response->request.status.status_code <= IPP_OK_CONFLICT)) ++ if (( response != NULL ) && (ippGetStatusCode( response ) <= IPP_OK_CONFLICT)) + { + r = 1; + } +@@ -837,7 +877,7 @@ abort: + if ( response != NULL ) + ippDelete( response ); + +- return Py_BuildValue( "i", r );; ++ return Py_BuildValue( "i", r ); + } + + +@@ -1116,8 +1156,8 @@ PyObject * getPPDList( PyObject * self, + + request = ippNew(); + +- request->request.op.operation_id = CUPS_GET_PPDS; +- request->request.op.request_id = 1; ++ ippSetOperation( request, CUPS_GET_PPDS ); ++ ippSetRequestId ( request, 1 ); + + language = cupsLangDefault(); + +@@ -1143,43 +1183,43 @@ PyObject * getPPDList( PyObject * self, + if ((response = cupsDoRequest(http, request, "/")) != NULL) + { + +- for (attr = response->attrs; attr; attr = attr->next) ++ for (attr = ippFirstAttribute( response ); attr; attr = ippNextAttribute( response )) + { + PyObject *dict; + char *ppdname = NULL; + +- while (attr && attr->group_tag != IPP_TAG_PRINTER) +- attr = attr->next; ++ while (attr && ippGetGroupTag( attr ) != IPP_TAG_PRINTER) ++ attr = ippNextAttribute( response ); + + if (!attr) + break; + + dict = PyDict_New (); + +- for (; attr && attr->group_tag == IPP_TAG_PRINTER; attr = attr->next) ++ for (; attr && ippGetGroupTag( attr ) == IPP_TAG_PRINTER; attr = ippNextAttribute( response )) + { + PyObject *val = NULL; + +- if (!strcmp (attr->name, "ppd-name") && attr->value_tag == IPP_TAG_NAME) ++ if (!strcmp (ippGetName( attr ), "ppd-name") && ippGetValueTag( attr ) == IPP_TAG_NAME) + { +- ppdname = attr->values[0].string.text; ++ ppdname = ippGetString( attr, 0, NULL ); + + //sprintf( buf, "print '%s'", ppdname); + //PyRun_SimpleString( buf ); + } + +- else if (attr->value_tag == IPP_TAG_TEXT || attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_KEYWORD) +- //else if ((!strcmp (attr->name, "ppd-natural-language") && attr->value_tag == IPP_TAG_LANGUAGE) || +- // (!strcmp (attr->name, "ppd-make-and-model") && attr->value_tag == IPP_TAG_TEXT) || +- // (!strcmp (attr->name, "ppd-make") && attr->value_tag == IPP_TAG_TEXT) || +- // (!strcmp (attr->name, "ppd-device-id") && attr->value_tag == IPP_TAG_TEXT)) ++ else if (ippGetValueTag( attr ) == IPP_TAG_TEXT || ippGetValueTag( attr ) == IPP_TAG_NAME || ippGetValueTag( attr ) == IPP_TAG_KEYWORD) ++ //else if ((!strcmp (ippGetName( attr ), "ppd-natural-language") && ippGetValueTag( attr ) == IPP_TAG_LANGUAGE) || ++ // (!strcmp (ippGetName( attr ), "ppd-make-and-model") && ippGetValueTag( attr ) == IPP_TAG_TEXT) || ++ // (!strcmp (ippGetName( attr ), "ppd-make") && ippGetValueTag( attr ) == IPP_TAG_TEXT) || ++ // (!strcmp (ippGetName( attr ), "ppd-device-id") && ippGetValueTag( attr ) == IPP_TAG_TEXT)) + { +- val = PyObj_from_UTF8(attr->values[0].string.text); ++ val = PyObj_from_UTF8(ippGetString( attr, 0, NULL )); + } + + if (val) + { +- PyDict_SetItemString (dict, attr->name, val); ++ PyDict_SetItemString (dict, ippGetName( attr ), val); + Py_DECREF (val); + } + } +diff -up hplip-3.12.6/scan/sane/hpaio.c.ipp_accessors hplip-3.12.6/scan/sane/hpaio.c +--- hplip-3.12.6/scan/sane/hpaio.c.ipp_accessors 2012-06-18 12:42:51.000000000 +0200 ++++ hplip-3.12.6/scan/sane/hpaio.c 2012-07-19 17:12:34.557848760 +0200 +@@ -47,6 +47,43 @@ + #define DEBUG_DECLARE_ONLY + #include "sanei_debug.h" + ++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) ++#define HAVE_CUPS_1_6 1 ++#endif ++ ++#ifndef HAVE_CUPS_1_6 ++#define ippGetGroupTag(attr) attr->group_tag ++#define ippGetValueTag(attr) attr->value_tag ++#define ippGetName(attr) attr->name ++#define ippGetString(attr, element, language) attr->values[element].string.text ++ ++static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp ) ++{ ++ if (!ipp) ++ return (NULL); ++ return (ipp->current = ipp->attrs); ++} ++ ++static ipp_attribute_t * ippNextAttribute( ipp_t *ipp ) ++{ ++ if (!ipp || !ipp->current) ++ return (NULL); ++ return (ipp->current = ipp->current->next); ++} ++ ++static int ippSetOperation( ipp_t *ipp, ipp_op_t op ) ++{ ++ ipp->request.op.operation_id = op; ++ return (1); ++} ++ ++static int ippSetRequestId( ipp_t *ipp, int request_id ) ++{ ++ ipp->request.any.request_id = request_id; ++ return (1); ++} ++#endif ++ + static SANE_Device **DeviceList = NULL; + + static int AddDeviceList(char *uri, char *model, SANE_Device ***pd) +@@ -186,8 +223,8 @@ static int GetCupsPrinters(char ***print + /* Assemble the IPP request */ + request = ippNew(); + +- request->request.op.operation_id = CUPS_GET_PRINTERS; +- request->request.any.request_id = 1; ++ ippSetOperation( request, CUPS_GET_PRINTERS ); ++ ippSetRequestId( request, 1 ); + + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8"); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en"); +@@ -197,20 +234,20 @@ static int GetCupsPrinters(char ***print + if ((response = cupsDoRequest(http, request, "/")) == NULL) + goto bugout; + +- for (attr = response->attrs; attr != NULL; attr = attr->next) ++ for (attr = ippFirstAttribute ( response ); attr != NULL; attr = ippNextAttribute( response )) + { + /* Skip leading attributes until we hit a printer. */ +- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) +- attr = attr->next; ++ while (attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER) ++ attr = ippNextAttribute( response ); + + if (attr == NULL) + break; + +- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) ++ while (attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER) + { +- if (strcmp(attr->name, "device-uri") == 0 && attr->value_tag == IPP_TAG_URI && AddCupsList(attr->values[0].string.text, printer) == 0) ++ if (strcmp(ippGetName( attr ), "device-uri") == 0 && ippGetValueTag( attr ) == IPP_TAG_URI && AddCupsList(ippGetString( attr, 0, NULL ), printer) == 0) + cnt++; +- attr = attr->next; ++ attr = ippNextAttribute( response ); + } + + if (attr == NULL) diff --git a/hplip-mucks-with-spooldir.patch b/hplip-mucks-with-spooldir.patch new file mode 100644 index 0000000..06a3b75 --- /dev/null +++ b/hplip-mucks-with-spooldir.patch @@ -0,0 +1,28 @@ +--- hplip-3.12.6/prnt/hpcups/HPCupsFilter.cpp.mucks-with-spooldir 2012-06-18 12:40:17.000000000 +0200 ++++ hplip-3.12.6/prnt/hpcups/HPCupsFilter.cpp 2012-06-26 18:11:53.720261545 +0200 +@@ -474,25 +474,6 @@ int HPCupsFilter::StartPrintJob(int arg + + getLogLevel(); + m_JA.job_id = atoi(argv[1]); +- FILE *fp; +- char dFileName[32]; +- memset(dFileName, 0, sizeof(dFileName)); +- m_JA.job_id = atoi(argv[1]); +- snprintf (dFileName, sizeof(dFileName), "/var/spool/cups/d%05d-001", m_JA.job_id); +- if ((fp = fopen (dFileName, "r"))) +- { +- char line[258]; +- for (int i = 0; i < 10; i++) +- { +- fgets (line, 256, fp); +- if (!strncmp (line, "%%Pages:", 8)) +- { +- sscanf (line+9, "%d", &m_JA.total_pages); +- break; +- } +- } +- fclose (fp); +- } + + m_ppd = ppdOpenFile(getenv("PPD")); + if (m_ppd == NULL) { diff --git a/hplip-notification-exception.patch b/hplip-notification-exception.patch new file mode 100644 index 0000000..f0a7fb8 --- /dev/null +++ b/hplip-notification-exception.patch @@ -0,0 +1,23 @@ +diff -up hplip-3.10.9/ui4/systemtray.py.notification-exception hplip-3.10.9/ui4/systemtray.py +--- hplip-3.10.9/ui4/systemtray.py.notification-exception 2011-01-05 10:45:57.000000000 +0100 ++++ hplip-3.10.9/ui4/systemtray.py 2011-01-05 12:34:18.000000000 +0100 +@@ -27,6 +27,7 @@ import os + import signal + import os.path + import time ++import gobject + + + # Local +@@ -662,7 +663,10 @@ class SystemTrayApp(QApplication): + else: + n.set_timeout(TRAY_MESSAGE_DELAY) + +- n.show() ++ try: ++ n.show() ++ except gobject.GError: ++ log.error("Failed to show notification!") + + else: # Use "standard" message bubbles + icon = ERROR_STATE_TO_ICON.get(error_state, QSystemTrayIcon.Information) diff --git a/hplip-skip-blank-lines.patch b/hplip-skip-blank-lines.patch new file mode 100644 index 0000000..288a887 --- /dev/null +++ b/hplip-skip-blank-lines.patch @@ -0,0 +1,11 @@ +diff -up hplip-3.10.2/prnt/hpcups/LJColor.h.skip-blank-lines hplip-3.10.2/prnt/hpcups/LJColor.h +--- hplip-3.10.2/prnt/hpcups/LJColor.h.skip-blank-lines 2010-02-24 23:04:09.000000000 +0000 ++++ hplip-3.10.2/prnt/hpcups/LJColor.h 2010-04-15 21:46:48.375754707 +0100 +@@ -48,6 +48,7 @@ public: + DRIVER_ERROR Configure(Pipeline **pipeline); + DRIVER_ERROR EndJob(); + DRIVER_ERROR FormFeed(); ++ bool CanSkipRasters() {return false;} + protected: + virtual DRIVER_ERROR addJobSettings(); + void configureRasterData(); diff --git a/hplip-systray-dbus-exception.patch b/hplip-systray-dbus-exception.patch new file mode 100644 index 0000000..c21f26a --- /dev/null +++ b/hplip-systray-dbus-exception.patch @@ -0,0 +1,18 @@ +diff -up hplip-3.12.11/ui4/systemtray.py.systray-dbus-exception hplip-3.12.11/ui4/systemtray.py +--- hplip-3.12.11/ui4/systemtray.py.systray-dbus-exception 2012-11-20 10:51:40.000000000 +0100 ++++ hplip-3.12.11/ui4/systemtray.py 2012-11-27 10:08:51.333805871 +0100 +@@ -802,7 +802,13 @@ def run(read_pipe): + log.set_module("hp-systray(qt4)") + log.debug("PID=%d" % os.getpid()) + +- app = SystemTrayApp(sys.argv, read_pipe) ++ try: ++ app = SystemTrayApp(sys.argv, read_pipe) ++ except DBusException, e: ++ # No session bus ++ log.debug("Caught exception: %s" % e) ++ sys.exit(1) ++ + app.setQuitOnLastWindowClosed(False) # If not set, settings dlg closes app + + i = 0 diff --git a/hplip-tmpfiles.conf b/hplip-tmpfiles.conf index 0629533..22b0cb8 100644 --- a/hplip-tmpfiles.conf +++ b/hplip-tmpfiles.conf @@ -1 +1,2 @@ d /run/hplip 0755 root root - +d /var/run/hplip 0775 root lp - \ No newline at end of file diff --git a/hplip-udev-rules.patch b/hplip-udev-rules.patch index 79b0ee4..da6a877 100644 --- a/hplip-udev-rules.patch +++ b/hplip-udev-rules.patch @@ -1,13 +1,3 @@ -<<<<<<< HEAD:hplip-3.13.10-fix-udev-rules.patch ---- hplip-3.13.10/data/rules/56-hpmud_sysfs.rules 2013-10-11 09:38:53.000000000 +0000 -+++ hplip-3.13.10/data/rules/56-hpmud_sysfs.rules.tpg 2013-10-19 11:15:57.196603385 +0000 -@@ -14,9 +14,6 @@ - # For RHEL 5, centos 5.. - ENV{hp_test}=="yes", PROGRAM="/bin/sh -c 'X=%k; X=$${X#usbdev}; B=$${X%%%%.*}; D=$${X#*.}; logger -p user.info loading HP Device $$B $$D; printf %%03i:%%03i $$B $$D'", RUN+="/bin/sh -c '/usr/bin/python hp-config_usb_printer %c '" - --# This rule will add the printer and install plugin --ENV{hp_test}=="yes", PROGRAM="/bin/sh -c 'logger -p user.info loading HP Device $env{BUSNUM} $env{DEVNUM}'", RUN+="/bin/sh -c 'if [ -f /usr/bin/systemctl ]; then /usr/bin/systemctl --no-block start hplip-printer@$env{BUSNUM}:$env{DEVNUM}.service; else /usr/bin/nohup /usr/bin/python /usr/bin/hp-config_usb_printer $env{BUSNUM}:$env{DEVNUM} ; fi'" -======= diff -up hplip-3.13.6/Makefile.in.udev-rules hplip-3.13.6/Makefile.in --- hplip-3.13.6/Makefile.in.udev-rules 2013-06-24 10:28:19.868301356 +0200 +++ hplip-3.13.6/Makefile.in 2013-06-24 10:32:21.272134161 +0200 @@ -29,7 +19,6 @@ diff -up hplip-3.13.6/Makefile.in.udev-rules hplip-3.13.6/Makefile.in -# This rule will add the printer and install plugin -ENV{hp_test}=="yes", PROGRAM="/bin/sh -c 'logger -p user.info loading HP Device $env{BUSNUM} $env{DEVNUM}'", RUN+="/bin/sh -c 'if [ -f /usr/bin/systemctl ]; then /usr/bin/systemctl --no-block start hplip-printer@$env{BUSNUM}:$env{DEVNUM}.service; else /usr/bin/nohup /usr/bin/hp-config_usb_printer $env{BUSNUM}:$env{DEVNUM} ; fi'" ->>>>>>> 8c61d1c7c9e7ec8ac21759518f57677e79581a22:hplip-udev-rules.patch - # If sane-bankends is installed add hpaio backend support to dll.conf if needed. ENV{sane_hpaio}=="yes", RUN+="/bin/sh -c 'grep -q ^#hpaio /etc/sane.d/dll.conf;if [ $$? -eq 0 ];then sed -i -e s/^#hpaio/hpaio/ /etc/sane.d/dll.conf;else grep -q ^hpaio /etc/sane.d/dll.conf;if [ $$? -ne 0 ];then echo hpaio >>/etc/sane.d/dll.conf;fi;fi'" diff --git a/hplip-wifisetup.patch b/hplip-wifisetup.patch new file mode 100644 index 0000000..1a60ce8 --- /dev/null +++ b/hplip-wifisetup.patch @@ -0,0 +1,12 @@ +diff -up hplip-3.11.1/ui4/wifisetupdialog.py.wifisetup hplip-3.11.1/ui4/wifisetupdialog.py +--- hplip-3.11.1/ui4/wifisetupdialog.py.wifisetup 2011-01-19 06:18:20.000000000 +0100 ++++ hplip-3.11.1/ui4/wifisetupdialog.py 2011-03-01 15:39:02.000000000 +0100 +@@ -301,7 +301,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog + self.dev.close() + endWaitCursor() + +- self.num_networks = self.networks['numberofscanentries'] ++ self.num_networks = self.networks.get('numberofscanentries') + self.clearNetworksTable() + + if self.num_networks: diff --git a/hplip.spec b/hplip.spec index 2f4d230..ae49ee2 100644 --- a/hplip.spec +++ b/hplip.spec @@ -18,11 +18,11 @@ Summary: HP printer/all-in-one driver infrastructure Name: hplip Version: 3.13.11 -Release: 12 +Release: 13 License: GPLv2+ and MIT Group: System/Printing Url: http://hplip.sourceforge.net/ -Source0: http://downloads.sourceforge.net/project/hplip/hplip/%{version}%{extraversion}/%{name}-%{version}%{extraversion}.tar.gz +Source0: http://garr.dl.sourceforge.net/sourceforge/hplip/%{name}-%{version}%{extraversion}.tar.gz Source1: hpcups-update-ppds.sh Source2: %{name}-tmpfiles.conf # http://www.iconfinder.com/icondetails/6393/128/fax_hardware_icon @@ -31,21 +31,21 @@ Source4: hplip.rpmlintrc # http://hplipopensource.com/node/367 Source5: http://hplipopensource.com/hplip-web/smartinstall/SmartInstallDisable-Tool.run Source6: README.urpmi - # (doktor5000) fix linking with python and libsane # taken from mandriva Patch1: hplip-3.11.3-mdv-link.patch +# (Anssi) Apply udev rules even on ACTION=="change", otherwise the permissions +# do not get applied in %%post on a new installation: +Patch2: hplip-apply-udev-rules-on-action-change.patch +# Patch3: hplip-3.13.10-fix-systray-x.patch # Fedora patches Patch101: hplip-pstotiff-is-rubbish.patch Patch102: hplip-strstr-const.patch Patch103: hplip-ui-optional.patch Patch104: hplip-no-asm.patch -# add -Patch105: hplip-deviceIDs-drv.patch -# add -Patch107: hplip-deviceIDs-ppd.patch - +Patch105: hplip-deviceIDs-drv.patch +Patch107: hplip-deviceIDs-ppd.patch Patch108: hplip-retry-open.patch Patch109: hplip-snmp-quirks.patch Patch111: hplip-hpijs-marker-supply.patch @@ -54,13 +54,12 @@ Patch114: hplip-hpcups-sigpipe.patch Patch115: hplip-logdir.patch Patch116: hplip-bad-low-ink-warning.patch Patch121: hplip-ppd-ImageableArea.patch -Patch122: hplip-raw_deviceID-traceback.patch -Patch125: hplip-dbus-exception.patch -Patch127: hplip-CVE-2010-4267.patch # fedora patch not necessary. done via sed call #Patch129: hplip-makefile-chgrp.patch -Patch132: hplip-IEEE-1284-4.patch -Patch134: hplip-3.13.10-fix-udev-rules.patch +Patch131: hplip-ipp-accessors.patch +Patch132: hplip-IEEE-1284-4.patch +Patch133: hplip-check.patch +Patch134: hplip-udev-rules.patch # Debian/Ubuntu patches # taken from http://patch-tracker.debian.org/package/hplip/3.11.7-1 @@ -83,6 +82,8 @@ Patch226: hp-systray-make-menu-title-visible-in-sni-qt-indicator.dpatch Patch227: hp-systray-make-menu-appear-in-sni-qt-indicator-with-kde.dpatch Patch228: hpaio-option-duplex.diff +Patch302: hplip-CVE-2013-4325.patch + BuildRequires: desktop-file-utils BuildRequires: imagemagick BuildRequires: polkit @@ -132,6 +133,7 @@ Suggests: foomatic-db-hpijs # hp-doctor requires gui modules Requires: hplip-gui + # foomatic-db-hpijs drivers are provided by hp and by this package now # NOTE: remove the foomatic-db-hpijs deps sometime in 2010-10-?? ? Provides: foomatic-db-hpijs = %{version}-%{release} @@ -251,6 +253,9 @@ flash memory cards. %prep %setup -qn %{name}-%{version}%{extraversion} +%patch2 -p1 -b .udev-rules-on-action-change +# %patch3 -p1 -b .systray + # Fedora patches # The pstotiff filter is rubbish so replace it (launchpad #528394). @@ -262,17 +267,19 @@ flash memory cards. # Make utils.checkPyQtImport() look for the gui sub-package (RH bug #243273). %patch103 -p1 -b .ui-optional +# Make sure to avoid handwritten asm. %patch104 -p1 -b .no-asm + %patch105 -p1 -b .ids for ppd_file in $(grep '^diff' %{PATCH107} | cut -d " " -f 4); do gunzip ${ppd_file#*/}.gz - done - %patch107 -p1 -b .deviceIDs-ppd - for ppd_file in $(grep '^diff' %{PATCH107} | cut -d " " -f 4); - do - gzip -n ${ppd_file#*/} +done +%patch107 -p1 -b .deviceIDs-ppd +for ppd_file in $(grep '^diff' %{PATCH107} | cut -d " " -f 4); +do + gzip -n ${ppd_file#*/} done # Retry when connecting to device fails (RH bug #532112). @@ -306,13 +313,6 @@ do gzip -n ${ppd_file#*/} done -# Catch D-Bus exceptions in fax dialog (RH bug #645316). -#patch125 -p1 -b .dbus-exception - -# Applied patch to fix CVE-2010-4267, remote stack overflow -# vulnerability (RH bug #670252). -#patch127 -p1 -b .CVE-2010-4267 - # Don't run 'chgrp lp /var/log/hp' in makefile (removes all lines with "chgrp") sed -i '/chgrp/d' Makefile.am @@ -321,7 +321,10 @@ sed -i.duplex-constraints \ prnt/drv/hpcups.drv.in #patch132 -p1 -b .hplip-IEEE-1284-4 -%patch134 -p1 -b .rules-fix + +# Removed SYSFS use in udev rules and actually made them work (bug #560754). +# Move udev rules to /lib/udev/rules.d (bug #748208). +%patch134 -p1 -b .udev-rules # Debian/Ubuntu patches @@ -344,7 +347,7 @@ sed -i.duplex-constraints \ %patch207 -p1 -b .hplip-pjl-duplex-binding # original patch from debian, path to kdesu added for %%_libdir on x86_64 -%patch208 -p1 -b .mga-kde4-kdesudo-support +# %patch208 -p1 -b .mga-kde4-kdesudo-support # https://bugs.launchpad.net/debian/+source/hplip/+bug/530746 %patch209 -p1 -b .hp-check-groups @@ -367,6 +370,8 @@ sed -i.duplex-constraints \ %patch228 -p1 -b .hpaio-option-duplex +%patch302 -p0 + # Use filter foomatic-rip instead of foomatic-rip-hplip (fix from Mandriva) for PPDGZ in ppd/hpijs/*.ppd.gz do @@ -395,13 +400,11 @@ WITHOUT_SANE="--without-sane" --enable-gui-build \ --enable-fax-build \ --enable-pp-build \ - --enable-qt4 \ - --disable-qt3 \ + --enable-qt4 --disable-qt3 \ --enable-hpcups-install \ --enable-cups-drv-install \ --enable-cups-ppd-install \ --enable-hpijs-install \ - --enable-foomatic-drv-install \ --enable-udev-acl-rules \ --enable-policykit \ --with-mimedir=%{_datadir}/cups/mime @@ -437,10 +440,8 @@ rm -f %{buildroot}%{_bindir}/hp-uninstall rm -f %{buildroot}%{_datadir}/hplip/upgrade.* rm -f %{buildroot}%{_bindir}/hp-upgrade rm -f %{buildroot}%{_bindir}/hp-config_usb_printer +rm -f %{buildroot}%{_unitdir}/hplip-printer@.service rm -f %{buildroot}%{_datadir}/hplip/config_usb_printer.* -rm -f %{buildroot}%{_libdir}/*.la -rm -rf %{buildroot}%{python_sitearch}/*.la -rm -rf %{buildroot}%{_libdir}/sane/*.la mkdir -p %{buildroot}%{_datadir}/applications desktop-file-install --vendor='' \ @@ -476,6 +477,10 @@ install -D -m 0644 48.png %{buildroot}%{_iconsdir}/hicolor/48x48/apps/hp-sendfax install -D -m 0644 64.png %{buildroot}%{_iconsdir}/hicolor/64x64/apps/hp-sendfax.png install -D -m 0644 %{SOURCE3} %{buildroot}%{_iconsdir}/hicolor/128x128/apps/hp-sendfax.png +# (cg) Correct the udev rules dir +mkdir -p %{buildroot}/lib +mv %{buildroot}%{_sysconfdir}/udev %{buildroot}/lib/ + # switched to udev, no need for hal information rm -rf %{buildroot}%{_datadir}/hal/fdi @@ -507,37 +512,39 @@ mv %{buildroot}%{_bindir}/hp-setup %{buildroot}%{_sbindir}/hp-setup ln -s consolehelper %{buildroot}%{_bindir}/hp-setup # console user, ask for root password - mkdir -p %{buildroot}%{_sysconfdir}/security/console.apps - cat > %{buildroot}%{_sysconfdir}/security/console.apps/hp-setup < %{buildroot}%{_sysconfdir}/security/console.apps/hp-setup < %{buildroot}%{_sysconfdir}/pam.d/hp-setup < %{buildroot}%{_sysconfdir}/pam.d/hp-setup < +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +--- a/base/utils.py ++++ b/base/utils.py +@@ -462,7 +462,7 @@ + + + def commafy(val): +- return unicode(locale.format("%d", val, grouping=True)) ++ return locale.format("%d", val, grouping=True).decode(locale.getpreferredencoding()) + + + def format_bytes(s, show_bytes=False): diff --git a/try_libhpmud.so.0.dpatch b/try_libhpmud.so.0.dpatch new file mode 100644 index 0000000..4161dd7 --- /dev/null +++ b/try_libhpmud.so.0.dpatch @@ -0,0 +1,65 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## try_libhpmud.so.0.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Try libhpmud.so.0 after libhpmud.so + +@DPATCH@ + +--- a/scan/sane/marvell.c ++++ b/scan/sane/marvell.c +@@ -60,8 +60,14 @@ + int stat=1; + + /* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */ +- if ((ps->hpmud_handle = load_library("libhpmud.so")) == NULL) +- goto bugout; ++ if ((ps->hpmud_handle = dlopen("libhpmud.so", RTLD_LAZY|RTLD_GLOBAL)) == NULL) ++ { ++ if ((ps->hpmud_handle = dlopen("libhpmud.so.0", RTLD_LAZY|RTLD_GLOBAL)) == NULL) ++ { ++ BUG("unable to load restricted library: %s\n", dlerror()); ++ goto bugout; ++ } ++ } + + /* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */ + if ((ps->math_handle = load_library("libm.so")) == NULL) +--- a/scan/sane/soap.c ++++ b/scan/sane/soap.c +@@ -68,8 +68,14 @@ + int stat=1; + + /* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */ +- if ((ps->hpmud_handle = load_library("libhpmud.so")) == NULL) +- goto bugout; ++ if ((ps->hpmud_handle = dlopen("libhpmud.so", RTLD_LAZY|RTLD_GLOBAL)) == NULL) ++ { ++ if ((ps->hpmud_handle = dlopen("libhpmud.so.0", RTLD_LAZY|RTLD_GLOBAL)) == NULL) ++ { ++ BUG("unable to load restricted library: %s\n", dlerror()); ++ goto bugout; ++ } ++ } + + /* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */ + if ((ps->math_handle = load_library("libm.so")) == NULL) +--- a/scan/sane/soapht.c ++++ b/scan/sane/soapht.c +@@ -62,8 +62,14 @@ + int stat=1; + + /* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */ +- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL) +- goto bugout; ++ if ((ps->hpmud_handle = dlopen("libhpmud.so", RTLD_LAZY|RTLD_GLOBAL)) == NULL) ++ { ++ if ((ps->hpmud_handle = dlopen("libhpmud.so.0", RTLD_LAZY|RTLD_GLOBAL)) == NULL) ++ { ++ BUG("unable to load restricted library: %s\n", dlerror()); ++ goto bugout; ++ } ++ } + + /* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */ + if ((ps->math_handle = load_library("libm.so")) == NULL)