Accepting request 181379 from home:StefanBruens:branches:Printing

Fix for bnc#827418

OBS-URL: https://build.opensuse.org/request/show/181379
OBS-URL: https://build.opensuse.org/package/show/Printing/cups?expand=0&rev=262
This commit is contained in:
Dr. Werner Fink 2013-06-29 10:49:02 +00:00 committed by Git OBS Bridge
parent c34c73c4fc
commit b396904ff7
3 changed files with 83 additions and 0 deletions

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Fri Jun 28 20:16:52 UTC 2013 - stefan.bruens@rwth-aachen.de
- Fix endless loop if IPP server does not accect job (bnc#827418)
see also https://www.cups.org/str.php?L4190 (STR#4190),
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Jun 26 15:30:45 CEST 2013 - jsmeix@suse.de Wed Jun 26 15:30:45 CEST 2013 - jsmeix@suse.de

View File

@ -15,6 +15,7 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/ # Please submit bugfixes or comments via http://bugs.opensuse.org/
# #
Name: cups Name: cups
BuildRequires: dbus-1-devel BuildRequires: dbus-1-devel
BuildRequires: fdupes BuildRequires: fdupes
@ -174,6 +175,8 @@ Patch107: cups-provides-cupsd-service.patch
# and yes upstream should do the same. Please also check: # and yes upstream should do the same. Please also check:
# http://lists.opensuse.org/opensuse-factory/2013-01/msg00578.html # http://lists.opensuse.org/opensuse-factory/2013-01/msg00578.html
Patch108: cups-move-everything-to-run.patch Patch108: cups-move-everything-to-run.patch
# STR #4190: Send-Document failure ignored (also applies to client-error-not-authorized)
Patch109: str4190.patch
# Install into this non-root directory (required when norootforbuild is used): # Install into this non-root directory (required when norootforbuild is used):
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -316,6 +319,8 @@ printer drivers for CUPS.
# Patch108 moves everything to /run # Patch108 moves everything to /run
%patch108 -p1 %patch108 -p1
%endif %endif
# Patch109: STR #4190
%patch109
%build %build
# Disable SILENT run of make so that make runs verbose as usual: # Disable SILENT run of make so that make runs verbose as usual:

72
str4190.patch Normal file
View File

@ -0,0 +1,72 @@
Index: backend/ipp.c
===================================================================
--- backend/ipp.c (revision 10611)
+++ backend/ipp.c (working copy)
@@ -1279,6 +1279,16 @@
}
/*
+ * If the printer only claims to support IPP/1.0, or if the user specifically
+ * included version=1.0 in the URI, then do not try to use Create-Job or
+ * Send-Document. This is another dreaded compatibility hack, but unfortunately
+ * there are enough broken printers out there that we need this for now...
+ */
+
+ if (version == 10)
+ create_job = send_document = 0;
+
+ /*
* Start monitoring the printer in the background...
*/
@@ -1494,10 +1504,9 @@
goto cleanup;
}
}
- else if (ipp_status == IPP_ERROR_JOB_CANCELED)
+ else if (ipp_status == IPP_ERROR_JOB_CANCELED ||
+ ipp_status == IPP_NOT_AUTHORIZED)
goto cleanup;
- else if (ipp_status == IPP_NOT_AUTHORIZED)
- continue;
else
{
/*
@@ -1678,14 +1687,35 @@
ipp_status == IPP_NOT_POSSIBLE ||
ipp_status == IPP_PRINTER_BUSY)
continue;
- else if (ipp_status == IPP_REQUEST_VALUE)
+ else if (ipp_status == IPP_REQUEST_VALUE ||
+ ipp_status == IPP_ERROR_JOB_CANCELED ||
+ ipp_status == IPP_NOT_AUTHORIZED)
{
/*
- * Print file is too large, abort this job...
+ * Print file is too large, job was canceled, or we need new
+ * authentication data...
*/
goto cleanup;
}
+ else if (ipp_status == IPP_NOT_FOUND)
+ {
+ /*
+ * Printer does not actually implement support for Create-Job/
+ * Send-Document, so log the conformance issue and stop the printer.
+ */
+
+ fputs("DEBUG: This printer claims to support Create-Job and "
+ "Send-Document, but those operations failed.\n", stderr);
+ fputs("DEBUG: Add '?version=1.0' to the device URI to use legacy "
+ "compatibility mode.\n", stderr);
+ update_reasons(NULL, "+cups-ipp-conformance-failure-report,"
+ "cups-ipp-missing-send-document");
+
+ ipp_status = IPP_INTERNAL_ERROR; /* Force queue to stop */
+
+ goto cleanup;
+ }
else
copies_remaining --;