From e3384fee5967f966cd70b5dee3b308301ddaf57e Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Fri, 9 May 2014 15:45:31 +0100 Subject: [PATCH] Another attempt at avoiding race condition when sending IPP requests (STR #4386, bug #1072952). Resolves: rhbz#1072952 --- cups-str4386.patch | 44 ++++++++++++++++++++++++++++++++++++++++++++ cups.spec | 10 +++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 cups-str4386.patch diff --git a/cups-str4386.patch b/cups-str4386.patch new file mode 100644 index 0000000..e2da700 --- /dev/null +++ b/cups-str4386.patch @@ -0,0 +1,44 @@ +diff -up cups-1.7.2/cups/request.c.str4386 cups-1.7.2/cups/request.c +--- cups-1.7.2/cups/request.c.str4386 2014-03-26 21:06:04.000000000 +0000 ++++ cups-1.7.2/cups/request.c 2014-04-16 14:02:20.039876149 +0100 +@@ -749,9 +749,8 @@ cupsSendRequest(http_t *http, /* I - + got_status = 0; + + while ((state = ippWrite(http, request)) != IPP_STATE_DATA) +- if (state == IPP_STATE_ERROR) +- break; +- else if (httpCheck(http)) ++ { ++ if (httpCheck(http)) + { + got_status = 1; + +@@ -759,15 +758,24 @@ cupsSendRequest(http_t *http, /* I - + if (status >= HTTP_STATUS_MULTIPLE_CHOICES) + break; + } ++ else if (state == IPP_STATE_ERROR) ++ break; ++ } + + if (state == IPP_STATE_ERROR) + { +- DEBUG_puts("1cupsSendRequest: Unable to send IPP request."); ++ /* We weren't able to send the IPP request. But did we already ++ * get an HTTP error status? */ ++ if (!(got_status && status >= HTTP_STATUS_MULTIPLE_CHOICES)) ++ { ++ /* No, something else went wrong. */ ++ DEBUG_puts("1cupsSendRequest: Unable to send IPP request."); + +- http->status = HTTP_STATUS_ERROR; +- http->state = HTTP_STATE_WAITING; ++ http->status = HTTP_STATUS_ERROR; ++ http->state = HTTP_STATE_WAITING; + +- return (HTTP_STATUS_ERROR); ++ return (HTTP_STATUS_ERROR); ++ } + } + + /* diff --git a/cups.spec b/cups.spec index cf40ca2..5bfe98b 100644 --- a/cups.spec +++ b/cups.spec @@ -11,7 +11,7 @@ Summary: CUPS printing system Name: cups Epoch: 1 Version: 1.7.2 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2 Url: http://www.cups.org/ Source: http://www.cups.org/software/%{version}/cups-%{version}-source.tar.bz2 @@ -30,6 +30,7 @@ Source8: macros.cups Patch1: cups-no-gzip-man.patch Patch2: cups-system-auth.patch Patch3: cups-multilib.patch +Patch4: cups-str4386.patch Patch5: cups-banners.patch Patch6: cups-serverbin-compat.patch Patch7: cups-no-export-ssllibs.patch @@ -192,6 +193,9 @@ Sends IPP requests to the specified URI and tests and/or displays the results. %patch2 -p1 -b .system-auth # Prevent multilib conflict in cups-config script. %patch3 -p1 -b .multilib +# Apply patch to fix cupsSendRequest() race condition (bug #1072952, +# STR #4386). +%patch4 -p1 -b .str4386 # Ignore rpm save/new files in the banners directory. %patch5 -p1 -b .banners # Use compatibility fallback path for ServerBin. @@ -667,6 +671,10 @@ rm -f %{cups_serverbin}/backend/smb %{_mandir}/man5/ipptoolfile.5.gz %changelog +* Fri May 9 2014 Tim Waugh - 1:1.7.2-3 +- Another attempt at avoiding race condition when sending IPP requests + (STR #4386, bug #1072952). + * Thu Apr 17 2014 Jiri Popelka - 1:1.7.2-2 - Make cups.service Type=notify (bug #1088918).