From: Michael R Sweet Date: Sun, 11 May 2025 14:43:04 +0000 (-0400) Subject: Send printer-added/modified events after creating and installing IPP Everywhere PPDs... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7765ca94be4e1c166b853e8a7adf0cf31d9969cc;p=thirdparty%2Fcups.git Send printer-added/modified events after creating and installing IPP Everywhere PPDs (Issue #1244) --- diff --git a/scheduler/ipp.c b/scheduler/ipp.c index 8febd60f37..1748d1036b 100644 --- a/scheduler/ipp.c +++ b/scheduler/ipp.c @@ -5105,6 +5105,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", @@ -5280,6 +5281,10 @@ create_local_bg_thread( cupsRWUnlock(&printer->lock); + /* + * Try opening the created PPD file... + */ + if ((from = cupsFileOpen(fromppd, "r")) == NULL) { cupsdLogPrinter(printer, CUPSD_LOG_ERROR, "Unable to read generated PPD: %s", strerror(errno)); @@ -5294,7 +5299,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) { cupsdLogPrinter(printer, CUPSD_LOG_ERROR, "Unable to create PPD for printer: %s", strerror(errno)); @@ -5310,6 +5325,10 @@ create_local_bg_thread( goto finish_response; } + /* + * Copy the PPD file over... + */ + while (cupsFileGets(from, line, sizeof(line))) cupsFilePrintf(to, "%s\n", line); @@ -5330,6 +5349,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); cupsdLogClient(con, CUPSD_LOG_INFO, "Printer \"%s\" is now available.", printer->name); }