From b6756032a5b09d383569124c557794028bdf0565 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Sun, 11 May 2025 10:46:33 -0400 Subject: [PATCH] Send printer-added/modified events after creating and installing IPP Everywhere PPDs (Issue #1244) --- CHANGES.md | 2 ++ scheduler/ipp.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index ef8457ef02..9f2d51ccd4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,8 @@ CHANGES - OpenPrinting CUPS Changes in CUPS v2.4.13 (YYYY-MM-DD) ------------------------------------ +- Updated the scheduler to send the "printer-added" or "printer-modified" events + whenever an IPP Everywhere PPD is installed (Issue #1244) - Updated the scheduler to send the "printer-modified" event whenever the system default printer is changed (Issue #1246) - Fixed a memory leak in `httpClose` (Issue #1223) diff --git a/scheduler/ipp.c b/scheduler/ipp.c index 68b8be99cb..8b01ba16a6 100644 --- a/scheduler/ipp.c +++ b/scheduler/ipp.c @@ -5268,6 +5268,7 @@ create_local_bg_thread( *response = NULL; /* Response from printer */ ipp_attribute_t *attr; /* Attribute in response */ ipp_status_t status; /* Status code */ + cupsd_eventmask_t event; /* Event (CUPSD_EVENT_PRINTER_ADDED or CUPSD_EVENT_PRINTER_MODIFIED) */ static const char * const pattrs[] = /* Printer attributes we need */ { "all", @@ -5456,6 +5457,10 @@ create_local_bg_thread( _cupsRWUnlock(&printer->lock); + /* + * Try opening the created PPD file... + */ + if ((from = cupsFileOpen(fromppd, "r")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to read generated PPD: %s", printer->name, strerror(errno)); @@ -5470,7 +5475,17 @@ create_local_bg_thread( goto finish_response; } + /* + * Then the destination PPD for the queue... + */ + snprintf(toppd, sizeof(toppd), "%s/ppd/%s.ppd", ServerRoot, printer->name); + + if (access(toppd, 0)) /* Determine whether to log an "added" or "modified" event */ + event = CUPSD_EVENT_PRINTER_ADDED; + else + event = CUPSD_EVENT_PRINTER_MODIFIED; + if ((to = cupsdCreateConfFile(toppd, ConfigFilePerm)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to create PPD for printer: %s", printer->name, strerror(errno)); @@ -5486,6 +5501,10 @@ create_local_bg_thread( goto finish_response; } + /* + * Copy the PPD file over... + */ + while (cupsFileGets(from, line, sizeof(line))) cupsFilePrintf(to, "%s\n", line); @@ -5506,6 +5525,7 @@ create_local_bg_thread( cupsdSetPrinterAttrs(printer); + cupsdAddEvent(event, printer, NULL, "Printer \"%s\" was %s.", printer->name, event == CUPSD_EVENT_PRINTER_ADDED ? "added" : "modified"); cupsdAddEvent(CUPSD_EVENT_PRINTER_CONFIG, printer, NULL, "Printer \"%s\" is now available.", printer->name); cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" is now available.", printer->name); } -- 2.47.2