From dc9527dedf3fb33febe8803bb88c24422d4487e8 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jun 17 2015 17:00:16 +0000 Subject: import cups-1.6.3-17.el7_1.1 --- diff --git a/SOURCES/cups-lspp.patch b/SOURCES/cups-lspp.patch index 35af292..d30b965 100644 --- a/SOURCES/cups-lspp.patch +++ b/SOURCES/cups-lspp.patch @@ -1,18 +1,23 @@ -diff -up cups-1.6.3/Makedefs.in.lspp cups-1.6.3/Makedefs.in ---- cups-1.6.3/Makedefs.in.lspp 2013-10-08 17:00:44.317004415 +0100 -+++ cups-1.6.3/Makedefs.in 2013-10-08 17:00:44.360004634 +0100 -@@ -146,7 +146,7 @@ LDFLAGS = -L../cgi-bin -L../cups -L../f - @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM) - LINKCUPS = @LINKCUPS@ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(LIBZ) - LINKCUPSIMAGE = @LINKCUPSIMAGE@ --LIBS = $(LINKCUPS) $(COMMONLIBS) -+LIBS = $(LINKCUPS) $(COMMONLIBS) @LIBAUDIT@ @LIBSELINUX@ - OPTIM = @OPTIM@ - OPTIONS = - PAMLIBS = @PAMLIBS@ +diff -up cups-1.6.3/config.h.in.lspp cups-1.6.3/config.h.in +--- cups-1.6.3/config.h.in.lspp 2015-06-10 11:45:38.074441762 +0200 ++++ cups-1.6.3/config.h.in 2015-06-10 11:45:38.158441533 +0200 +@@ -747,6 +747,13 @@ static __inline int _cups_abs(int i) { r + # endif /* __GNUC__ || __STDC_VERSION__ */ + #endif /* !HAVE_ABS && !abs */ + ++/* ++ * Are we trying to meet LSPP requirements? ++ */ ++ ++#undef WITH_LSPP ++ ++ + #endif /* !_CUPS_CONFIG_H_ */ + + /* diff -up cups-1.6.3/config-scripts/cups-lspp.m4.lspp cups-1.6.3/config-scripts/cups-lspp.m4 ---- cups-1.6.3/config-scripts/cups-lspp.m4.lspp 2013-10-08 17:00:44.358004623 +0100 -+++ cups-1.6.3/config-scripts/cups-lspp.m4 2013-10-08 17:00:44.358004623 +0100 +--- cups-1.6.3/config-scripts/cups-lspp.m4.lspp 2015-06-10 11:45:38.157441536 +0200 ++++ cups-1.6.3/config-scripts/cups-lspp.m4 2015-06-10 11:45:38.157441536 +0200 @@ -0,0 +1,36 @@ +dnl +dnl LSPP code for the Common UNIX Printing System (CUPS). @@ -50,26 +55,9 @@ diff -up cups-1.6.3/config-scripts/cups-lspp.m4.lspp cups-1.6.3/config-scripts/c + ;; + esac +fi -diff -up cups-1.6.3/config.h.in.lspp cups-1.6.3/config.h.in ---- cups-1.6.3/config.h.in.lspp 2013-10-08 17:00:44.315004404 +0100 -+++ cups-1.6.3/config.h.in 2013-10-08 17:00:44.358004623 +0100 -@@ -747,6 +747,13 @@ static __inline int _cups_abs(int i) { r - # endif /* __GNUC__ || __STDC_VERSION__ */ - #endif /* !HAVE_ABS && !abs */ - -+/* -+ * Are we trying to meet LSPP requirements? -+ */ -+ -+#undef WITH_LSPP -+ -+ - #endif /* !_CUPS_CONFIG_H_ */ - - /* diff -up cups-1.6.3/configure.in.lspp cups-1.6.3/configure.in ---- cups-1.6.3/configure.in.lspp 2013-10-08 17:00:44.316004410 +0100 -+++ cups-1.6.3/configure.in 2013-10-08 17:00:44.358004623 +0100 +--- cups-1.6.3/configure.in.lspp 2015-06-10 11:45:38.075441759 +0200 ++++ cups-1.6.3/configure.in 2015-06-10 11:45:38.158441533 +0200 @@ -37,6 +37,8 @@ sinclude(config-scripts/cups-systemd.m4) sinclude(config-scripts/cups-defaults.m4) sinclude(config-scripts/cups-scripting.m4) @@ -80,8 +68,8 @@ diff -up cups-1.6.3/configure.in.lspp cups-1.6.3/configure.in UNINSTALL_LANGUAGES="" LANGFILES="" diff -up cups-1.6.3/data/Makefile.lspp cups-1.6.3/data/Makefile ---- cups-1.6.3/data/Makefile.lspp 2013-10-08 17:00:44.317004415 +0100 -+++ cups-1.6.3/data/Makefile 2013-10-08 17:00:44.358004623 +0100 +--- cups-1.6.3/data/Makefile.lspp 2015-06-10 11:45:38.075441759 +0200 ++++ cups-1.6.3/data/Makefile 2015-06-10 11:45:38.158441533 +0200 @@ -25,7 +25,11 @@ BANNERS = \ secret \ standard \ @@ -96,8 +84,8 @@ diff -up cups-1.6.3/data/Makefile.lspp cups-1.6.3/data/Makefile DATAFILES = \ testprint diff -up cups-1.6.3/data/mls.lspp cups-1.6.3/data/mls ---- cups-1.6.3/data/mls.lspp 2013-10-08 17:00:44.359004628 +0100 -+++ cups-1.6.3/data/mls 2013-10-08 17:00:44.359004628 +0100 +--- cups-1.6.3/data/mls.lspp 2015-06-10 11:45:38.158441533 +0200 ++++ cups-1.6.3/data/mls 2015-06-10 11:45:38.158441533 +0200 @@ -0,0 +1,261 @@ +%!PS-Adobe-3.0 +%%BoundingBox: 0 0 612 792 @@ -361,8 +349,8 @@ diff -up cups-1.6.3/data/mls.lspp cups-1.6.3/data/mls +% +%%EOF diff -up cups-1.6.3/data/selinux.lspp cups-1.6.3/data/selinux ---- cups-1.6.3/data/selinux.lspp 2013-10-08 17:00:44.359004628 +0100 -+++ cups-1.6.3/data/selinux 2013-10-08 17:00:44.359004628 +0100 +--- cups-1.6.3/data/selinux.lspp 2015-06-10 11:45:38.158441533 +0200 ++++ cups-1.6.3/data/selinux 2015-06-10 11:45:38.158441533 +0200 @@ -0,0 +1,261 @@ +%!PS-Adobe-3.0 +%%BoundingBox: 0 0 612 792 @@ -626,8 +614,8 @@ diff -up cups-1.6.3/data/selinux.lspp cups-1.6.3/data/selinux +% +%%EOF diff -up cups-1.6.3/data/te.lspp cups-1.6.3/data/te ---- cups-1.6.3/data/te.lspp 2013-10-08 17:00:44.359004628 +0100 -+++ cups-1.6.3/data/te 2013-10-08 17:00:44.359004628 +0100 +--- cups-1.6.3/data/te.lspp 2015-06-10 11:45:38.159441530 +0200 ++++ cups-1.6.3/data/te 2015-06-10 11:45:38.159441530 +0200 @@ -0,0 +1,261 @@ +%!PS-Adobe-3.0 +%%BoundingBox: 0 0 612 792 @@ -891,8 +879,8 @@ diff -up cups-1.6.3/data/te.lspp cups-1.6.3/data/te +% +%%EOF diff -up cups-1.6.3/filter/common.c.lspp cups-1.6.3/filter/common.c ---- cups-1.6.3/filter/common.c.lspp 2013-06-07 02:12:52.000000000 +0100 -+++ cups-1.6.3/filter/common.c 2013-10-08 17:00:44.359004628 +0100 +--- cups-1.6.3/filter/common.c.lspp 2013-06-07 03:12:52.000000000 +0200 ++++ cups-1.6.3/filter/common.c 2015-06-10 11:45:38.159441530 +0200 @@ -30,6 +30,12 @@ * Include necessary headers... */ @@ -1062,8 +1050,8 @@ diff -up cups-1.6.3/filter/common.c.lspp cups-1.6.3/filter/common.c /* diff -up cups-1.6.3/filter/pstops.c.lspp cups-1.6.3/filter/pstops.c ---- cups-1.6.3/filter/pstops.c.lspp 2013-06-07 02:12:52.000000000 +0100 -+++ cups-1.6.3/filter/pstops.c 2013-10-08 17:00:44.360004634 +0100 +--- cups-1.6.3/filter/pstops.c.lspp 2013-06-07 03:12:52.000000000 +0200 ++++ cups-1.6.3/filter/pstops.c 2015-06-10 11:45:38.159441530 +0200 @@ -3202,6 +3202,18 @@ write_label_prolog(pstops_doc_t *doc, /* { const char *classification; /* CLASSIFICATION environment variable */ @@ -1219,9 +1207,21 @@ diff -up cups-1.6.3/filter/pstops.c.lspp cups-1.6.3/filter/pstops.c /* +diff -up cups-1.6.3/Makedefs.in.lspp cups-1.6.3/Makedefs.in +--- cups-1.6.3/Makedefs.in.lspp 2015-06-10 11:45:38.075441759 +0200 ++++ cups-1.6.3/Makedefs.in 2015-06-10 11:45:38.157441536 +0200 +@@ -146,7 +146,7 @@ LDFLAGS = -L../cgi-bin -L../cups -L../f + @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM) + LINKCUPS = @LINKCUPS@ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(LIBZ) + LINKCUPSIMAGE = @LINKCUPSIMAGE@ +-LIBS = $(LINKCUPS) $(COMMONLIBS) ++LIBS = $(LINKCUPS) $(COMMONLIBS) @LIBAUDIT@ @LIBSELINUX@ + OPTIM = @OPTIM@ + OPTIONS = + PAMLIBS = @PAMLIBS@ diff -up cups-1.6.3/scheduler/client.c.lspp cups-1.6.3/scheduler/client.c ---- cups-1.6.3/scheduler/client.c.lspp 2013-06-07 02:12:52.000000000 +0100 -+++ cups-1.6.3/scheduler/client.c 2013-10-08 17:00:44.361004638 +0100 +--- cups-1.6.3/scheduler/client.c.lspp 2015-06-10 11:45:38.140441582 +0200 ++++ cups-1.6.3/scheduler/client.c 2015-06-10 11:45:38.160441528 +0200 @@ -41,6 +41,7 @@ * valid_host() - Is the Host: field valid? * write_file() - Send a file via HTTP. @@ -1319,7 +1319,7 @@ diff -up cups-1.6.3/scheduler/client.c.lspp cups-1.6.3/scheduler/client.c status = HTTP_CONTINUE; -@@ -2134,6 +2199,67 @@ cupsdReadClient(cupsd_client_t *con) /* +@@ -2137,6 +2202,67 @@ 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); @@ -1387,7 +1387,7 @@ diff -up cups-1.6.3/scheduler/client.c.lspp cups-1.6.3/scheduler/client.c } if (con->http.state != HTTP_POST_SEND) -@@ -3579,6 +3705,49 @@ is_path_absolute(const char *path) /* I +@@ -3647,6 +3773,49 @@ is_path_absolute(const char *path) /* I return (1); } @@ -1438,8 +1438,8 @@ diff -up cups-1.6.3/scheduler/client.c.lspp cups-1.6.3/scheduler/client.c /* * 'pipe_command()' - Pipe the output of a command to the remote client. diff -up cups-1.6.3/scheduler/client.h.lspp cups-1.6.3/scheduler/client.h ---- cups-1.6.3/scheduler/client.h.lspp 2013-10-08 17:00:44.317004415 +0100 -+++ cups-1.6.3/scheduler/client.h 2013-10-08 17:00:44.361004638 +0100 +--- cups-1.6.3/scheduler/client.h.lspp 2015-06-10 11:45:38.076441756 +0200 ++++ cups-1.6.3/scheduler/client.h 2015-06-10 11:45:38.160441528 +0200 @@ -18,6 +18,13 @@ #endif /* HAVE_AUTHORIZATION_H */ @@ -1476,8 +1476,8 @@ diff -up cups-1.6.3/scheduler/client.h.lspp cups-1.6.3/scheduler/client.h #ifdef HAVE_SSL extern int cupsdEndTLS(cupsd_client_t *con); diff -up cups-1.6.3/scheduler/conf.c.lspp cups-1.6.3/scheduler/conf.c ---- cups-1.6.3/scheduler/conf.c.lspp 2013-10-08 17:00:44.352004593 +0100 -+++ cups-1.6.3/scheduler/conf.c 2013-10-08 17:00:44.361004638 +0100 +--- cups-1.6.3/scheduler/conf.c.lspp 2015-06-10 11:45:38.140441582 +0200 ++++ cups-1.6.3/scheduler/conf.c 2015-06-10 11:45:38.161441525 +0200 @@ -34,6 +34,7 @@ * read_location() - Read a definition. * read_policy() - Read a definition. @@ -1583,8 +1583,8 @@ diff -up cups-1.6.3/scheduler/conf.c.lspp cups-1.6.3/scheduler/conf.c /* * 'read_policy()' - Read a definition. diff -up cups-1.6.3/scheduler/conf.h.lspp cups-1.6.3/scheduler/conf.h ---- cups-1.6.3/scheduler/conf.h.lspp 2013-10-08 17:00:44.353004598 +0100 -+++ cups-1.6.3/scheduler/conf.h 2013-10-08 17:00:44.362004644 +0100 +--- cups-1.6.3/scheduler/conf.h.lspp 2015-06-10 11:45:38.108441669 +0200 ++++ cups-1.6.3/scheduler/conf.h 2015-06-10 11:45:38.161441525 +0200 @@ -251,6 +251,13 @@ VAR int SSLOptions VALUE(CUPSD_SSL_NO /* SSL/TLS options */ #endif /* HAVE_SSL */ @@ -1610,8 +1610,8 @@ diff -up cups-1.6.3/scheduler/conf.h.lspp cups-1.6.3/scheduler/conf.h /* * Prototypes... diff -up cups-1.6.3/scheduler/cupsd.h.lspp cups-1.6.3/scheduler/cupsd.h ---- cups-1.6.3/scheduler/cupsd.h.lspp 2013-10-08 17:00:44.338004522 +0100 -+++ cups-1.6.3/scheduler/cupsd.h 2013-10-08 17:00:44.362004644 +0100 +--- cups-1.6.3/scheduler/cupsd.h.lspp 2015-06-10 11:45:38.093441710 +0200 ++++ cups-1.6.3/scheduler/cupsd.h 2015-06-10 11:45:38.161441525 +0200 @@ -13,6 +13,8 @@ * file is missing or damaged, see the license at "http://www.cups.org/". */ @@ -1644,8 +1644,8 @@ diff -up cups-1.6.3/scheduler/cupsd.h.lspp cups-1.6.3/scheduler/cupsd.h * Some OS's don't have hstrerror(), most notably Solaris... */ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c ---- cups-1.6.3/scheduler/ipp.c.lspp 2013-10-08 17:00:44.293004292 +0100 -+++ cups-1.6.3/scheduler/ipp.c 2013-10-08 17:00:44.363004649 +0100 +--- cups-1.6.3/scheduler/ipp.c.lspp 2015-06-10 11:45:38.155441541 +0200 ++++ cups-1.6.3/scheduler/ipp.c 2015-06-10 11:46:28.871303698 +0200 @@ -35,6 +35,7 @@ * cancel_all_jobs() - Cancel all or selected print jobs. * cancel_job() - Cancel a print job. @@ -1689,7 +1689,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c static int check_quotas(cupsd_client_t *con, cupsd_printer_t *p); static void close_job(cupsd_client_t *con, ipp_attribute_t *uri); static void copy_attrs(ipp_t *to, ipp_t *from, cups_array_t *ra, -@@ -1300,6 +1315,21 @@ add_job(cupsd_client_t *con, /* I - Cl +@@ -1299,6 +1314,21 @@ add_job(cupsd_client_t *con, /* I - Cl "time-at-creation", "time-at-processing" }; @@ -1711,7 +1711,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_job(%p[%d], %p(%s), %p(%s/%s))", -@@ -1640,6 +1670,106 @@ add_job(cupsd_client_t *con, /* I - Cl +@@ -1639,6 +1669,106 @@ add_job(cupsd_client_t *con, /* I - Cl } } @@ -1818,7 +1818,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c if ((job = cupsdAddJob(priority, printer->name)) == NULL) { send_ipp_status(con, IPP_INTERNAL_ERROR, -@@ -1648,6 +1778,32 @@ add_job(cupsd_client_t *con, /* I - Cl +@@ -1647,6 +1777,32 @@ add_job(cupsd_client_t *con, /* I - Cl return (NULL); } @@ -1851,9 +1851,9 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c job->dtype = printer->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE); job->attrs = con->request; job->dirty = 1; -@@ -1857,6 +2013,29 @@ add_job(cupsd_client_t *con, /* I - Cl - attr->values[0].string.text = _cupsStrRetain(printer->job_sheets[0]); - attr->values[1].string.text = _cupsStrRetain(printer->job_sheets[1]); +@@ -1818,6 +1974,29 @@ add_job(cupsd_client_t *con, /* I - Cl + ippSetString(job->attrs, &attr, 0, printer->job_sheets[0]); + ippSetString(job->attrs, &attr, 1, printer->job_sheets[1]); } +#ifdef WITH_LSPP + else @@ -1865,7 +1865,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c + + if (attr->num_values > 1) + userfooter = strdup(attr->values[1].string.text); -+ ++ + if (Classification != NULL && (strcmp(userheader, Classification) == 0) + && userfooter &&(strcmp(userfooter, Classification) == 0)) + { @@ -1881,7 +1881,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c job->job_sheets = attr; -@@ -1887,6 +2066,9 @@ add_job(cupsd_client_t *con, /* I - Cl +@@ -1848,6 +2027,9 @@ add_job(cupsd_client_t *con, /* I - Cl "job-sheets=\"%s,none\", " "job-originating-user-name=\"%s\"", Classification, job->username); @@ -1891,7 +1891,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c } else if (attr->num_values == 2 && strcmp(attr->values[0].string.text, -@@ -1905,6 +2087,9 @@ add_job(cupsd_client_t *con, /* I - Cl +@@ -1866,6 +2048,9 @@ add_job(cupsd_client_t *con, /* I - Cl "job-originating-user-name=\"%s\"", attr->values[0].string.text, attr->values[1].string.text, job->username); @@ -1901,7 +1901,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c } else if (strcmp(attr->values[0].string.text, Classification) && strcmp(attr->values[0].string.text, "none") && -@@ -1925,6 +2110,9 @@ add_job(cupsd_client_t *con, /* I - Cl +@@ -1886,6 +2071,9 @@ add_job(cupsd_client_t *con, /* I - Cl "job-originating-user-name=\"%s\"", attr->values[0].string.text, attr->values[1].string.text, job->username); @@ -1911,7 +1911,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c } } else if (strcmp(attr->values[0].string.text, Classification) && -@@ -1965,8 +2153,52 @@ add_job(cupsd_client_t *con, /* I - Cl +@@ -1926,8 +2114,52 @@ add_job(cupsd_client_t *con, /* I - Cl "job-sheets=\"%s\", " "job-originating-user-name=\"%s\"", Classification, job->username); @@ -1964,7 +1964,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c /* * See if we need to add the starting sheet... -@@ -3730,6 +3962,111 @@ check_rss_recipient( +@@ -3690,6 +3922,111 @@ check_rss_recipient( } @@ -2076,7 +2076,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c /* * 'check_quotas()' - Check quotas for a printer and user. */ -@@ -4182,6 +4519,15 @@ copy_banner(cupsd_client_t *con, /* I - +@@ -4142,6 +4479,15 @@ copy_banner(cupsd_client_t *con, /* I - char attrname[255], /* Name of attribute */ *s; /* Pointer into name */ ipp_attribute_t *attr; /* Attribute */ @@ -2092,7 +2092,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c cupsdLogMessage(CUPSD_LOG_DEBUG2, -@@ -4217,6 +4563,82 @@ copy_banner(cupsd_client_t *con, /* I - +@@ -4177,6 +4523,82 @@ copy_banner(cupsd_client_t *con, /* I - fchmod(cupsFileNumber(out), 0640); fchown(cupsFileNumber(out), RunUser, Group); @@ -2175,7 +2175,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c /* * Try the localized banner file under the subdirectory... -@@ -4311,6 +4733,24 @@ copy_banner(cupsd_client_t *con, /* I - +@@ -4271,6 +4693,24 @@ copy_banner(cupsd_client_t *con, /* I - else s = attrname; @@ -2200,7 +2200,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c if (!strcmp(s, "printer-name")) { cupsFilePuts(out, job->dest); -@@ -6388,6 +6828,22 @@ get_job_attrs(cupsd_client_t *con, /* I +@@ -6348,6 +6788,22 @@ get_job_attrs(cupsd_client_t *con, /* I exclude = cupsdGetPrivateAttrs(policy, con, printer, job->username); @@ -2223,7 +2223,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c /* * Copy attributes... */ -@@ -6741,6 +7197,11 @@ get_jobs(cupsd_client_t *con, /* I - C +@@ -6701,6 +7157,11 @@ get_jobs(cupsd_client_t *con, /* I - C if (username[0] && _cups_strcasecmp(username, job->username)) continue; @@ -2235,7 +2235,7 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c if (count > 0) ippAddSeparator(con->response); -@@ -11309,6 +11770,11 @@ validate_user(cupsd_job_t *job, /* I +@@ -11259,6 +11720,11 @@ validate_user(cupsd_job_t *job, /* I strlcpy(username, get_username(con), userlen); @@ -2248,8 +2248,8 @@ diff -up cups-1.6.3/scheduler/ipp.c.lspp cups-1.6.3/scheduler/ipp.c * Check the username against the owner... */ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c ---- cups-1.6.3/scheduler/job.c.lspp 2013-10-08 17:00:44.355004608 +0100 -+++ cups-1.6.3/scheduler/job.c 2013-10-08 17:00:44.364004654 +0100 +--- cups-1.6.3/scheduler/job.c.lspp 2015-06-10 11:45:38.155441541 +0200 ++++ cups-1.6.3/scheduler/job.c 2015-06-10 11:45:38.164441517 +0200 @@ -68,6 +68,9 @@ * update_job_attrs() - Update the job-printer-* attributes. */ @@ -2290,7 +2290,7 @@ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c cupsdLogMessage(CUPSD_LOG_DEBUG2, -@@ -1087,6 +1106,67 @@ cupsdContinueJob(cupsd_job_t *job) /* I +@@ -1092,6 +1111,67 @@ cupsdContinueJob(cupsd_job_t *job) /* I if (final_content_type[0]) envp[envc ++] = final_content_type; @@ -2358,7 +2358,7 @@ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c if (Classification && !banner_page) { if ((attr = ippFindAttribute(job->attrs, "job-sheets", -@@ -1861,6 +1941,20 @@ cupsdLoadJob(cupsd_job_t *job) /* I - J +@@ -1866,6 +1946,20 @@ cupsdLoadJob(cupsd_job_t *job) /* I - J ippSetString(job->attrs, &job->reasons, 0, "none"); } @@ -2379,7 +2379,7 @@ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c job->sheets = ippFindAttribute(job->attrs, "job-media-sheets-completed", IPP_TAG_INTEGER); job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME); -@@ -2254,6 +2348,14 @@ cupsdSaveJob(cupsd_job_t *job) /* I - J +@@ -2259,6 +2353,14 @@ cupsdSaveJob(cupsd_job_t *job) /* I - J { char filename[1024]; /* Job control filename */ cups_file_t *fp; /* Job file */ @@ -2394,7 +2394,7 @@ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSaveJob(job=%p(%d)): job->attrs=%p", -@@ -2266,6 +2368,76 @@ cupsdSaveJob(cupsd_job_t *job) /* I - J +@@ -2271,6 +2373,76 @@ cupsdSaveJob(cupsd_job_t *job) /* I - J fchown(cupsFileNumber(fp), RunUser, Group); @@ -2471,7 +2471,7 @@ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c job->attrs->state = IPP_IDLE; if (ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL, -@@ -3775,6 +3947,18 @@ get_options(cupsd_job_t *job, /* I - Jo +@@ -3780,6 +3952,18 @@ get_options(cupsd_job_t *job, /* I - Jo banner_page) continue; @@ -2490,7 +2490,7 @@ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c /* * Otherwise add them to the list... */ -@@ -4499,6 +4683,19 @@ static void +@@ -4504,6 +4688,19 @@ static void start_job(cupsd_job_t *job, /* I - Job ID */ cupsd_printer_t *printer) /* I - Printer to print job */ { @@ -2510,7 +2510,7 @@ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job(job=%p(%d), printer=%p(%s))", job, job->id, printer, printer->name); -@@ -4641,6 +4838,108 @@ start_job(cupsd_job_t *job, /* I - +@@ -4646,6 +4843,108 @@ start_job(cupsd_job_t *job, /* I - fcntl(job->side_pipes[1], F_SETFD, fcntl(job->side_pipes[1], F_GETFD) | FD_CLOEXEC); @@ -2620,8 +2620,8 @@ diff -up cups-1.6.3/scheduler/job.c.lspp cups-1.6.3/scheduler/job.c * Now start the first file in the job... */ diff -up cups-1.6.3/scheduler/job.h.lspp cups-1.6.3/scheduler/job.h ---- cups-1.6.3/scheduler/job.h.lspp 2013-06-07 02:12:52.000000000 +0100 -+++ cups-1.6.3/scheduler/job.h 2013-10-08 17:00:44.365004659 +0100 +--- cups-1.6.3/scheduler/job.h.lspp 2013-06-07 03:12:52.000000000 +0200 ++++ cups-1.6.3/scheduler/job.h 2015-06-10 11:45:38.164441517 +0200 @@ -13,6 +13,13 @@ * file is missing or damaged, see the license at "http://www.cups.org/". */ @@ -2648,8 +2648,8 @@ diff -up cups-1.6.3/scheduler/job.h.lspp cups-1.6.3/scheduler/job.h typedef struct cupsd_joblog_s /**** Job log message ****/ diff -up cups-1.6.3/scheduler/main.c.lspp cups-1.6.3/scheduler/main.c ---- cups-1.6.3/scheduler/main.c.lspp 2013-10-08 17:00:44.339004527 +0100 -+++ cups-1.6.3/scheduler/main.c 2013-10-08 17:00:44.365004659 +0100 +--- cups-1.6.3/scheduler/main.c.lspp 2015-06-10 11:45:38.095441704 +0200 ++++ cups-1.6.3/scheduler/main.c 2015-06-10 11:45:38.164441517 +0200 @@ -38,6 +38,8 @@ * usage() - Show scheduler usage. */ @@ -2718,8 +2718,8 @@ diff -up cups-1.6.3/scheduler/main.c.lspp cups-1.6.3/scheduler/main.c } diff -up cups-1.6.3/scheduler/printers.c.lspp cups-1.6.3/scheduler/printers.c ---- cups-1.6.3/scheduler/printers.c.lspp 2013-10-08 17:00:44.330004481 +0100 -+++ cups-1.6.3/scheduler/printers.c 2013-10-08 17:00:44.366004664 +0100 +--- cups-1.6.3/scheduler/printers.c.lspp 2015-06-10 11:45:38.087441726 +0200 ++++ cups-1.6.3/scheduler/printers.c 2015-06-10 11:45:38.165441514 +0200 @@ -56,6 +56,8 @@ * write_xml_string() - Write a string with XML escaping. */ diff --git a/SOURCES/cups-str4551.patch b/SOURCES/cups-str4551.patch new file mode 100644 index 0000000..553e74d --- /dev/null +++ b/SOURCES/cups-str4551.patch @@ -0,0 +1,34 @@ +diff -up cups-1.6.3/filter/raster.c.str4551 cups-1.6.3/filter/raster.c +--- cups-1.6.3/filter/raster.c.str4551 2013-06-07 03:12:52.000000000 +0200 ++++ cups-1.6.3/filter/raster.c 2015-06-10 11:58:55.393299339 +0200 +@@ -281,7 +281,10 @@ cupsRasterReadHeader( + */ + + if (!cups_raster_read_header(r)) ++ { ++ memset(h, 0, sizeof(cups_page_header_t)); + return (0); ++ } + + /* + * Copy the header to the user-supplied buffer... +@@ -310,7 +313,10 @@ cupsRasterReadHeader2( + */ + + if (!cups_raster_read_header(r)) ++ { ++ memset(h, 0, sizeof(cups_page_header2_t)); + return (0); ++ } + + /* + * Copy the header to the user-supplied buffer... +@@ -988,7 +994,7 @@ cups_raster_read_header( + + cups_raster_update(r); + +- return (r->header.cupsBytesPerLine != 0 && r->header.cupsHeight != 0); ++ return (r->header.cupsBytesPerLine != 0 && r->header.cupsHeight != 0 && (r->header.cupsBytesPerLine % r->bpp) == 0); + } + + diff --git a/SOURCES/cups-str4609.patch b/SOURCES/cups-str4609.patch new file mode 100644 index 0000000..a397b46 --- /dev/null +++ b/SOURCES/cups-str4609.patch @@ -0,0 +1,327 @@ +diff -up cups-1.6.3/cgi-bin/ipp-var.c.str4609 cups-1.6.3/cgi-bin/ipp-var.c +--- cups-1.6.3/cgi-bin/ipp-var.c.str4609 2013-06-07 03:12:52.000000000 +0200 ++++ cups-1.6.3/cgi-bin/ipp-var.c 2015-06-10 11:44:39.584600734 +0200 +@@ -1230,21 +1230,7 @@ cgiSetIPPObjectVars( + * Rewrite URIs... + */ + +- if (!strcmp(name, "member_uris")) +- { +- char url[1024]; /* URL for class member... */ +- +- +- cgiRewriteURL(attr->values[i].string.text, url, +- sizeof(url), NULL); +- +- snprintf(valptr, sizeof(value) - (valptr - value), +- "%s", url, +- strrchr(attr->values[i].string.text, '/') + 1); +- } +- else +- cgiRewriteURL(attr->values[i].string.text, valptr, +- sizeof(value) - (valptr - value), NULL); ++ cgiRewriteURL(attr->values[i].string.text, valptr, sizeof(value) - (valptr - value), NULL); + break; + } + +diff -up cups-1.6.3/cgi-bin/template.c.str4609 cups-1.6.3/cgi-bin/template.c +--- cups-1.6.3/cgi-bin/template.c.str4609 2013-06-07 03:12:52.000000000 +0200 ++++ cups-1.6.3/cgi-bin/template.c 2015-06-10 11:44:39.584600734 +0200 +@@ -659,39 +659,7 @@ cgi_puts(const char *s, /* I - String + while (*s) + { + if (*s == '<') +- { +- /* +- * Pass and , otherwise quote it... +- */ +- +- if (!_cups_strncasecmp(s, "", out); +- } +- else if (!_cups_strncasecmp(s, "", 4)) +- { +- fputs("", out); +- s += 3; +- } +- else +- fputs("<", out); +- } ++ fputs("<", out); + else if (*s == '>') + fputs(">", out); + else if (*s == '\"') +diff -up cups-1.6.3/scheduler/ipp.c.str4609 cups-1.6.3/scheduler/ipp.c +--- cups-1.6.3/scheduler/ipp.c.str4609 2015-06-10 11:44:39.577600753 +0200 ++++ cups-1.6.3/scheduler/ipp.c 2015-06-10 11:44:39.585600731 +0200 +@@ -482,8 +482,7 @@ cupsdProcessIPPRequest( + * Remote unauthenticated user masquerading as local root... + */ + +- _cupsStrFree(username->values[0].string.text); +- username->values[0].string.text = _cupsStrAlloc(RemoteRoot); ++ ippSetString(con->request, &username, 0, RemoteRoot); + } + } + +@@ -1665,7 +1664,7 @@ add_job(cupsd_client_t *con, /* I - Cl + cupsdSetString(&job->username, con->username); + + if (attr) +- cupsdSetString(&attr->values[0].string.text, con->username); ++ ippSetString(job->attrs, &attr, 0, con->username); + } + else if (attr) + { +@@ -1683,9 +1682,8 @@ add_job(cupsd_client_t *con, /* I - Cl + "job-originating-user-name", NULL, job->username); + else + { +- attr->group_tag = IPP_TAG_JOB; +- _cupsStrFree(attr->name); +- attr->name = _cupsStrAlloc("job-originating-user-name"); ++ ippSetGroupTag(job->attrs, &attr, IPP_TAG_JOB); ++ ippSetName(job->attrs, &attr, "job-originating-user-name"); + } + + if (con->username[0] || auth_info) +@@ -1716,48 +1714,11 @@ add_job(cupsd_client_t *con, /* I - Cl + * Also, we can only have 1 value and it must be a name value. + */ + +- switch (attr->value_tag) +- { +- case IPP_TAG_STRING : +- case IPP_TAG_TEXTLANG : +- case IPP_TAG_NAMELANG : +- case IPP_TAG_TEXT : +- case IPP_TAG_NAME : +- case IPP_TAG_KEYWORD : +- case IPP_TAG_URI : +- case IPP_TAG_URISCHEME : +- case IPP_TAG_CHARSET : +- case IPP_TAG_LANGUAGE : +- case IPP_TAG_MIMETYPE : +- /* +- * Free old strings... +- */ +- +- for (i = 0; i < attr->num_values; i ++) +- { +- _cupsStrFree(attr->values[i].string.text); +- attr->values[i].string.text = NULL; +- if (attr->values[i].string.language) +- { +- _cupsStrFree(attr->values[i].string.language); +- attr->values[i].string.language = NULL; +- } +- } +- +- default : +- break; +- } +- +- /* +- * Use the default connection hostname instead... +- */ +- +- attr->value_tag = IPP_TAG_NAME; +- attr->num_values = 1; +- attr->values[0].string.text = _cupsStrAlloc(con->http.hostname); ++ ippDeleteAttribute(job->attrs, attr); ++ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-originating-host-name", NULL, con->http.hostname); + } +- +- attr->group_tag = IPP_TAG_JOB; ++ else ++ ippSetGroupTag(job->attrs, &attr, IPP_TAG_JOB); + } + else + { +@@ -1854,8 +1815,8 @@ add_job(cupsd_client_t *con, /* I - Cl + + attr = ippAddStrings(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-sheets", + 2, NULL, NULL); +- attr->values[0].string.text = _cupsStrRetain(printer->job_sheets[0]); +- attr->values[1].string.text = _cupsStrRetain(printer->job_sheets[1]); ++ ippSetString(job->attrs, &attr, 0, printer->job_sheets[0]); ++ ippSetString(job->attrs, &attr, 1, printer->job_sheets[1]); + } + + job->job_sheets = attr; +@@ -1881,7 +1842,7 @@ add_job(cupsd_client_t *con, /* I - Cl + * Force the leading banner to have the classification on it... + */ + +- cupsdSetString(&attr->values[0].string.text, Classification); ++ ippSetString(job->attrs, &attr, 0, Classification); + + cupsdLogJob(job, CUPSD_LOG_NOTICE, "CLASSIFICATION FORCED " + "job-sheets=\"%s,none\", " +@@ -1898,7 +1859,7 @@ add_job(cupsd_client_t *con, /* I - Cl + * Can't put two different security markings on the same document! + */ + +- cupsdSetString(&attr->values[1].string.text, attr->values[0].string.text); ++ ippSetString(job->attrs, &attr, 1, attr->values[0].string.text); + + cupsdLogJob(job, CUPSD_LOG_NOTICE, "CLASSIFICATION FORCED " + "job-sheets=\"%s,%s\", " +@@ -1938,18 +1899,18 @@ add_job(cupsd_client_t *con, /* I - Cl + if (attr->num_values > 1 && + !strcmp(attr->values[0].string.text, attr->values[1].string.text)) + { +- cupsdSetString(&(attr->values[0].string.text), Classification); +- cupsdSetString(&(attr->values[1].string.text), Classification); ++ ippSetString(job->attrs, &attr, 0, Classification); ++ ippSetString(job->attrs, &attr, 1, Classification); + } + else + { + if (attr->num_values == 1 || + strcmp(attr->values[0].string.text, "none")) +- cupsdSetString(&(attr->values[0].string.text), Classification); ++ ippSetString(job->attrs, &attr, 0, Classification); + + if (attr->num_values > 1 && + strcmp(attr->values[1].string.text, "none")) +- cupsdSetString(&(attr->values[1].string.text), Classification); ++ ippSetString(job->attrs, &attr, 1, Classification); + } + + if (attr->num_values > 1) +@@ -3185,8 +3146,8 @@ authenticate_job(cupsd_client_t *con, / + + if (attr) + { +- attr->value_tag = IPP_TAG_KEYWORD; +- cupsdSetString(&(attr->values[0].string.text), "no-hold"); ++ ippSetValueTag(job->attrs, &attr, IPP_TAG_KEYWORD); ++ ippSetString(job->attrs, &attr, 0, "no-hold"); + } + + /* +@@ -8413,11 +8374,7 @@ print_job(cupsd_client_t *con, /* I - + filetype->type); + + if (format) +- { +- _cupsStrFree(format->values[0].string.text); +- +- format->values[0].string.text = _cupsStrAlloc(mimetype); +- } ++ ippSetString(con->request, &format, 0, mimetype); + else + ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, + "document-format", NULL, mimetype); +@@ -8952,10 +8909,8 @@ release_job(cupsd_client_t *con, /* I - + + if (attr) + { +- _cupsStrFree(attr->values[0].string.text); +- +- attr->value_tag = IPP_TAG_KEYWORD; +- attr->values[0].string.text = _cupsStrAlloc("no-hold"); ++ ippSetValueTag(job->attrs, &attr, IPP_TAG_KEYWORD); ++ ippSetString(job->attrs, &attr, 0, "no-hold"); + + cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, cupsdFindDest(job->dest), job, + "Job job-hold-until value changed by user."); +@@ -9648,11 +9603,7 @@ send_document(cupsd_client_t *con, /* I + + if ((jformat = ippFindAttribute(job->attrs, "document-format", + IPP_TAG_MIMETYPE)) != NULL) +- { +- _cupsStrFree(jformat->values[0].string.text); +- +- jformat->values[0].string.text = _cupsStrAlloc(mimetype); +- } ++ ippSetString(job->attrs, &jformat, 0, mimetype); + else + ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_MIMETYPE, + "document-format", NULL, mimetype); +diff -up cups-1.6.3/scheduler/job.c.str4609 cups-1.6.3/scheduler/job.c +--- cups-1.6.3/scheduler/job.c.str4609 2015-06-10 11:44:39.495600976 +0200 ++++ cups-1.6.3/scheduler/job.c 2015-06-10 11:44:39.586600728 +0200 +@@ -430,7 +430,7 @@ cupsdCheckJobs(void) + + if ((attr = ippFindAttribute(job->attrs, "job-actual-printer-uri", + IPP_TAG_URI)) != NULL) +- cupsdSetString(&attr->values[0].string.text, printer->uri); ++ ippSetString(job->attrs, &attr, 0, printer->uri); + else + ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, + "job-actual-printer-uri", NULL, printer->uri); +@@ -2138,7 +2138,7 @@ cupsdMoveJob(cupsd_job_t *job, /* I + + if ((attr = ippFindAttribute(job->attrs, "job-printer-uri", + IPP_TAG_URI)) != NULL) +- cupsdSetString(&(attr->values[0].string.text), p->uri); ++ ippSetString(job->attrs, &attr, 0, p->uri); + + cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, p, job, + "Job #%d moved from %s to %s.", job->id, olddest, +@@ -2329,7 +2329,7 @@ cupsdSetJobHoldUntil(cupsd_job_t *job, / + attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); + + if (attr) +- cupsdSetString(&(attr->values[0].string.text), when); ++ ippSetString(job->attrs, &attr, 0, when); + else + attr = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD, + "job-hold-until", NULL, when); +@@ -2583,8 +2583,8 @@ cupsdSetJobState( + + if (attr) + { +- attr->value_tag = IPP_TAG_KEYWORD; +- cupsdSetString(&(attr->values[0].string.text), "no-hold"); ++ ippSetValueTag(job->attrs, &attr, IPP_TAG_KEYWORD); ++ ippSetString(job->attrs, &attr, 0, "no-hold"); + } + + default : +@@ -4531,7 +4531,7 @@ start_job(cupsd_job_t *job, /* I - + "job-printer-state-message", + IPP_TAG_TEXT); + if (job->printer_message) +- cupsdSetString(&(job->printer_message->values[0].string.text), ""); ++ ippSetString(job->attrs, &job->printer_message, 0, ""); + + ippSetString(job->attrs, &job->reasons, 0, "job-printing"); + cupsdSetJobState(job, IPP_JOB_PROCESSING, CUPSD_JOB_DEFAULT, NULL); +@@ -5109,15 +5109,14 @@ update_job_attrs(cupsd_job_t *job, /* I + if (job->state_value != IPP_JOB_PROCESSING && + job->status_level == CUPSD_LOG_INFO) + { +- cupsdSetString(&(job->printer_message->values[0].string.text), ""); ++ ippSetString(job->attrs, &job->printer_message, 0, ""); + + job->dirty = 1; + cupsdMarkDirty(CUPSD_DIRTY_JOBS); + } + else if (job->printer->state_message[0] && do_message) + { +- cupsdSetString(&(job->printer_message->values[0].string.text), +- job->printer->state_message); ++ ippSetString(job->attrs, &job->printer_message, 0, job->printer->state_message); + + job->dirty = 1; + cupsdMarkDirty(CUPSD_DIRTY_JOBS); diff --git a/SPECS/cups.spec b/SPECS/cups.spec index f158364..bb0a912 100644 --- a/SPECS/cups.spec +++ b/SPECS/cups.spec @@ -11,7 +11,7 @@ Summary: CUPS printing system Name: cups Epoch: 1 Version: 1.6.3 -Release: 17%{?dist} +Release: 17%{?dist}.1 License: GPLv2 Group: System Environment/Daemons Url: http://www.cups.org/ @@ -83,6 +83,8 @@ Patch52: cups-CVE-2014-5029-5030-5031.patch Patch53: cups-str4461.patch Patch54: cups-str4475.patch Patch55: cups-failover-backend.patch +Patch56: cups-str4609.patch +Patch57: cups-str4551.patch Patch100: cups-lspp.patch @@ -326,6 +328,12 @@ Sends IPP requests to the specified URI and tests and/or displays the results. %patch54 -p1 -b .str4475 # Support for failover without load-balancing (bug #1115219). %patch55 -p1 -b .failover-backend +# Improper Update of Reference Count -- CVE-2015-1158 +# Cross-Site Scripting -- CVE-2015-1159 +# (bug #1229984) +%patch56 -p1 -b .str4609 +# cupsRasterReadPixels buffer overflow -- CVE-2014-9679 (bug #1229984). +%patch57 -p1 -b .str4551 %if %lspp # LSPP support. @@ -730,6 +738,9 @@ rm -f %{cups_serverbin}/backend/smb %{_mandir}/man5/ipptoolfile.5.gz %changelog +* Wed Jun 10 2015 Jiri Popelka - 1:1.6.3-17.1 +- CVE-2015-1158, CVE-2015-1159, CVE-2014-9679 (bug #1229984). + * Tue Oct 21 2014 Tim Waugh - 1:1.6.3-17 - Support for failover without load-balancing (bug #1115219). - Fix cupsGetPPD3() so it doesn't give the caller an unreadable file