]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scheduler/log.c
Fix another bug in the new logging code (STR #4687)
[thirdparty/cups.git] / scheduler / log.c
index ac229e380c190e72cc222c5125040b42f5c2dc55..e606905296b84dc22784b7ea589d7936cb5ad788 100644 (file)
@@ -595,6 +595,7 @@ cupsdLogJob(cupsd_job_t *job,               /* I - Job */
     asl_object_t       m;              /* Log message */
     char               job_id[32],     /* job-id string */
                        completed[32];  /* job-impressions-completed string */
+    cupsd_printer_t *printer = job ? (job->printer ? job->printer : (job->dest ? cupsdFindDest(job->dest) : NULL)) : NULL;
     static const char * const job_states[] =
     {                                  /* job-state strings */
       "Pending",
@@ -606,19 +607,23 @@ cupsdLogJob(cupsd_job_t *job,             /* I - Job */
       "Completed"
     };
 
-    snprintf(job_id, sizeof(job_id), "%d", job->id);
-
     m = asl_new(ASL_TYPE_MSG);
     asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
-    asl_set(m, PWG_Event, "JobStateChanged");
-    asl_set(m, PWG_ServiceURI, job->printer->uri);
-    asl_set(m, PWG_JobID, job_id);
-    asl_set(m, PWG_JobState, job_states[job->state_value - IPP_JSTATE_PENDING]);
-
-    if (job->impressions)
+    if (printer)
+      asl_set(m, PWG_ServiceURI, printer->uri);
+    if (job)
     {
-      snprintf(completed, sizeof(completed), "%d", ippGetInteger(job->impressions, 0));
-      asl_set(m, PWG_JobImpressionsCompleted, completed);
+      snprintf(job_id, sizeof(job_id), "%d", job->id);
+
+      asl_set(m, PWG_Event, "JobStateChanged");
+      asl_set(m, PWG_JobID, job_id);
+      asl_set(m, PWG_JobState, job->state_value < IPP_JSTATE_PENDING ? "" : job_states[job->state_value - IPP_JSTATE_PENDING]);
+
+      if (job->impressions)
+      {
+       snprintf(completed, sizeof(completed), "%d", ippGetInteger(job->impressions, 0));
+       asl_set(m, PWG_JobImpressionsCompleted, completed);
+      }
     }
 
     va_start(ap, message);
@@ -632,7 +637,7 @@ cupsdLogJob(cupsd_job_t *job,               /* I - Job */
 #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
   if (!strcmp(ErrorLog, "syslog"))
   {
-    char               completed[32];  /* job-impressions-completed string */
+    cupsd_printer_t *printer = job->printer ? job->printer : job->dest ? cupsdFindDest(job->dest) : NULL;
     static const char * const job_states[] =
     {                                  /* job-state strings */
       "Pending",
@@ -656,17 +661,22 @@ cupsdLogJob(cupsd_job_t *job,             /* I - Job */
 
     va_end(ap);
 
-    sd_journal_send("MESSAGE=%s", log_line,
-                    "PRIORITY=%i", log_levels[level],
-                   PWG_Event"=JobStateChanged",
-                   PWG_ServiceURI"=%s", job->printer->uri,
-                   PWG_JobID"=%d", job->id,
-                   PWG_JobState"=%s", job_states[job->state_value - IPP_JSTATE_PENDING],
-                   PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
-                   NULL);
+    if (job)
+      sd_journal_send("MESSAGE=%s", log_line,
+                     "PRIORITY=%i", log_levels[level],
+                     PWG_Event"=JobStateChanged",
+                     PWG_ServiceURI"=%s", printer ? printer->uri : "",
+                     PWG_JobID"=%d", job->id,
+                     PWG_JobState"=%s", job->state_value < IPP_JSTATE_PENDING ? "" : job_states[job->state_value - IPP_JSTATE_PENDING],
+                     PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
+                     NULL);
+    else
+      sd_journal_send("MESSAGE=%s", log_line,
+                     "PRIORITY=%i", log_levels[level],
+                     NULL);
+
     return (1);
   }
-
 #endif /* HAVE_ASL_H */
 
  /*
@@ -811,8 +821,13 @@ cupsdLogMessage(int        level,  /* I - Log level */
   }
 
 #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
-  sd_journal_printv(log_levels[level], message, ap);
-
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    va_start(ap, message);
+    sd_journal_printv(log_levels[level], message, ap);
+    va_end(ap);
+    return (1);
+  }
 #endif /* HAVE_ASL_H */
 
  /*
@@ -883,7 +898,7 @@ cupsdLogPage(cupsd_job_t *job,              /* I - Job being printed */
            break;
 
         case 'p' :                     /* Printer name */
-           strlcpy(bufptr, job->printer->name, sizeof(buffer) - (size_t)(bufptr - buffer));
+           strlcpy(bufptr, job->dest, sizeof(buffer) - (size_t)(bufptr - buffer));
            bufptr += strlen(bufptr);
            break;
 
@@ -1069,7 +1084,6 @@ cupsdLogPage(cupsd_job_t *job,            /* I - Job being printed */
 #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
   if (!strcmp(ErrorLog, "syslog"))
   {
-    char               completed[32];  /* job-impressions-completed string */
     static const char * const job_states[] =
     {                                  /* job-state strings */
       "Pending",
@@ -1081,20 +1095,8 @@ cupsdLogPage(cupsd_job_t *job,           /* I - Job being printed */
       "Completed"
     };
 
-    va_start(ap, message);
-
-    do
-    {
-      va_copy(ap2, ap);
-      status = format_log_line(message, ap2);
-      va_end(ap2);
-    }
-    while (status == 0);
-
-    va_end(ap);
-
-    sd_journal_send("MESSAGE=%s", log_line,
-                    "PRIORITY=%i", log_levels[level],
+    sd_journal_send("MESSAGE=%s", buffer,
+                    "PRIORITY=%i", LOG_INFO,
                    PWG_Event"=JobStateChanged",
                    PWG_ServiceURI"=%s", job->printer->uri,
                    PWG_JobID"=%d", job->id,
@@ -1299,7 +1301,11 @@ cupsdLogRequest(cupsd_client_t *con,     /* I - Request to log */
   }
 
 #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
-  sd_journal_print(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s", con->http->hostname, con->username[0] != '\0' ? con->username : "-", states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-");
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    sd_journal_print(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s", con->http->hostname, con->username[0] != '\0' ? con->username : "-", states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-");
+    return (1);
+  }
 
 #elif defined(HAVE_VSYSLOG)
  /*
@@ -1393,7 +1399,11 @@ cupsdWriteErrorLog(int        level,     /* I - Log level */
   }
 
 #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
-  sd_journal_print(log_levels[level], "%s", message);
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    sd_journal_print(log_levels[level], "%s", message);
+    return (1);
+  }
 
 #elif defined(HAVE_VSYSLOG)
  /*