Merge branch 'f21'

This commit is contained in:
Tim Waugh 2014-11-06 14:48:42 +00:00
commit 8955d8cc4e
3 changed files with 491 additions and 316 deletions

View File

@ -1,6 +1,6 @@
diff -up cups-2.0rc1/conf/cups-files.conf.in.journal cups-2.0rc1/conf/cups-files.conf.in diff -up cups-2.0.0/conf/cups-files.conf.in.journal cups-2.0.0/conf/cups-files.conf.in
--- cups-2.0rc1/conf/cups-files.conf.in.journal 2014-03-03 17:46:23.000000000 +0100 --- cups-2.0.0/conf/cups-files.conf.in.journal 2014-03-03 16:46:23.000000000 +0000
+++ cups-2.0rc1/conf/cups-files.conf.in 2014-09-12 17:47:14.668190332 +0200 +++ cups-2.0.0/conf/cups-files.conf.in 2014-11-06 14:10:21.874448772 +0000
@@ -28,9 +28,10 @@ SystemGroup @CUPS_SYSTEM_GROUPS@ @@ -28,9 +28,10 @@ SystemGroup @CUPS_SYSTEM_GROUPS@
#ConfigFilePerm 0@CUPS_CONFIG_FILE_PERM@ #ConfigFilePerm 0@CUPS_CONFIG_FILE_PERM@
#LogFilePerm 0@CUPS_LOG_FILE_PERM@ #LogFilePerm 0@CUPS_LOG_FILE_PERM@
@ -15,7 +15,7 @@ diff -up cups-2.0rc1/conf/cups-files.conf.in.journal cups-2.0rc1/conf/cups-files
AccessLog @CUPS_LOGDIR@/access_log AccessLog @CUPS_LOGDIR@/access_log
# Location of cache files used by the scheduler... # Location of cache files used by the scheduler...
@@ -42,10 +43,10 @@ AccessLog @CUPS_LOGDIR@/access_log @@ -42,11 +43,11 @@ AccessLog @CUPS_LOGDIR@/access_log
# Location of the static web content served by the scheduler... # Location of the static web content served by the scheduler...
#DocumentRoot @CUPS_DOCROOT@ #DocumentRoot @CUPS_DOCROOT@
@ -23,13 +23,15 @@ diff -up cups-2.0rc1/conf/cups-files.conf.in.journal cups-2.0rc1/conf/cups-files
-# helper programs; may be the name "syslog". If not an absolute path, the value -# 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" -# of ServerRoot is used as the root directory. Also see the "LogLevel"
-# directive in cupsd.conf. -# directive in cupsd.conf.
-ErrorLog @CUPS_LOGDIR@/error_log
+# Location of the file logging all messages produced by the scheduler +# Location of the file logging all messages produced by the scheduler
+# and any helper programs; may be the name "syslog" or "journal". If +# 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 +# not an absolute path, the value of ServerRoot is used as the root
+# directory. Also see the "LogLevel" # directive in cupsd.conf. +# directory. Also see the "LogLevel" # directive in cupsd.conf.
ErrorLog @CUPS_LOGDIR@/error_log +ErrorLog journal
# Location of fonts used by older print filters... # Location of fonts used by older print filters...
#FontPath @CUPS_FONTPATH@
@@ -54,10 +55,10 @@ ErrorLog @CUPS_LOGDIR@/error_log @@ -54,10 +55,10 @@ ErrorLog @CUPS_LOGDIR@/error_log
# Location of LPD configuration # Location of LPD configuration
#LPDConfigFile @CUPS_DEFAULT_LPD_CONFIG_FILE@ #LPDConfigFile @CUPS_DEFAULT_LPD_CONFIG_FILE@
@ -45,57 +47,29 @@ diff -up cups-2.0rc1/conf/cups-files.conf.in.journal cups-2.0rc1/conf/cups-files
PageLog @CUPS_LOGDIR@/page_log PageLog @CUPS_LOGDIR@/page_log
# Location of the file listing all of the local printers... # Location of the file listing all of the local printers...
diff -up cups-2.0rc1/config.h.in.journal cups-2.0rc1/config.h.in diff -up cups-2.0.0/config-scripts/cups-startup.m4.journal cups-2.0.0/config-scripts/cups-startup.m4
--- cups-2.0rc1/config.h.in.journal 2014-08-30 03:51:22.000000000 +0200 --- cups-2.0.0/config-scripts/cups-startup.m4.journal 2014-03-27 01:15:48.000000000 +0000
+++ cups-2.0rc1/config.h.in 2014-09-12 17:47:14.668190332 +0200 +++ cups-2.0.0/config-scripts/cups-startup.m4 2014-11-06 14:10:00.186328322 +0000
@@ -470,6 +470,13 @@ @@ -56,11 +56,11 @@ if test x$enable_systemd != xno; then
AC_MSG_ERROR(Need pkg-config to enable systemd support.)
fi
/* else
+ * Do we have systemd-journal support? - AC_MSG_CHECKING(for libsystemd-daemon)
+ */ - if $PKGCONFIG --exists libsystemd-daemon; then
+ + AC_MSG_CHECKING(for libsystemd)
+#undef HAVE_JOURNAL + if $PKGCONFIG --exists libsystemd; then
+ AC_MSG_RESULT(yes)
+ - ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd-daemon`
+/* - ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd-daemon`
* Various scripting languages... + ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd`
*/ + ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd`
AC_DEFINE(HAVE_SYSTEMD)
diff -up cups-2.0rc1/config-scripts/cups-startup.m4.journal cups-2.0rc1/config-scripts/cups-startup.m4 if test "x$SYSTEMD_DIR" = x; then
--- cups-2.0rc1/config-scripts/cups-startup.m4.journal 2014-03-27 02:15:48.000000000 +0100 SYSTEMD_DIR="`$PKGCONFIG --variable=systemdsystemunitdir systemd`"
+++ cups-2.0rc1/config-scripts/cups-startup.m4 2014-09-12 17:48:58.435737311 +0200 diff -up cups-2.0.0/doc/help/man-cups-files.conf.html.journal cups-2.0.0/doc/help/man-cups-files.conf.html
@@ -15,8 +15,10 @@ dnl --- cups-2.0.0/doc/help/man-cups-files.conf.html.journal 2014-06-13 01:01:23.000000000 +0100
+++ cups-2.0.0/doc/help/man-cups-files.conf.html 2014-11-06 14:10:00.187328328 +0000
ONDEMANDFLAGS="" @@ -24,6 +24,7 @@ The following directives are understood
ONDEMANDLIBS=""
+SDJLIBS=""
AC_SUBST(ONDEMANDFLAGS)
AC_SUBST(ONDEMANDLIBS)
+AC_SUBST(SDJLIBS)
dnl Launchd is used on OS X/Darwin...
AC_ARG_ENABLE(launchd, [ --disable-launchd disable launchd support])
@@ -71,6 +73,15 @@ if test x$enable_systemd != xno; then
fi
fi
+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
+
dnl Solaris uses smf
SMFMANIFESTDIR=""
AC_SUBST(SMFMANIFESTDIR)
diff -up cups-2.0rc1/doc/help/man-cups-files.conf.html.journal cups-2.0rc1/doc/help/man-cups-files.conf.html
--- cups-2.0rc1/doc/help/man-cups-files.conf.html.journal 2014-06-13 02:01:23.000000000 +0200
+++ cups-2.0rc1/doc/help/man-cups-files.conf.html 2014-09-12 17:47:14.669190318 +0200
@@ -24,9 +24,11 @@ The following directives are understood
<dt><b>AccessLog</b> <dt><b>AccessLog</b>
<dd style="margin-left: 5.0em"><dt><b>AccessLog </b><i>filename</i> <dd style="margin-left: 5.0em"><dt><b>AccessLog </b><i>filename</i>
<dd style="margin-left: 5.0em"><dt><b>AccessLog syslog</b> <dd style="margin-left: 5.0em"><dt><b>AccessLog syslog</b>
@ -103,11 +77,7 @@ diff -up cups-2.0rc1/doc/help/man-cups-files.conf.html.journal cups-2.0rc1/doc/h
<dd style="margin-left: 5.0em">Defines the access log filename. <dd style="margin-left: 5.0em">Defines the access log filename.
Specifying a blank filename disables access log generation. Specifying a blank filename disables access log generation.
The value "syslog" causes log entries to be sent to the system log daemon. The value "syslog" causes log entries to be sent to the system log daemon.
+The value "journal" causes access information to be sent to the system log instead of a plain file. @@ -51,6 +52,7 @@ The default is usually "/usr/share/doc/c
The server name may be included in filenames using the string "%s", for example:
<pre class="man">
@@ -51,9 +53,12 @@ The default is usually "/usr/share/doc/c
<dt><b>ErrorLog</b> <dt><b>ErrorLog</b>
<dd style="margin-left: 5.0em"><dt><b>ErrorLog </b><i>filename</i> <dd style="margin-left: 5.0em"><dt><b>ErrorLog </b><i>filename</i>
<dd style="margin-left: 5.0em"><dt><b>ErrorLog syslog</b> <dd style="margin-left: 5.0em"><dt><b>ErrorLog syslog</b>
@ -115,38 +85,18 @@ diff -up cups-2.0rc1/doc/help/man-cups-files.conf.html.journal cups-2.0rc1/doc/h
<dd style="margin-left: 5.0em">Defines the error log filename. <dd style="margin-left: 5.0em">Defines the error log filename.
Specifying a blank filename disables error log generation. Specifying a blank filename disables error log generation.
The value "syslog" causes log entries to be sent to the system log daemon. The value "syslog" causes log entries to be sent to the system log daemon.
+The value "journal" causes error information to be sent to the system journal instead of a plain file. @@ -96,6 +98,7 @@ The default group is operating system sp
+Information relating to a specific job is logged with the field <CODE>CUPS_JOB_ID</CODE> filled in.
The server name may be included in filenames using the string "%s", for example:
<pre class="man">
@@ -96,8 +101,11 @@ The default group is operating system sp
The default is "0644". The default is "0644".
<dt><b>PageLog </b>[ <i>filename</i> ] <dt><b>PageLog </b>[ <i>filename</i> ]
<dd style="margin-left: 5.0em"><dt><b>PageLog syslog</b> <dd style="margin-left: 5.0em"><dt><b>PageLog syslog</b>
+<dd style="margin-left: 5.0em"><dt><b>PageLog journal</b> +<dd style="margin-left: 5.0em"><dt><b>PageLog journal</b>
<dd style="margin-left: 5.0em">Defines the page log filename. <dd style="margin-left: 5.0em">Defines the page log filename.
The value "syslog" causes log entries to be sent to the system log daemon. The value "syslog" causes log entries to be sent to the system log daemon.
+The value "journal" causes the page information to be sent to the system journal instead of a plain file.
+The fields <CODE>CUPS_JOB_ID</CODE> and <CODE>CUPS_PAGE_NUMBER</CODE> will be filled in.
Specifying a blank filename disables page log generation. Specifying a blank filename disables page log generation.
The server name may be included in filenames using the string "%s", for example: diff -up cups-2.0.0/man/cups-files.conf.man.in.journal cups-2.0.0/man/cups-files.conf.man.in
<pre class="man"> --- cups-2.0.0/man/cups-files.conf.man.in.journal 2014-06-13 01:01:23.000000000 +0100
diff -up cups-2.0rc1/Makedefs.in.journal cups-2.0rc1/Makedefs.in +++ cups-2.0.0/man/cups-files.conf.man.in 2014-11-06 14:10:00.187328328 +0000
--- cups-2.0rc1/Makedefs.in.journal 2014-09-12 17:47:14.617191046 +0200 @@ -33,9 +33,13 @@ The following directives are understood
+++ cups-2.0rc1/Makedefs.in 2014-09-12 17:47:14.669190318 +0200
@@ -148,6 +148,7 @@ LINKCUPSIMAGE = @LINKCUPSIMAGE@
LIBS = $(LINKCUPS) $(COMMONLIBS)
ONDEMANDFLAGS = @ONDEMANDFLAGS@
ONDEMANDLIBS = @ONDEMANDLIBS@
+SDJLIBS = @SDJLIBS@
OPTIM = @OPTIM@
OPTIONS =
PAMLIBS = @PAMLIBS@
diff -up cups-2.0rc1/man/cups-files.conf.man.in.journal cups-2.0rc1/man/cups-files.conf.man.in
--- cups-2.0rc1/man/cups-files.conf.man.in.journal 2014-06-13 02:01:23.000000000 +0200
+++ cups-2.0rc1/man/cups-files.conf.man.in 2014-09-12 17:47:14.669190318 +0200
@@ -33,9 +33,12 @@ The following directives are understood
\fBAccessLog \fIfilename\fR \fBAccessLog \fIfilename\fR
.TP 5 .TP 5
\fBAccessLog syslog\fR \fBAccessLog syslog\fR
@ -154,12 +104,14 @@ diff -up cups-2.0rc1/man/cups-files.conf.man.in.journal cups-2.0rc1/man/cups-fil
+\fBAccessLog journal\fR +\fBAccessLog journal\fR
Defines the access log filename. Defines the access log filename.
Specifying a blank filename disables access log generation. Specifying a blank filename disables access log generation.
The value "syslog" causes log entries to be sent to the system log daemon. -The value "syslog" causes log entries to be sent to the system log daemon.
+The value "journal" causes access information to be sent to the system log instead of a plain file. +The value "syslog" causes log entries to be sent to the system log
+daemon. The value "journal" causes log entries to be sent to the
+systemd journal.
The server name may be included in filenames using the string "%s", for example: The server name may be included in filenames using the string "%s", for example:
.nf .nf
@@ -65,9 +68,13 @@ The default is usually "/usr/share/doc/c @@ -65,9 +69,13 @@ The default is usually "/usr/share/doc/c
\fBErrorLog \fIfilename\fR \fBErrorLog \fIfilename\fR
.TP 5 .TP 5
\fBErrorLog syslog\fR \fBErrorLog syslog\fR
@ -167,28 +119,30 @@ diff -up cups-2.0rc1/man/cups-files.conf.man.in.journal cups-2.0rc1/man/cups-fil
+\fBErrorLog journal\fR +\fBErrorLog journal\fR
Defines the error log filename. Defines the error log filename.
Specifying a blank filename disables error log generation. Specifying a blank filename disables error log generation.
The value "syslog" causes log entries to be sent to the system log daemon. -The value "syslog" causes log entries to be sent to the system log daemon.
+The value "journal" causes error information to be sent to the system journal instead of a plain file. +The value "syslog" causes log entries to be sent to the system log
+Information relating to a specific job is logged with the field \fICUPS_JOB_ID\fR filled in. +daemon. The value "journal" causes log entries to be sent to the
+systemd journal.
The server name may be included in filenames using the string "%s", for example: The server name may be included in filenames using the string "%s", for example:
.nf .nf
@@ -125,8 +132,12 @@ The default is "0644". @@ -125,8 +133,12 @@ The default is "0644".
\fBPageLog \fR[ \fIfilename\fR ] \fBPageLog \fR[ \fIfilename\fR ]
.TP 5 .TP 5
\fBPageLog syslog\fR \fBPageLog syslog\fR
+.TP 5 +.TP 5
+\fBPageLog journal\fR +\fBPageLog journal\fR
Defines the page log filename. Defines the page log filename.
The value "syslog" causes log entries to be sent to the system log daemon. -The value "syslog" causes log entries to be sent to the system log daemon.
+The value "journal" causes the page information to be sent to the system journal instead of a plain file. +The value "syslog" causes log entries to be sent to the system log
+The fields \fICUPS_JOB_ID\fR and \fICUPS_PAGE_NUMBER\fR will be filled in. +daemon. The value "journal" causes log entries to be sent to the
+systemd journal.
Specifying a blank filename disables page log generation. Specifying a blank filename disables page log generation.
The server name may be included in filenames using the string "%s", for example: The server name may be included in filenames using the string "%s", for example:
.nf .nf
diff -up cups-2.0rc1/scheduler/conf.c.journal cups-2.0rc1/scheduler/conf.c diff -up cups-2.0.0/scheduler/conf.c.journal cups-2.0.0/scheduler/conf.c
--- cups-2.0rc1/scheduler/conf.c.journal 2014-09-12 17:47:14.563191802 +0200 --- cups-2.0.0/scheduler/conf.c.journal 2014-11-06 14:10:00.132328022 +0000
+++ cups-2.0rc1/scheduler/conf.c 2014-09-12 17:47:14.670190304 +0200 +++ cups-2.0.0/scheduler/conf.c 2014-11-06 14:10:00.187328328 +0000
@@ -950,9 +950,9 @@ cupsdReadConfiguration(void) @@ -950,9 +950,9 @@ cupsdReadConfiguration(void)
*/ */
@ -219,68 +173,309 @@ diff -up cups-2.0rc1/scheduler/conf.c.journal cups-2.0rc1/scheduler/conf.c
cupsdCheckLogFile(&PageFile, PageLog); cupsdCheckLogFile(&PageFile, PageLog);
/* /*
diff -up cups-2.0rc1/scheduler/conf.h.journal cups-2.0rc1/scheduler/conf.h diff -up cups-2.0.0/scheduler/conf.h.journal cups-2.0.0/scheduler/conf.h
--- cups-2.0rc1/scheduler/conf.h.journal 2014-09-12 17:47:14.563191802 +0200 --- cups-2.0.0/scheduler/conf.h.journal 2014-11-06 14:10:00.132328022 +0000
+++ cups-2.0rc1/scheduler/conf.h 2014-09-12 17:47:14.671190290 +0200 +++ cups-2.0.0/scheduler/conf.h 2014-11-06 14:10:00.188328333 +0000
@@ -298,6 +298,8 @@ extern int cupsdLogMessage(int level, co @@ -291,16 +291,69 @@ extern int cupsdLogGSSMessage(int level,
OM_uint32 minor_status,
const char *message, ...);
#endif /* HAVE_GSSAPI */
-extern int cupsdLogJob(cupsd_job_t *job, int level, const char *message,
- ...) __attribute__((__format__(__printf__, 3, 4)));
-extern int cupsdLogMessage(int level, const char *message, ...)
- __attribute__ ((__format__ (__printf__, 2, 3)));
+extern int _cupsdLogJobWithLocation(const char *file,
+ const char *line,
+ const char *func,
+ cupsd_job_t *job,
+ int level,
+ const char *message,
+ ...)
+ __attribute__((__format__(__printf__, 6, 7)));
+extern int _cupsdLogMessageWithLocation(const char *file,
+ const char *line,
+ const char *func,
+ int level,
+ const char *message,
+ ...)
+ __attribute__ ((__format__ (__printf__, 5, 6)));
extern int cupsdLogPage(cupsd_job_t *job, const char *page); extern int cupsdLogPage(cupsd_job_t *job, const char *page);
extern int cupsdLogRequest(cupsd_client_t *con, http_status_t code); extern int cupsdLogRequest(cupsd_client_t *con, http_status_t code);
extern int cupsdReadConfiguration(void); extern int cupsdReadConfiguration(void);
+extern int cupsdWriteErrorLogJob(cupsd_job_t *job, int level, -extern int cupsdWriteErrorLog(int level, const char *message);
+ const char *message); +extern int _cupsdWriteErrorLogJobWithLocation(const char *file,
extern int cupsdWriteErrorLog(int level, const char *message); + const char *line,
+ const char *func,
+ cupsd_job_t *job,
+ int level,
+ const char *message);
+extern int _cupsdWriteErrorLogWithLocation(const char *file,
+ const char *line,
+ const char *func,
+ int level, const char *message);
diff -up cups-2.0rc1/scheduler/log.c.journal cups-2.0rc1/scheduler/log.c +#ifndef _CUPSD_STRINGIFY
--- cups-2.0rc1/scheduler/log.c.journal 2014-09-12 17:47:14.599191298 +0200 +#define _CUPSD_XSTRINGIFY(x) #x
+++ cups-2.0rc1/scheduler/log.c 2014-09-12 17:47:14.671190290 +0200 +#define _CUPSD_STRINGIFY(x) _CUPSD_XSTRINGIFY(x)
@@ -23,6 +23,9 @@ +#endif /* !defined(_CUPSD_STRINGIFY) */
+
+#define cupsdLogJob(...) \
+ _cupsdLogJobWithLocation("CODE_FILE=" __FILE__, \
+ "CODE_LINE=" \
+ _CUPSD_STRINGIFY(__LINE__), \
+ __func__, \
+ __VA_ARGS__)
+
+#define cupsdLogMessage(...) \
+ _cupsdLogMessageWithLocation("CODE_FILE=" __FILE__, \
+ "CODE_LINE=" \
+ _CUPSD_STRINGIFY(__LINE__), \
+ __func__, \
+ __VA_ARGS__)
+
+#define cupsdWriteErrorLogJob(...) \
+ _cupsdWriteErrorLogJobWithLocation("CODE_FILE=" __FILE__, \
+ "CODE_LINE=" \
+ _CUPSD_STRINGIFY(__LINE__), \
+ __func__, \
+ __VA_ARGS__)
+
+#define cupsdWriteErrorLog(...) \
+ _cupsdWriteErrorLogWithLocation("CODE_FILE=" __FILE__, \
+ "CODE_LINE=" \
+ _CUPSD_STRINGIFY(__LINE__), \
+ __func__, \
+ __VA_ARGS__)
+
/*
* End of "$Id: conf.h 11789 2014-04-02 16:52:53Z msweet $".
*/
diff -up cups-2.0.0/scheduler/log.c.journal cups-2.0.0/scheduler/log.c
--- cups-2.0.0/scheduler/log.c.journal 2014-11-06 14:10:00.154328144 +0000
+++ cups-2.0.0/scheduler/log.c 2014-11-06 14:10:00.188328333 +0000
@@ -23,6 +23,12 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
+#ifdef HAVE_JOURNAL +#include <sys/uio.h>
+#ifdef HAVE_SYSTEMD
+/* We handle location fields ourselves */
+# define SD_JOURNAL_SUPPRESS_LOCATION
+# include <systemd/sd-journal.h> +# include <systemd/sd-journal.h>
+#endif /* HAVE_JOURNAL */ +#endif /* HAVE_SYSTEMD */
/* /*
@@ -603,8 +606,17 @@ cupsdLogJob(cupsd_job_t *job, /* I - Jo @@ -509,15 +515,135 @@ cupsdLogClient(cupsd_client_t *con, /* I
}
+#ifdef HAVE_SYSTEMD
+static int
+dup_iovec_string(struct iovec *vec,
+ const char *str)
+{
+ vec->iov_base = strdup (str);
+ vec->iov_len = strlen (str);
+ return (vec->iov_base ? 1 : 0);
+}
+
+
+/*
+ * '_cupsdLogToJournal()' - Log to journal with fields
+ */
+static int /* O - 1 on success, 0 on error */
+_cupsdLogToJournal(const char *file, /* I - Code file */
+ const char *line, /* I - Code line */
+ const char *func, /* I - Code func */
+ cupsd_job_t *job, /* I - Job or NULL */
+ int level, /* I - Log level */
+ const char *message)/* I - Formatted message */
+{
+ size_t n_journal_fields;
+ struct iovec *journal_fields = NULL;
+ char buffer[256];
+ int result = 1;
+
+ /*
+ * There will be at least 5 fields:
+ * CODE_FILE, CODE_LINE, CODE_FUNC, MESSAGE, PRIORITY
+ */
+
+ n_journal_fields = 5;
+
+ if (job)
+ {
+ n_journal_fields++; /* CUPS_JOB_ID */
+
+ if (job->dest)
+ n_journal_fields++; /* CUPS_DEST */
+
+ if (job->printer)
+ n_journal_fields++; /* CUPS_PRINTER */
+ }
+
+ journal_fields = calloc (n_journal_fields, sizeof (struct iovec));
+ if (!journal_fields)
+ return (0);
+
+ n_journal_fields = 0;
+
+ result = dup_iovec_string (&journal_fields[n_journal_fields], file);
+
+ if (result)
+ {
+ n_journal_fields++;
+ result = dup_iovec_string (&journal_fields[n_journal_fields], line);
+ }
+
+ if (result)
+ {
+ n_journal_fields++;
+ snprintf (buffer, sizeof (buffer), "CODE_FUNC=%s", func);
+ result = dup_iovec_string (&journal_fields[n_journal_fields], buffer);
+ }
+
+ if (result)
+ {
+ n_journal_fields++;
+ snprintf (buffer, sizeof (buffer), "MESSAGE=%s", log_line);
+ result = dup_iovec_string (&journal_fields[n_journal_fields], buffer);
+ }
+
+ if (result)
+ {
+ n_journal_fields++;
+ snprintf (buffer, sizeof (buffer), "PRIORITY=%i", syslevels[level]);
+ result = dup_iovec_string (&journal_fields[n_journal_fields], buffer);
+ }
+
+ if (result && job)
+ {
+ n_journal_fields++;
+ snprintf (buffer, sizeof (buffer), "CUPS_JOB_ID=%d", job->id);
+ result = dup_iovec_string (&journal_fields[n_journal_fields], buffer);
+
+ if (result && job->dest)
+ {
+ n_journal_fields++;
+ snprintf (buffer, sizeof (buffer), "CUPS_DEST=%s", job->dest);
+ result = dup_iovec_string (&journal_fields[n_journal_fields], buffer);
+ }
+
+ if (result && job->printer)
+ {
+ n_journal_fields++;
+ snprintf (buffer, sizeof (buffer), "CUPS_PRINTER=%s",
+ job->printer->name);
+ result = dup_iovec_string (&journal_fields[n_journal_fields], buffer);
+ }
+ }
+
+ if (result)
+ {
+ n_journal_fields++;
+ result = sd_journal_sendv (journal_fields, n_journal_fields);
+ }
+
+ while (n_journal_fields > 0)
+ free (journal_fields[--n_journal_fields].iov_base);
+
+ free (journal_fields);
+ return (result);
+}
+#endif /* HAVE_SYSTEMD */
+
+
/*
* 'cupsdLogJob()' - Log a job message.
*/
-int /* O - 1 on success, 0 on error */
-cupsdLogJob(cupsd_job_t *job, /* I - Job */
- int level, /* I - Log level */
- const char *message, /* I - Printf-style message string */
- ...) /* I - Additional arguments as needed */
+int /* O - 1 on success, 0 on error */
+_cupsdLogJobWithLocation(const char *file, /* I - Code file */
+ const char *line, /* I - Code line */
+ const char *func, /* I - Code func */
+ cupsd_job_t *job, /* I - Job */
+ int level, /* I - Log level */
+ const char *message, /* I - Printf-style message string */
+ ...) /* I - Additional arguments as needed */
{
va_list ap, ap2; /* Argument pointers */
char jobmsg[1024]; /* Format string for job message */
@@ -603,8 +729,14 @@ cupsdLogJob(cupsd_job_t *job, /* I - Jo
} }
else if (level <= LogLevel && else if (level <= LogLevel &&
(level != CUPSD_LOG_INFO || LogLevel >= CUPSD_LOG_DEBUG)) (level != CUPSD_LOG_INFO || LogLevel >= CUPSD_LOG_DEBUG))
- return (cupsdWriteErrorLog(level, log_line)); - return (cupsdWriteErrorLog(level, log_line));
- else - else
+ { + {
+#ifdef HAVE_SYSTEMD
+ if (!strcmp (ErrorLog, "journal")) + if (!strcmp (ErrorLog, "journal"))
+#ifdef HAVE_JOURNAL + return (_cupsdLogToJournal (file, line, func, job, level, log_line));
+ return (sd_journal_send ("MESSAGE=%s", log_line,
+ "PRIORITY=%d", syslevels[level],
+ "CUPS_JOB_ID=%d", job ? job->id : -1,
+ NULL)) ? 0 : 1;
+ else + else
+#endif /* HAVE_JOURNAL */ +#endif /* HAVE_SYSTEMD */
+ return (cupsdWriteErrorLog(level, log_line)); + return (cupsdWriteErrorLog(level, log_line));
+ } else + } else
return (1); return (1);
} }
else else
@@ -860,6 +872,15 @@ cupsdLogPage(cupsd_job_t *job, /* I - J @@ -617,10 +749,13 @@ cupsdLogJob(cupsd_job_t *job, /* I - Jo
* 'cupsdLogMessage()' - Log a message to the error log file.
*/
-int /* O - 1 on success, 0 on error */
-cupsdLogMessage(int level, /* I - Log level */
- const char *message, /* I - printf-style message string */
- ...) /* I - Additional args as needed */
+int /* O - 1 on success, 0 on error */
+_cupsdLogMessageWithLocation(const char *file, /* I - Code file */
+ const char *line, /* I - Code line */
+ const char *func, /* I - Code func */
+ int level, /* I - Log level */
+ const char *message, /* I - printf-style message string */
+ ...) /* I - Additional args as needed */
{
va_list ap, ap2; /* Argument pointers */
int status; /* Formatting status */
@@ -664,10 +799,10 @@ cupsdLogMessage(int level, /* I -
va_end(ap);
if (status > 0)
- return (cupsdWriteErrorLog(level, log_line));
+ return (_cupsdWriteErrorLogWithLocation(file, line, func, level, log_line));
else
- return (cupsdWriteErrorLog(CUPSD_LOG_ERROR,
- "Unable to allocate memory for log line!"));
+ return (_cupsdWriteErrorLogWithLocation(file, line, func, CUPSD_LOG_ERROR,
+ "Unable to allocate memory for log line!"));
}
@@ -860,6 +995,17 @@ cupsdLogPage(cupsd_job_t *job, /* I - J
*bufptr = '\0'; *bufptr = '\0';
+#ifdef HAVE_JOURNAL +#ifdef HAVE_SYSTEMD
+ if (!strcmp(PageLog, "journal")) + if (!strcmp(PageLog, "journal"))
+ return (sd_journal_send ("MESSAGE=%s", buffer, + return (sd_journal_send ("MESSAGE=%s", buffer,
+ "PRIORITY=%d", LOG_INFO, + "PRIORITY=%d", LOG_INFO,
+ "CUPS_JOB_ID=%d", job->id, + "CUPS_JOB_ID=%d", job->id,
+ "CUPS_DEST=%s", job->dest,
+ "CUPS_PRINTER=%s", job->printer->name,
+ "CUPS_PAGE_NUMBER=%s", number, + "CUPS_PAGE_NUMBER=%s", number,
+ NULL) ? 0 : 1); + NULL) ? 0 : 1);
+#endif /* HAVE_JOURNAL */ +#endif /* HAVE_SYSTEMD */
+ +
#ifdef HAVE_VSYSLOG #ifdef HAVE_VSYSLOG
/* /*
* See if we are logging pages via syslog... * See if we are logging pages via syslog...
@@ -1037,7 +1058,7 @@ cupsdLogRequest(cupsd_client_t *con, /* @@ -1037,7 +1183,7 @@ cupsdLogRequest(cupsd_client_t *con, /*
* See if we are logging accesses via syslog... * See if we are logging accesses via syslog...
*/ */
@ -289,46 +484,33 @@ diff -up cups-2.0rc1/scheduler/log.c.journal cups-2.0rc1/scheduler/log.c
{ {
syslog(LOG_INFO, syslog(LOG_INFO,
"REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n", "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n",
@@ -1091,8 +1112,9 @@ cupsdLogRequest(cupsd_client_t *con, /* @@ -1091,8 +1237,12 @@ cupsdLogRequest(cupsd_client_t *con, /*
*/ */
int /* O - 1 on success, 0 on failure */ int /* O - 1 on success, 0 on failure */
-cupsdWriteErrorLog(int level, /* I - Log level */ -cupsdWriteErrorLog(int level, /* I - Log level */
- const char *message) /* I - Message string */ - const char *message) /* I - Message string */
+cupsdWriteErrorLogJob(cupsd_job_t *job, /* I - Job or NULL */ +_cupsdWriteErrorLogJobWithLocation(const char *file, /* I - Code file */
+ int level, /* I - Log level */ + const char *line, /* I - Code line */
+ const char *message) /* I - Message string */ + const char *func, /* I - Code func */
+ cupsd_job_t *job, /* I - Job or NULL */
+ int level, /* I - Log level */
+ const char *message) /* I - Message string */
{ {
int ret = 1; /* Return value */ int ret = 1; /* Return value */
static const char levels[] = /* Log levels... */ static const char levels[] = /* Log levels... */
@@ -1110,12 +1132,25 @@ cupsdWriteErrorLog(int level, /* @@ -1110,6 +1260,10 @@ cupsdWriteErrorLog(int level, /*
}; };
+#ifdef HAVE_JOURNAL +#ifdef HAVE_SYSTEMD
+ if (!strcmp(ErrorLog, "journal")) + if (!strcmp(ErrorLog, "journal"))
+ { + return (_cupsdLogToJournal (file, line, func, job, level, message));
+ if (job) +#endif /* HAVE_SYSTEMD */
+ {
+ 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 #ifdef HAVE_VSYSLOG
/* /*
* See if we are logging errors via syslog... * See if we are logging errors via syslog...
*/ @@ -1149,6 +1303,22 @@ cupsdWriteErrorLog(int level, /*
- if (!strcmp(ErrorLog, "syslog"))
+ if (!strcmp(ErrorLog, "syslog") || !strcmp(ErrorLog, "journal"))
{
syslog(syslevels[level], "%s", message);
return (1);
@@ -1149,6 +1184,18 @@ cupsdWriteErrorLog(int level, /*
} }
@ -337,34 +519,17 @@ diff -up cups-2.0rc1/scheduler/log.c.journal cups-2.0rc1/scheduler/log.c
+ */ + */
+ +
+int /* O - 1 on success, 0 on failure */ +int /* O - 1 on success, 0 on failure */
+cupsdWriteErrorLog(int level, /* I - Log level */ +_cupsdWriteErrorLogWithLocation(const char *file, /* I - Code file */
+ const char *message) /* I - Message string */ + const char *line, /* I - Code line */
+ const char *func, /* I - Code func */
+ int level, /* I - Log level */
+ const char *message) /* I - Message string */
+{ +{
+ return (cupsdWriteErrorLogJob(NULL, level, message)); + return (_cupsdWriteErrorLogJobWithLocation(file, line, func,
+ NULL, level, message));
+} +}
+ +
+ +
/* /*
* 'format_log_line()' - Format a line for a log file. * 'format_log_line()' - Format a line for a log file.
* *
diff -up cups-2.0rc1/scheduler/Makefile.journal cups-2.0rc1/scheduler/Makefile
--- cups-2.0rc1/scheduler/Makefile.journal 2014-09-12 17:47:14.653190542 +0200
+++ cups-2.0rc1/scheduler/Makefile 2014-09-12 17:47:14.672190276 +0200
@@ -382,7 +382,7 @@ cupsd: $(CUPSDOBJS) $(LIBCUPSMIME) ../cu
$(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \
$(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
$(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(ONDEMANDLIBS) \
- $(DNSSDLIBS) $(LIBS) $(LIBGSSAPI) $(LIBWRAP)
+ $(DNSSDLIBS) $(LIBS) $(LIBGSSAPI) $(LIBWRAP) $(SDJLIBS)
cupsd-static: $(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC)
echo Linking $@...
@@ -390,7 +390,7 @@ cupsd-static: $(CUPSDOBJS) libcupsmime.a
$(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \
$(LIBMALLOC) $(SERVERLIBS) $(ONDEMANDLIBS) $(DNSSDLIBS) \
- $(LIBGSSAPI) $(LIBWRAP)
+ $(LIBGSSAPI) $(LIBWRAP) $(SDJLIBS)
#

View File

@ -1,7 +1,7 @@
diff -up cups-2.0rc1/config.h.in.lspp cups-2.0rc1/config.h.in diff -up cups-2.0.0/config.h.in.lspp cups-2.0.0/config.h.in
--- cups-2.0rc1/config.h.in.lspp 2014-09-12 16:54:21.764812716 +0200 --- cups-2.0.0/config.h.in.lspp 2014-08-30 02:51:22.000000000 +0100
+++ cups-2.0rc1/config.h.in 2014-09-12 16:54:21.775812560 +0200 +++ cups-2.0.0/config.h.in 2014-11-06 14:39:49.112120299 +0000
@@ -716,6 +716,13 @@ static __inline int _cups_abs(int i) { r @@ -709,6 +709,13 @@ static __inline int _cups_abs(int i) { r
# endif /* __GNUC__ || __STDC_VERSION__ */ # endif /* __GNUC__ || __STDC_VERSION__ */
#endif /* !HAVE_ABS && !abs */ #endif /* !HAVE_ABS && !abs */
@ -15,9 +15,9 @@ diff -up cups-2.0rc1/config.h.in.lspp cups-2.0rc1/config.h.in
#endif /* !_CUPS_CONFIG_H_ */ #endif /* !_CUPS_CONFIG_H_ */
/* /*
diff -up cups-2.0rc1/config-scripts/cups-lspp.m4.lspp cups-2.0rc1/config-scripts/cups-lspp.m4 diff -up cups-2.0.0/config-scripts/cups-lspp.m4.lspp cups-2.0.0/config-scripts/cups-lspp.m4
--- cups-2.0rc1/config-scripts/cups-lspp.m4.lspp 2014-09-12 16:54:21.776812546 +0200 --- cups-2.0.0/config-scripts/cups-lspp.m4.lspp 2014-11-06 14:39:49.112120299 +0000
+++ cups-2.0rc1/config-scripts/cups-lspp.m4 2014-09-12 16:54:21.776812546 +0200 +++ cups-2.0.0/config-scripts/cups-lspp.m4 2014-11-06 14:39:49.112120299 +0000
@@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
+dnl +dnl
+dnl LSPP code for the Common UNIX Printing System (CUPS). +dnl LSPP code for the Common UNIX Printing System (CUPS).
@ -55,9 +55,9 @@ diff -up cups-2.0rc1/config-scripts/cups-lspp.m4.lspp cups-2.0rc1/config-scripts
+ ;; + ;;
+ esac + esac
+fi +fi
diff -up cups-2.0rc1/configure.ac.lspp cups-2.0rc1/configure.ac diff -up cups-2.0.0/configure.ac.lspp cups-2.0.0/configure.ac
--- cups-2.0rc1/configure.ac.lspp 2014-04-21 14:22:03.000000000 +0200 --- cups-2.0.0/configure.ac.lspp 2014-04-21 13:22:03.000000000 +0100
+++ cups-2.0rc1/configure.ac 2014-09-12 16:54:21.776812546 +0200 +++ cups-2.0.0/configure.ac 2014-11-06 14:39:49.112120299 +0000
@@ -36,6 +36,8 @@ sinclude(config-scripts/cups-startup.m4) @@ -36,6 +36,8 @@ sinclude(config-scripts/cups-startup.m4)
sinclude(config-scripts/cups-defaults.m4) sinclude(config-scripts/cups-defaults.m4)
sinclude(config-scripts/cups-scripting.m4) sinclude(config-scripts/cups-scripting.m4)
@ -67,9 +67,9 @@ diff -up cups-2.0rc1/configure.ac.lspp cups-2.0rc1/configure.ac
INSTALL_LANGUAGES="" INSTALL_LANGUAGES=""
UNINSTALL_LANGUAGES="" UNINSTALL_LANGUAGES=""
LANGFILES="" LANGFILES=""
diff -up cups-2.0rc1/filter/common.c.lspp cups-2.0rc1/filter/common.c diff -up cups-2.0.0/filter/common.c.lspp cups-2.0.0/filter/common.c
--- cups-2.0rc1/filter/common.c.lspp 2014-02-06 19:33:34.000000000 +0100 --- cups-2.0.0/filter/common.c.lspp 2014-02-06 18:33:34.000000000 +0000
+++ cups-2.0rc1/filter/common.c 2014-09-12 16:54:21.776812546 +0200 +++ cups-2.0.0/filter/common.c 2014-11-06 14:39:49.112120299 +0000
@@ -19,6 +19,12 @@ @@ -19,6 +19,12 @@
* Include necessary headers... * Include necessary headers...
*/ */
@ -238,9 +238,9 @@ diff -up cups-2.0rc1/filter/common.c.lspp cups-2.0rc1/filter/common.c
/* /*
diff -up cups-2.0rc1/filter/pstops.c.lspp cups-2.0rc1/filter/pstops.c diff -up cups-2.0.0/filter/pstops.c.lspp cups-2.0.0/filter/pstops.c
--- cups-2.0rc1/filter/pstops.c.lspp 2014-02-06 19:33:34.000000000 +0100 --- cups-2.0.0/filter/pstops.c.lspp 2014-02-06 18:33:34.000000000 +0000
+++ cups-2.0rc1/filter/pstops.c 2014-09-12 16:54:21.778812518 +0200 +++ cups-2.0.0/filter/pstops.c 2014-11-06 14:39:49.113120305 +0000
@@ -3173,6 +3173,18 @@ write_label_prolog(pstops_doc_t *doc, /* @@ -3173,6 +3173,18 @@ write_label_prolog(pstops_doc_t *doc, /*
{ {
const char *classification; /* CLASSIFICATION environment variable */ const char *classification; /* CLASSIFICATION environment variable */
@ -396,9 +396,9 @@ diff -up cups-2.0rc1/filter/pstops.c.lspp cups-2.0rc1/filter/pstops.c
/* /*
diff -up cups-2.0rc1/Makedefs.in.lspp cups-2.0rc1/Makedefs.in diff -up cups-2.0.0/Makedefs.in.lspp cups-2.0.0/Makedefs.in
--- cups-2.0rc1/Makedefs.in.lspp 2014-09-12 16:54:21.778812518 +0200 --- cups-2.0.0/Makedefs.in.lspp 2014-11-06 14:39:49.072120084 +0000
+++ cups-2.0rc1/Makedefs.in 2014-09-12 16:55:09.761134739 +0200 +++ cups-2.0.0/Makedefs.in 2014-11-06 14:39:49.129120391 +0000
@@ -145,7 +145,7 @@ LDFLAGS = -L../cgi-bin -L../cups -L../f @@ -145,7 +145,7 @@ LDFLAGS = -L../cgi-bin -L../cups -L../f
@LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM) @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM)
LINKCUPS = @LINKCUPS@ $(LIBGSSAPI) $(DNSSDLIBS) $(LIBZ) LINKCUPS = @LINKCUPS@ $(LIBGSSAPI) $(DNSSDLIBS) $(LIBZ)
@ -407,32 +407,32 @@ diff -up cups-2.0rc1/Makedefs.in.lspp cups-2.0rc1/Makedefs.in
+LIBS = $(LINKCUPS) $(COMMONLIBS) @LIBAUDIT@ @LIBSELINUX@ +LIBS = $(LINKCUPS) $(COMMONLIBS) @LIBAUDIT@ @LIBSELINUX@
ONDEMANDFLAGS = @ONDEMANDFLAGS@ ONDEMANDFLAGS = @ONDEMANDFLAGS@
ONDEMANDLIBS = @ONDEMANDLIBS@ ONDEMANDLIBS = @ONDEMANDLIBS@
SDJLIBS = @SDJLIBS@ OPTIM = @OPTIM@
diff -up cups-2.0rc1/scheduler/client.c.lspp cups-2.0rc1/scheduler/client.c diff -up cups-2.0.0/scheduler/client.c.lspp cups-2.0.0/scheduler/client.c
--- cups-2.0rc1/scheduler/client.c.lspp 2014-08-28 17:37:22.000000000 +0200 --- cups-2.0.0/scheduler/client.c.lspp 2014-08-28 16:37:22.000000000 +0100
+++ cups-2.0rc1/scheduler/client.c 2014-09-12 16:59:59.193046343 +0200 +++ cups-2.0.0/scheduler/client.c 2014-11-06 14:47:11.530298121 +0000
@@ -24,6 +24,8 @@ @@ -24,12 +24,20 @@
#define _HTTP_NO_PRIVATE #define _HTTP_NO_PRIVATE
#include "cupsd.h" #include "cupsd.h"
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE +#define _GNU_SOURCE
+ +#endif /* !defined(_GNU_SOURCE) */
#ifdef __APPLE__ #ifdef __APPLE__
# include <libproc.h> # include <libproc.h>
#endif /* __APPLE__ */ #endif /* __APPLE__ */
@@ -31,6 +33,11 @@ #ifdef HAVE_TCPD_H
# include <tcpd.h> # include <tcpd.h>
#endif /* HAVE_TCPD_H */ #endif /* HAVE_TCPD_H */
+#ifdef WITH_LSPP +#ifdef WITH_LSPP
+#include <selinux/selinux.h> +# include <selinux/selinux.h>
+#include <selinux/context.h> +# include <selinux/context.h>
+#include <fcntl.h> +# include <fcntl.h>
+#endif /* WITH_LSPP */ +#endif /* WITH_LSPP */
/* /*
* Local functions... @@ -265,6 +273,57 @@ cupsdAcceptClient(cupsd_listener_t *lis)
@@ -265,6 +272,57 @@ cupsdAcceptClient(cupsd_listener_t *lis)
} }
#endif /* HAVE_TCPD_H */ #endif /* HAVE_TCPD_H */
@ -490,7 +490,7 @@ diff -up cups-2.0rc1/scheduler/client.c.lspp cups-2.0rc1/scheduler/client.c
#ifdef AF_LOCAL #ifdef AF_LOCAL
if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL) if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
{ {
@@ -555,6 +613,13 @@ cupsdReadClient(cupsd_client_t *con) /* @@ -555,6 +614,13 @@ cupsdReadClient(cupsd_client_t *con) /*
mime_type_t *type; /* MIME type of file */ mime_type_t *type; /* MIME type of file */
cupsd_printer_t *p; /* Printer */ cupsd_printer_t *p; /* Printer */
static unsigned request_id = 0; /* Request ID for temp files */ static unsigned request_id = 0; /* Request ID for temp files */
@ -504,75 +504,81 @@ diff -up cups-2.0rc1/scheduler/client.c.lspp cups-2.0rc1/scheduler/client.c
status = HTTP_STATUS_CONTINUE; status = HTTP_STATUS_CONTINUE;
@@ -1921,6 +1986,67 @@ cupsdReadClient(cupsd_client_t *con) /* @@ -1923,6 +1989,73 @@ cupsdReadClient(cupsd_client_t *con) /*
fchmod(con->file, 0640);
fchown(con->file, RunUser, Group);
fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
+#ifdef WITH_LSPP
+ if (strncmp(con->scon, UNKNOWN_SL, strlen(UNKNOWN_SL)) != 0)
+ {
+ if (getfilecon(con->filename, &spoolcon) == -1)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ return (cupsdCloseClient(con));
+ }
+ clicon = context_new(con->scon);
+ tmpcon = context_new(spoolcon);
+ freecon(spoolcon);
+ if (!clicon || !tmpcon)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ if (clicon)
+ context_free(clicon);
+ if (tmpcon)
+ context_free(tmpcon);
+ return (cupsdCloseClient(con));
+ }
+ clirange = context_range_get(clicon);
+ if (clirange)
+ {
+ clirange = strdup(clirange);
+ if ((cliclearance = strtok(clirange, "-")) != NULL)
+ {
+ if (context_range_set(tmpcon, cliclearance) == -1)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ free(clirange);
+ context_free(tmpcon);
+ context_free(clicon);
+ return (cupsdCloseClient(con));
+ }
+ }
+ else
+ {
+ if (context_range_set(tmpcon, (context_range_get(clicon))) == -1)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ free(clirange);
+ context_free(tmpcon);
+ context_free(clicon);
+ return (cupsdCloseClient(con));
+ }
+ }
+ free(clirange);
+ }
+ if (setfilecon(con->filename, context_str(tmpcon)) == -1)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ context_free(tmpcon);
+ context_free(clicon);
+ return (cupsdCloseClient(con));
+ }
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadClient: %s set to %s",
+ con->filename, context_str(tmpcon));
+ context_free(tmpcon);
+ context_free(clicon);
+ }
+#endif /* WITH_LSPP */
} }
+#ifdef WITH_LSPP
+ if (strncmp(con->scon, UNKNOWN_SL, strlen(UNKNOWN_SL)) != 0)
+ {
+ if (getfilecon(con->filename, &spoolcon) == -1)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ cupsdCloseClient(con);
+ return;
+ }
+ clicon = context_new(con->scon);
+ tmpcon = context_new(spoolcon);
+ freecon(spoolcon);
+ if (!clicon || !tmpcon)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ if (clicon)
+ context_free(clicon);
+ if (tmpcon)
+ context_free(tmpcon);
+ cupsdCloseClient(con);
+ return;
+ }
+ clirange = (char *) context_range_get(clicon);
+ if (clirange)
+ {
+ clirange = strdup(clirange);
+ if ((cliclearance = strtok(clirange, "-")) != NULL)
+ {
+ if (context_range_set(tmpcon, cliclearance) == -1)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ free(clirange);
+ context_free(tmpcon);
+ context_free(clicon);
+ cupsdCloseClient(con);
+ return;
+ }
+ }
+ else
+ {
+ if (context_range_set(tmpcon, (context_range_get(clicon))) == -1)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ free(clirange);
+ context_free(tmpcon);
+ context_free(clicon);
+ cupsdCloseClient(con);
+ return;
+ }
+ }
+ free(clirange);
+ }
+ if (setfilecon(con->filename, context_str(tmpcon)) == -1)
+ {
+ cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE);
+ context_free(tmpcon);
+ context_free(clicon);
+ cupsdCloseClient(con);
+ return;
+ }
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadClient: %s set to %s",
+ con->filename, context_str(tmpcon));
+ context_free(tmpcon);
+ context_free(clicon);
+ }
+#endif /* WITH_LSPP */
+
if (httpGetState(con->http) != HTTP_STATE_POST_SEND) if (httpGetState(con->http) != HTTP_STATE_POST_SEND)
@@ -3423,6 +3549,49 @@ is_path_absolute(const char *path) /* I {
if (!httpWait(con->http, 0))
@@ -3423,6 +3556,49 @@ is_path_absolute(const char *path) /* I
return (1); return (1);
} }
@ -596,7 +602,7 @@ diff -up cups-2.0rc1/scheduler/client.c.lspp cups-2.0rc1/scheduler/client.c
+ in = open(fname, O_NOFOLLOW|O_RDONLY); + in = open(fname, O_NOFOLLOW|O_RDONLY);
+ +
+ if (in < 0) + if (in < 0)
+ return -1; + return (uid_t) -1;
+ +
+ errno = 0; + errno = 0;
+ +
@ -607,14 +613,14 @@ diff -up cups-2.0rc1/scheduler/client.c.lspp cups-2.0rc1/scheduler/client.c
+ close(in); + close(in);
+ +
+ if (len < 0 || len >= sizeof(buf)) + if (len < 0 || len >= sizeof(buf))
+ return -1; + return (uid_t) -1;
+ +
+ errno = 0; + errno = 0;
+ buf[len] = 0; + buf[len] = 0;
+ uid = strtol(buf, 0, 10); + uid = strtol(buf, 0, 10);
+ +
+ if (errno != 0) + if (errno != 0)
+ return -1; + return (uid_t) -1;
+ else + else
+ return uid; + return uid;
+} +}
@ -622,9 +628,9 @@ diff -up cups-2.0rc1/scheduler/client.c.lspp cups-2.0rc1/scheduler/client.c
/* /*
* 'pipe_command()' - Pipe the output of a command to the remote client. * 'pipe_command()' - Pipe the output of a command to the remote client.
diff -up cups-2.0rc1/scheduler/client.h.lspp cups-2.0rc1/scheduler/client.h diff -up cups-2.0.0/scheduler/client.h.lspp cups-2.0.0/scheduler/client.h
--- cups-2.0rc1/scheduler/client.h.lspp 2014-03-21 17:42:53.000000000 +0100 --- cups-2.0.0/scheduler/client.h.lspp 2014-03-21 16:42:53.000000000 +0000
+++ cups-2.0rc1/scheduler/client.h 2014-09-12 17:00:39.110482947 +0200 +++ cups-2.0.0/scheduler/client.h 2014-11-06 14:39:49.114120310 +0000
@@ -18,6 +18,13 @@ @@ -18,6 +18,13 @@
#endif /* HAVE_AUTHORIZATION_H */ #endif /* HAVE_AUTHORIZATION_H */
@ -660,9 +666,9 @@ diff -up cups-2.0rc1/scheduler/client.h.lspp cups-2.0rc1/scheduler/client.h
#ifdef HAVE_SSL #ifdef HAVE_SSL
extern int cupsdEndTLS(cupsd_client_t *con); extern int cupsdEndTLS(cupsd_client_t *con);
diff -up cups-2.0rc1/scheduler/conf.c.lspp cups-2.0rc1/scheduler/conf.c diff -up cups-2.0.0/scheduler/conf.c.lspp cups-2.0.0/scheduler/conf.c
--- cups-2.0rc1/scheduler/conf.c.lspp 2014-09-12 16:54:21.772812603 +0200 --- cups-2.0.0/scheduler/conf.c.lspp 2014-11-06 14:39:49.106120267 +0000
+++ cups-2.0rc1/scheduler/conf.c 2014-09-12 16:54:21.781812475 +0200 +++ cups-2.0.0/scheduler/conf.c 2014-11-06 14:39:49.114120310 +0000
@@ -36,6 +36,9 @@ @@ -36,6 +36,9 @@
# define INADDR_NONE 0xffffffff # define INADDR_NONE 0xffffffff
#endif /* !INADDR_NONE */ #endif /* !INADDR_NONE */
@ -740,7 +746,7 @@ diff -up cups-2.0rc1/scheduler/conf.c.lspp cups-2.0rc1/scheduler/conf.c
/* /*
* Check the MaxClients setting, and then allocate memory for it... * Check the MaxClients setting, and then allocate memory for it...
@@ -3646,6 +3687,18 @@ read_location(cups_file_t *fp, /* I - C @@ -3652,6 +3693,18 @@ read_location(cups_file_t *fp, /* I - C
return ((FatalErrors & CUPSD_FATAL_CONFIG) ? 0 : linenum); return ((FatalErrors & CUPSD_FATAL_CONFIG) ? 0 : linenum);
} }
@ -759,9 +765,9 @@ diff -up cups-2.0rc1/scheduler/conf.c.lspp cups-2.0rc1/scheduler/conf.c
/* /*
* 'read_policy()' - Read a <Policy name> definition. * 'read_policy()' - Read a <Policy name> definition.
diff -up cups-2.0rc1/scheduler/conf.h.lspp cups-2.0rc1/scheduler/conf.h diff -up cups-2.0.0/scheduler/conf.h.lspp cups-2.0.0/scheduler/conf.h
--- cups-2.0rc1/scheduler/conf.h.lspp 2014-09-12 16:54:21.766812687 +0200 --- cups-2.0.0/scheduler/conf.h.lspp 2014-11-06 14:39:49.103120251 +0000
+++ cups-2.0rc1/scheduler/conf.h 2014-09-12 17:01:30.718755326 +0200 +++ cups-2.0.0/scheduler/conf.h 2014-11-06 14:39:49.114120310 +0000
@@ -248,6 +248,13 @@ VAR char *ServerKeychain VALUE(NULL); @@ -248,6 +248,13 @@ VAR char *ServerKeychain VALUE(NULL);
/* Keychain holding cert + key */ /* Keychain holding cert + key */
#endif /* HAVE_SSL */ #endif /* HAVE_SSL */
@ -786,9 +792,9 @@ diff -up cups-2.0rc1/scheduler/conf.h.lspp cups-2.0rc1/scheduler/conf.h
/* /*
* Prototypes... * Prototypes...
diff -up cups-2.0rc1/scheduler/cupsd.h.lspp cups-2.0rc1/scheduler/cupsd.h diff -up cups-2.0.0/scheduler/cupsd.h.lspp cups-2.0.0/scheduler/cupsd.h
--- cups-2.0rc1/scheduler/cupsd.h.lspp 2014-09-12 16:54:21.746812970 +0200 --- cups-2.0.0/scheduler/cupsd.h.lspp 2014-11-06 14:39:49.095120208 +0000
+++ cups-2.0rc1/scheduler/cupsd.h 2014-09-12 17:02:02.351309341 +0200 +++ cups-2.0.0/scheduler/cupsd.h 2014-11-06 14:39:49.115120315 +0000
@@ -13,6 +13,8 @@ @@ -13,6 +13,8 @@
* file is missing or damaged, see the license at "http://www.cups.org/". * file is missing or damaged, see the license at "http://www.cups.org/".
*/ */
@ -820,9 +826,9 @@ diff -up cups-2.0rc1/scheduler/cupsd.h.lspp cups-2.0rc1/scheduler/cupsd.h
/* /*
* Some OS's don't have hstrerror(), most notably Solaris... * Some OS's don't have hstrerror(), most notably Solaris...
*/ */
diff -up cups-2.0rc1/scheduler/ipp.c.lspp cups-2.0rc1/scheduler/ipp.c diff -up cups-2.0.0/scheduler/ipp.c.lspp cups-2.0.0/scheduler/ipp.c
--- cups-2.0rc1/scheduler/ipp.c.lspp 2014-09-12 16:54:21.686813817 +0200 --- cups-2.0.0/scheduler/ipp.c.lspp 2014-11-06 14:39:49.057120004 +0000
+++ cups-2.0rc1/scheduler/ipp.c 2014-09-12 16:54:21.785812419 +0200 +++ cups-2.0.0/scheduler/ipp.c 2014-11-06 14:39:49.117120326 +0000
@@ -16,6 +16,9 @@ @@ -16,6 +16,9 @@
* file is missing or damaged, see the license at "http://www.cups.org/". * file is missing or damaged, see the license at "http://www.cups.org/".
*/ */
@ -935,7 +941,7 @@ diff -up cups-2.0rc1/scheduler/ipp.c.lspp cups-2.0rc1/scheduler/ipp.c
+ send_ipp_status(con, IPP_NOT_AUTHORIZED, _("Printer is not a character device or regular file")); + send_ipp_status(con, IPP_NOT_AUTHORIZED, _("Printer is not a character device or regular file"));
+ return (NULL); + return (NULL);
+ } + }
+ static avc_initialized = 0; + static int avc_initialized = 0;
+ if (!avc_initialized++) + if (!avc_initialized++)
+ avc_init("cupsd_enqueue_", NULL, NULL, NULL, NULL); + avc_init("cupsd_enqueue_", NULL, NULL, NULL, NULL);
+ avc_entry_ref_init(&avcref); + avc_entry_ref_init(&avcref);
@ -1178,7 +1184,7 @@ diff -up cups-2.0rc1/scheduler/ipp.c.lspp cups-2.0rc1/scheduler/ipp.c
+ * Initialize the avc engine... + * Initialize the avc engine...
+ */ + */
+ +
+ static avc_initialized = 0; + static int avc_initialized = 0;
+ if (! avc_initialized++) + if (! avc_initialized++)
+ { + {
+ if (avc_init("cupsd", NULL, NULL, NULL, NULL) < 0) + if (avc_init("cupsd", NULL, NULL, NULL, NULL) < 0)
@ -1291,7 +1297,7 @@ diff -up cups-2.0rc1/scheduler/ipp.c.lspp cups-2.0rc1/scheduler/ipp.c
+ job->num_files --; + job->num_files --;
+ return (0); + return (0);
+ } + }
+ jobrange = context_range_get(jobcon); + jobrange = (char *) context_range_get(jobcon);
+ if (jobrange) + if (jobrange)
+ { + {
+ jobrange = strdup(jobrange); + jobrange = strdup(jobrange);
@ -1416,9 +1422,9 @@ diff -up cups-2.0rc1/scheduler/ipp.c.lspp cups-2.0rc1/scheduler/ipp.c
/* /*
* Check the username against the owner... * Check the username against the owner...
*/ */
diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c diff -up cups-2.0.0/scheduler/job.c.lspp cups-2.0.0/scheduler/job.c
--- cups-2.0rc1/scheduler/job.c.lspp 2014-09-12 16:54:21.761812758 +0200 --- cups-2.0.0/scheduler/job.c.lspp 2014-11-06 14:39:49.068120063 +0000
+++ cups-2.0rc1/scheduler/job.c 2014-09-12 17:03:06.012411787 +0200 +++ cups-2.0.0/scheduler/job.c 2014-11-06 14:39:49.118120331 +0000
@@ -13,6 +13,9 @@ @@ -13,6 +13,9 @@
* file is missing or damaged, see the license at "http://www.cups.org/". * file is missing or damaged, see the license at "http://www.cups.org/".
*/ */
@ -1459,7 +1465,7 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
cupsdLogMessage(CUPSD_LOG_DEBUG2, cupsdLogMessage(CUPSD_LOG_DEBUG2,
@@ -1059,6 +1078,67 @@ cupsdContinueJob(cupsd_job_t *job) /* I @@ -1064,6 +1083,67 @@ cupsdContinueJob(cupsd_job_t *job) /* I
if (final_content_type[0]) if (final_content_type[0])
envp[envc ++] = final_content_type; envp[envc ++] = final_content_type;
@ -1527,7 +1533,7 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
if (Classification && !banner_page) if (Classification && !banner_page)
{ {
if ((attr = ippFindAttribute(job->attrs, "job-sheets", if ((attr = ippFindAttribute(job->attrs, "job-sheets",
@@ -1852,6 +1932,20 @@ cupsdLoadJob(cupsd_job_t *job) /* I - J @@ -1857,6 +1937,20 @@ cupsdLoadJob(cupsd_job_t *job) /* I - J
ippSetString(job->attrs, &job->reasons, 0, "none"); ippSetString(job->attrs, &job->reasons, 0, "none");
} }
@ -1548,7 +1554,7 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
job->sheets = ippFindAttribute(job->attrs, "job-media-sheets-completed", job->sheets = ippFindAttribute(job->attrs, "job-media-sheets-completed",
IPP_TAG_INTEGER); IPP_TAG_INTEGER);
job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME); job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
@@ -2253,6 +2347,14 @@ cupsdSaveJob(cupsd_job_t *job) /* I - J @@ -2258,6 +2352,14 @@ cupsdSaveJob(cupsd_job_t *job) /* I - J
{ {
char filename[1024]; /* Job control filename */ char filename[1024]; /* Job control filename */
cups_file_t *fp; /* Job file */ cups_file_t *fp; /* Job file */
@ -1563,7 +1569,7 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSaveJob(job=%p(%d)): job->attrs=%p", cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSaveJob(job=%p(%d)): job->attrs=%p",
@@ -2265,6 +2367,76 @@ cupsdSaveJob(cupsd_job_t *job) /* I - J @@ -2270,6 +2372,76 @@ cupsdSaveJob(cupsd_job_t *job) /* I - J
fchown(cupsFileNumber(fp), RunUser, Group); fchown(cupsFileNumber(fp), RunUser, Group);
@ -1640,7 +1646,7 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
job->attrs->state = IPP_IDLE; job->attrs->state = IPP_IDLE;
if (ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL, if (ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL,
@@ -3847,6 +4019,18 @@ get_options(cupsd_job_t *job, /* I - Jo @@ -3852,6 +4024,18 @@ get_options(cupsd_job_t *job, /* I - Jo
banner_page) banner_page)
continue; continue;
@ -1659,7 +1665,7 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
/* /*
* Otherwise add them to the list... * Otherwise add them to the list...
*/ */
@@ -4596,6 +4780,19 @@ start_job(cupsd_job_t *job, /* I - @@ -4601,6 +4785,18 @@ start_job(cupsd_job_t *job, /* I -
cupsd_printer_t *printer) /* I - Printer to print job */ cupsd_printer_t *printer) /* I - Printer to print job */
{ {
const char *filename; /* Support filename */ const char *filename; /* Support filename */
@ -1675,11 +1681,10 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
+ security_class_t tclass; /* Object class for the SELinux check */ + security_class_t tclass; /* Object class for the SELinux check */
+ access_vector_t avr; /* Access method being requested */ + access_vector_t avr; /* Access method being requested */
+#endif /* WITH_LSPP */ +#endif /* WITH_LSPP */
+
ipp_attribute_t *cancel_after = ippFindAttribute(job->attrs, ipp_attribute_t *cancel_after = ippFindAttribute(job->attrs,
"job-cancel-after", "job-cancel-after",
IPP_TAG_INTEGER); IPP_TAG_INTEGER);
@@ -4772,6 +4969,108 @@ start_job(cupsd_job_t *job, /* I - @@ -4777,6 +4973,108 @@ start_job(cupsd_job_t *job, /* I -
fcntl(job->side_pipes[1], F_SETFD, fcntl(job->side_pipes[1], F_SETFD,
fcntl(job->side_pipes[1], F_GETFD) | FD_CLOEXEC); fcntl(job->side_pipes[1], F_GETFD) | FD_CLOEXEC);
@ -1728,7 +1733,7 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
+ cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_DEFAULT, NULL); + cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_DEFAULT, NULL);
+ return ; + return ;
+ } + }
+ static avc_initialized = 0; + static int avc_initialized = 0;
+ if (!avc_initialized++) + if (!avc_initialized++)
+ avc_init("cupsd_dequeue_", NULL, NULL, NULL, NULL); + avc_init("cupsd_dequeue_", NULL, NULL, NULL, NULL);
+ avc_entry_ref_init(&avcref); + avc_entry_ref_init(&avcref);
@ -1788,9 +1793,9 @@ diff -up cups-2.0rc1/scheduler/job.c.lspp cups-2.0rc1/scheduler/job.c
/* /*
* Now start the first file in the job... * Now start the first file in the job...
*/ */
diff -up cups-2.0rc1/scheduler/job.h.lspp cups-2.0rc1/scheduler/job.h diff -up cups-2.0.0/scheduler/job.h.lspp cups-2.0.0/scheduler/job.h
--- cups-2.0rc1/scheduler/job.h.lspp 2014-07-31 02:02:30.000000000 +0200 --- cups-2.0.0/scheduler/job.h.lspp 2014-07-31 01:02:30.000000000 +0100
+++ cups-2.0rc1/scheduler/job.h 2014-09-12 17:03:32.752034787 +0200 +++ cups-2.0.0/scheduler/job.h 2014-11-06 14:39:49.118120331 +0000
@@ -13,6 +13,13 @@ @@ -13,6 +13,13 @@
* file is missing or damaged, see the license at "http://www.cups.org/". * file is missing or damaged, see the license at "http://www.cups.org/".
*/ */
@ -1816,9 +1821,9 @@ diff -up cups-2.0rc1/scheduler/job.h.lspp cups-2.0rc1/scheduler/job.h
}; };
typedef struct cupsd_joblog_s /**** Job log message ****/ typedef struct cupsd_joblog_s /**** Job log message ****/
diff -up cups-2.0rc1/scheduler/main.c.lspp cups-2.0rc1/scheduler/main.c diff -up cups-2.0.0/scheduler/main.c.lspp cups-2.0.0/scheduler/main.c
--- cups-2.0rc1/scheduler/main.c.lspp 2014-09-12 16:54:21.748812942 +0200 --- cups-2.0.0/scheduler/main.c.lspp 2014-11-06 14:39:49.096120213 +0000
+++ cups-2.0rc1/scheduler/main.c 2014-09-12 16:54:21.788812377 +0200 +++ cups-2.0.0/scheduler/main.c 2014-11-06 14:39:49.118120331 +0000
@@ -56,6 +56,9 @@ extern int launch_activate_socket(const @@ -56,6 +56,9 @@ extern int launch_activate_socket(const
# include <sys/param.h> # include <sys/param.h>
#endif /* HAVE_SYS_PARAM_H */ #endif /* HAVE_SYS_PARAM_H */
@ -1877,9 +1882,9 @@ diff -up cups-2.0rc1/scheduler/main.c.lspp cups-2.0rc1/scheduler/main.c
return (!stop_scheduler); return (!stop_scheduler);
} }
diff -up cups-2.0rc1/scheduler/printers.c.lspp cups-2.0rc1/scheduler/printers.c diff -up cups-2.0.0/scheduler/printers.c.lspp cups-2.0.0/scheduler/printers.c
--- cups-2.0rc1/scheduler/printers.c.lspp 2014-09-12 16:54:21.655814255 +0200 --- cups-2.0.0/scheduler/printers.c.lspp 2014-11-06 14:39:49.039119907 +0000
+++ cups-2.0rc1/scheduler/printers.c 2014-09-12 16:54:21.789812362 +0200 +++ cups-2.0.0/scheduler/printers.c 2014-11-06 14:39:49.119120337 +0000
@@ -13,6 +13,8 @@ @@ -13,6 +13,8 @@
* file is missing or damaged, see the license at "http://www.cups.org/". * file is missing or damaged, see the license at "http://www.cups.org/".
*/ */
@ -1900,7 +1905,7 @@ diff -up cups-2.0rc1/scheduler/printers.c.lspp cups-2.0rc1/scheduler/printers.c
/* /*
* Local functions... * Local functions...
@@ -2026,6 +2032,13 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p) @@ -2025,6 +2031,13 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
ipp_attribute_t *attr; /* Attribute data */ ipp_attribute_t *attr; /* Attribute data */
char *name, /* Current user/group name */ char *name, /* Current user/group name */
*filter; /* Current filter */ *filter; /* Current filter */
@ -1914,7 +1919,7 @@ diff -up cups-2.0rc1/scheduler/printers.c.lspp cups-2.0rc1/scheduler/printers.c
DEBUG_printf(("cupsdSetPrinterAttrs: entering name = %s, type = %x\n", p->name, DEBUG_printf(("cupsdSetPrinterAttrs: entering name = %s, type = %x\n", p->name,
@@ -2146,6 +2159,45 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p) @@ -2145,6 +2158,45 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
attr->values[1].string.text = _cupsStrAlloc(Classification ? attr->values[1].string.text = _cupsStrAlloc(Classification ?
Classification : p->job_sheets[1]); Classification : p->job_sheets[1]);
} }

View File

@ -11,7 +11,7 @@ Summary: CUPS printing system
Name: cups Name: cups
Epoch: 1 Epoch: 1
Version: 2.0.0 Version: 2.0.0
Release: 9%{?dist} Release: 10%{?dist}
License: GPLv2 License: GPLv2
Url: http://www.cups.org/ Url: http://www.cups.org/
Source: http://www.cups.org/software/%{version}/cups-%{version}-source.tar.bz2 Source: http://www.cups.org/software/%{version}/cups-%{version}-source.tar.bz2
@ -614,6 +614,11 @@ rm -f %{cups_serverbin}/backend/smb
%{_mandir}/man5/ipptoolfile.5.gz %{_mandir}/man5/ipptoolfile.5.gz
%changelog %changelog
* Thu Nov 6 2014 Tim Waugh <twaugh@redhat.com> - 1:2.0.0-10
- Fixed some warnings in cups-lspp.patch.
- New systemd journal fields CUPS_DEST and CUPS_PRINTER, as well as
accurate code location fields.
* Wed Oct 22 2014 Tim Waugh <twaugh@redhat.com> - 1:2.0.0-9 * Wed Oct 22 2014 Tim Waugh <twaugh@redhat.com> - 1:2.0.0-9
- Upstream fix for cupsd crash on restart when colord not available - Upstream fix for cupsd crash on restart when colord not available
- (STR #4496). - (STR #4496).