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

Resolves: rhbz#1072952
(cherry picked from commit e3384fee59)

Conflicts:
	cups.spec
This commit is contained in:
Tim Waugh 2014-05-09 15:45:31 +01:00
parent e53709b26f
commit 8425e43657
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 Name: cups
Epoch: 1 Epoch: 1
Version: 1.7.2 Version: 1.7.2
Release: 1%{?dist} Release: 2%{?dist}
License: GPLv2 License: GPLv2
Url: http://www.cups.org/ Url: http://www.cups.org/
Source: http://www.cups.org/software/%{version}/cups-%{version}-source.tar.bz2 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 Patch1: cups-no-gzip-man.patch
Patch2: cups-system-auth.patch Patch2: cups-system-auth.patch
Patch3: cups-multilib.patch Patch3: cups-multilib.patch
Patch4: cups-str4386.patch
Patch5: cups-banners.patch Patch5: cups-banners.patch
Patch6: cups-serverbin-compat.patch Patch6: cups-serverbin-compat.patch
Patch7: cups-no-export-ssllibs.patch Patch7: cups-no-export-ssllibs.patch
@ -180,6 +181,9 @@ Sends IPP requests to the specified URI and tests and/or displays the results.
%patch2 -p1 -b .system-auth %patch2 -p1 -b .system-auth
# Prevent multilib conflict in cups-config script. # Prevent multilib conflict in cups-config script.
%patch3 -p1 -b .multilib %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. # Ignore rpm save/new files in the banners directory.
%patch5 -p1 -b .banners %patch5 -p1 -b .banners
# Use compatibility fallback path for ServerBin. # Use compatibility fallback path for ServerBin.
@ -636,6 +640,10 @@ rm -f %{cups_serverbin}/backend/smb
%{_mandir}/man5/ipptoolfile.5.gz %{_mandir}/man5/ipptoolfile.5.gz
%changelog %changelog
* Fri May 9 2014 Tim Waugh <twaugh@redhat.com> - 1:1.7.2-2
- Another attempt at avoiding race condition when sending IPP requests
(STR #4386, bug #1072952).
* Mon Apr 14 2014 Jiri Popelka <jpopelka@redhat.com> - 1:1.7.2-1 * Mon Apr 14 2014 Jiri Popelka <jpopelka@redhat.com> - 1:1.7.2-1
- 1.7.2 - 1.7.2