diff -up cups-1.7.1/config.h.in.journal cups-1.7.1/config.h.in --- cups-1.7.1/config.h.in.journal 2014-02-17 16:48:19.089795987 +0000 +++ cups-1.7.1/config.h.in 2014-02-17 16:48:19.136796218 +0000 @@ -458,6 +458,13 @@ /* + * Do we have systemd-journal support? + */ + +#undef HAVE_JOURNAL + + +/* * Various scripting languages... */ diff -up cups-1.7.1/config-scripts/cups-systemd.m4.journal cups-1.7.1/config-scripts/cups-systemd.m4 --- cups-1.7.1/config-scripts/cups-systemd.m4.journal 2014-02-17 16:48:19.089795987 +0000 +++ cups-1.7.1/config-scripts/cups-systemd.m4 2014-02-17 16:48:19.136796218 +0000 @@ -22,6 +22,15 @@ if test "x$with_systemdsystemunitdir" != fi fi +SDJLIBS="" +AC_MSG_CHECKING(for libsystemd-journal) +if $PKGCONFIG --exists libsystemd-journal; then + AC_MSG_RESULT(yes) + SDJLIBS=`$PKGCONFIG --libs libsystemd-journal` + AC_DEFINE(HAVE_JOURNAL) +else + AC_MSG_RESULT(no) +fi if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ; then SYSTEMD_UNITS="cups.service cups.socket cups.path" else @@ -30,6 +39,7 @@ fi AC_SUBST(SYSTEMD_UNITS) AC_SUBST(SDLIBS) +AC_SUBST(SDJLIBS) dnl dnl "$Id$" diff -up cups-1.7.1/doc/help/ref-cups-files-conf.html.in.journal cups-1.7.1/doc/help/ref-cups-files-conf.html.in --- cups-1.7.1/doc/help/ref-cups-files-conf.html.in.journal 2014-02-17 17:06:11.652078495 +0000 +++ cups-1.7.1/doc/help/ref-cups-files-conf.html.in 2014-02-17 17:11:50.675752398 +0000 @@ -18,6 +18,7 @@ AccessLog /var/log/cups/access_log AccessLog /var/log/cups/access_log-%s AccessLog syslog +AccessLog journal

Description

@@ -36,6 +37,9 @@ server activity.

The special name "syslog" can be used to send the access information to the system log instead of a plain file.

+

The special name "journal" can be used to send the access +information to the system log instead of a plain file.

+

The default access log file is /var/log/access_log.

@@ -108,6 +112,7 @@ language needed.

ErrorLog /var/log/cups/error_log ErrorLog /var/log/cups/error_log-%s ErrorLog syslog +ErrorLog journal

Description

@@ -124,6 +129,11 @@ default error log file is /var/log/

The special name "syslog" can be used to send the error information to the system log instead of a plain file.

+

The special name "journal" can be used to send the error +information to the system journal instead of a plain file. Information +relating to a specific job is logged with the field +CUPS_JOB_ID filled in.

+

CUPS 1.4/OS X 10.6FatalErrors

@@ -266,6 +276,7 @@ is 644.

PageLog /var/log/cups/page_log PageLog /var/log/cups/page_log-%s PageLog syslog +PageLog journal

Description

@@ -282,6 +293,11 @@ default page log file is /var/log/c

The special name "syslog" can be used to send the page information to the system log instead of a plain file.

+

The special name "journal" can be used to send the page information +to the system journal instead of a plain file. The fields +CUPS_JOB_ID and CUPS_PAGE_NUMBER will be +filled in.

+

Printcap

diff -up cups-1.7.1/Makedefs.in.journal cups-1.7.1/Makedefs.in --- cups-1.7.1/Makedefs.in.journal 2014-02-17 16:48:19.090795992 +0000 +++ cups-1.7.1/Makedefs.in 2014-02-17 16:48:19.136796218 +0000 @@ -143,6 +143,7 @@ IPPFIND_BIN = @IPPFIND_BIN@ IPPFIND_MAN = @IPPFIND_MAN@ LAUNCHDLIBS = @LAUNCHDLIBS@ SDLIBS = @SDLIBS@ +SDJLIBS = @SDJLIBS@ LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \ -L../scheduler @LDARCHFLAGS@ \ @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM) diff -up cups-1.7.1/man/cups-files.conf.man.in.journal cups-1.7.1/man/cups-files.conf.man.in --- cups-1.7.1/man/cups-files.conf.man.in.journal 2014-02-17 17:05:08.103764935 +0000 +++ cups-1.7.1/man/cups-files.conf.man.in 2014-02-17 17:06:48.131258521 +0000 @@ -29,6 +29,8 @@ on-line help for detailed descriptions: AccessLog filename .TP 5 AccessLog syslog +.TP 5 +AccessLog journal .br Defines the access log filename. .TP 5 @@ -48,6 +50,8 @@ Specifies the root directory for the int ErrorLog filename .TP 5 ErrorLog syslog +.TP 5 +ErrorLog journal .br Specifies the error log filename. .TP 5 @@ -83,6 +87,8 @@ Specifies the permissions for all log fi PageLog filename .TP 5 PageLog syslog +.TP 5 +PageLog journal .br Specifies the page log filename. .TP 5 diff -up cups-1.7.1/scheduler/conf.c.journal cups-1.7.1/scheduler/conf.c --- cups-1.7.1/scheduler/conf.c.journal 2014-02-17 16:48:19.047795781 +0000 +++ cups-1.7.1/scheduler/conf.c 2014-02-17 16:48:19.137796223 +0000 @@ -950,9 +950,9 @@ cupsdReadConfiguration(void) */ #ifdef HAVE_VSYSLOG - if (!strcmp(AccessLog, "syslog") || - !strcmp(ErrorLog, "syslog") || - !strcmp(PageLog, "syslog")) + if (!strcmp(AccessLog, "syslog") || !strcmp(AccessLog, "journal") || + !strcmp(ErrorLog, "syslog") || !strcmp(ErrorLog, "journal") || + !strcmp(PageLog, "syslog") || !strcmp(PageLog, "journal")) openlog("cupsd", LOG_PID | LOG_NOWAIT | LOG_NDELAY, LOG_LPR); #endif /* HAVE_VSYSLOG */ @@ -960,13 +960,13 @@ cupsdReadConfiguration(void) * Make sure each of the log files exists and gets rotated as necessary... */ - if (strcmp(AccessLog, "syslog")) + if (strcmp(AccessLog, "syslog") && strcmp(AccessLog, "journal")) cupsdCheckLogFile(&AccessFile, AccessLog); - if (strcmp(ErrorLog, "syslog")) + if (strcmp(ErrorLog, "syslog") && strcmp(ErrorLog, "journal")) cupsdCheckLogFile(&ErrorFile, ErrorLog); - if (strcmp(PageLog, "syslog")) + if (strcmp(PageLog, "syslog") && strcmp(PageLog, "journal")) cupsdCheckLogFile(&PageFile, PageLog); /* diff -up cups-1.7.1/scheduler/conf.h.journal cups-1.7.1/scheduler/conf.h --- cups-1.7.1/scheduler/conf.h.journal 2014-02-17 16:48:19.048795786 +0000 +++ cups-1.7.1/scheduler/conf.h 2014-02-17 16:48:19.138796228 +0000 @@ -297,6 +297,8 @@ extern int cupsdLogMessage(int level, co extern int cupsdLogPage(cupsd_job_t *job, const char *page); extern int cupsdLogRequest(cupsd_client_t *con, http_status_t code); extern int cupsdReadConfiguration(void); +extern int cupsdWriteErrorLogJob(cupsd_job_t *job, int level, + const char *message); extern int cupsdWriteErrorLog(int level, const char *message); diff -up cups-1.7.1/scheduler/log.c.journal cups-1.7.1/scheduler/log.c --- cups-1.7.1/scheduler/log.c.journal 2014-02-17 16:48:19.073795909 +0000 +++ cups-1.7.1/scheduler/log.c 2014-02-17 16:48:19.138796228 +0000 @@ -21,6 +21,7 @@ * cupsdLogMessage() - Log a message to the error log file. * cupsdLogPage() - Log a page to the page log file. * cupsdLogRequest() - Log an HTTP request in Common Log Format. + * cupsdWriteErrorLogJob() - Write a job message to the ErrorLog. * cupsdWriteErrorLog() - Write a line to the ErrorLog. * format_log_line() - Format a line for a log file. */ @@ -35,6 +36,9 @@ #include #include #include +#ifdef HAVE_JOURNAL +# include +#endif /* HAVE_JOURNAL */ /* @@ -559,8 +563,17 @@ cupsdLogJob(cupsd_job_t *job, /* I - Jo } else if (level <= LogLevel && (level != CUPSD_LOG_INFO || LogLevel >= CUPSD_LOG_DEBUG)) - return (cupsdWriteErrorLog(level, log_line)); - else + { + if (!strcmp (ErrorLog, "journal")) +#ifdef HAVE_JOURNAL + return (sd_journal_send ("MESSAGE=%s", log_line, + "PRIORITY=%d", syslevels[level], + "CUPS_JOB_ID=%d", job ? job->id : -1, + NULL)) ? 0 : 1; + else +#endif /* HAVE_JOURNAL */ + return (cupsdWriteErrorLog(level, log_line)); + } else return (1); } else @@ -789,6 +802,15 @@ cupsdLogPage(cupsd_job_t *job, /* I - J *bufptr = '\0'; +#ifdef HAVE_JOURNAL + if (!strcmp(PageLog, "journal")) + return (sd_journal_send ("MESSAGE=%s", buffer, + "PRIORITY=%d", LOG_INFO, + "CUPS_JOB_ID=%d", job->id, + "CUPS_PAGE_NUMBER=%s", number, + NULL) ? 0 : 1); +#endif /* HAVE_JOURNAL */ + #ifdef HAVE_VSYSLOG /* * See if we are logging pages via syslog... @@ -964,7 +986,7 @@ cupsdLogRequest(cupsd_client_t *con, /* * See if we are logging accesses via syslog... */ - if (!strcmp(AccessLog, "syslog")) + if (!strcmp(AccessLog, "syslog") || !strcmp(AccessLog, "journal")) { syslog(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n", @@ -1018,8 +1040,9 @@ cupsdLogRequest(cupsd_client_t *con, /* */ int /* O - 1 on success, 0 on failure */ -cupsdWriteErrorLog(int level, /* I - Log level */ - const char *message) /* I - Message string */ +cupsdWriteErrorLogJob(cupsd_job_t *job, /* I - Job or NULL */ + int level, /* I - Log level */ + const char *message) /* I - Message string */ { static const char levels[] = /* Log levels... */ { @@ -1036,12 +1059,25 @@ cupsdWriteErrorLog(int level, /* }; +#ifdef HAVE_JOURNAL + if (!strcmp(ErrorLog, "journal")) + { + if (job) + { + return (sd_journal_send ("MESSAGE=%s", message, + "PRIORITY=%d", syslevels[level], + "CUPS_JOB_ID=%d", job->id, + NULL) ? 0 : 1); + } else + return (sd_journal_print (syslevels[level], "%s", message) ? 0 : 1); + } +#endif /* HAVE_JOURNAL */ #ifdef HAVE_VSYSLOG /* * See if we are logging errors via syslog... */ - if (!strcmp(ErrorLog, "syslog")) + if (!strcmp(ErrorLog, "syslog") || !strcmp(ErrorLog, "journal")) { syslog(syslevels[level], "%s", message); return (1); @@ -1067,6 +1103,18 @@ cupsdWriteErrorLog(int level, /* } +/* + * 'cupsdWriteErrorLog()' - Write a line to the ErrorLog. + */ + +int /* O - 1 on success, 0 on failure */ +cupsdWriteErrorLog(int level, /* I - Log level */ + const char *message) /* I - Message string */ +{ + return (cupsdWriteErrorLogJob(NULL, level, message)); +} + + /* * 'format_log_line()' - Format a line for a log file. * diff -up cups-1.7.1/scheduler/Makefile.journal cups-1.7.1/scheduler/Makefile --- cups-1.7.1/scheduler/Makefile.journal 2014-02-17 16:48:19.124796159 +0000 +++ cups-1.7.1/scheduler/Makefile 2014-02-17 16:48:19.137796223 +0000 @@ -383,7 +383,7 @@ cupsd: $(CUPSDOBJS) $(LIBCUPSMIME) ../cu $(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \ $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \ $(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBS) \ - $(LIBGSSAPI) $(LIBWRAP) $(SDLIBS) + $(LIBGSSAPI) $(LIBWRAP) $(SDLIBS) $(SDJLIBS) cupsd-static: $(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... @@ -391,7 +391,7 @@ cupsd-static: $(CUPSDOBJS) libcupsmime.a $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \ ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \ $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBGSSAPI) \ - $(LIBWRAP) $(SDLIBS) + $(LIBWRAP) $(SDLIBS) $(SDJLIBS) tls.o: tls-darwin.c tls-gnutls.c tls-openssl.c --- cups-1.7.1/conf/cups-files.conf.in.journal 2014-04-04 13:12:13.923185140 +0100 +++ cups-1.7.1/conf/cups-files.conf.in 2014-04-04 13:13:10.633430876 +0100 @@ -30,9 +30,10 @@ SystemGroup @CUPS_SYSTEM_GROUPS@ #ConfigFilePerm 0@CUPS_CONFIG_FILE_PERM@ #LogFilePerm 0@CUPS_LOG_FILE_PERM@ -# Location of the file logging all access to the scheduler; may be the name -# "syslog". If not an absolute path, the value of ServerRoot is used as the -# root directory. Also see the "AccessLogLevel" directive in cupsd.conf. +# Location of the file logging all access to the scheduler; may be the +# name "syslog" or "journal". If not an absolute path, the value of +# ServerRoot is used as the root directory. Also see the +# "AccessLogLevel" directive in cupsd.conf. AccessLog @CUPS_LOGDIR@/access_log # Location of cache files used by the scheduler... @@ -44,10 +45,10 @@ AccessLog @CUPS_LOGDIR@/access_log # Location of the static web content served by the scheduler... #DocumentRoot @CUPS_DOCROOT@ -# Location of the file logging all messages produced by the scheduler and any -# helper programs; may be the name "syslog". If not an absolute path, the value -# of ServerRoot is used as the root directory. Also see the "LogLevel" -# directive in cupsd.conf. +# Location of the file logging all messages produced by the scheduler +# and any helper programs; may be the name "syslog" or "journal". If +# not an absolute path, the value of ServerRoot is used as the root +# directory. Also see the "LogLevel" # directive in cupsd.conf. ErrorLog @CUPS_LOGDIR@/error_log # Location of fonts used by older print filters... @@ -56,10 +57,10 @@ ErrorLog @CUPS_LOGDIR@/error_log # Location of LPD configuration #LPDConfigFile @CUPS_DEFAULT_LPD_CONFIG_FILE@ -# Location of the file logging all pages printed by the scheduler and any -# helper programs; may be the name "syslog". If not an absolute path, the value -# of ServerRoot is used as the root directory. Also see the "PageLogFormat" -# directive in cupsd.conf. +# Location of the file logging all pages printed by the scheduler and +# any helper programs; may be the name "syslog" or "journal". If not +# an absolute path, the value of ServerRoot is used as the root +# directory. Also see the "PageLogFormat" directive in cupsd.conf. PageLog @CUPS_LOGDIR@/page_log # Location of the file listing all of the local printers...