Another attempt at avoiding race condition when sending IPP requests (STR #4386, bug #1072952).

Resolves: rhbz#1072952
This commit is contained in:
Tim Waugh 2014-05-09 15:45:31 +01:00
parent 52c42a0a13
commit e3384fee59
2 changed files with 53 additions and 1 deletions

44
cups-str4386.patch Normal file
View File

@ -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);
+ }
}
/*

View File

@ -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 <twaugh@redhat.com> - 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 <jpopelka@redhat.com> - 1:1.7.2-2
- Make cups.service Type=notify (bug #1088918).