diff --git a/SOURCES/0001-scheduler-Clean-up-failed-IPP-Everywhere-permanent-q.patch b/SOURCES/0001-scheduler-Clean-up-failed-IPP-Everywhere-permanent-q.patch new file mode 100644 index 0000000..8bf2f06 --- /dev/null +++ b/SOURCES/0001-scheduler-Clean-up-failed-IPP-Everywhere-permanent-q.patch @@ -0,0 +1,81 @@ +From 2e3f15832140454e2d21b327bfa4b05612b50b9a Mon Sep 17 00:00:00 2001 +From: Zdenek Dohnal +Date: Mon, 2 Dec 2024 14:20:26 +0100 +Subject: [PATCH] scheduler: Clean up failed IPP Everywhere permanent queues + +If creating of permanent queue with IPP Everywhere model fails +in separate thread, the print queue is created as raw. +It would be great if we remove such queue if creation fails, +and marking them as temporary would make them to be removed automatically. +--- + scheduler/ipp.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/scheduler/ipp.c b/scheduler/ipp.c +index 2d80a960e..089267c86 100644 +--- a/scheduler/ipp.c ++++ b/scheduler/ipp.c +@@ -5294,6 +5294,7 @@ create_local_bg_thread( + /* Force printer to timeout and be deleted */ + _cupsRWLockWrite(&printer->lock); + printer->state_time = 0; ++ printer->temporary = 1; + _cupsRWUnlock(&printer->lock); + + send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Couldn't resolve mDNS URI \"%s\"."), printer->device_uri); +@@ -5314,6 +5315,7 @@ create_local_bg_thread( + /* Force printer to timeout and be deleted */ + _cupsRWLockWrite(&printer->lock); + printer->state_time = 0; ++ printer->temporary = 1; + _cupsRWUnlock(&printer->lock); + + send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Bad device URI \"%s\"."), device_uri); +@@ -5332,6 +5334,7 @@ create_local_bg_thread( + /* Force printer to timeout and be deleted */ + _cupsRWLockWrite(&printer->lock); + printer->state_time = 0; ++ printer->temporary = 1; + _cupsRWUnlock(&printer->lock); + + send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to connect to %s:%d: %s"), host, port, cupsLastErrorString()); +@@ -5420,6 +5423,12 @@ create_local_bg_thread( + // Validate response from printer... + if (!ippValidateAttributes(response)) + { ++ /* Force printer to timeout and be deleted */ ++ _cupsRWLockWrite(&printer->lock); ++ printer->state_time = 0; ++ printer->temporary = 1; ++ _cupsRWUnlock(&printer->lock); ++ + send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Printer returned invalid data: %s"), cupsLastErrorString()); + goto finish_response; + } +@@ -5453,6 +5462,7 @@ create_local_bg_thread( + /* Force printer to timeout and be deleted */ + _cupsRWLockWrite(&printer->lock); + printer->state_time = 0; ++ printer->temporary = 1; + _cupsRWUnlock(&printer->lock); + + send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to read generated PPD: %s"), strerror(errno)); +@@ -5468,6 +5478,7 @@ create_local_bg_thread( + /* Force printer to timeout and be deleted */ + _cupsRWLockWrite(&printer->lock); + printer->state_time = 0; ++ printer->temporary = 1; + _cupsRWUnlock(&printer->lock); + + send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to create PPD for printer: %s"), strerror(errno)); +@@ -5501,6 +5512,7 @@ create_local_bg_thread( + /* Force printer to timeout and be deleted */ + _cupsRWLockWrite(&printer->lock); + printer->state_time = 0; ++ printer->temporary = 1; + _cupsRWUnlock(&printer->lock); + + send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to create PPD: %s"), cupsLastErrorString()); +-- +2.47.1 + diff --git a/SPECS/cups.spec b/SPECS/cups.spec index 8942930..d4473e4 100644 --- a/SPECS/cups.spec +++ b/SPECS/cups.spec @@ -22,7 +22,7 @@ Summary: CUPS printing system Name: cups Epoch: 1 Version: 2.4.10 -Release: 8%{?dist} +Release: 9%{?dist} # backend/failover.c - BSD-3-Clause # cups/md5* - Zlib # scheduler/colorman.c - Apache-2.0 WITH LLVM-exception AND BSD-2-Clause @@ -98,6 +98,8 @@ Patch1007: 0001-ppdize-preset-and-template-names.patch Patch1008: 0001-quote-ppd-localized-strings.patch Patch1009: 0001-fix-warnings-for-unused-vars.patch Patch1010: 0001-Fix-make-and-model-whitespace-trimming-Issue-1096.patch +# RHEL-69638 IPP Everywhere permanent queue is not removed if PPD generation fails +Patch1011: 0001-scheduler-Clean-up-failed-IPP-Everywhere-permanent-q.patch ##### Patches removed because IMHO they aren't no longer needed @@ -349,6 +351,8 @@ to CUPS daemon. This solution will substitute printer drivers and raw queues in %patch -P 1008 -p1 -b .quote-ppd-strings %patch -P 1009 -p1 -b .unused-vars %patch -P 1010 -p1 -b .trim-make-model +# RHEL-69638 IPP Everywhere permanent queue is not removed if PPD generation fails +%patch -P 1011 -p1 -b .clean-failed-eve # Log to the system journal by default (bug #1078781, bug #1519331). @@ -818,6 +822,9 @@ rm -f %{cups_serverbin}/backend/smb %{_mandir}/man7/ippeveps.7.gz %changelog +* Mon Dec 02 2024 Zdenek Dohnal - 1:2.4.10-9 +- RHEL-69638 IPP Everywhere permanent queue is not removed if PPD generation fails + * Mon Nov 25 2024 Zdenek Dohnal - 1:2.4.10-8 - RHEL-45525 cups-2.4.10-2.el10: RHEL SAST Automation: address 1 High impact true positive(s) - RHEL-60354 CVE-2024-47175 cups: remote command injection via attacker controlled data in PPD file