summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2019-08-17 15:32:31 +0200
committerDidier Raboud <odyx@debian.org>2019-08-17 15:32:44 +0200
commitfecb588399b17da2258dd7e31730f7d263ec955b (patch)
treebff2792084ceb2e2afd5c7951ba8c5aa605aa908
parentd8028e6c25bb0d343ee4e261ee0938147ab81706 (diff)
parent1cd07131ecfb487064814a2c315e89b38066d73c (diff)
merge patched-debian/master into debian/master
-rw-r--r--CHANGES.md82
-rw-r--r--INSTALL.md2
-rw-r--r--Makedefs.in4
-rw-r--r--README.md9
-rw-r--r--backend/ipp.c5
-rw-r--r--backend/org.cups.usb-quirks3
-rw-r--r--backend/usb-libusb.c5
-rw-r--r--cgi-bin/admin.c9
-rw-r--r--config-scripts/cups-common.m420
-rw-r--r--config-scripts/cups-ssl.m41
-rw-r--r--config.h.in7
-rwxr-xr-xconfigure65
-rw-r--r--configure.ac4
-rw-r--r--cups/auth.c72
-rw-r--r--cups/cups-private.h3
-rw-r--r--cups/cups.h4
-rw-r--r--cups/dest-options.c211
-rw-r--r--cups/dest.c519
-rw-r--r--cups/hash.c23
-rw-r--r--cups/http.c9
-rw-r--r--cups/ipp.c110
-rw-r--r--cups/ppd-cache.c24
-rw-r--r--cups/ppd-emit.c12
-rw-r--r--cups/ppd-mark.c6
-rw-r--r--cups/ppd.c51
-rw-r--r--cups/ppd.h1
-rw-r--r--cups/pwg-media.c8
-rw-r--r--cups/snmp.c20
-rw-r--r--cups/snprintf.c10
-rw-r--r--cups/testdest.c120
-rw-r--r--cups/testipp.c118
-rw-r--r--cups/testppd.c4
-rw-r--r--cups/tls-gnutls.c49
-rw-r--r--debian/.git-dpm6
-rw-r--r--debian/patches/0003-Install-root-backends-world-readable.patch4
-rw-r--r--debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch2
-rw-r--r--debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch6
-rw-r--r--debian/patches/0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch87
-rw-r--r--debian/patches/0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch40
-rw-r--r--debian/patches/0037-Use-the-same-requested-attributes-values-for-all-IPP.patch111
-rw-r--r--debian/patches/0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch20
-rw-r--r--debian/patches/0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch34
-rw-r--r--debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch20
-rw-r--r--debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch20
-rw-r--r--debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch31
-rw-r--r--debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch159
-rw-r--r--debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch1130
-rw-r--r--debian/patches/0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch114
-rw-r--r--debian/patches/airprint-support.patch8
-rw-r--r--debian/patches/confdirperms.patch4
-rw-r--r--debian/patches/cups-set-default-error-policy-retry-job.patch8
-rw-r--r--debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch6
-rw-r--r--debian/patches/debianize_cups-config.patch2
-rw-r--r--debian/patches/default_log_settings.patch2
-rw-r--r--debian/patches/do-not-broadcast-with-hostnames.patch4
-rw-r--r--debian/patches/drop_unnecessary_dependencies.patch4
-rw-r--r--debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch4
-rw-r--r--debian/patches/log-debug-history-nearly-unlimited.patch4
-rw-r--r--debian/patches/logfiles_adm_readable.patch2
-rw-r--r--debian/patches/man-cups-lpd-drop-dangling-references.patch2
-rw-r--r--debian/patches/manpage-hyphen-minus.patch6
-rw-r--r--debian/patches/manpage-translations.patch2
-rw-r--r--debian/patches/move-cupsd-conf-default-to-share.patch4
-rw-r--r--debian/patches/no-conffile-timestamp.patch12
-rw-r--r--debian/patches/pwg-raster-attributes.patch8
-rw-r--r--debian/patches/reactivate_recommended_driver.patch8
-rw-r--r--debian/patches/removecvstag.patch2
-rw-r--r--debian/patches/rename-systemd-units.patch6
-rw-r--r--debian/patches/series11
-rw-r--r--debian/patches/show-compile-command-lines.patch4
-rw-r--r--debian/patches/test-i18n-nonlinux.patch2
-rw-r--r--debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch4
-rw-r--r--debian/patches/tests-ignore-ipv6-address-family-not-supported.patch6
-rw-r--r--debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch6
-rw-r--r--debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch6
-rw-r--r--debian/patches/tests-ignore-usb-crash.patch6
-rw-r--r--debian/patches/tests-ignore-warnings.patch6
-rw-r--r--debian/patches/tests-make-lpstat-call-reproducible.patch8
-rw-r--r--debian/patches/tests-no-pdftourf.patch4
-rw-r--r--debian/patches/tests-use-ipv4-lo-address.patch10
-rw-r--r--debian/patches/tests-wait-on-unfinished-jobs-everytime.patch6
-rw-r--r--doc/cups.css2
-rw-r--r--doc/de/index.html.in2
-rw-r--r--doc/es/index.html.in2
-rw-r--r--doc/help/man-cupsd.conf.html6
-rw-r--r--doc/help/man-ipptoolfile.html4
-rw-r--r--doc/index.html.in2
-rw-r--r--doc/ja/index.html.in2
-rw-r--r--doc/pt_BR/index.html.in2
-rw-r--r--doc/ru/index.html.in2
-rw-r--r--filter/rastertolabel.c9
-rw-r--r--locale/cups.pot1319
-rw-r--r--locale/cups.strings2
-rw-r--r--locale/cups_ca.po10
-rw-r--r--locale/cups_cs.po5
-rw-r--r--locale/cups_de.po10
-rw-r--r--locale/cups_es.po14
-rw-r--r--locale/cups_fr.po5
-rw-r--r--locale/cups_it.po10
-rw-r--r--locale/cups_ja.po10
-rw-r--r--locale/cups_pt_BR.po10
-rw-r--r--locale/cups_ru.po10
-rw-r--r--locale/cups_zh_CN.po10
-rw-r--r--man/cupsd.conf.man.in10
-rw-r--r--man/ipptoolfile.man8
-rw-r--r--packaging/cups.spec4
-rw-r--r--ppdc/ppdc-array.cxx8
-rw-r--r--ppdc/ppdc.h4
-rw-r--r--ppdc/ppdmerge.cxx8
-rw-r--r--ppdc/testcatalog.cxx4
-rw-r--r--scheduler/auth.c23
-rw-r--r--scheduler/client.c23
-rw-r--r--scheduler/conf.c6
-rw-r--r--scheduler/cups-driverd.cxx50
-rw-r--r--scheduler/job.c70
-rw-r--r--scheduler/main.c106
-rw-r--r--scheduler/org.cups.cupsd.service.in1
-rw-r--r--scheduler/printers.c160
-rw-r--r--scheduler/server.c11
-rw-r--r--scheduler/subscriptions.c5
-rw-r--r--systemv/cupsctl.c55
-rw-r--r--systemv/lpadmin.c11
-rw-r--r--templates/de/trailer.tmpl2
-rw-r--r--templates/es/trailer.tmpl2
-rw-r--r--templates/fr/trailer.tmpl2
-rw-r--r--templates/ja/trailer.tmpl2
-rw-r--r--templates/pt_BR/trailer.tmpl2
-rw-r--r--templates/ru/trailer.tmpl2
-rw-r--r--templates/trailer.tmpl2
-rwxr-xr-xtest/run-stp-tests.sh76
-rw-r--r--vcnet/config.h11
-rw-r--r--xcode/config.h11
132 files changed, 2190 insertions, 3488 deletions
diff --git a/CHANGES.md b/CHANGES.md
index 65cbdb130..9cc2e206a 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,11 +1,89 @@
-CHANGES - 2.2.10 - 2018-12-07
+CHANGES - 2.2.12 - 2019-08-15
=============================
+Changes in CUPS v2.2.12
+-----------------------
+
+- CVE-2019-8696 and CVE-2019-8675: Fixed SNMP buffer overflows (rdar://51685251)
+- The `cupsctl` command now prevents setting "cups-files.conf" directives
+ (Issue #5530)
+- Updated the systemd service file for cupsd (Issue #5551)
+- The `cupsCheckDestSupported` function did not check octetString values
+ correctly (Issue #5557)
+- The scheduler did not encode octetString values like "job-password" correctly
+ for the print filters (Issue #5558)
+- Restored minimal support for the `Emulators` keyword in PPD files to allow
+ old Samsung printer drivers to continue to work (Issue #5562)
+- Timed out job submission now yields an error (Issue #5570)
+- The footer in the web interface covered some content on small displays
+ (Issue #5574)
+- The libusb-based USB backend now enforces read limits, improving print speed
+ in many cases (Issue #5583)
+- Fixed some compatibility issues with old releases of CUPS (Issue #5587)
+- Fixed a bug in the scheduler job cleanup code (Issue #5588)
+- "make" failed with GZIP options (Issue #5595)
+- Added FIPS-140 workarounds for GNU TLS (Issue #5601, Issue #5622)
+- The scheduler no longer provides a default value for the description
+ (Issue #5603)
+- The `lpadmin` command did not always update the PPD file for changes to the
+ `cupsIPPSupplies` and `cupsSNMPSupplies` keywords (Issue #5610)
+- The scheduler now uses both the group's membership list as well as the
+ various OS-specific membership functions to determine whether a user belongs
+ to a named group (Issue #5613)
+- Added USB quirks rule for HP LaserJet 1015 (Issue #5617)
+- Fixed some PPD parser issues (Issue #5623, Issue #5624)
+- The IPP parser no longer allows invalid member attributes in collections
+ (Issue #5630)
+- Fixed IPP buffer overflow (rdar://50035411)
+- Fixed memory disclosure issue in the scheduler (rdar://51373853)
+- Fixed DoS issues in the scheduler (rdar://51373929)
+- The scheduler would restart continuously when idle and printers were not
+ shared (rdar://52561199)
+- Fixed a command ordering issue in the Zebra ZPL driver.
+- Fixed a memory leak in `ppdOpen`.
+
+
+Changes in CUPS v2.2.11
+-----------------------
+
+- Running ppdmerge with the same input and output filenames did not work as
+ advertised (Issue #5455)
+- Fixed a potential memory leak when reading at the end of a file (Issue #5473)
+- Fixed potential unaligned accesses in the string pool (Issue #5474)
+- Fixed a potential memory leak when loading a PPD file (Issue #5475)
+- Added a USB quirks rule for the Lexmark E120n (Issue #5478)
+- Updated the USB quirks rule for Zebra label printers (Issue #5395)
+- Fixed a compile error on Linux (Issue #5483)
+- The lpadmin command, web interface, and scheduler all queried an IPP
+ Everywhere printer differently, resulting in different PPDs for the same
+ printer (Issue #5484)
+- Fixed an issue with the self-signed certificates generated by GNU TLS
+ (Issue #5506)
+- The `ippValidateAttribute` function did not catch all instances of invalid
+ UTF-8 strings (Issue #5509)
+- Non-Kerberized printing to Windows via IPP was broken (Issue #5515)
+- The scheduler no longer stops a printer if an error occurs when a job is
+ canceled or aborted (Issue #5517)
+- Added a USB quirks rule for the DYMO 450 Turbo (Issue #5521)
+- Added a USB quirks rule for Xerox printers (Issue #5523)
+- The scheduler's self-signed certificate did not include all of the alternate
+ names for the server when using GNU TLS (Issue #5525)
+- Fixed compiler warnings with newer versions of GCC (Issue #5532, Issue #5533)
+- Fixed some PPD caching and IPP Everywhere PPD accounting/password bugs
+ (Issue #5535)
+- Fixed `PreserveJobHistory` bug with time values (Issue #5538)
+- Media size matching now uses a tolerance of 0.5mm (rdar://33822024)
+- The lpadmin command would hang with a bad PPD file (rdar://41495016)
+- Fixed a potential crash bug in cups-driverd (rdar://46625579)
+- Fixed a performance regression with large PPDs (rdar://47040759)
+- The scheduler did not always idle exit as quickly as it could.
+
+
Changes in CUPS v2.2.10
-----------------------
-- CVE-2018-4700: Linux session cookies used a predictable random number seed.
+- CVE-2018-4300: Linux session cookies used a predictable random number seed.
- The `lpoptions` command now works with IPP Everywhere printers that have not
yet been added as local queues (Issue #5045)
- Added USB quirk rules (Issue #5395, Issue #5443)
diff --git a/INSTALL.md b/INSTALL.md
index 7d196cf66..63075dbb0 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,4 +1,4 @@
-INSTALL - CUPS v2.2.10 - 2018-12-07
+INSTALL - CUPS v2.2.12 - 2019-08-15
===================================
This file describes how to compile and install CUPS from source code. For more
diff --git a/Makedefs.in b/Makedefs.in
index d6fa23e89..4f6247a68 100644
--- a/Makedefs.in
+++ b/Makedefs.in
@@ -1,7 +1,7 @@
#
# Common makefile definitions for CUPS.
#
-# Copyright 2007-2018 by Apple Inc.
+# Copyright 2007-2019 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -30,7 +30,7 @@ CHMOD = @CHMOD@
CXX = @LIBTOOL_CXX@ @CXX@
DSO = @DSO@
DSOXX = @DSOXX@
-GZIP = @GZIP@
+GZIPPROG = @GZIPPROG@
INSTALL = @INSTALL@
LD = @LD@
LD_CC = @LD_CC@
diff --git a/README.md b/README.md
index d73673dd5..54ced6c4d 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-README - CUPS v2.2.10 - 2018-12-07
+README - CUPS v2.2.12 - 2019-08-15
==================================
Looking for compile instructions? Read the file `INSTALL.md` instead...
@@ -22,8 +22,9 @@ included with CUPS to support many Dymo, EPSON, HP, Intellitech, OKIDATA, and
Zebra printers. Many more drivers are available online and (in some cases) on
the driver CD-ROM that came with your printer.
-CUPS is licensed under the GNU General Public License and GNU Library General
-Public License versions 2. See the file "LICENSE.txt" for more information.
+CUPS 2.2.x is licensed under the GNU General Public License and GNU Library
+General Public License versions 2. See the file "LICENSE.txt" for more
+information.
READING THE DOCUMENTATION
@@ -148,7 +149,7 @@ This will prevent the filters from misinterpreting your print file.
LEGAL STUFF
-----------
-CUPS is copyright Β© 2007-2018 by Apple Inc. CUPS and the CUPS logo are
+CUPS is copyright Β© 2007-2019 by Apple Inc. CUPS and the CUPS logo are
trademarks of Apple Inc.
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
diff --git a/backend/ipp.c b/backend/ipp.c
index bc678f50a..e072249bd 100644
--- a/backend/ipp.c
+++ b/backend/ipp.c
@@ -2220,8 +2220,9 @@ main(int argc, /* I - Number of command-line args */
else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED)
fputs("JOBSTATE: account-authorization-failed\n", stderr);
- if (ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_FORBIDDEN ||
- ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED)
+ if (job_canceled)
+ return (CUPS_BACKEND_OK);
+ else if (ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_FORBIDDEN || ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED)
return (CUPS_BACKEND_AUTH_REQUIRED);
else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED ||
ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED ||
diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks
index 44d6bb8cb..cd684d33f 100644
--- a/backend/org.cups.usb-quirks
+++ b/backend/org.cups.usb-quirks
@@ -242,6 +242,9 @@
# All Intermec devices (Issue #4553)
0x067e no-reattach
+# HP LaserJet 1015 (Issue #5617)
+0x03f0 0x0e17 delay-close
+
# HP LaserJet 1150 (Issue #4549)
0x03f0 0x0f17 delay-close
diff --git a/backend/usb-libusb.c b/backend/usb-libusb.c
index 7fc95c27e..042854bba 100644
--- a/backend/usb-libusb.c
+++ b/backend/usb-libusb.c
@@ -1,7 +1,7 @@
/*
* LIBUSB interface code for CUPS.
*
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -1746,8 +1746,7 @@ static void *read_thread(void *reference)
* Make sure this loop executes no more than once every 250 miliseconds...
*/
- if ((readstatus != LIBUSB_SUCCESS || rbytes == 0) &&
- (g.wait_eof || !g.read_thread_stop))
+ if ((g.wait_eof || !g.read_thread_stop))
{
gettimeofday(&now, NULL);
if (timercmp(&now, &end, <))
diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
index 06199a96b..f0d01598d 100644
--- a/cgi-bin/admin.c
+++ b/cgi-bin/admin.c
@@ -3414,6 +3414,9 @@ do_set_options(http_t *http, /* I - HTTP connection */
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_POINTS :
if (!_cups_strncasecmp(option->defchoice, "Custom.", 7))
{
@@ -4013,6 +4016,9 @@ get_option_value(
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_REAL :
@@ -4091,6 +4097,9 @@ get_option_value(
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_REAL :
diff --git a/config-scripts/cups-common.m4 b/config-scripts/cups-common.m4
index a1185bccc..0859efe08 100644
--- a/config-scripts/cups-common.m4
+++ b/config-scripts/cups-common.m4
@@ -1,7 +1,7 @@
dnl
dnl Common configuration stuff for CUPS.
dnl
-dnl Copyright 2007-2017 by Apple Inc.
+dnl Copyright 2007-2019 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -42,7 +42,11 @@ AC_PROG_CXX(clang++ c++ g++)
AC_PROG_RANLIB
AC_PATH_PROG(AR,ar)
AC_PATH_PROG(CHMOD,chmod)
-AC_PATH_PROG(GZIP,gzip)
+AC_PATH_PROG(GZIPPROG,gzip)
+AC_MSG_CHECKING(for install-sh script)
+INSTALL="`pwd`/install-sh"
+AC_SUBST(INSTALL)
+AC_MSG_RESULT(using $INSTALL)
AC_PATH_PROG(LD,ld)
AC_PATH_PROG(LN,ln)
AC_PATH_PROG(MKDIR,mkdir)
@@ -51,6 +55,7 @@ AC_PATH_PROG(RM,rm)
AC_PATH_PROG(RMDIR,rmdir)
AC_PATH_PROG(SED,sed)
AC_PATH_PROG(XDGOPEN,xdg-open)
+
if test "x$XDGOPEN" = x; then
CUPS_HTMLVIEW="htmlview"
else
@@ -58,11 +63,6 @@ else
fi
AC_SUBST(CUPS_HTMLVIEW)
-AC_MSG_CHECKING(for install-sh script)
-INSTALL="`pwd`/install-sh"
-AC_SUBST(INSTALL)
-AC_MSG_RESULT(using $INSTALL)
-
if test "x$AR" = x; then
AC_MSG_ERROR([Unable to find required library archive command.])
fi
@@ -266,14 +266,14 @@ dnl ZLIB
INSTALL_GZIP=""
LIBZ=""
AC_CHECK_HEADER(zlib.h,
- AC_CHECK_LIB(z, gzgets,
+ AC_CHECK_LIB(z, gzgets,[
AC_DEFINE(HAVE_LIBZ)
LIBZ="-lz"
LIBS="$LIBS -lz"
AC_CHECK_LIB(z, inflateCopy, AC_DEFINE(HAVE_INFLATECOPY))
- if test "x$GZIP" != z; then
+ if test "x$GZIPPROG" != x; then
INSTALL_GZIP="-z"
- fi))
+ fi]))
AC_SUBST(INSTALL_GZIP)
AC_SUBST(LIBZ)
diff --git a/config-scripts/cups-ssl.m4 b/config-scripts/cups-ssl.m4
index 52f9c39f1..49fe42fe3 100644
--- a/config-scripts/cups-ssl.m4
+++ b/config-scripts/cups-ssl.m4
@@ -80,6 +80,7 @@ if test x$enable_ssl != xno; then
SAVELIBS="$LIBS"
LIBS="$LIBS $SSLLIBS"
+ AC_CHECK_FUNC(gnutls_fips140_set_mode, AC_DEFINE(HAVE_GNUTLS_FIPS140_SET_MODE))
AC_CHECK_FUNC(gnutls_transport_set_pull_timeout_function, AC_DEFINE(HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION))
AC_CHECK_FUNC(gnutls_priority_set_direct, AC_DEFINE(HAVE_GNUTLS_PRIORITY_SET_DIRECT))
LIBS="$SAVELIBS"
diff --git a/config.h.in b/config.h.in
index f3b5e4c7a..d81c59e36 100644
--- a/config.h.in
+++ b/config.h.in
@@ -304,6 +304,13 @@
/*
+ * Do we have the gnutls_fips140_set_mode function?
+ */
+
+#undef HAVE_GNUTLS_FIPS140_SET_MODE
+
+
+/*
* Do we have the gnutls_transport_set_pull_timeout_function function?
*/
diff --git a/configure b/configure
index 18a68f5ea..0392af142 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for CUPS 2.2.10.
+# Generated by GNU Autoconf 2.69 for CUPS 2.2.12.
#
# Report bugs to <https://github.com/apple/cups/issues>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='CUPS'
PACKAGE_TARNAME='cups'
-PACKAGE_VERSION='2.2.10'
-PACKAGE_STRING='CUPS 2.2.10'
+PACKAGE_VERSION='2.2.12'
+PACKAGE_STRING='CUPS 2.2.12'
PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
PACKAGE_URL='https://www.cups.org/'
@@ -762,7 +762,6 @@ LIBPAPER
LIBMALLOC
PKGCONFIG
INSTALLSTATIC
-INSTALL
CUPS_HTMLVIEW
XDGOPEN
SED
@@ -772,7 +771,8 @@ MV
MKDIR
LN
LD
-GZIP
+INSTALL
+GZIPPROG
CHMOD
AR
RANLIB
@@ -1480,7 +1480,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures CUPS 2.2.10 to adapt to many kinds of systems.
+\`configure' configures CUPS 2.2.12 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1545,7 +1545,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of CUPS 2.2.10:";;
+ short | recursive ) echo "Configuration of CUPS 2.2.12:";;
esac
cat <<\_ACEOF
@@ -1726,7 +1726,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-CUPS configure 2.2.10
+CUPS configure 2.2.12
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2190,7 +2190,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by CUPS $as_me 2.2.10, which was
+It was created by CUPS $as_me 2.2.12, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2711,7 +2711,7 @@ done
ac_config_headers="$ac_config_headers config.h"
-CUPS_VERSION="2.2.10"
+CUPS_VERSION="2.2.12"
CUPS_REVISION=""
CUPS_BUILD="cups-$CUPS_VERSION"
@@ -3948,12 +3948,12 @@ fi
set dummy gzip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GZIP+:} false; then :
+if ${ac_cv_path_GZIPPROG+:} false; then :
$as_echo_n "(cached) " >&6
else
- case $GZIP in
+ case $GZIPPROG in
[\\/]* | ?:[\\/]*)
- ac_cv_path_GZIP="$GZIP" # Let the user override the test with a path.
+ ac_cv_path_GZIPPROG="$GZIPPROG" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3963,7 +3963,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GZIP="$as_dir/$ac_word$ac_exec_ext"
+ ac_cv_path_GZIPPROG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -3974,16 +3974,22 @@ IFS=$as_save_IFS
;;
esac
fi
-GZIP=$ac_cv_path_GZIP
-if test -n "$GZIP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIP" >&5
-$as_echo "$GZIP" >&6; }
+GZIPPROG=$ac_cv_path_GZIPPROG
+if test -n "$GZIPPROG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIPPROG" >&5
+$as_echo "$GZIPPROG" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for install-sh script" >&5
+$as_echo_n "checking for install-sh script... " >&6; }
+INSTALL="`pwd`/install-sh"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $INSTALL" >&5
+$as_echo "using $INSTALL" >&6; }
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -4304,6 +4310,7 @@ $as_echo "no" >&6; }
fi
+
if test "x$XDGOPEN" = x; then
CUPS_HTMLVIEW="htmlview"
else
@@ -4311,13 +4318,6 @@ else
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for install-sh script" >&5
-$as_echo_n "checking for install-sh script... " >&6; }
-INSTALL="`pwd`/install-sh"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $INSTALL" >&5
-$as_echo "using $INSTALL" >&6; }
-
if test "x$AR" = x; then
as_fn_error $? "Unable to find required library archive command." "$LINENO" 5
fi
@@ -5718,7 +5718,8 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzgets" >&5
$as_echo "$ac_cv_lib_z_gzgets" >&6; }
if test "x$ac_cv_lib_z_gzgets" = xyes; then :
- $as_echo "#define HAVE_LIBZ 1" >>confdefs.h
+
+ $as_echo "#define HAVE_LIBZ 1" >>confdefs.h
LIBZ="-lz"
LIBS="$LIBS -lz"
@@ -5763,7 +5764,7 @@ if test "x$ac_cv_lib_z_inflateCopy" = xyes; then :
fi
- if test "x$GZIP" != z; then
+ if test "x$GZIPPROG" != x; then
INSTALL_GZIP="-z"
fi
fi
@@ -8479,6 +8480,12 @@ fi
SAVELIBS="$LIBS"
LIBS="$LIBS $SSLLIBS"
+ ac_fn_c_check_func "$LINENO" "gnutls_fips140_set_mode" "ac_cv_func_gnutls_fips140_set_mode"
+if test "x$ac_cv_func_gnutls_fips140_set_mode" = xyes; then :
+ $as_echo "#define HAVE_GNUTLS_FIPS140_SET_MODE 1" >>confdefs.h
+
+fi
+
ac_fn_c_check_func "$LINENO" "gnutls_transport_set_pull_timeout_function" "ac_cv_func_gnutls_transport_set_pull_timeout_function"
if test "x$ac_cv_func_gnutls_transport_set_pull_timeout_function" = xyes; then :
$as_echo "#define HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION 1" >>confdefs.h
@@ -10832,7 +10839,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by CUPS $as_me 2.2.10, which was
+This file was extended by CUPS $as_me 2.2.12, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -10895,7 +10902,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-CUPS config.status 2.2.10
+CUPS config.status 2.2.12
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index f57b97dbf..864ba340a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
dnl
dnl Configuration script for CUPS.
dnl
-dnl Copyright 2007-2018 by Apple Inc.
+dnl Copyright 2007-2019 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -15,7 +15,7 @@ dnl We need at least autoconf 2.60...
AC_PREREQ(2.60)
dnl Package name and version...
-AC_INIT([CUPS], [2.2.10], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
+AC_INIT([CUPS], [2.2.12], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
sinclude(config-scripts/cups-opsys.m4)
sinclude(config-scripts/cups-common.m4)
diff --git a/cups/auth.c b/cups/auth.c
index e4328e025..a91b0dbe4 100644
--- a/cups/auth.c
+++ b/cups/auth.c
@@ -52,6 +52,9 @@ static const char *cups_auth_param(const char *scheme, const char *name, char *v
static const char *cups_auth_scheme(const char *www_authenticate, char *scheme, size_t schemesize);
#ifdef HAVE_GSSAPI
+# define CUPS_GSS_OK 0 /* Successfully set credentials */
+# define CUPS_GSS_NONE -1 /* No credentials */
+# define CUPS_GSS_FAIL -2 /* Failed credentials/authentication */
# ifdef HAVE_GSS_ACQUIRE_CRED_EX_F
# ifdef HAVE_GSS_GSSAPI_SPI_H
# include <GSS/gssapi_spi.h>
@@ -178,6 +181,8 @@ cupsDoAuthentication(
* Check the scheme name...
*/
+ DEBUG_printf(("2cupsDoAuthentication: Trying scheme \"%s\"...", scheme));
+
#ifdef HAVE_GSSAPI
if (!_cups_strcasecmp(scheme, "Negotiate"))
{
@@ -185,18 +190,36 @@ cupsDoAuthentication(
* Kerberos authentication...
*/
- if (_cupsSetNegotiateAuthString(http, method, resource))
+ int gss_status; /* Auth status */
+
+ if ((gss_status = _cupsSetNegotiateAuthString(http, method, resource)) == CUPS_GSS_FAIL)
{
+ DEBUG_puts("1cupsDoAuthentication: Negotiate failed.");
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
return (-1);
}
-
- break;
+ else if (gss_status == CUPS_GSS_NONE)
+ {
+ DEBUG_puts("2cupsDoAuthentication: No credentials for Negotiate.");
+ continue;
+ }
+ else
+ {
+ DEBUG_puts("2cupsDoAuthentication: Using Negotiate.");
+ break;
+ }
}
else
#endif /* HAVE_GSSAPI */
if (_cups_strcasecmp(scheme, "Basic") && _cups_strcasecmp(scheme, "Digest"))
- continue; /* Not supported (yet) */
+ {
+ /*
+ * Other schemes not yet supported...
+ */
+
+ DEBUG_printf(("2cupsDoAuthentication: Scheme \"%s\" not yet supported.", scheme));
+ continue;
+ }
/*
* See if we should retry the current username:password...
@@ -226,6 +249,7 @@ cupsDoAuthentication(
if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
{
+ DEBUG_puts("1cupsDoAuthentication: User canceled password request.");
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
return (-1);
}
@@ -255,6 +279,7 @@ cupsDoAuthentication(
char encode[256]; /* Base64 buffer */
+ DEBUG_puts("2cupsDoAuthentication: Using Basic.");
httpEncode64_2(encode, sizeof(encode), http->userpass, (int)strlen(http->userpass));
httpSetAuthString(http, "Basic", encode);
break;
@@ -273,19 +298,22 @@ cupsDoAuthentication(
cups_auth_param(schemedata, "realm", http->realm, sizeof(http->realm));
if (_httpSetDigestAuthString(http, nonce, method, resource))
+ {
+ DEBUG_puts("2cupsDoAuthentication: Using Basic.");
break;
+ }
}
}
if (http->authstring)
{
- DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\"", http->authstring));
+ DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\".", http->authstring));
return (0);
}
else
{
- DEBUG_printf(("1cupsDoAuthentication: Unknown auth type: \"%s\"", www_auth));
+ DEBUG_puts("1cupsDoAuthentication: No supported schemes.");
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
return (-1);
@@ -298,7 +326,7 @@ cupsDoAuthentication(
* '_cupsSetNegotiateAuthString()' - Set the Kerberos authentication string.
*/
-int /* O - 0 on success, -1 on error */
+int /* O - 0 on success, negative on error */
_cupsSetNegotiateAuthString(
http_t *http, /* I - Connection to server */
const char *method, /* I - Request method ("GET", "POST", "PUT") */
@@ -323,10 +351,16 @@ _cupsSetNegotiateAuthString(
{
DEBUG_puts("1_cupsSetNegotiateAuthString: Weak-linked GSSAPI/Kerberos "
"framework is not present");
- return (-1);
+ return (CUPS_GSS_NONE);
}
# endif /* __APPLE__ */
+ if (!strcmp(http->hostname, "localhost") || http->hostname[0] == '/' || isdigit(http->hostname[0] & 255) || !strchr(http->hostname, '.'))
+ {
+ DEBUG_printf(("1_cupsSetNegotiateAuthString: Kerberos not available for host \"%s\".", http->hostname));
+ return (CUPS_GSS_NONE);
+ }
+
if (http->gssname == GSS_C_NO_NAME)
{
http->gssname = cups_gss_getname(http, _cupsGSSServiceName());
@@ -371,7 +405,7 @@ _cupsSetNegotiateAuthString(
cupsUser(), http->gsshost);
if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
- return (-1);
+ return (CUPS_GSS_FAIL);
/*
* Try to acquire credentials...
@@ -425,18 +459,20 @@ _cupsSetNegotiateAuthString(
}
# endif /* HAVE_GSS_ACQUIRED_CRED_EX_F */
- if (GSS_ERROR(major_status))
+ if (major_status == GSS_S_NO_CRED)
{
- cups_gss_printf(major_status, minor_status,
- "_cupsSetNegotiateAuthString: Unable to initialize "
- "security context");
- return (-1);
+ cups_gss_printf(major_status, minor_status, "_cupsSetNegotiateAuthString: No credentials");
+ return (CUPS_GSS_NONE);
+ }
+ else if (GSS_ERROR(major_status))
+ {
+ cups_gss_printf(major_status, minor_status, "_cupsSetNegotiateAuthString: Unable to initialize security context");
+ return (CUPS_GSS_FAIL);
}
# ifdef DEBUG
else if (major_status == GSS_S_CONTINUE_NEEDED)
- cups_gss_printf(major_status, minor_status,
- "_cupsSetNegotiateAuthString: Continuation needed!");
+ cups_gss_printf(major_status, minor_status, "_cupsSetNegotiateAuthString: Continuation needed");
# endif /* DEBUG */
if (output_token.length > 0 && output_token.length <= 65536)
@@ -470,10 +506,10 @@ _cupsSetNegotiateAuthString(
"large - %d bytes!", (int)output_token.length));
gss_release_buffer(&minor_status, &output_token);
- return (-1);
+ return (CUPS_GSS_FAIL);
}
- return (0);
+ return (CUPS_GSS_OK);
}
#endif /* HAVE_GSSAPI */
diff --git a/cups/cups-private.h b/cups/cups-private.h
index 6fd66a9ce..4ec4e6864 100644
--- a/cups/cups-private.h
+++ b/cups/cups-private.h
@@ -239,8 +239,7 @@ extern http_t *_cupsConnect(void);
extern char *_cupsCreateDest(const char *name, const char *info, const char *device_id, const char *device_uri, char *uri, size_t urisize);
extern int _cupsGet1284Values(const char *device_id,
cups_option_t **values);
-extern const char *_cupsGetDestResource(cups_dest_t *dest, char *resource,
- size_t resourcesize);
+extern const char *_cupsGetDestResource(cups_dest_t *dest, unsigned flags, char *resource, size_t resourcesize);
extern int _cupsGetDests(http_t *http, ipp_op_t op,
const char *name, cups_dest_t **dests,
cups_ptype_t type, cups_ptype_t mask);
diff --git a/cups/cups.h b/cups/cups.h
index 37c610abf..c548bde19 100644
--- a/cups/cups.h
+++ b/cups/cups.h
@@ -47,10 +47,10 @@ extern "C" {
* Constants...
*/
-# define CUPS_VERSION 2.0210
+# define CUPS_VERSION 2.0212
# define CUPS_VERSION_MAJOR 2
# define CUPS_VERSION_MINOR 2
-# define CUPS_VERSION_PATCH 10
+# define CUPS_VERSION_PATCH 12
# define CUPS_BC_FD 3
/* Back-channel file descriptor for
diff --git a/cups/dest-options.c b/cups/dest-options.c
index 51705a50c..e9361adf7 100644
--- a/cups/dest-options.c
+++ b/cups/dest-options.c
@@ -1,7 +1,7 @@
/*
* Destination option/media support for CUPS.
*
- * Copyright 2012-2017 by Apple Inc.
+ * Copyright 2012-2019 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -83,6 +83,7 @@ cupsCheckDestSupported(
ipp_res_t units_value; /* Resolution units */
ipp_attribute_t *attr; /* Attribute */
_ipp_value_t *attrval; /* Current attribute value */
+ _ipp_option_t *map; /* Option mapping information */
/*
@@ -128,10 +129,10 @@ cupsCheckDestSupported(
*/
pwg_media_t *pwg; /* Current PWG media size info */
- int min_width, /* Minimum width */
- min_length, /* Minimum length */
- max_width, /* Maximum width */
- max_length; /* Maximum length */
+ int min_width, /* Minimum width */
+ min_length, /* Minimum length */
+ max_width, /* Maximum width */
+ max_length; /* Maximum length */
/*
* Get the minimum and maximum size...
@@ -174,9 +175,14 @@ cupsCheckDestSupported(
* Check literal values...
*/
+ map = _ippFindOption(option);
+
switch (attr->value_tag)
{
case IPP_TAG_INTEGER :
+ if (map && map->value_tag == IPP_TAG_STRING)
+ return (strlen(value) <= (size_t)attr->values[0].integer);
+
case IPP_TAG_ENUM :
int_value = atoi(value);
@@ -189,7 +195,10 @@ cupsCheckDestSupported(
return (attr->values[0].boolean);
case IPP_TAG_RANGE :
- int_value = atoi(value);
+ if (map && map->value_tag == IPP_TAG_STRING)
+ int_value = (int)strlen(value);
+ else
+ int_value = atoi(value);
for (i = 0; i < attr->num_values; i ++)
if (int_value >= attr->values[i].range.lower &&
@@ -572,6 +581,7 @@ cupsCopyDestInfo(
cups_dest_t *dest) /* I - Destination */
{
cups_dinfo_t *dinfo; /* Destination information */
+ unsigned dflags; /* Destination flags */
ipp_t *request, /* Get-Printer-Attributes request */
*response; /* Supported attributes */
int tries, /* Number of tries so far */
@@ -581,6 +591,7 @@ cupsCopyDestInfo(
char resource[1024]; /* Resource path */
int version; /* IPP version */
ipp_status_t status; /* Status of request */
+ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
static const char * const requested_attrs[] =
{ /* Requested attributes */
"job-template",
@@ -589,14 +600,35 @@ cupsCopyDestInfo(
};
- DEBUG_printf(("cupsCopyDestSupported(http=%p, dest=%p(%s))", (void *)http, (void *)dest, dest ? dest->name : ""));
+ DEBUG_printf(("cupsCopyDestInfo(http=%p, dest=%p(%s))", (void *)http, (void *)dest, dest ? dest->name : ""));
/*
* Get the default connection as needed...
*/
if (!http)
- http = _cupsConnect();
+ {
+ DEBUG_puts("1cupsCopyDestInfo: Default server connection.");
+ http = _cupsConnect();
+ dflags = CUPS_DEST_FLAGS_NONE;
+ }
+#ifdef AF_LOCAL
+ else if (httpAddrFamily(http->hostaddr) == AF_LOCAL)
+ {
+ DEBUG_puts("1cupsCopyDestInfo: Connection to server (domain socket).");
+ dflags = CUPS_DEST_FLAGS_NONE;
+ }
+#endif /* AF_LOCAL */
+ else if ((strcmp(http->hostname, cg->server) && cg->server[0] != '/') || cg->ipp_port != httpAddrPort(http->hostaddr))
+ {
+ DEBUG_printf(("1cupsCopyDestInfo: Connection to device (%s).", http->hostname));
+ dflags = CUPS_DEST_FLAGS_DEVICE;
+ }
+ else
+ {
+ DEBUG_printf(("1cupsCopyDestInfo: Connection to server (%s).", http->hostname));
+ dflags = CUPS_DEST_FLAGS_NONE;
+ }
/*
* Range check input...
@@ -609,8 +641,11 @@ cupsCopyDestInfo(
* Get the printer URI and resource path...
*/
- if ((uri = _cupsGetDestResource(dest, resource, sizeof(resource))) == NULL)
+ if ((uri = _cupsGetDestResource(dest, dflags, resource, sizeof(resource))) == NULL)
+ {
+ DEBUG_puts("1cupsCopyDestInfo: Unable to get resource.");
return (NULL);
+ }
/*
* Get the supported attributes...
@@ -628,28 +663,25 @@ cupsCopyDestInfo(
*/
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
- uri);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
- "requesting-user-name", NULL, cupsUser());
- ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
- "requested-attributes",
- (int)(sizeof(requested_attrs) / sizeof(requested_attrs[0])),
- NULL, requested_attrs);
+
+ ippSetVersion(request, version / 10, version % 10);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(requested_attrs) / sizeof(requested_attrs[0])), NULL, requested_attrs);
response = cupsDoRequest(http, request, resource);
status = cupsLastError();
if (status > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
{
- DEBUG_printf(("cupsCopyDestSupported: Get-Printer-Attributes for '%s' "
- "returned %s (%s)", dest->name, ippErrorString(status),
- cupsLastErrorString()));
+ DEBUG_printf(("1cupsCopyDestInfo: Get-Printer-Attributes for '%s' returned %s (%s)", dest->name, ippErrorString(status), cupsLastErrorString()));
ippDelete(response);
response = NULL;
- if (status == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED && version > 11)
+ if ((status == IPP_STATUS_ERROR_BAD_REQUEST || status == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) && version > 11)
+ {
version = 11;
+ }
else if (status == IPP_STATUS_ERROR_BUSY)
{
sleep((unsigned)delay);
@@ -665,7 +697,10 @@ cupsCopyDestInfo(
while (!response && tries < 10);
if (!response)
+ {
+ DEBUG_puts("1cupsCopyDestInfo: Unable to get printer attributes.");
return (NULL);
+ }
/*
* Allocate a cups_dinfo_t structure and return it...
@@ -678,6 +713,8 @@ cupsCopyDestInfo(
return (NULL);
}
+ DEBUG_printf(("1cupsCopyDestInfo: version=%d, uri=\"%s\", resource=\"%s\".", version, uri, resource));
+
dinfo->version = version;
dinfo->uri = uri;
dinfo->resource = _cupsStrAlloc(resource);
@@ -938,10 +975,10 @@ cupsGetDestMediaByIndex(
return (0);
}
- if (nsize->size_name)
- strlcpy(size->media, nsize->size_name, sizeof(size->media));
- else if (nsize->key)
+ if (nsize->key)
strlcpy(size->media, nsize->key, sizeof(size->media));
+ else if (nsize->size_name)
+ strlcpy(size->media, nsize->size_name, sizeof(size->media));
else if ((pwg = pwgMediaForSize(nsize->width, nsize->length)) != NULL)
strlcpy(size->media, pwg->pwg, sizeof(size->media));
else
@@ -1202,25 +1239,19 @@ cupsGetDestMediaDefault(
* Get the default media size, if any...
*/
- if ((media = cupsGetOption("media", dest->num_options,
- dest->options)) == NULL)
+ if ((media = cupsGetOption("media", dest->num_options, dest->options)) == NULL)
media = "na_letter_8.5x11in";
if (cupsGetDestMediaByName(http, dest, dinfo, media, flags, size))
return (1);
- if (strcmp(media, "na_letter_8.5x11in") &&
- cupsGetDestMediaByName(http, dest, dinfo, "iso_a4_210x297mm", flags,
- size))
+ if (strcmp(media, "na_letter_8.5x11in") && cupsGetDestMediaByName(http, dest, dinfo, "iso_a4_210x297mm", flags, size))
return (1);
- if (strcmp(media, "iso_a4_210x297mm") &&
- cupsGetDestMediaByName(http, dest, dinfo, "na_letter_8.5x11in", flags,
- size))
+ if (strcmp(media, "iso_a4_210x297mm") && cupsGetDestMediaByName(http, dest, dinfo, "na_letter_8.5x11in", flags, size))
return (1);
- if ((flags & CUPS_MEDIA_FLAGS_BORDERLESS) &&
- cupsGetDestMediaByName(http, dest, dinfo, "na_index_4x6in", flags, size))
+ if ((flags & CUPS_MEDIA_FLAGS_BORDERLESS) && cupsGetDestMediaByName(http, dest, dinfo, "na_index_4x6in", flags, size))
return (1);
/*
@@ -1513,6 +1544,7 @@ cups_create_media_db(
pwg_media_t *pwg; /* PWG media info */
cups_array_t *db; /* New media database array */
_cups_media_db_t mdb; /* Media entry */
+ char media_key[256]; /* Synthesized media-key value */
db = cupsArrayNew3((cups_array_func_t)cups_compare_media_db,
@@ -1613,61 +1645,92 @@ cups_create_media_db(
}
}
- if ((media_attr = ippFindAttribute(val->collection, "media-color",
- IPP_TAG_ZERO)) != NULL &&
- (media_attr->value_tag == IPP_TAG_NAME ||
- media_attr->value_tag == IPP_TAG_NAMELANG ||
- media_attr->value_tag == IPP_TAG_KEYWORD))
+ if ((media_attr = ippFindAttribute(val->collection, "media-color", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
mdb.color = media_attr->values[0].string.text;
- if ((media_attr = ippFindAttribute(val->collection, "media-info",
- IPP_TAG_TEXT)) != NULL)
+ if ((media_attr = ippFindAttribute(val->collection, "media-info", IPP_TAG_TEXT)) != NULL)
mdb.info = media_attr->values[0].string.text;
- if ((media_attr = ippFindAttribute(val->collection, "media-key",
- IPP_TAG_ZERO)) != NULL &&
- (media_attr->value_tag == IPP_TAG_NAME ||
- media_attr->value_tag == IPP_TAG_NAMELANG ||
- media_attr->value_tag == IPP_TAG_KEYWORD))
+ if ((media_attr = ippFindAttribute(val->collection, "media-key", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
mdb.key = media_attr->values[0].string.text;
- if ((media_attr = ippFindAttribute(val->collection, "media-size-name",
- IPP_TAG_ZERO)) != NULL &&
- (media_attr->value_tag == IPP_TAG_NAME ||
- media_attr->value_tag == IPP_TAG_NAMELANG ||
- media_attr->value_tag == IPP_TAG_KEYWORD))
+ if ((media_attr = ippFindAttribute(val->collection, "media-size-name", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
mdb.size_name = media_attr->values[0].string.text;
- if ((media_attr = ippFindAttribute(val->collection, "media-source",
- IPP_TAG_ZERO)) != NULL &&
- (media_attr->value_tag == IPP_TAG_NAME ||
- media_attr->value_tag == IPP_TAG_NAMELANG ||
- media_attr->value_tag == IPP_TAG_KEYWORD))
+ if ((media_attr = ippFindAttribute(val->collection, "media-source", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
mdb.source = media_attr->values[0].string.text;
- if ((media_attr = ippFindAttribute(val->collection, "media-type",
- IPP_TAG_ZERO)) != NULL &&
- (media_attr->value_tag == IPP_TAG_NAME ||
- media_attr->value_tag == IPP_TAG_NAMELANG ||
- media_attr->value_tag == IPP_TAG_KEYWORD))
+ if ((media_attr = ippFindAttribute(val->collection, "media-type", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
mdb.type = media_attr->values[0].string.text;
- if ((media_attr = ippFindAttribute(val->collection, "media-bottom-margin",
- IPP_TAG_INTEGER)) != NULL)
+ if ((media_attr = ippFindAttribute(val->collection, "media-bottom-margin", IPP_TAG_INTEGER)) != NULL)
mdb.bottom = media_attr->values[0].integer;
- if ((media_attr = ippFindAttribute(val->collection, "media-left-margin",
- IPP_TAG_INTEGER)) != NULL)
+ if ((media_attr = ippFindAttribute(val->collection, "media-left-margin", IPP_TAG_INTEGER)) != NULL)
mdb.left = media_attr->values[0].integer;
- if ((media_attr = ippFindAttribute(val->collection, "media-right-margin",
- IPP_TAG_INTEGER)) != NULL)
+ if ((media_attr = ippFindAttribute(val->collection, "media-right-margin", IPP_TAG_INTEGER)) != NULL)
mdb.right = media_attr->values[0].integer;
- if ((media_attr = ippFindAttribute(val->collection, "media-top-margin",
- IPP_TAG_INTEGER)) != NULL)
+ if ((media_attr = ippFindAttribute(val->collection, "media-top-margin", IPP_TAG_INTEGER)) != NULL)
mdb.top = media_attr->values[0].integer;
+ if (!mdb.key)
+ {
+ if (!mdb.size_name && (pwg = pwgMediaForSize(mdb.width, mdb.length)) != NULL)
+ mdb.size_name = (char *)pwg->pwg;
+
+ if (!mdb.size_name)
+ {
+ /*
+ * Use a CUPS-specific identifier if we don't have a size name...
+ */
+
+ if (flags & CUPS_MEDIA_FLAGS_READY)
+ snprintf(media_key, sizeof(media_key), "cups-media-ready-%d", i + 1);
+ else
+ snprintf(media_key, sizeof(media_key), "cups-media-%d", i + 1);
+ }
+ else if (mdb.source)
+ {
+ /*
+ * Generate key using size name, source, and type (if set)...
+ */
+
+ if (mdb.type)
+ snprintf(media_key, sizeof(media_key), "%s_%s_%s", mdb.size_name, mdb.source, mdb.type);
+ else
+ snprintf(media_key, sizeof(media_key), "%s_%s", mdb.size_name, mdb.source);
+ }
+ else if (mdb.type)
+ {
+ /*
+ * Generate key using size name and type...
+ */
+
+ snprintf(media_key, sizeof(media_key), "%s_%s", mdb.size_name, mdb.type);
+ }
+ else
+ {
+ /*
+ * Key is just the size name...
+ */
+
+ strlcpy(media_key, mdb.size_name, sizeof(media_key));
+ }
+
+ /*
+ * Append "_borderless" for borderless media...
+ */
+
+ if (!mdb.bottom && !mdb.left && !mdb.right && !mdb.top)
+ strlcat(media_key, "_borderless", sizeof(media_key));
+
+ mdb.key = media_key;
+ }
+
+ DEBUG_printf(("1cups_create_media_db: Adding media: key=\"%s\", width=%d, length=%d, source=\"%s\", type=\"%s\".", mdb.key, mdb.width, mdb.length, mdb.source, mdb.type));
+
cupsArrayAdd(db, &mdb);
}
@@ -2027,12 +2090,14 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
* Return the matching size...
*/
- if (best->size_name)
- strlcpy(size->media, best->size_name, sizeof(size->media));
- else if (best->key)
+ if (best->key)
strlcpy(size->media, best->key, sizeof(size->media));
- else
+ else if (best->size_name)
+ strlcpy(size->media, best->size_name, sizeof(size->media));
+ else if (pwg && pwg->pwg)
strlcpy(size->media, pwg->pwg, sizeof(size->media));
+ else
+ strlcpy(size->media, "unknown", sizeof(size->media));
size->width = best->width;
size->length = best->length;
diff --git a/cups/dest.c b/cups/dest.c
index d92d23d8e..fd635b111 100644
--- a/cups/dest.c
+++ b/cups/dest.c
@@ -79,7 +79,6 @@ typedef enum _cups_dnssd_state_e /* Enumerated device state */
_CUPS_DNSSD_QUERY,
_CUPS_DNSSD_PENDING,
_CUPS_DNSSD_ACTIVE,
- _CUPS_DNSSD_LOCAL,
_CUPS_DNSSD_INCOMPATIBLE,
_CUPS_DNSSD_ERROR
} _cups_dnssd_state_t;
@@ -99,6 +98,10 @@ typedef struct _cups_dnssd_data_s /* Enumeration data */
cups_ptype_t type, /* Printer type filter */
mask; /* Printer type mask */
cups_array_t *devices; /* Devices found so far */
+ int num_dests; /* Number of lpoptions destinations */
+ cups_dest_t *dests; /* lpoptions destinations */
+ char def_name[1024], /* Default printer name, if any */
+ *def_instance; /* Default printer instance, if any */
} _cups_dnssd_data_t;
typedef struct _cups_dnssd_device_s /* Enumerated device */
@@ -125,8 +128,10 @@ typedef struct _cups_dnssd_resolve_s /* Data for resolving URI */
typedef struct _cups_getdata_s
{
- int num_dests; /* Number of destinations */
- cups_dest_t *dests; /* Destinations */
+ int num_dests; /* Number of destinations */
+ cups_dest_t *dests; /* Destinations */
+ char def_name[1024], /* Default printer name, if any */
+ *def_instance; /* Default printer instance, if any */
} _cups_getdata_t;
typedef struct _cups_namedata_s
@@ -192,14 +197,6 @@ static _cups_dnssd_device_t *
const char *regtype,
const char *replyDomain);
# ifdef HAVE_DNSSD
-static void cups_dnssd_local_cb(DNSServiceRef sdRef,
- DNSServiceFlags flags,
- uint32_t interfaceIndex,
- DNSServiceErrorType errorCode,
- const char *serviceName,
- const char *regtype,
- const char *replyDomain,
- void *context);
static void cups_dnssd_query_cb(DNSServiceRef sdRef,
DNSServiceFlags flags,
uint32_t interfaceIndex,
@@ -237,9 +234,7 @@ static int cups_find_dest(const char *name, const char *instance,
static int cups_get_cb(_cups_getdata_t *data, unsigned flags, cups_dest_t *dest);
static char *cups_get_default(const char *filename, char *namebuf,
size_t namesize, const char **instance);
-static int cups_get_dests(const char *filename, const char *match_name,
- const char *match_inst, int user_default_set,
- int num_dests, cups_dest_t **dests);
+static int cups_get_dests(const char *filename, const char *match_name, const char *match_inst, int load_all, int user_default_set, int num_dests, cups_dest_t **dests);
static char *cups_make_string(ipp_attribute_t *attr, char *buffer,
size_t bufsize);
static int cups_name_cb(_cups_namedata_t *data, unsigned flags, cups_dest_t *dest);
@@ -574,7 +569,7 @@ _cupsAppleSetUseLastPrinter(
/*
- * 'cupsConnectDest()' - Open a conection to the destination.
+ * 'cupsConnectDest()' - Open a connection to the destination.
*
* Connect to the destination, returning a new @code http_t@ connection object
* and optionally the resource path to use for the destination. These calls
@@ -583,7 +578,7 @@ _cupsAppleSetUseLastPrinter(
* returns 0. The caller is responsible for calling @link httpClose@ on the
* returned connection.
*
- * Starting with CUPS 2.2.4, the caller can pass @code CUPS_DEST_FLAGS_DEVICE@
+ * Starting with CUPS 2.2.4, the caller can pass @code CUPS_DEST_FLAGS_DEVICE@
* for the "flags" argument to connect directly to the device associated with
* the destination. Otherwise, the connection is made to the CUPS scheduler
* associated with the destination.
@@ -851,6 +846,8 @@ cupsCopyDest(cups_dest_t *dest, /* I - Destination to copy */
if (new_dest)
{
+ new_dest->is_default = dest->is_default;
+
if ((new_dest->options = calloc(sizeof(cups_option_t), (size_t)dest->num_options)) == NULL)
return (cupsRemoveDest(dest->name, dest->instance, num_dests, dests));
@@ -1103,20 +1100,23 @@ cupsGetDest(const char *name, /* I - Destination name or @code NULL@ for the d
* '_cupsGetDestResource()' - Get the resource path and URI for a destination.
*/
-const char * /* O - Printer URI */
+const char * /* O - URI */
_cupsGetDestResource(
cups_dest_t *dest, /* I - Destination */
+ unsigned flags, /* I - Destination flags */
char *resource, /* I - Resource buffer */
size_t resourcesize) /* I - Size of resource buffer */
{
- const char *uri; /* Printer URI */
+ const char *uri, /* URI */
+ *device_uri, /* Device URI */
+ *printer_uri; /* Printer URI */
char scheme[32], /* URI scheme */
userpass[256], /* Username and password (unused) */
hostname[256]; /* Hostname */
int port; /* Port number */
- DEBUG_printf(("_cupsGetDestResource(dest=%p(%s), resource=%p, resourcesize=%d)", (void *)dest, dest->name, (void *)resource, (int)resourcesize));
+ DEBUG_printf(("_cupsGetDestResource(dest=%p(%s), flags=%u, resource=%p, resourcesize=%d)", (void *)dest, dest->name, flags, (void *)resource, (int)resourcesize));
/*
* Range check input...
@@ -1132,25 +1132,46 @@ _cupsGetDestResource(
}
/*
- * Grab the printer URI...
+ * Grab the printer and device URIs...
*/
- if ((uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options)) == NULL)
+ device_uri = cupsGetOption("device-uri", dest->num_options, dest->options);
+ printer_uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options);
+
+ DEBUG_printf(("1_cupsGetDestResource: device-uri=\"%s\", printer-uri-supported=\"%s\".", device_uri, printer_uri));
+
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+ if (((flags & CUPS_DEST_FLAGS_DEVICE) || !printer_uri) && strstr(device_uri, "._tcp"))
{
- if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL)
+ if ((device_uri = cups_dnssd_resolve(dest, device_uri, 5000, NULL, NULL, NULL)) != NULL)
{
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
- if (strstr(uri, "._tcp"))
- uri = cups_dnssd_resolve(dest, uri, 5000, NULL, NULL, NULL);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ DEBUG_printf(("1_cupsGetDestResource: Resolved device-uri=\"%s\".", device_uri));
}
-
- if (uri)
+ else
{
- DEBUG_printf(("1_cupsGetDestResource: Resolved printer-uri-supported=\"%s\"", uri));
+ DEBUG_puts("1_cupsGetDestResource: Unable to resolve device.");
- uri = _cupsCreateDest(dest->name, cupsGetOption("printer-info", dest->num_options, dest->options), NULL, uri, resource, resourcesize);
+ if (resource)
+ *resource = '\0';
+
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
+
+ return (NULL);
}
+ }
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+
+ if (flags & CUPS_DEST_FLAGS_DEVICE)
+ {
+ uri = device_uri;
+ }
+ else if (printer_uri)
+ {
+ uri = printer_uri;
+ }
+ else
+ {
+ uri = _cupsCreateDest(dest->name, cupsGetOption("printer-info", dest->num_options, dest->options), NULL, device_uri, resource, resourcesize);
if (uri)
{
@@ -1160,30 +1181,24 @@ _cupsGetDestResource(
uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options);
}
- else
- {
- DEBUG_puts("1_cupsGetDestResource: No printer-uri-supported found.");
+ }
- if (resource)
- *resource = '\0';
+ if (!uri)
+ {
+ DEBUG_puts("1_cupsGetDestResource: No printer-uri-supported or device-uri found.");
- _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
+ if (resource)
+ *resource = '\0';
- return (NULL);
- }
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
+
+ return (NULL);
}
- else
+ else if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, (int)resourcesize) < HTTP_URI_STATUS_OK)
{
- DEBUG_printf(("1_cupsGetDestResource: printer-uri-supported=\"%s\"", uri));
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad URI."), 1);
- if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
- userpass, sizeof(userpass), hostname, sizeof(hostname),
- &port, resource, (int)resourcesize) < HTTP_URI_STATUS_OK)
- {
- _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer-uri."), 1);
-
- return (NULL);
- }
+ return (NULL);
}
DEBUG_printf(("1_cupsGetDestResource: resource=\"%s\"", resource));
@@ -1271,6 +1286,12 @@ cupsGetDestWithURI(const char *name, /* I - Desired printer name or @code NULL@
name = resource + 10;
info = temp;
}
+ else if (!strncmp(resource, "/ipp/print/", 11))
+ {
+ snprintf(temp, sizeof(temp), "%s @ %s", resource + 11, hostname);
+ name = resource + 11;
+ info = temp;
+ }
else
{
name = hostname;
@@ -1631,16 +1652,6 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
cups_dest_t **dests) /* O - Destinations */
{
_cups_getdata_t data; /* Enumeration data */
- cups_dest_t *dest; /* Current destination */
- const char *home; /* HOME environment variable */
- char filename[1024]; /* Local ~/.cups/lpoptions file */
- const char *defprinter; /* Default printer */
- char name[1024], /* Copy of printer name */
- *instance, /* Pointer to instance name */
- *user_default; /* User default printer */
- int num_reals; /* Number of real queues */
- cups_dest_t *reals; /* Real queues */
- _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
DEBUG_printf(("cupsGetDests2(http=%p, dests=%p)", (void *)http, (void *)dests));
@@ -1697,107 +1708,6 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
}
/*
- * Make a copy of the "real" queues for a later sanity check...
- */
-
- if (data.num_dests > 0)
- {
- num_reals = data.num_dests;
- reals = calloc((size_t)num_reals, sizeof(cups_dest_t));
-
- if (reals)
- memcpy(reals, data.dests, (size_t)num_reals * sizeof(cups_dest_t));
- else
- num_reals = 0;
- }
- else
- {
- num_reals = 0;
- reals = NULL;
- }
-
- /*
- * Grab the default destination...
- */
-
- if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
- defprinter = name;
- else if ((defprinter = cupsGetDefault2(http)) != NULL)
- {
- strlcpy(name, defprinter, sizeof(name));
- defprinter = name;
- }
-
- if (defprinter)
- {
- /*
- * Separate printer and instance name...
- */
-
- if ((instance = strchr(name, '/')) != NULL)
- *instance++ = '\0';
-
- /*
- * Lookup the printer and instance and make it the default...
- */
-
- if ((dest = cupsGetDest(name, instance, data.num_dests, data.dests)) != NULL)
- dest->is_default = 1;
- }
- else
- instance = NULL;
-
- /*
- * Load the /etc/cups/lpoptions and ~/.cups/lpoptions files...
- */
-
- snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
- data.num_dests = cups_get_dests(filename, NULL, NULL, user_default != NULL, data.num_dests, &data.dests);
-
- if ((home = getenv("HOME")) != NULL)
- {
- snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
-
- data.num_dests = cups_get_dests(filename, NULL, NULL, user_default != NULL, data.num_dests, &data.dests);
- }
-
- /*
- * Validate the current default destination - this prevents old
- * Default lines in /etc/cups/lpoptions and ~/.cups/lpoptions from
- * pointing to a non-existent printer or class...
- */
-
- if (num_reals)
- {
- /*
- * See if we have a default printer...
- */
-
- if ((dest = cupsGetDest(NULL, NULL, data.num_dests, data.dests)) != NULL)
- {
- /*
- * Have a default; see if it is real...
- */
-
- if (!cupsGetDest(dest->name, NULL, num_reals, reals))
- {
- /*
- * Remove the non-real printer from the list, since we don't want jobs
- * going to an unexpected printer... (<rdar://problem/14216472>)
- */
-
- data.num_dests = cupsRemoveDest(dest->name, dest->instance, data.num_dests, &data.dests);
- }
- }
-
- /*
- * Free memory...
- */
-
- free(reals);
- }
-
- /*
* Return the number of destinations...
*/
@@ -1984,13 +1894,13 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
*/
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
- cups_get_dests(filename, dest_name, instance, 1, 1, &dest);
+ cups_get_dests(filename, dest_name, instance, 0, 1, 1, &dest);
if (home)
{
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
- cups_get_dests(filename, dest_name, instance, 1, 1, &dest);
+ cups_get_dests(filename, dest_name, instance, 0, 1, 1, &dest);
}
/*
@@ -2166,12 +2076,6 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
if (getuid())
{
/*
- * Merge in server defaults...
- */
-
- num_temps = cups_get_dests(filename, NULL, NULL, 0, num_temps, &temps);
-
- /*
* Point to user defaults...
*/
@@ -2231,8 +2135,7 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
else
wrote = 0;
- if ((temp = cupsGetDest(dest->name, dest->instance, num_temps, temps)) == NULL)
- temp = cupsGetDest(dest->name, NULL, num_temps, temps);
+ temp = cupsGetDest(dest->name, NULL, num_temps, temps);
for (j = dest->num_options, option = dest->options; j > 0; j --, option ++)
{
@@ -2240,19 +2143,14 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* See if this option is a printer attribute; if so, skip it...
*/
- if ((match = _ippFindOption(option->name)) != NULL &&
- match->group_tag == IPP_TAG_PRINTER)
+ if ((match = _ippFindOption(option->name)) != NULL && match->group_tag == IPP_TAG_PRINTER)
continue;
/*
- * See if the server/global options match these; if so, don't
- * write 'em.
+ * See if the server options match these; if so, don't write 'em.
*/
- if (temp &&
- (val = cupsGetOption(option->name, temp->num_options,
- temp->options)) != NULL &&
- !_cups_strcasecmp(val, option->value))
+ if (temp && (val = cupsGetOption(option->name, temp->num_options, temp->options)) != NULL && !_cups_strcasecmp(val, option->value))
continue;
/*
@@ -2269,10 +2167,7 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
if (option->value[0])
{
- if (strchr(option->value, ' ') ||
- strchr(option->value, '\\') ||
- strchr(option->value, '\"') ||
- strchr(option->value, '\''))
+ if (strchr(option->value, ' ') || strchr(option->value, '\\') || strchr(option->value, '\"') || strchr(option->value, '\''))
{
/*
* Quote the value...
@@ -2323,9 +2218,7 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) != NULL)
{
- CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault,
- dest->name,
- kCFStringEncodingUTF8);
+ CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, dest->name, kCFStringEncodingUTF8);
/* Default printer name */
if (name)
@@ -2756,22 +2649,7 @@ cups_dnssd_browse_cb(
* This object is new on the network.
*/
- if (flags & AVAHI_LOOKUP_RESULT_LOCAL)
- {
- /*
- * This comes from the local machine so ignore it.
- */
-
- DEBUG_printf(("cups_dnssd_browse_cb: Ignoring local service \"%s\".", name));
- }
- else
- {
- /*
- * Create a device entry for it if it doesn't yet exist.
- */
-
- cups_dnssd_get_device(data, name, type, domain);
- }
+ cups_dnssd_get_device(data, name, type, domain);
break;
case AVAHI_BROWSER_REMOVE :
@@ -2992,66 +2870,6 @@ cups_dnssd_get_device(
}
-# ifdef HAVE_DNSSD
-/*
- * 'cups_dnssd_local_cb()' - Browse for local printers.
- */
-
-static void
-cups_dnssd_local_cb(
- DNSServiceRef sdRef, /* I - Service reference */
- DNSServiceFlags flags, /* I - Option flags */
- uint32_t interfaceIndex, /* I - Interface number */
- DNSServiceErrorType errorCode, /* I - Error, if any */
- const char *serviceName, /* I - Name of service/device */
- const char *regtype, /* I - Type of service */
- const char *replyDomain, /* I - Service domain */
- void *context) /* I - Devices array */
-{
- _cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context;
- /* Enumeration data */
- _cups_dnssd_device_t *device; /* Device */
-
-
- DEBUG_printf(("5cups_dnssd_local_cb(sdRef=%p, flags=%x, interfaceIndex=%d, errorCode=%d, serviceName=\"%s\", regtype=\"%s\", replyDomain=\"%s\", context=%p)", (void *)sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain, context));
-
- /*
- * Only process "add" data...
- */
-
- if (errorCode != kDNSServiceErr_NoError || !(flags & kDNSServiceFlagsAdd))
- return;
-
- /*
- * Get the device...
- */
-
- device = cups_dnssd_get_device(data, serviceName, regtype, replyDomain);
-
- /*
- * Hide locally-registered devices...
- */
-
- DEBUG_printf(("6cups_dnssd_local_cb: Hiding local printer '%s'.",
- serviceName));
-
- if (device->ref)
- {
- DNSServiceRefDeallocate(device->ref);
- device->ref = 0;
- }
-
- if (device->state == _CUPS_DNSSD_ACTIVE)
- {
- DEBUG_printf(("6cups_dnssd_local_cb: Remove callback for \"%s\".", device->dest.name));
- (*data->cb)(data->user_data, CUPS_DEST_FLAGS_REMOVED, &device->dest);
- }
-
- device->state = _CUPS_DNSSD_LOCAL;
-}
-# endif /* HAVE_DNSSD */
-
-
# ifdef HAVE_AVAHI
/*
* 'cups_dnssd_poll_cb()' - Wait for input on the specified file descriptors.
@@ -3101,9 +2919,9 @@ cups_dnssd_poll_cb(
* 'cups_dnssd_query_cb()' - Process query data.
*/
-# ifdef HAVE_DNSSD
static void
cups_dnssd_query_cb(
+# ifdef HAVE_DNSSD
DNSServiceRef sdRef, /* I - Service reference */
DNSServiceFlags flags, /* I - Data flags */
uint32_t interfaceIndex, /* I - Interface */
@@ -3114,11 +2932,7 @@ cups_dnssd_query_cb(
uint16_t rdlen, /* I - Length of record data */
const void *rdata, /* I - Record data */
uint32_t ttl, /* I - Time-to-live */
- void *context) /* I - Enumeration data */
-{
# else /* HAVE_AVAHI */
-static void
-cups_dnssd_query_cb(
AvahiRecordBrowser *browser, /* I - Record browser */
AvahiIfIndex interfaceIndex,
/* I - Interface index (unused) */
@@ -3130,13 +2944,13 @@ cups_dnssd_query_cb(
const void *rdata, /* I - TXT record */
size_t rdlen, /* I - Length of TXT record */
AvahiLookupResultFlags flags, /* I - Flags */
- void *context) /* I - Enumeration data */
+# endif /* HAVE_DNSSD */
+ void *context) /* I - Enumeration data */
{
-# ifdef DEBUG
+# if defined(DEBUG) && defined(HAVE_AVAHI)
AvahiClient *client = avahi_record_browser_get_client(browser);
/* Client information */
-# endif /* DEBUG */
-# endif /* HAVE_DNSSD */
+# endif /* DEBUG && HAVE_AVAHI */
_cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context;
/* Enumeration data */
char serviceName[256],/* Service name */
@@ -3579,29 +3393,26 @@ cups_enum_dests(
cups_dest_cb_t cb, /* I - Callback function */
void *user_data) /* I - User data */
{
- int i, /* Looping var */
+ int i, j, /* Looping vars */
num_dests; /* Number of destinations */
cups_dest_t *dests = NULL, /* Destinations */
- *dest; /* Current destination */
- const char *defprinter; /* Default printer */
- char name[1024], /* Copy of printer name */
- *instance, /* Pointer to instance name */
- *user_default; /* User default printer */
+ *dest, /* Current destination */
+ *user_dest; /* User destination */
+ cups_option_t *option; /* Current option */
+ char *user_default; /* User default printer */
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
int count, /* Number of queries started */
completed, /* Number of completed queries */
remaining; /* Remainder of timeout */
struct timeval curtime; /* Current time */
- _cups_dnssd_data_t data; /* Data for callback */
+ _cups_dnssd_data_t data; /* Data for callback */
_cups_dnssd_device_t *device; /* Current device */
# ifdef HAVE_DNSSD
int nfds, /* Number of files responded */
main_fd; /* File descriptor for lookups */
- DNSServiceRef ipp_ref = NULL, /* IPP browser */
- local_ipp_ref = NULL; /* Local IPP browser */
+ DNSServiceRef ipp_ref = NULL; /* IPP browser */
# ifdef HAVE_SSL
- DNSServiceRef ipps_ref = NULL, /* IPPS browser */
- local_ipps_ref = NULL; /* Local IPPS browser */
+ DNSServiceRef ipps_ref = NULL; /* IPPS browser */
# endif /* HAVE_SSL */
# ifdef HAVE_POLL
struct pollfd pfd; /* Polling data */
@@ -3616,7 +3427,12 @@ cups_enum_dests(
AvahiServiceBrowser *ipps_ref = NULL; /* IPPS browser */
# endif /* HAVE_SSL */
# endif /* HAVE_DNSSD */
+#else
+ _cups_getdata_t data; /* Data for callback */
#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ const char *home; /* HOME environment variable */
+ char filename[1024]; /* Local lpoptions file */
+ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
DEBUG_printf(("cups_enum_dests(flags=%x, msec=%d, cancel=%p, type=%x, mask=%x, cb=%p, user_data=%p)", flags, msec, (void *)cancel, type, mask, (void *)cb, (void *)user_data));
@@ -3634,12 +3450,47 @@ cups_enum_dests(
}
/*
- * Get ready to enumerate...
+ * Load the /etc/cups/lpoptions and ~/.cups/lpoptions files...
*/
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
memset(&data, 0, sizeof(data));
+ if ((user_default = _cupsUserDefault(data.def_name, sizeof(data.def_name))) == NULL)
+ {
+ const char *defprinter = cupsGetDefault2(http);
+ /* Server default, if any */
+
+ if (defprinter)
+ strlcpy(data.def_name, defprinter, sizeof(data.def_name));
+ }
+
+ if (data.def_name[0])
+ {
+ /*
+ * Separate printer and instance name...
+ */
+
+ if ((data.def_instance = strchr(data.def_name, '/')) != NULL)
+ *data.def_instance++ = '\0';
+ }
+
+ DEBUG_printf(("1cups_enum_dests: def_name=\"%s\", def_instance=\"%s\"", data.def_name, data.def_instance));
+
+ snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
+ data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests);
+
+ if ((home = getenv("HOME")) != NULL)
+ {
+ snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
+
+ data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests);
+ }
+
+ /*
+ * Get ready to enumerate...
+ */
+
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
data.type = type;
data.mask = mask;
data.cb = cb;
@@ -3655,29 +3506,17 @@ cups_enum_dests(
num_dests = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &dests, type, mask);
- if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
- defprinter = name;
- else if ((defprinter = cupsGetDefault2(http)) != NULL)
- {
- strlcpy(name, defprinter, sizeof(name));
- defprinter = name;
- }
-
- if (defprinter)
+ if (data.def_name[0])
{
/*
- * Separate printer and instance name...
+ * Lookup the named default printer and instance and make it the default...
*/
- if ((instance = strchr(name, '/')) != NULL)
- *instance++ = '\0';
-
- /*
- * Lookup the printer and instance and make it the default...
- */
-
- if ((dest = cupsGetDest(name, instance, num_dests, dests)) != NULL)
+ if ((dest = cupsGetDest(data.def_name, data.def_instance, num_dests, dests)) != NULL)
+ {
+ DEBUG_printf(("1cups_enum_dests: Setting is_default on \"%s/%s\".", dest->name, dest->instance));
dest->is_default = 1;
+ }
}
for (i = num_dests, dest = dests;
@@ -3688,6 +3527,16 @@ cups_enum_dests(
const char *device_uri; /* Device URI */
#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
+ {
+ /*
+ * Apply user defaults to this destination...
+ */
+
+ for (j = user_dest->num_options, option = user_dest->options; j > 0; j --, option ++)
+ dest->num_options = cupsAddOption(option->name, option->value, dest->num_options, &dest->options);
+ }
+
if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, dest))
break;
@@ -3750,6 +3599,9 @@ cups_enum_dests(
if (DNSServiceCreateConnection(&data.main_ref) != kDNSServiceErr_NoError)
{
DEBUG_puts("1cups_enum_dests: Unable to create service browser, returning 0.");
+
+ cupsFreeDests(data.num_dests, data.dests);
+
return (0);
}
@@ -3760,14 +3612,9 @@ cups_enum_dests(
{
DEBUG_puts("1cups_enum_dests: Unable to create IPP browser, returning 0.");
DNSServiceRefDeallocate(data.main_ref);
- return (0);
- }
- local_ipp_ref = data.main_ref;
- if (DNSServiceBrowse(&local_ipp_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipp._tcp", NULL, (DNSServiceBrowseReply)cups_dnssd_local_cb, &data) != kDNSServiceErr_NoError)
- {
- DEBUG_puts("1cups_enum_dests: Unable to create local IPP browser, returning 0.");
- DNSServiceRefDeallocate(data.main_ref);
+ cupsFreeDests(data.num_dests, data.dests);
+
return (0);
}
@@ -3777,14 +3624,9 @@ cups_enum_dests(
{
DEBUG_puts("1cups_enum_dests: Unable to create IPPS browser, returning 0.");
DNSServiceRefDeallocate(data.main_ref);
- return (0);
- }
- local_ipps_ref = data.main_ref;
- if (DNSServiceBrowse(&local_ipps_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipps._tcp", NULL, (DNSServiceBrowseReply)cups_dnssd_local_cb, &data) != kDNSServiceErr_NoError)
- {
- DEBUG_puts("1cups_enum_dests: Unable to create local IPPS browser, returning 0.");
- DNSServiceRefDeallocate(data.main_ref);
+ cupsFreeDests(data.num_dests, data.dests);
+
return (0);
}
# endif /* HAVE_SSL */
@@ -3793,6 +3635,9 @@ cups_enum_dests(
if ((data.simple_poll = avahi_simple_poll_new()) == NULL)
{
DEBUG_puts("1cups_enum_dests: Unable to create Avahi poll, returning 0.");
+
+ cupsFreeDests(data.num_dests, data.dests);
+
return (0);
}
@@ -3805,6 +3650,9 @@ cups_enum_dests(
{
DEBUG_puts("1cups_enum_dests: Unable to create Avahi client, returning 0.");
avahi_simple_poll_free(data.simple_poll);
+
+ cupsFreeDests(data.num_dests, data.dests);
+
return (0);
}
@@ -3815,6 +3663,9 @@ cups_enum_dests(
avahi_client_free(data.client);
avahi_simple_poll_free(data.simple_poll);
+
+ cupsFreeDests(data.num_dests, data.dests);
+
return (0);
}
@@ -3827,6 +3678,9 @@ cups_enum_dests(
avahi_service_browser_free(ipp_ref);
avahi_client_free(data.client);
avahi_simple_poll_free(data.simple_poll);
+
+ cupsFreeDests(data.num_dests, data.dests);
+
return (0);
}
# endif /* HAVE_SSL */
@@ -3939,8 +3793,26 @@ cups_enum_dests(
if ((device->type & mask) == type)
{
+ dest = &device->dest;
+
+ if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
+ {
+ /*
+ * Apply user defaults to this destination...
+ */
+
+ for (j = user_dest->num_options, option = user_dest->options; j > 0; j --, option ++)
+ dest->num_options = cupsAddOption(option->name, option->value, dest->num_options, &dest->options);
+ }
+
+ if (!strcasecmp(dest->name, data.def_name) && !data.def_instance)
+ {
+ DEBUG_printf(("1cups_enum_dests: Setting is_default on discovered \"%s\".", dest->name));
+ dest->is_default = 1;
+ }
+
DEBUG_printf(("1cups_enum_dests: Add callback for \"%s\".", device->dest.name));
- if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, &device->dest))
+ if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, dest))
{
remaining = -1;
break;
@@ -3971,20 +3843,18 @@ cups_enum_dests(
enum_finished:
+ cupsFreeDests(data.num_dests, data.dests);
+
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
cupsArrayDelete(data.devices);
# ifdef HAVE_DNSSD
if (ipp_ref)
DNSServiceRefDeallocate(ipp_ref);
- if (local_ipp_ref)
- DNSServiceRefDeallocate(local_ipp_ref);
# ifdef HAVE_SSL
if (ipps_ref)
DNSServiceRefDeallocate(ipps_ref);
- if (local_ipps_ref)
- DNSServiceRefDeallocate(local_ipps_ref);
# endif /* HAVE_SSL */
if (data.main_ref)
@@ -4202,6 +4072,7 @@ cups_get_dests(
const char *filename, /* I - File to read from */
const char *match_name, /* I - Destination name we want */
const char *match_inst, /* I - Instance name we want */
+ int load_all, /* I - Load all saved destinations? */
int user_default_set, /* I - User default printer set? */
int num_dests, /* I - Number of destinations */
cups_dest_t **dests) /* IO - Destinations */
@@ -4216,7 +4087,7 @@ cups_get_dests(
int linenum; /* Current line number */
- DEBUG_printf(("7cups_get_dests(filename=\"%s\", match_name=\"%s\", match_inst=\"%s\", user_default_set=%d, num_dests=%d, dests=%p)", filename, match_name, match_inst, user_default_set, num_dests, (void *)dests));
+ DEBUG_printf(("7cups_get_dests(filename=\"%s\", match_name=\"%s\", match_inst=\"%s\", load_all=%d, user_default_set=%d, num_dests=%d, dests=%p)", filename, match_name, match_inst, load_all, user_default_set, num_dests, (void *)dests));
/*
* Try to open the file...
@@ -4284,8 +4155,7 @@ cups_get_dests(
instance));
/*
- * See if the primary instance of the destination exists; if not,
- * ignore this entry and move on...
+ * Match and/or ignore missing destinations...
*/
if (match_name)
@@ -4298,7 +4168,7 @@ cups_get_dests(
dest = *dests;
}
- else if (cupsGetDest(name, NULL, num_dests, *dests) == NULL)
+ else if (!load_all && cupsGetDest(name, NULL, num_dests, *dests) == NULL)
{
DEBUG_puts("9cups_get_dests: Not found!");
continue;
@@ -4326,8 +4196,7 @@ cups_get_dests(
* Add options until we hit the end of the line...
*/
- dest->num_options = cupsParseOptions(lineptr, dest->num_options,
- &(dest->options));
+ dest->num_options = cupsParseOptions(lineptr, dest->num_options, &(dest->options));
/*
* If we found what we were looking for, stop now...
diff --git a/cups/hash.c b/cups/hash.c
index a31372595..621d119d4 100644
--- a/cups/hash.c
+++ b/cups/hash.c
@@ -190,6 +190,13 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
unsigned char temp[64]; /* Temporary hash buffer */
size_t tempsize = 0; /* Truncate to this size? */
+
+# ifdef HAVE_GNUTLS_FIPS140_SET_MODE
+ unsigned oldmode = gnutls_fips140_mode_enabled();
+
+ gnutls_fips140_set_mode(GNUTLS_FIPS140_LAX, GNUTLS_FIPS140_SET_MODE_THREAD);
+# endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
+
if (!strcmp(algorithm, "md5"))
alg = GNUTLS_DIG_MD5;
else if (!strcmp(algorithm, "sha"))
@@ -227,6 +234,10 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
gnutls_hash_fast(alg, data, datalen, temp);
memcpy(hash, temp, tempsize);
+# ifdef HAVE_GNUTLS_FIPS140_SET_MODE
+ gnutls_fips140_set_mode(oldmode, GNUTLS_FIPS140_SET_MODE_THREAD);
+# endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
+
return ((ssize_t)tempsize);
}
@@ -235,9 +246,17 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
gnutls_hash_fast(alg, data, datalen, hash);
+# ifdef HAVE_GNUTLS_FIPS140_SET_MODE
+ gnutls_fips140_set_mode(oldmode, GNUTLS_FIPS140_SET_MODE_THREAD);
+# endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
+
return ((ssize_t)gnutls_hash_get_len(alg));
}
+# ifdef HAVE_GNUTLS_FIPS140_SET_MODE
+ gnutls_fips140_set_mode(oldmode, GNUTLS_FIPS140_SET_MODE_THREAD);
+# endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
+
#else
/*
* No hash support beyond MD5 without CommonCrypto or GNU TLS...
@@ -271,6 +290,10 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
too_small:
+#ifdef HAVE_GNUTLS_FIPS140_SET_MODE
+ gnutls_fips140_set_mode(oldmode, GNUTLS_FIPS140_SET_MODE_THREAD);
+#endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
+
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Hash buffer too small."), 1);
return (-1);
}
diff --git a/cups/http.c b/cups/http.c
index 5c14ef68e..3fadb5acb 100644
--- a/cups/http.c
+++ b/cups/http.c
@@ -1905,7 +1905,7 @@ httpPrintf(http_t *http, /* I - HTTP connection */
...) /* I - Additional args as needed */
{
ssize_t bytes; /* Number of bytes to write */
- char buf[16384]; /* Buffer for formatted string */
+ char buf[65536]; /* Buffer for formatted string */
va_list ap; /* Variable argument pointer */
@@ -1917,7 +1917,12 @@ httpPrintf(http_t *http, /* I - HTTP connection */
DEBUG_printf(("3httpPrintf: (" CUPS_LLFMT " bytes) %s", CUPS_LLCAST bytes, buf));
- if (http->data_encoding == HTTP_ENCODING_FIELDS)
+ if (bytes > (ssize_t)(sizeof(buf) - 1))
+ {
+ http->error = ENOMEM;
+ return (-1);
+ }
+ else if (http->data_encoding == HTTP_ENCODING_FIELDS)
return ((int)httpWrite2(http, buf, (size_t)bytes));
else
{
diff --git a/cups/ipp.c b/cups/ipp.c
index 2c09f2703..b0762fdcb 100644
--- a/cups/ipp.c
+++ b/cups/ipp.c
@@ -1,7 +1,7 @@
/*
* Internet Printing Protocol functions for CUPS.
*
- * Copyright Β© 2007-2018 by Apple Inc.
+ * Copyright Β© 2007-2019 by Apple Inc.
* Copyright Β© 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -3044,8 +3044,13 @@ ippReadIO(void *src, /* I - Data source */
DEBUG_printf(("2ippReadIO: name length=%d", n));
- if (n == 0 && tag != IPP_TAG_MEMBERNAME &&
- tag != IPP_TAG_END_COLLECTION)
+ if (n && parent)
+ {
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid named IPP attribute in collection."), 1);
+ DEBUG_puts("1ippReadIO: bad attribute name in collection.");
+ return (IPP_STATE_ERROR);
+ }
+ else if (n == 0 && tag != IPP_TAG_MEMBERNAME && tag != IPP_TAG_END_COLLECTION)
{
/*
* More values for current attribute...
@@ -3752,8 +3757,7 @@ ippSetDate(ipp_t *ipp, /* I - IPP message */
* Range check input...
*/
- if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_DATE ||
- element < 0 || element > (*attr)->num_values || !datevalue)
+ if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_DATE && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values || !datevalue)
return (0);
/*
@@ -3836,9 +3840,7 @@ ippSetInteger(ipp_t *ipp, /* I - IPP message */
* Range check input...
*/
- if (!ipp || !attr || !*attr ||
- ((*attr)->value_tag != IPP_TAG_INTEGER && (*attr)->value_tag != IPP_TAG_ENUM) ||
- element < 0 || element > (*attr)->num_values)
+ if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_INTEGER && (*attr)->value_tag != IPP_TAG_ENUM && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values)
return (0);
/*
@@ -3846,7 +3848,12 @@ ippSetInteger(ipp_t *ipp, /* I - IPP message */
*/
if ((value = ipp_set_value(ipp, attr, element)) != NULL)
+ {
+ if ((*attr)->value_tag != IPP_TAG_ENUM)
+ (*attr)->value_tag = IPP_TAG_INTEGER;
+
value->integer = intvalue;
+ }
return (value != NULL);
}
@@ -3923,9 +3930,7 @@ ippSetOctetString(
* Range check input...
*/
- if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_STRING ||
- element < 0 || element > (*attr)->num_values ||
- datalen < 0 || datalen > IPP_MAX_LENGTH)
+ if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_STRING && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values || datalen < 0 || datalen > IPP_MAX_LENGTH)
return (0);
/*
@@ -3949,6 +3954,8 @@ ippSetOctetString(
* Copy the data...
*/
+ (*attr)->value_tag = IPP_TAG_STRING;
+
if (value->unknown.data)
{
/*
@@ -4040,8 +4047,7 @@ ippSetRange(ipp_t *ipp, /* I - IPP message */
* Range check input...
*/
- if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_RANGE ||
- element < 0 || element > (*attr)->num_values || lowervalue > uppervalue)
+ if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_RANGE && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values || lowervalue > uppervalue)
return (0);
/*
@@ -4050,6 +4056,7 @@ ippSetRange(ipp_t *ipp, /* I - IPP message */
if ((value = ipp_set_value(ipp, attr, element)) != NULL)
{
+ (*attr)->value_tag = IPP_TAG_RANGE;
value->range.lower = lowervalue;
value->range.upper = uppervalue;
}
@@ -4122,9 +4129,7 @@ ippSetResolution(
* Range check input...
*/
- if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_RESOLUTION ||
- element < 0 || element > (*attr)->num_values || xresvalue <= 0 || yresvalue <= 0 ||
- unitsvalue < IPP_RES_PER_INCH || unitsvalue > IPP_RES_PER_CM)
+ if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_RESOLUTION && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values || xresvalue <= 0 || yresvalue <= 0 || unitsvalue < IPP_RES_PER_INCH || unitsvalue > IPP_RES_PER_CM)
return (0);
/*
@@ -4133,6 +4138,7 @@ ippSetResolution(
if ((value = ipp_set_value(ipp, attr, element)) != NULL)
{
+ (*attr)->value_tag = IPP_TAG_RESOLUTION;
value->resolution.units = unitsvalue;
value->resolution.xres = xresvalue;
value->resolution.yres = yresvalue;
@@ -4234,10 +4240,7 @@ ippSetString(ipp_t *ipp, /* I - IPP message */
else
value_tag = IPP_TAG_ZERO;
- if (!ipp || !attr || !*attr ||
- (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG &&
- value_tag != IPP_TAG_NAMELANG) || value_tag > IPP_TAG_MIMETYPE ||
- element < 0 || element > (*attr)->num_values || !strvalue)
+ if (!ipp || !attr || !*attr || (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG && value_tag != IPP_TAG_NAMELANG && value_tag != IPP_TAG_NOVALUE && value_tag != IPP_TAG_UNKNOWN) || value_tag > IPP_TAG_MIMETYPE || element < 0 || element > (*attr)->num_values || !strvalue)
return (0);
/*
@@ -4246,6 +4249,9 @@ ippSetString(ipp_t *ipp, /* I - IPP message */
if ((value = ipp_set_value(ipp, attr, element)) != NULL)
{
+ if (value_tag == IPP_TAG_NOVALUE || value_tag == IPP_TAG_UNKNOWN)
+ (*attr)->value_tag = IPP_TAG_KEYWORD;
+
if (element > 0)
value->string.language = (*attr)->values[0].string.language;
@@ -4346,10 +4352,7 @@ ippSetStringfv(ipp_t *ipp, /* I - IPP message */
else
value_tag = IPP_TAG_ZERO;
- if (!ipp || !attr || !*attr ||
- (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG &&
- value_tag != IPP_TAG_NAMELANG) || value_tag > IPP_TAG_MIMETYPE ||
- !format)
+ if (!ipp || !attr || !*attr || (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG && value_tag != IPP_TAG_NAMELANG && value_tag != IPP_TAG_NOVALUE && value_tag != IPP_TAG_UNKNOWN) || value_tag > IPP_TAG_MIMETYPE || !format)
return (0);
/*
@@ -4401,6 +4404,8 @@ ippSetStringfv(ipp_t *ipp, /* I - IPP message */
max_bytes = IPP_MAX_CHARSET;
break;
+ case IPP_TAG_NOVALUE :
+ case IPP_TAG_UNKNOWN :
case IPP_TAG_KEYWORD :
max_bytes = IPP_MAX_KEYWORD;
break;
@@ -4548,9 +4553,7 @@ ippSetValueTag(
break;
case IPP_TAG_NAME :
- if (temp_tag != IPP_TAG_KEYWORD && temp_tag != IPP_TAG_URI &&
- temp_tag != IPP_TAG_URISCHEME && temp_tag != IPP_TAG_LANGUAGE &&
- temp_tag != IPP_TAG_MIMETYPE)
+ if (temp_tag != IPP_TAG_KEYWORD)
return (0);
(*attr)->value_tag = (ipp_tag_t)(IPP_TAG_NAME | ((*attr)->value_tag & IPP_TAG_CUPS_CONST));
@@ -4558,10 +4561,7 @@ ippSetValueTag(
case IPP_TAG_NAMELANG :
case IPP_TAG_TEXTLANG :
- if (value_tag == IPP_TAG_NAMELANG &&
- (temp_tag != IPP_TAG_NAME && temp_tag != IPP_TAG_KEYWORD &&
- temp_tag != IPP_TAG_URI && temp_tag != IPP_TAG_URISCHEME &&
- temp_tag != IPP_TAG_LANGUAGE && temp_tag != IPP_TAG_MIMETYPE))
+ if (value_tag == IPP_TAG_NAMELANG && (temp_tag != IPP_TAG_NAME && temp_tag != IPP_TAG_KEYWORD))
return (0);
if (value_tag == IPP_TAG_TEXTLANG && temp_tag != IPP_TAG_TEXT)
@@ -4975,30 +4975,24 @@ ippValidateAttribute(
{
if ((*ptr & 0xe0) == 0xc0)
{
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
+ if ((ptr[1] & 0xc0) != 0x80)
break;
+
+ ptr ++;
}
else if ((*ptr & 0xf0) == 0xe0)
{
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
- break;
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
+ if ((ptr[1] & 0xc0) != 0x80 || (ptr[2] & 0xc0) != 0x80)
break;
+
+ ptr += 2;
}
else if ((*ptr & 0xf8) == 0xf0)
{
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
- break;
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
- break;
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
+ if ((ptr[1] & 0xc0) != 0x80 || (ptr[2] & 0xc0) != 0x80 || (ptr[3] & 0xc0) != 0x80)
break;
+
+ ptr += 3;
}
else if (*ptr & 0x80)
break;
@@ -5040,30 +5034,24 @@ ippValidateAttribute(
{
if ((*ptr & 0xe0) == 0xc0)
{
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
+ if ((ptr[1] & 0xc0) != 0x80)
break;
+
+ ptr ++;
}
else if ((*ptr & 0xf0) == 0xe0)
{
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
- break;
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
+ if ((ptr[1] & 0xc0) != 0x80 || (ptr[2] & 0xc0) != 0x80)
break;
+
+ ptr += 2;
}
else if ((*ptr & 0xf8) == 0xf0)
{
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
- break;
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
- break;
- ptr ++;
- if ((*ptr & 0xc0) != 0x80)
+ if ((ptr[1] & 0xc0) != 0x80 || (ptr[2] & 0xc0) != 0x80 || (ptr[3] & 0xc0) != 0x80)
break;
+
+ ptr += 3;
}
else if (*ptr & 0x80)
break;
diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c
index 8b496e3b2..b1b53e4b3 100644
--- a/cups/ppd-cache.c
+++ b/cups/ppd-cache.c
@@ -2871,12 +2871,12 @@ _ppdCacheWriteFile(
if (pc->charge_info_uri)
cupsFilePutConf(fp, "ChargeInfoURI", pc->charge_info_uri);
- cupsFilePrintf(fp, "AccountId %s\n", pc->account_id ? "true" : "false");
- cupsFilePrintf(fp, "AccountingUserId %s\n",
+ cupsFilePrintf(fp, "JobAccountId %s\n", pc->account_id ? "true" : "false");
+ cupsFilePrintf(fp, "JobAccountingUserId %s\n",
pc->accounting_user_id ? "true" : "false");
if (pc->password)
- cupsFilePutConf(fp, "Password", pc->password);
+ cupsFilePutConf(fp, "JobPassword", pc->password);
for (value = (char *)cupsArrayFirst(pc->mandatory);
value;
@@ -3101,6 +3101,22 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
cupsFilePuts(fp, "*cupsSNMPSupplies: False\n");
cupsFilePuts(fp, "*cupsLanguages: \"en\"\n");
+ if ((attr = ippFindAttribute(response, "printer-more-info", IPP_TAG_URI)) != NULL)
+ cupsFilePrintf(fp, "*APSupplies: \"%s\"\n", ippGetString(attr, 0, NULL));
+
+ if ((attr = ippFindAttribute(response, "printer-charge-info-uri", IPP_TAG_URI)) != NULL)
+ cupsFilePrintf(fp, "*cupsChargeInfoURI: \"%s\"\n", ippGetString(attr, 0, NULL));
+
+ /*
+ * Accounting...
+ */
+
+ if (ippGetBoolean(ippFindAttribute(response, "job-account-id-supported", IPP_TAG_BOOLEAN), 0))
+ cupsFilePuts(fp, "*cupsJobAccountId: True\n");
+
+ if (ippGetBoolean(ippFindAttribute(response, "job-accounting-user-id-supported", IPP_TAG_BOOLEAN), 0))
+ cupsFilePuts(fp, "*cupsJobAccountingUserId: True\n");
+
/*
* Password/PIN printing...
*/
@@ -3133,7 +3149,7 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
pattern[maxlen] = '\0';
- cupsFilePrintf(fp, "*cupsPassword: \"%s\"\n", pattern);
+ cupsFilePrintf(fp, "*cupsJobPassword: \"%s\"\n", pattern);
}
/*
diff --git a/cups/ppd-emit.c b/cups/ppd-emit.c
index 4b153aca6..392b013b8 100644
--- a/cups/ppd-emit.c
+++ b/cups/ppd-emit.c
@@ -662,6 +662,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
{
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_POINTS :
@@ -708,6 +711,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
{
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_POINTS :
@@ -803,6 +809,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
{
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_POINTS :
@@ -1005,6 +1014,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
{
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_POINTS :
diff --git a/cups/ppd-mark.c b/cups/ppd-mark.c
index 2d106ba9e..4131ca6e2 100644
--- a/cups/ppd-mark.c
+++ b/cups/ppd-mark.c
@@ -855,6 +855,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_REAL :
@@ -932,6 +935,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ break;
+
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_REAL :
diff --git a/cups/ppd.c b/cups/ppd.c
index 435b992f4..58d92c128 100644
--- a/cups/ppd.c
+++ b/cups/ppd.c
@@ -716,6 +716,8 @@ _ppdOpen(
strncmp(ll, keyword, ll_len)))
{
DEBUG_printf(("2_ppdOpen: Ignoring localization: \"%s\"\n", keyword));
+ free(string);
+ string = NULL;
continue;
}
else if (localization == _PPD_LOCALIZATION_ICC_PROFILES)
@@ -735,6 +737,8 @@ _ppdOpen(
if (i >= (int)(sizeof(color_keywords) / sizeof(color_keywords[0])))
{
DEBUG_printf(("2_ppdOpen: Ignoring localization: \"%s\"\n", keyword));
+ free(string);
+ string = NULL;
continue;
}
}
@@ -999,6 +1003,13 @@ _ppdOpen(
goto error;
}
+ if (cparam->type != PPD_CUSTOM_UNKNOWN)
+ {
+ pg->ppd_status = PPD_BAD_CUSTOM_PARAM;
+
+ goto error;
+ }
+
/*
* Get the parameter data...
*/
@@ -1182,6 +1193,24 @@ _ppdOpen(
else if (!strcmp(string, "Plus90"))
ppd->landscape = 90;
}
+ else if (!strcmp(keyword, "Emulators") && string && ppd->num_emulations == 0)
+ {
+ /*
+ * Issue #5562: Samsung printer drivers incorrectly use Emulators keyword
+ * to configure themselves
+ *
+ * The Emulators keyword was loaded but never used by anything in CUPS,
+ * and has no valid purpose in CUPS. The old code was removed due to a
+ * memory leak (Issue #5475), so the following (new) code supports a single
+ * name for the Emulators keyword, allowing these drivers to work until we
+ * remove PPD and driver support entirely in a future version of CUPS.
+ */
+
+ ppd->num_emulations = 1;
+ ppd->emulations = calloc(1, sizeof(ppd_emul_t));
+
+ strlcpy(ppd->emulations[0].name, string, sizeof(ppd->emulations[0].name));
+ }
else if (!strcmp(keyword, "JobPatchFile"))
{
/*
@@ -1854,6 +1883,13 @@ _ppdOpen(
}
else if (!strcmp(keyword, "PaperDimension"))
{
+ if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
+ {
+ pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
+
+ goto error;
+ }
+
if ((size = ppdPageSize(ppd, name)) == NULL)
size = ppd_add_size(ppd, name);
@@ -1876,6 +1912,13 @@ _ppdOpen(
}
else if (!strcmp(keyword, "ImageableArea"))
{
+ if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
+ {
+ pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
+
+ goto error;
+ }
+
if ((size = ppdPageSize(ppd, name)) == NULL)
size = ppd_add_size(ppd, name);
@@ -1905,6 +1948,13 @@ _ppdOpen(
{
DEBUG_printf(("2_ppdOpen: group=%p, subgroup=%p", group, subgroup));
+ if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
+ {
+ pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
+
+ goto error;
+ }
+
if (!strcmp(keyword, "PageSize"))
{
/*
@@ -2629,6 +2679,7 @@ ppd_get_cparam(ppd_coption_t *opt, /* I - PPD file */
if ((cparam = calloc(1, sizeof(ppd_cparam_t))) == NULL)
return (NULL);
+ cparam->type = PPD_CUSTOM_UNKNOWN;
strlcpy(cparam->name, param, sizeof(cparam->name));
strlcpy(cparam->text, text[0] ? text : param, sizeof(cparam->text));
diff --git a/cups/ppd.h b/cups/ppd.h
index ae63c0d66..b6326a59e 100644
--- a/cups/ppd.h
+++ b/cups/ppd.h
@@ -235,6 +235,7 @@ typedef struct ppd_profile_s /**** sRGB Color Profiles ****/
/**** New in CUPS 1.2/macOS 10.5 ****/
typedef enum ppd_cptype_e /**** Custom Parameter Type @since CUPS 1.2/macOS 10.5@ ****/
{
+ PPD_CUSTOM_UNKNOWN = -1, /* Unknown type (error) */
PPD_CUSTOM_CURVE, /* Curve value for f(x) = x^value */
PPD_CUSTOM_INT, /* Integer number value */
PPD_CUSTOM_INVCURVE, /* Curve value for f(x) = x^(1/value) */
diff --git a/cups/pwg-media.c b/cups/pwg-media.c
index 62455ea6d..0c6e44bc3 100644
--- a/cups/pwg-media.c
+++ b/cups/pwg-media.c
@@ -1,7 +1,7 @@
/*
* PWG media name API implementation for CUPS.
*
- * Copyright 2009-2017 by Apple Inc.
+ * Copyright 2009-2019 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -26,6 +26,7 @@
#define _PWG_MEDIA_IN(p,l,a,x,y) {p, l, a, (int)(x * 2540), (int)(y * 2540)}
#define _PWG_MEDIA_MM(p,l,a,x,y) {p, l, a, (int)(x * 100), (int)(y * 100)}
+#define _PWG_EPSILON 50 /* Matching tolerance */
/*
@@ -912,10 +913,11 @@ pwgMediaForSize(int width, /* I - Width in hundredths of millimeters */
{
/*
* Adobe uses a size matching algorithm with an epsilon of 5 points, which
- * is just about 176/2540ths...
+ * is just about 176/2540ths... But a lot of international media sizes are
+ * very close so use 0.5mm (50/2540ths) as the maximum delta.
*/
- return (_pwgMediaNearSize(width, length, 176));
+ return (_pwgMediaNearSize(width, length, _PWG_EPSILON));
}
diff --git a/cups/snmp.c b/cups/snmp.c
index 8437528dd..fc9396177 100644
--- a/cups/snmp.c
+++ b/cups/snmp.c
@@ -1233,6 +1233,9 @@ asn1_get_integer(
int value; /* Integer value */
+ if (*buffer >= bufend)
+ return (0);
+
if (length > sizeof(int))
{
(*buffer) += length;
@@ -1259,6 +1262,9 @@ asn1_get_length(unsigned char **buffer, /* IO - Pointer in buffer */
unsigned length; /* Length */
+ if (*buffer >= bufend)
+ return (0);
+
length = **buffer;
(*buffer) ++;
@@ -1301,6 +1307,9 @@ asn1_get_oid(
int number; /* OID number */
+ if (*buffer >= bufend)
+ return (0);
+
valend = *buffer + length;
oidptr = oid;
oidend = oid + oidsize - 1;
@@ -1349,9 +1358,12 @@ asn1_get_packed(
int value; /* Value */
+ if (*buffer >= bufend)
+ return (0);
+
value = 0;
- while ((**buffer & 128) && *buffer < bufend)
+ while (*buffer < bufend && (**buffer & 128))
{
value = (value << 7) | (**buffer & 127);
(*buffer) ++;
@@ -1379,6 +1391,9 @@ asn1_get_string(
char *string, /* I - String buffer */
size_t strsize) /* I - String buffer size */
{
+ if (*buffer >= bufend)
+ return (NULL);
+
if (length > (unsigned)(bufend - *buffer))
length = (unsigned)(bufend - *buffer);
@@ -1421,6 +1436,9 @@ asn1_get_type(unsigned char **buffer, /* IO - Pointer in buffer */
int type; /* Type */
+ if (*buffer >= bufend)
+ return (0);
+
type = **buffer;
(*buffer) ++;
diff --git a/cups/snprintf.c b/cups/snprintf.c
index c5d8908c0..72b3fc87d 100644
--- a/cups/snprintf.c
+++ b/cups/snprintf.c
@@ -1,8 +1,8 @@
/*
* snprintf functions for CUPS.
*
- * Copyright 2007-2013 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products.
+ * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -177,7 +177,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
break;
sprintf(temp, tformat, va_arg(ap, double));
- templen = strlen(temp):
+ templen = strlen(temp);
bytes += (int)templen;
@@ -208,7 +208,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
break;
sprintf(temp, tformat, va_arg(ap, int));
- templen = strlen(temp):
+ templen = strlen(temp);
bytes += (int)templen;
@@ -232,7 +232,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
break;
sprintf(temp, tformat, va_arg(ap, void *));
- templen = strlen(temp):
+ templen = strlen(temp);
bytes += (int)templen;
diff --git a/cups/testdest.c b/cups/testdest.c
index 9eab8d2ef..a65e09960 100644
--- a/cups/testdest.c
+++ b/cups/testdest.c
@@ -1,15 +1,9 @@
/*
* CUPS destination API test program for CUPS.
*
- * Copyright 2012-2018 by Apple Inc.
+ * Copyright Β© 2012-2018 by Apple Inc.
*
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file. If this file is
- * missing or damaged, see the license at "http://www.cups.org/".
- *
- * This file is subject to the Apple OS-Developed Software exception.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
*/
/*
@@ -43,17 +37,31 @@ int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
+ int i; /* Looping var */
http_t *http; /* Connection to destination */
cups_dest_t *dest = NULL; /* Destination */
cups_dinfo_t *dinfo; /* Destination info */
+ unsigned dflags = CUPS_DEST_FLAGS_NONE;
+ /* Destination flags */
if (argc < 2)
- usage(NULL);
+ return (0);
- if (!strcmp(argv[1], "--enum"))
+ if (!strcmp(argv[1], "--get"))
+ {
+ cups_dest_t *dests; /* Destinations */
+ int num_dests = cupsGetDests2(CUPS_HTTP_DEFAULT, &dests);
+ /* Number of destinations */
+
+ for (i = 0; i < num_dests; i ++)
+ enum_cb(NULL, 0, dests + i);
+
+ cupsFreeDests(num_dests, dests);
+ return (0);
+ }
+ else if (!strcmp(argv[1], "--enum"))
{
- int i; /* Looping var */
cups_ptype_t type = 0, /* Printer type filter */
mask = 0; /* Printer type mask */
@@ -103,78 +111,91 @@ main(int argc, /* I - Number of command-line arguments */
return (0);
}
- else if (!strncmp(argv[1], "ipp://", 6) || !strncmp(argv[1], "ipps://", 7))
- dest = cupsGetDestWithURI(NULL, argv[1]);
- else if (!strcmp(argv[1], "default"))
+
+ i = 1;
+ if (!strcmp(argv[i], "--device"))
+ {
+ dflags = CUPS_DEST_FLAGS_DEVICE;
+ i ++;
+ }
+
+ if (!strncmp(argv[i], "ipp://", 6) || !strncmp(argv[i], "ipps://", 7))
+ dest = cupsGetDestWithURI(NULL, argv[i]);
+ else if (!strcmp(argv[i], "default"))
{
dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL);
if (dest && dest->instance)
printf("default is \"%s/%s\".\n", dest->name, dest->instance);
- else
+ else if (dest)
printf("default is \"%s\".\n", dest->name);
+ else
+ puts("no default destination.");
}
else
- dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[1], NULL);
+ dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[i], NULL);
if (!dest)
{
- printf("testdest: Unable to get destination \"%s\": %s\n", argv[1], cupsLastErrorString());
+ printf("testdest: Unable to get destination \"%s\": %s\n", argv[i], cupsLastErrorString());
return (1);
}
- if ((http = cupsConnectDest(dest, CUPS_DEST_FLAGS_NONE, 30000, NULL, NULL, 0, NULL, NULL)) == NULL)
+ i ++;
+
+ if ((http = cupsConnectDest(dest, dflags, 30000, NULL, NULL, 0, NULL, NULL)) == NULL)
{
- printf("testdest: Unable to connect to destination \"%s\": %s\n", argv[1], cupsLastErrorString());
+ printf("testdest: Unable to connect to destination \"%s\": %s\n", dest->name, cupsLastErrorString());
return (1);
}
if ((dinfo = cupsCopyDestInfo(http, dest)) == NULL)
{
- printf("testdest: Unable to get information for destination \"%s\": %s\n", argv[1], cupsLastErrorString());
+ printf("testdest: Unable to get information for destination \"%s\": %s\n", dest->name, cupsLastErrorString());
return (1);
}
- if (argc == 2 || (!strcmp(argv[2], "supported") && argc < 6))
+ if (i == argc || !strcmp(argv[i], "supported"))
{
- if (argc > 3)
- show_supported(http, dest, dinfo, argv[3], argv[4]);
+ i ++;
+
+ if ((i + 1) < argc)
+ show_supported(http, dest, dinfo, argv[i], argv[i + 1]);
else if (argc > 2)
- show_supported(http, dest, dinfo, argv[3], NULL);
+ show_supported(http, dest, dinfo, argv[i], NULL);
else
show_supported(http, dest, dinfo, NULL, NULL);
}
- else if (!strcmp(argv[2], "conflicts") && argc > 3)
+ else if (!strcmp(argv[i], "conflicts") && (i + 1) < argc)
{
- int i, /* Looping var */
- num_options = 0;/* Number of options */
+ int num_options = 0;/* Number of options */
cups_option_t *options = NULL;/* Options */
- for (i = 3; i < argc; i ++)
+ for (i ++; i < argc; i ++)
num_options = cupsParseOptions(argv[i], num_options, &options);
show_conflicts(http, dest, dinfo, num_options, options);
}
- else if (!strcmp(argv[2], "default") && argc == 4)
+ else if (!strcmp(argv[i], "default") && (i + 1) < argc)
{
- show_default(http, dest, dinfo, argv[3]);
+ show_default(http, dest, dinfo, argv[i + 1]);
}
- else if (!strcmp(argv[2], "localize") && argc < 6)
+ else if (!strcmp(argv[i], "localize"))
{
- if (argc > 3)
- localize(http, dest, dinfo, argv[3], argv[4]);
+ i ++;
+ if ((i + 1) < argc)
+ localize(http, dest, dinfo, argv[i], argv[i + 1]);
else if (argc > 2)
- localize(http, dest, dinfo, argv[3], NULL);
+ localize(http, dest, dinfo, argv[i], NULL);
else
localize(http, dest, dinfo, NULL, NULL);
}
- else if (!strcmp(argv[2], "media"))
+ else if (!strcmp(argv[i], "media"))
{
- int i; /* Looping var */
const char *name = NULL; /* Media name, if any */
unsigned flags = CUPS_MEDIA_FLAGS_DEFAULT;
/* Media selection flags */
- for (i = 3; i < argc; i ++)
+ for (i ++; i < argc; i ++)
{
if (!strcmp(argv[i], "borderless"))
flags = CUPS_MEDIA_FLAGS_BORDERLESS;
@@ -192,19 +213,19 @@ main(int argc, /* I - Number of command-line arguments */
show_media(http, dest, dinfo, flags, name);
}
- else if (!strcmp(argv[2], "print") && argc > 3)
+ else if (!strcmp(argv[i], "print") && (i + 1) < argc)
{
- int i, /* Looping var */
- num_options = 0;/* Number of options */
+ int num_options = 0;/* Number of options */
cups_option_t *options = NULL;/* Options */
+ const char *filename = argv[i + 1];
- for (i = 4; i < argc; i ++)
+ for (i += 2; i < argc; i ++)
num_options = cupsParseOptions(argv[i], num_options, &options);
- print_file(http, dest, dinfo, argv[3], num_options, options);
+ print_file(http, dest, dinfo, filename, num_options, options);
}
else
- usage(argv[2]);
+ usage(argv[i]);
return (0);
}
@@ -226,13 +247,15 @@ enum_cb(void *user_data, /* I - User data (unused) */
(void)flags;
if (dest->instance)
- printf("%s%s/%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name, dest->instance);
+ printf("%s%s/%s%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name, dest->instance, dest->is_default ? " (Default)" : "");
else
- printf("%s%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name);
+ printf("%s%s%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name, dest->is_default ? " (Default)" : "");
for (i = 0; i < dest->num_options; i ++)
printf(" %s=\"%s\"\n", dest->options[i].name, dest->options[i].value);
+ puts("");
+
return (1);
}
@@ -740,9 +763,10 @@ usage(const char *arg) /* I - Argument for usage message */
printf("testdest: Unknown option \"%s\".\n", arg);
puts("Usage:");
- puts(" ./testdest name [operation ...]");
- puts(" ./testdest ipp://... [operation ...]");
- puts(" ./testdest ipps://... [operation ...]");
+ puts(" ./testdest [--device] name [operation ...]");
+ puts(" ./testdest [--device] ipp://... [operation ...]");
+ puts(" ./testdest [--device] ipps://... [operation ...]");
+ puts(" ./testdest --get");
puts(" ./testdest --enum [grayscale] [color] [duplex] [staple] [small]\n"
" [medium] [large]");
puts("");
diff --git a/cups/testipp.c b/cups/testipp.c
index 2ef2496eb..a8d3662c3 100644
--- a/cups/testipp.c
+++ b/cups/testipp.c
@@ -1,7 +1,7 @@
/*
* IPP test program for CUPS.
*
- * Copyright 2007-2017 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 1997-2005 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -50,7 +50,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x01, 0x01, /* IPP version */
0x00, 0x02, /* Print-Job operation */
0x00, 0x00, 0x00, 0x01,
- /* Request ID */
+ /* Request ID */
IPP_TAG_OPERATION,
@@ -80,7 +80,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
IPP_TAG_JOB, /* job group tag */
IPP_TAG_BEGIN_COLLECTION,
- /* begCollection tag */
+ /* begCollection tag */
0x00, 0x09, /* Name length + name */
'm', 'e', 'd', 'i', 'a', '-', 'c', 'o', 'l',
0x00, 0x00, /* No value */
@@ -89,11 +89,11 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x00, 0x0a, /* Value length + value */
'm', 'e', 'd', 'i', 'a', '-', 's', 'i', 'z', 'e',
IPP_TAG_BEGIN_COLLECTION,
- /* begCollection tag */
+ /* begCollection tag */
0x00, 0x00, /* Name length + name */
0x00, 0x00, /* No value */
IPP_TAG_MEMBERNAME,
- /* memberAttrName tag */
+ /* memberAttrName tag */
0x00, 0x00, /* No name */
0x00, 0x0b, /* Value length + value */
'x', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
@@ -102,7 +102,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x00, 0x04, /* Value length + value */
0x00, 0x00, 0x54, 0x56,
IPP_TAG_MEMBERNAME,
- /* memberAttrName tag */
+ /* memberAttrName tag */
0x00, 0x00, /* No name */
0x00, 0x0b, /* Value length + value */
'y', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
@@ -111,7 +111,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x00, 0x04, /* Value length + value */
0x00, 0x00, 0x6d, 0x24,
IPP_TAG_END_COLLECTION,
- /* endCollection tag */
+ /* endCollection tag */
0x00, 0x00, /* No name */
0x00, 0x00, /* No value */
IPP_TAG_MEMBERNAME, /* memberAttrName tag */
@@ -132,12 +132,12 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x00, 0x05, /* Value length + value */
'p', 'l', 'a', 'i', 'n',
IPP_TAG_END_COLLECTION,
- /* endCollection tag */
+ /* endCollection tag */
0x00, 0x00, /* No name */
0x00, 0x00, /* No value */
IPP_TAG_BEGIN_COLLECTION,
- /* begCollection tag */
+ /* begCollection tag */
0x00, 0x00, /* No name */
0x00, 0x00, /* No value */
IPP_TAG_MEMBERNAME, /* memberAttrName tag */
@@ -145,11 +145,11 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x00, 0x0a, /* Value length + value */
'm', 'e', 'd', 'i', 'a', '-', 's', 'i', 'z', 'e',
IPP_TAG_BEGIN_COLLECTION,
- /* begCollection tag */
+ /* begCollection tag */
0x00, 0x00, /* Name length + name */
0x00, 0x00, /* No value */
IPP_TAG_MEMBERNAME,
- /* memberAttrName tag */
+ /* memberAttrName tag */
0x00, 0x00, /* No name */
0x00, 0x0b, /* Value length + value */
'x', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
@@ -158,7 +158,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x00, 0x04, /* Value length + value */
0x00, 0x00, 0x52, 0x08,
IPP_TAG_MEMBERNAME,
- /* memberAttrName tag */
+ /* memberAttrName tag */
0x00, 0x00, /* No name */
0x00, 0x0b, /* Value length + value */
'y', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
@@ -167,7 +167,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x00, 0x04, /* Value length + value */
0x00, 0x00, 0x74, 0x04,
IPP_TAG_END_COLLECTION,
- /* endCollection tag */
+ /* endCollection tag */
0x00, 0x00, /* No name */
0x00, 0x00, /* No value */
IPP_TAG_MEMBERNAME, /* memberAttrName tag */
@@ -188,7 +188,72 @@ static ipp_uchar_t collection[] = /* Collection buffer */
0x00, 0x06, /* Value length + value */
'g', 'l', 'o', 's', 's', 'y',
IPP_TAG_END_COLLECTION,
- /* endCollection tag */
+ /* endCollection tag */
+ 0x00, 0x00, /* No name */
+ 0x00, 0x00, /* No value */
+
+ IPP_TAG_END /* end tag */
+ };
+static ipp_uchar_t bad_collection[] = /* Collection buffer (bad encoding) */
+ {
+ 0x01, 0x01, /* IPP version */
+ 0x00, 0x02, /* Print-Job operation */
+ 0x00, 0x00, 0x00, 0x01,
+ /* Request ID */
+
+ IPP_TAG_OPERATION,
+
+ IPP_TAG_CHARSET,
+ 0x00, 0x12, /* Name length + name */
+ 'a','t','t','r','i','b','u','t','e','s','-',
+ 'c','h','a','r','s','e','t',
+ 0x00, 0x05, /* Value length + value */
+ 'u','t','f','-','8',
+
+ IPP_TAG_LANGUAGE,
+ 0x00, 0x1b, /* Name length + name */
+ 'a','t','t','r','i','b','u','t','e','s','-',
+ 'n','a','t','u','r','a','l','-','l','a','n',
+ 'g','u','a','g','e',
+ 0x00, 0x02, /* Value length + value */
+ 'e','n',
+
+ IPP_TAG_URI,
+ 0x00, 0x0b, /* Name length + name */
+ 'p','r','i','n','t','e','r','-','u','r','i',
+ 0x00, 0x1c, /* Value length + value */
+ 'i','p','p',':','/','/','l','o','c','a','l',
+ 'h','o','s','t','/','p','r','i','n','t','e',
+ 'r','s','/','f','o','o',
+
+ IPP_TAG_JOB, /* job group tag */
+
+ IPP_TAG_BEGIN_COLLECTION,
+ /* begCollection tag */
+ 0x00, 0x09, /* Name length + name */
+ 'm', 'e', 'd', 'i', 'a', '-', 'c', 'o', 'l',
+ 0x00, 0x00, /* No value */
+ IPP_TAG_BEGIN_COLLECTION,
+ /* begCollection tag */
+ 0x00, 0x0a, /* Name length + name */
+ 'm', 'e', 'd', 'i', 'a', '-', 's', 'i', 'z', 'e',
+ 0x00, 0x00, /* No value */
+ IPP_TAG_INTEGER, /* integer tag */
+ 0x00, 0x0b, /* Name length + name */
+ 'x', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
+ 0x00, 0x04, /* Value length + value */
+ 0x00, 0x00, 0x54, 0x56,
+ IPP_TAG_INTEGER, /* integer tag */
+ 0x00, 0x0b, /* Name length + name */
+ 'y', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
+ 0x00, 0x04, /* Value length + value */
+ 0x00, 0x00, 0x6d, 0x24,
+ IPP_TAG_END_COLLECTION,
+ /* endCollection tag */
+ 0x00, 0x00, /* No name */
+ 0x00, 0x00, /* No value */
+ IPP_TAG_END_COLLECTION,
+ /* endCollection tag */
0x00, 0x00, /* No name */
0x00, 0x00, /* No value */
@@ -200,7 +265,7 @@ static ipp_uchar_t mixed[] = /* Mixed value buffer */
0x01, 0x01, /* IPP version */
0x00, 0x02, /* Print-Job operation */
0x00, 0x00, 0x00, 0x01,
- /* Request ID */
+ /* Request ID */
IPP_TAG_OPERATION,
@@ -590,11 +655,32 @@ main(int argc, /* I - Number of command-line arguments */
ippDelete(request);
/*
+ * Read the bad collection data and confirm we get an error...
+ */
+
+ fputs("Read Bad Collection from Memory: ", stdout);
+
+ request = ippNew();
+ data.rpos = 0;
+ data.wused = sizeof(bad_collection);
+ data.wsize = sizeof(bad_collection);
+ data.wbuffer = bad_collection;
+
+ while ((state = ippReadIO(&data, (ipp_iocb_t)read_cb, 1, NULL, request)) != IPP_STATE_DATA)
+ if (state == IPP_STATE_ERROR)
+ break;
+
+ if (state != IPP_STATE_ERROR)
+ puts("FAIL (read successful)");
+ else
+ puts("PASS");
+
+ /*
* Read the mixed data and confirm we converted everything to rangeOfInteger
* values...
*/
- printf("Read Mixed integer/rangeOfInteger from Memory: ");
+ fputs("Read Mixed integer/rangeOfInteger from Memory: ", stdout);
request = ippNew();
data.rpos = 0;
diff --git a/cups/testppd.c b/cups/testppd.c
index e6cdea5ed..943e70033 100644
--- a/cups/testppd.c
+++ b/cups/testppd.c
@@ -1062,6 +1062,10 @@ main(int argc, /* I - Number of command-line arguments */
{
switch (cparam->type)
{
+ case PPD_CUSTOM_UNKNOWN :
+ printf(" %s(%s): PPD_CUSTOM_UNKNOWN (error)\n", cparam->name, cparam->text);
+ break;
+
case PPD_CUSTOM_CURVE :
printf(" %s(%s): PPD_CUSTOM_CURVE (%g to %g)\n",
cparam->name, cparam->text,
diff --git a/cups/tls-gnutls.c b/cups/tls-gnutls.c
index 606b45afc..1dc1b2a1f 100644
--- a/cups/tls-gnutls.c
+++ b/cups/tls-gnutls.c
@@ -1,7 +1,7 @@
/*
* TLS support code for CUPS using GNU TLS.
*
- * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -173,10 +173,33 @@ cupsMakeServerCredentials(
gnutls_x509_crt_set_activation_time(crt, curtime);
gnutls_x509_crt_set_expiration_time(crt, curtime + 10 * 365 * 86400);
gnutls_x509_crt_set_ca_status(crt, 0);
+ gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, common_name, (unsigned)strlen(common_name), GNUTLS_FSAN_SET);
+ if (!strchr(common_name, '.'))
+ {
+ /*
+ * Add common_name.local to the list, too...
+ */
+
+ char localname[256]; /* hostname.local */
+
+ snprintf(localname, sizeof(localname), "%s.local", common_name);
+ gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, localname, (unsigned)strlen(localname), GNUTLS_FSAN_APPEND);
+ }
+ gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, "localhost", 9, GNUTLS_FSAN_APPEND);
if (num_alt_names > 0)
- gnutls_x509_crt_set_subject_alternative_name(crt, GNUTLS_SAN_DNSNAME, alt_names[0]);
+ {
+ int i; /* Looping var */
+
+ for (i = 0; i < num_alt_names; i ++)
+ {
+ if (strcmp(alt_names[i], "localhost"))
+ {
+ gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, alt_names[i], (unsigned)strlen(alt_names[i]), GNUTLS_FSAN_APPEND);
+ }
+ }
+ }
gnutls_x509_crt_set_key_purpose_oid(crt, GNUTLS_KP_TLS_WWW_SERVER, 0);
- gnutls_x509_crt_set_key_usage(crt, GNUTLS_KEY_KEY_ENCIPHERMENT);
+ gnutls_x509_crt_set_key_usage(crt, GNUTLS_KEY_DIGITAL_SIGNATURE | GNUTLS_KEY_KEY_ENCIPHERMENT);
gnutls_x509_crt_set_version(crt, 3);
bytes = sizeof(buffer);
@@ -380,8 +403,8 @@ httpCredentialsAreValidForName(
if (result)
{
- int i, /* Looping var */
- count; /* Number of revoked certificates */
+ gnutls_x509_crl_iter_t iter = NULL;
+ /* Iterator */
unsigned char cserial[1024], /* Certificate serial number */
rserial[1024]; /* Revoked serial number */
size_t cserial_size, /* Size of cert serial number */
@@ -389,22 +412,24 @@ httpCredentialsAreValidForName(
_cupsMutexLock(&tls_mutex);
- count = gnutls_x509_crl_get_crt_count(tls_crl);
-
- if (count > 0)
+ if (gnutls_x509_crl_get_crt_count(tls_crl) > 0)
{
cserial_size = sizeof(cserial);
gnutls_x509_crt_get_serial(cert, cserial, &cserial_size);
- for (i = 0; i < count; i ++)
- {
- rserial_size = sizeof(rserial);
- if (!gnutls_x509_crl_get_crt_serial(tls_crl, (unsigned)i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, rserial_size))
+ rserial_size = sizeof(rserial);
+
+ while (!gnutls_x509_crl_iter_crt_serial(tls_crl, &iter, rserial, &rserial_size, NULL))
+ {
+ if (cserial_size == rserial_size && !memcmp(cserial, rserial, rserial_size))
{
result = 0;
break;
}
+
+ rserial_size = sizeof(rserial);
}
+ gnutls_x509_crl_iter_deinit(iter);
}
_cupsMutexUnlock(&tls_mutex);
diff --git a/debian/.git-dpm b/debian/.git-dpm
index f32b677be..9245c52a1 100644
--- a/debian/.git-dpm
+++ b/debian/.git-dpm
@@ -1,7 +1,7 @@
# see git-dpm(1) from git-dpm package
-9615ef5f2b8374bfe2816f8ff4314234362ce841
-9615ef5f2b8374bfe2816f8ff4314234362ce841
-25b2338346ef3abbb93ea88476887cba7b2b86f8
+1cd07131ecfb487064814a2c315e89b38066d73c
+1cd07131ecfb487064814a2c315e89b38066d73c
+044594aca992c46aa4e23729124e5ed3c5dd6cfe
044594aca992c46aa4e23729124e5ed3c5dd6cfe
cups_2.2.12.orig.tar.gz
a6a89bd1dd3b7122913651698a89d795e3bfea80
diff --git a/debian/patches/0003-Install-root-backends-world-readable.patch b/debian/patches/0003-Install-root-backends-world-readable.patch
index c9c130d02..b3d1fd7b1 100644
--- a/debian/patches/0003-Install-root-backends-world-readable.patch
+++ b/debian/patches/0003-Install-root-backends-world-readable.patch
@@ -1,4 +1,4 @@
-From ee92595c22b31cabc5a53268803fc8e53db14813 Mon Sep 17 00:00:00 2001
+From 03907fe3af14450016228a5f37f100c52c8c49d5 Mon Sep 17 00:00:00 2001
From: Martin Pitt <mpitt@debian.org>
Date: Tue, 9 Aug 2016 18:11:06 +0200
Subject: Install root backends world-readable
@@ -52,7 +52,7 @@ index 42eaa59ff..3bdb48302 100644
cupsDirClose(dir);
diff --git a/scheduler/job.c b/scheduler/job.c
-index 638f256db..bbef60c64 100644
+index 1a7a34ca9..dcee43d83 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -1250,7 +1250,7 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
diff --git a/debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch b/debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch
index 5f18548c5..fa138ed4f 100644
--- a/debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch
+++ b/debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch
@@ -1,4 +1,4 @@
-From 3f8584b5142fccf1a495dc1d1e6ab66248a3f6a3 Mon Sep 17 00:00:00 2001
+From 23fedad956e4bb366e1da86cfc7994f7818fdd87 Mon Sep 17 00:00:00 2001
From: Tim Waugh <twaugh@redhat.com>
Date: Tue, 9 Aug 2016 18:11:30 +0200
Subject: Let snmp backend also use manufacturer-specific MIBs
diff --git a/debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch b/debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch
index 09339f4e2..05bfb25fe 100644
--- a/debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch
+++ b/debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch
@@ -1,4 +1,4 @@
-From 9c5b4d679e611fb391b58725076d936d2ec1ac9a Mon Sep 17 00:00:00 2001
+From d5966671d8b2ccbf1350589f2f9bd2f50835474e Mon Sep 17 00:00:00 2001
From: Helmut Grohne <helmut@subdivi.de>
Date: Tue, 9 Aug 2016 18:11:49 +0200
Subject: Build mantohtml with the build architecture compiler
@@ -18,7 +18,7 @@ Bug-Debian: https://bugs.debian.org/837936
4 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/Makedefs.in b/Makedefs.in
-index 656d7b44c..d6fa23e89 100644
+index 83eae7ce8..4f6247a68 100644
--- a/Makedefs.in
+++ b/Makedefs.in
@@ -25,6 +25,7 @@ CUPS_VERSION = @CUPS_VERSION@
@@ -30,7 +30,7 @@ index 656d7b44c..d6fa23e89 100644
CXX = @LIBTOOL_CXX@ @CXX@
DSO = @DSO@
diff --git a/configure.ac b/configure.ac
-index c7696c7b9..f57b97dbf 100644
+index 776259933..864ba340a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,6 +22,15 @@ sinclude(config-scripts/cups-common.m4)
diff --git a/debian/patches/0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch b/debian/patches/0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch
deleted file mode 100644
index fcd175c95..000000000
--- a/debian/patches/0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From f67a4b249a53f91ecb70dce59a8c41ca1c3b04ed Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michaelrsweet@gmail.com>
-Date: Wed, 1 Nov 2017 15:45:50 -0400
-Subject: =?UTF-8?q?The=20`lp`=20and=20`lpr`=20commands=20now=20provide=20b?=
- =?UTF-8?q?etter=20error=20messages=20when=20the=20default=0Aprinter=20can?=
- =?UTF-8?q?not=20be=20found=20(Issue=20#5096)?=
-
-- berkeley/lpr.c: Use cupsLastErrorMessage() for not-found errors.
-- cups/dest.c: Set the last error message in cupsGetNamedDest().
-- systemv/lp.c: Use cupsLastErrorMessage() for not-found errors.
-
-Bug-Debian: #870463
----
- cups/dest.c | 38 +++++++++++++++++++++++++++++++++++++-
- 1 file changed, 37 insertions(+), 1 deletion(-)
-
-diff --git a/cups/dest.c b/cups/dest.c
-index 7ef85a1b9..d92d23d8e 100644
---- a/cups/dest.c
-+++ b/cups/dest.c
-@@ -1883,6 +1883,9 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
- snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
-
- dest_name = cups_get_default(filename, defname, sizeof(defname), &instance);
-+
-+ if (dest_name)
-+ set_as_default = 2;
- }
-
- if (!dest_name)
-@@ -1893,6 +1896,9 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
-
- snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
- dest_name = cups_get_default(filename, defname, sizeof(defname), &instance);
-+
-+ if (dest_name)
-+ set_as_default = 3;
- }
-
- if (!dest_name)
-@@ -1901,7 +1907,8 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
- * No locally-set default destination, ask the server...
- */
-
-- op = IPP_OP_CUPS_GET_DEFAULT;
-+ op = IPP_OP_CUPS_GET_DEFAULT;
-+ set_as_default = 4;
-
- DEBUG_puts("1cupsGetNamedDest: Asking server for default printer...");
- }
-@@ -1932,7 +1939,36 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
- dest = data.dest;
- }
- else
-+ {
-+ switch (set_as_default)
-+ {
-+ default :
-+ break;
-+
-+ case 1 : /* Set from env vars */
-+ if (getenv("LPDEST"))
-+ _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("LPDEST environment variable names default destination that does not exist."), 1);
-+ else if (getenv("PRINTER"))
-+ _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("PRINTER environment variable names default destination that does not exist."), 1);
-+ else
-+ _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("No default destination."), 1);
-+ break;
-+
-+ case 2 : /* Set from ~/.cups/lpoptions */
-+ _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("~/.cups/lpoptions file names default destination that does not exist."), 1);
-+ break;
-+
-+ case 3 : /* Set from /etc/cups/lpoptions */
-+ _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("/etc/cups/lpoptions file names default destination that does not exist."), 1);
-+ break;
-+
-+ case 4 : /* Set from server */
-+ _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("No default destination."), 1);
-+ break;
-+ }
-+
- return (NULL);
-+ }
- }
-
- DEBUG_printf(("1cupsGetNamedDest: Got dest=%p", (void *)dest));
diff --git a/debian/patches/0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch b/debian/patches/0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch
deleted file mode 100644
index 61d370e84..000000000
--- a/debian/patches/0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 5b2890774c0879bd62ee4abb6c8d87e5c6abcb36 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Wed, 9 Jan 2019 13:26:37 -0500
-Subject: Protect against continuing to read from a file at EOF (Issue #5473)
-
-Fixed a potential memory leak when reading at the end of a file
----
- cups/file.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/cups/file.c b/cups/file.c
-index 5c9ddf8fe..f67a6668e 100644
---- a/cups/file.c
-+++ b/cups/file.c
-@@ -679,6 +679,12 @@ cupsFileGetChar(cups_file_t *fp) /* I - CUPS file */
- return (-1);
- }
-
-+ if (fp->eof)
-+ {
-+ DEBUG_puts("5cupsFileGetChar: End-of-file!");
-+ return (-1);
-+ }
-+
- /*
- * If the input buffer is empty, try to read more data...
- */
-@@ -1651,6 +1657,12 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */
- if (bytes == 0)
- return (0);
-
-+ if (fp->eof)
-+ {
-+ DEBUG_puts("5cupsFileRead: End-of-file!");
-+ return (-1);
-+ }
-+
- /*
- * Loop until all bytes are read...
- */
diff --git a/debian/patches/0037-Use-the-same-requested-attributes-values-for-all-IPP.patch b/debian/patches/0037-Use-the-same-requested-attributes-values-for-all-IPP.patch
deleted file mode 100644
index d26c4b69a..000000000
--- a/debian/patches/0037-Use-the-same-requested-attributes-values-for-all-IPP.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From 2f25fc8b426f4b97f549d8ad2b84be9850aa709a Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Mon, 21 Jan 2019 11:28:24 -0500
-Subject: Use the same requested-attributes values for all IPP Everywhere setup
- requests (Issue #5484)
-
-The lpadmin command, web interface, and scheduler all queried an IPP
-Everywhere printer differently, resulting in different PPDs for the same
-printer
-
-Switch to using "all" and "media-col-database" because some vendors apparently
-do not know how to read
----
- cgi-bin/admin.c | 10 ++++++++--
- scheduler/ipp.c | 9 +++++++--
- systemv/lpadmin.c | 6 ++----
- 3 files changed, 17 insertions(+), 8 deletions(-)
-
-diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
-index 00830e486..690fbbc73 100644
---- a/cgi-bin/admin.c
-+++ b/cgi-bin/admin.c
-@@ -1,8 +1,8 @@
- /*
- * Administration CGI for CUPS.
- *
-- * Copyright 2007-2018 by Apple Inc.
-- * Copyright 1997-2007 by Easy Software Products.
-+ * Copyright © 2007-2019 by Apple Inc.
-+ * Copyright © 1997-2007 by Easy Software Products.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
-@@ -4224,6 +4224,11 @@ get_printer_ppd(const char *uri, /* I - Printer URI */
- host[256], /* Hostname */
- resource[256]; /* Resource path */
- int port; /* Port number */
-+ static const char * const pattrs[] = /* Printer attributes we need */
-+ {
-+ "all",
-+ "media-col-database"
-+ };
-
-
- /*
-@@ -4264,6 +4269,7 @@ get_printer_ppd(const char *uri, /* I - Printer URI */
-
- request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
-+ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
- response = cupsDoRequest(http, request, resource);
-
- if (!_ppdCreateFromIPP(buffer, bufsize, response))
-diff --git a/scheduler/ipp.c b/scheduler/ipp.c
-index 6ea3e37f2..e00275b09 100644
---- a/scheduler/ipp.c
-+++ b/scheduler/ipp.c
-@@ -1,7 +1,7 @@
- /*
- * IPP routines for the CUPS scheduler.
- *
-- * Copyright © 2007-2018 by Apple Inc.
-+ * Copyright © 2007-2019 by Apple Inc.
- * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
- *
- * This file contains Kerberos support code, copyright 2006 by
-@@ -5279,6 +5279,11 @@ create_local_bg_thread(
- *response; /* Response from printer */
- ipp_attribute_t *attr; /* Attribute in response */
- ipp_status_t status; /* Status code */
-+ static const char * const pattrs[] = /* Printer attributes we need */
-+ {
-+ "all",
-+ "media-col-database"
-+ };
-
-
- /*
-@@ -5313,7 +5318,7 @@ create_local_bg_thread(
- request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
- ippSetVersion(request, 2, 0);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer->device_uri);
-- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "all");
-+ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
-
- response = cupsDoRequest(http, request, resource);
- status = cupsLastError();
-diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c
-index ee2438c1d..e979e56c4 100644
---- a/systemv/lpadmin.c
-+++ b/systemv/lpadmin.c
-@@ -1,7 +1,7 @@
- /*
- * "lpadmin" command for CUPS.
- *
-- * Copyright © 2007-2018 by Apple Inc.
-+ * Copyright © 2007-2019 by Apple Inc.
- * Copyright © 1997-2006 by Easy Software Products.
- *
- * These coded instructions, statements, and computer programs are the
-@@ -1194,9 +1194,7 @@ get_printer_ppd(
- int port; /* Port number */
- static const char * const pattrs[] = /* Attributes to use */
- {
-- "job-template",
-- "printer-defaults",
-- "printer-description",
-+ "all",
- "media-col-database"
- };
-
diff --git a/debian/patches/0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch b/debian/patches/0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch
deleted file mode 100644
index 480594d9a..000000000
--- a/debian/patches/0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From 62283fab59e63c2be87171bc36c00717a91b7663 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Mon, 21 Jan 2019 11:32:42 -0500
-Subject: Add a USB quirk rule for the Lexmark E120n (Issue #5478)
-
----
- backend/org.cups.usb-quirks | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks
-index 3f99f60de..00d3b2545 100644
---- a/backend/org.cups.usb-quirks
-+++ b/backend/org.cups.usb-quirks
-@@ -293,3 +293,6 @@
-
- # Zebra ZD420 (Issue #5395)
- 0x0a5f 0x0120 unidir no-reattach
-+
-+# Lexmark E120n (Issue #5478)
-+0x043d 0x00cc no-reattach
diff --git a/debian/patches/0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch b/debian/patches/0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch
deleted file mode 100644
index 73530b0c7..000000000
--- a/debian/patches/0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From d218d3e75bea23c39ab48cb44799db13267b9c94 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Wed, 23 Jan 2019 11:15:29 -0500
-Subject: Updated the USB quirks rule for Zebra label printers (Issue #5395)
-
-Now all Zebra label printers use unidir and no-reattach.
----
- backend/org.cups.usb-quirks | 7 ++-----
- 1 file changed, 2 insertions(+), 5 deletions(-)
-
-diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks
-index 00d3b2545..0586602ab 100644
---- a/backend/org.cups.usb-quirks
-+++ b/backend/org.cups.usb-quirks
-@@ -140,8 +140,8 @@
- # Samsung ML-2160 Series (https://bugzilla.redhat.com/show_bug.cgi?id=873123)
- 0x04e8 0x330f unidir
-
--# All Zebra devices (https://bugs.launchpad.net/bugs/1001028)
--0x0a5f unidir
-+# All Zebra devices (https://bugs.launchpad.net/bugs/1001028) (Issue #5395)
-+0x0a5f unidir no-reattach
-
- # Canon CP-10
- 0x04a9 0x304a blacklist
-@@ -291,8 +291,5 @@
- # Star TSP743 (Issue #5443)
- 0x0519 0x0001 delay-close
-
--# Zebra ZD420 (Issue #5395)
--0x0a5f 0x0120 unidir no-reattach
--
- # Lexmark E120n (Issue #5478)
- 0x043d 0x00cc no-reattach
diff --git a/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch b/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch
deleted file mode 100644
index 515af009d..000000000
--- a/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From f8eac850dfbdb4a8d6a02f4d5eb2a473e7b088b4 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Tue, 19 Feb 2019 11:11:54 -0500
-Subject: Add USB quirks rule for Xerox printers (Issue #5523)
-
----
- backend/org.cups.usb-quirks | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks
-index 0586602ab..77233ea18 100644
---- a/backend/org.cups.usb-quirks
-+++ b/backend/org.cups.usb-quirks
-@@ -293,3 +293,6 @@
-
- # Lexmark E120n (Issue #5478)
- 0x043d 0x00cc no-reattach
-+
-+# All Xerox printers (Issue #5523)
-+0x0924 no-reattach
diff --git a/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch b/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch
deleted file mode 100644
index ad790c8b8..000000000
--- a/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From d4d7ff4dad47ad4d278ca2c84efd602354a4e627 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Thu, 21 Feb 2019 09:54:59 -0500
-Subject: Add a USB quirks rule for the DYMO 450 Turbo (Issue #5521)
-
----
- backend/org.cups.usb-quirks | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks
-index 77233ea18..44d6bb8cb 100644
---- a/backend/org.cups.usb-quirks
-+++ b/backend/org.cups.usb-quirks
-@@ -296,3 +296,6 @@
-
- # All Xerox printers (Issue #5523)
- 0x0924 no-reattach
-+
-+# Dymo 450 Turbo (Issue #5521)
-+0x0922 0x0021 unidir
diff --git a/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch b/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch
deleted file mode 100644
index d7810fd01..000000000
--- a/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 6f2402e51d47e9cebe27eec5bfdb0e5543127e2a Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Mon, 21 Jan 2019 11:54:58 -0500
-Subject: Fix compile error on Linux (Issue #5483)
-
----
- cups/hash.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/cups/hash.c b/cups/hash.c
-index 50dc5fb30..a31372595 100644
---- a/cups/hash.c
-+++ b/cups/hash.c
-@@ -1,7 +1,7 @@
- /*
- * Hashing function for CUPS.
- *
-- * Copyright © 2015-2018 by Apple Inc.
-+ * Copyright © 2015-2019 by Apple Inc.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
-@@ -235,7 +235,7 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
-
- gnutls_hash_fast(alg, data, datalen, hash);
-
-- return (gnutls_hash_get_len(alg));
-+ return ((ssize_t)gnutls_hash_get_len(alg));
- }
-
- #else
diff --git a/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch b/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch
deleted file mode 100644
index 95378ee79..000000000
--- a/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-From fb2f9b86fabc11f9b0fad804199064bdd555201e Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Mon, 21 Jan 2019 13:44:43 -0500
-Subject: Stop parsing the Emulators keywords in PPD files (Issue #5475)
-
-This also addresses a potential memory leak...
----
- cups/ppd.c | 76 ++----------------------------------------------------
- cups/ppd.h | 8 +++---
- 2 files changed, 6 insertions(+), 78 deletions(-)
-
-diff --git a/cups/ppd.c b/cups/ppd.c
-index 5f27484aa..968ea8bf3 100644
---- a/cups/ppd.c
-+++ b/cups/ppd.c
-@@ -1,8 +1,8 @@
- /*
- * PPD file routines for CUPS.
- *
-- * Copyright 2007-2018 by Apple Inc.
-- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
-+ * Copyright © 2007-2019 by Apple Inc.
-+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
-@@ -117,7 +117,6 @@ void
- ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- {
- int i; /* Looping var */
-- ppd_emul_t *emul; /* Current emulation */
- ppd_group_t *group; /* Current group */
- char **font; /* Current font */
- ppd_attr_t **attr; /* Current attribute */
-@@ -144,21 +143,6 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- _cupsStrFree(ppd->jcl_end);
- _cupsStrFree(ppd->jcl_ps);
-
-- /*
-- * Free any emulations...
-- */
--
-- if (ppd->num_emulations > 0)
-- {
-- for (i = ppd->num_emulations, emul = ppd->emulations; i > 0; i --, emul ++)
-- {
-- _cupsStrFree(emul->start);
-- _cupsStrFree(emul->stop);
-- }
--
-- ppd_free(ppd->emulations);
-- }
--
- /*
- * Free any UI groups, subgroups, and options...
- */
-@@ -443,7 +427,6 @@ _ppdOpen(
- _ppd_localization_t localization) /* I - Localization to load */
- {
- int i, j, k; /* Looping vars */
-- int count; /* Temporary count */
- _ppd_line_t line; /* Line buffer */
- ppd_file_t *ppd; /* PPD file record */
- ppd_group_t *group, /* Current group */
-@@ -461,7 +444,6 @@ _ppdOpen(
- /* Human-readable text from file */
- *string, /* Code/text from file */
- *sptr, /* Pointer into string */
-- *nameptr, /* Pointer into name */
- *temp, /* Temporary string pointer */
- **tempfonts; /* Temporary fonts pointer */
- float order; /* Order dependency number */
-@@ -1203,60 +1185,6 @@ _ppdOpen(
- else if (!strcmp(string, "Plus90"))
- ppd->landscape = 90;
- }
-- else if (!strcmp(keyword, "Emulators") && string)
-- {
-- for (count = 1, sptr = string; sptr != NULL;)
-- if ((sptr = strchr(sptr, ' ')) != NULL)
-- {
-- count ++;
-- while (*sptr == ' ')
-- sptr ++;
-- }
--
-- ppd->num_emulations = count;
-- if ((ppd->emulations = calloc((size_t)count, sizeof(ppd_emul_t))) == NULL)
-- {
-- pg->ppd_status = PPD_ALLOC_ERROR;
--
-- goto error;
-- }
--
-- for (i = 0, sptr = string; i < count; i ++)
-- {
-- for (nameptr = ppd->emulations[i].name;
-- *sptr != '\0' && *sptr != ' ';
-- sptr ++)
-- if (nameptr < (ppd->emulations[i].name + sizeof(ppd->emulations[i].name) - 1))
-- *nameptr++ = *sptr;
--
-- *nameptr = '\0';
--
-- while (*sptr == ' ')
-- sptr ++;
-- }
-- }
-- else if (!strncmp(keyword, "StartEmulator_", 14))
-- {
-- ppd_decode(string);
--
-- for (i = 0; i < ppd->num_emulations; i ++)
-- if (!strcmp(keyword + 14, ppd->emulations[i].name))
-- {
-- ppd->emulations[i].start = string;
-- string = NULL;
-- }
-- }
-- else if (!strncmp(keyword, "StopEmulator_", 13))
-- {
-- ppd_decode(string);
--
-- for (i = 0; i < ppd->num_emulations; i ++)
-- if (!strcmp(keyword + 13, ppd->emulations[i].name))
-- {
-- ppd->emulations[i].stop = string;
-- string = NULL;
-- }
-- }
- else if (!strcmp(keyword, "JobPatchFile"))
- {
- /*
-diff --git a/cups/ppd.h b/cups/ppd.h
-index 6e628cb60..ae63c0d66 100644
---- a/cups/ppd.h
-+++ b/cups/ppd.h
-@@ -5,8 +5,8 @@
- * -D_PPD_DEPRECATED="" TO YOUR COMPILE OPTIONS. THIS HEADER AND THESE
- * FUNCTIONS WILL BE REMOVED IN A FUTURE RELEASE OF CUPS.
- *
-- * Copyright 2007-2015 by Apple Inc.
-- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
-+ * Copyright © 2007-2019 by Apple Inc.
-+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
-@@ -304,8 +304,8 @@ typedef struct ppd_file_s /**** PPD File ****/
- int throughput; /* Pages per minute */
- ppd_cs_t colorspace; /* Default colorspace */
- char *patches; /* Patch commands to be sent to printer */
-- int num_emulations; /* Number of emulations supported */
-- ppd_emul_t *emulations; /* Emulations and the code to invoke them */
-+ int num_emulations; /* Number of emulations supported (no longer supported) @private@ */
-+ ppd_emul_t *emulations; /* Emulations and the code to invoke them (no longer supported) @private@ */
- char *jcl_begin; /* Start JCL commands */
- char *jcl_ps; /* Enter PostScript interpreter */
- char *jcl_end; /* End JCL commands */
diff --git a/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch b/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch
deleted file mode 100644
index 5f77f3cc8..000000000
--- a/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch
+++ /dev/null
@@ -1,1130 +0,0 @@
-From ffbb46708544f6408bc72f200aa7365ba1222f97 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Mon, 21 Jan 2019 14:21:57 -0500
-Subject: Fix potential unaligned accesses in the string pool (Issue #5474)
-
-This set of changes makes the PPD functions use strdup and free - they were
-modifying the contents of the string in places and doing other things that
-were not safe for (immutable) strings in the pool.
-
-Clean out some more _cupsStr cruft that might potentially cause an unaligned memory access (Issue #5474)
-
-Don't directly use the string pool in the CGI programs or scheduler.
----
- cgi-bin/admin.c | 12 ++---
- cgi-bin/var.c | 42 +++++++--------
- cups/ppd-cache.c | 134 +++++++++++++++++++++--------------------------
- cups/ppd-mark.c | 12 ++---
- cups/ppd.c | 115 ++++++++++++++++++++--------------------
- cups/string.c | 21 ++++----
- scheduler/ipp.c | 8 +--
- 7 files changed, 161 insertions(+), 183 deletions(-)
-
-diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
-index 690fbbc73..06199a96b 100644
---- a/cgi-bin/admin.c
-+++ b/cgi-bin/admin.c
-@@ -767,7 +767,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
- attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris",
- num_printers, NULL, NULL);
- for (i = 0; i < num_printers; i ++)
-- attr->values[i].string.text = _cupsStrAlloc(cgiGetArray("MEMBER_URIS", i));
-+ ippSetString(request, &attr, i, cgiGetArray("MEMBER_URIS", i));
- }
-
- /*
-@@ -2417,7 +2417,7 @@ do_list_printers(http_t *http) /* I - HTTP connection */
- attr;
- attr = ippFindNextAttribute(response, "device-uri", IPP_TAG_URI))
- {
-- cupsArrayAdd(printer_devices, _cupsStrAlloc(attr->values[0].string.text));
-+ cupsArrayAdd(printer_devices, strdup(attr->values[0].string.text));
- }
-
- /*
-@@ -2555,7 +2555,7 @@ do_list_printers(http_t *http) /* I - HTTP connection */
- for (printer_device = (char *)cupsArrayFirst(printer_devices);
- printer_device;
- printer_device = (char *)cupsArrayNext(printer_devices))
-- _cupsStrFree(printer_device);
-+ free(printer_device);
-
- cupsArrayDelete(printer_devices);
- }
-@@ -2952,7 +2952,7 @@ do_set_allowed_users(http_t *http) /* I - HTTP connection */
- * Add the name...
- */
-
-- attr->values[i].string.text = _cupsStrAlloc(ptr);
-+ ippSetString(request, &attr, i, ptr);
-
- /*
- * Advance to the next name...
-@@ -3761,8 +3761,8 @@ do_set_options(http_t *http, /* I - HTTP connection */
-
- attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_NAME,
- "job-sheets-default", 2, NULL, NULL);
-- attr->values[0].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_start"));
-- attr->values[1].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_end"));
-+ ippSetString(request, &attr, 0, cgiGetVariable("job_sheets_start"));
-+ ippSetString(request, &attr, 1, cgiGetVariable("job_sheets_end"));
-
- if ((var = cgiGetVariable("printer_error_policy")) != NULL)
- ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME,
-diff --git a/cgi-bin/var.c b/cgi-bin/var.c
-index 579f23ba3..8b8f26472 100644
---- a/cgi-bin/var.c
-+++ b/cgi-bin/var.c
-@@ -1,8 +1,8 @@
- /*
- * CGI form variable and array functions for CUPS.
- *
-- * Copyright 2007-2015 by Apple Inc.
-- * Copyright 1997-2005 by Easy Software Products.
-+ * Copyright © 2007-2019 by Apple Inc.
-+ * Copyright © 1997-2005 by Easy Software Products.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
-@@ -33,10 +33,10 @@
-
- typedef struct /**** Form variable structure ****/
- {
-- const char *name; /* Name of variable */
-+ char *name; /* Name of variable */
- int nvalues, /* Number of values */
- avalues; /* Number of values allocated */
-- const char **values; /* Value(s) of variable */
-+ char **values; /* Value(s) of variable */
- } _cgi_var_t;
-
-
-@@ -139,10 +139,10 @@ cgiClearVariables(void)
-
- for (v = form_vars, i = form_count; i > 0; v ++, i --)
- {
-- _cupsStrFree(v->name);
-+ free(v->name);
- for (j = 0; j < v->nvalues; j ++)
- if (v->values[j])
-- _cupsStrFree(v->values[j]);
-+ free(v->values[j]);
- }
-
- form_count = 0;
-@@ -168,7 +168,7 @@ cgiGetArray(const char *name, /* I - Name of array variable */
- if (element < 0 || element >= var->nvalues)
- return (NULL);
-
-- return (_cupsStrRetain(var->values[element]));
-+ return (strdup(var->values[element]));
- }
-
-
-@@ -234,7 +234,7 @@ cgiGetVariable(const char *name) /* I - Name of variable */
- var->values[var->nvalues - 1]));
- #endif /* DEBUG */
-
-- return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1]));
-+ return ((var == NULL) ? NULL : strdup(var->values[var->nvalues - 1]));
- }
-
-
-@@ -382,10 +382,9 @@ cgiSetArray(const char *name, /* I - Name of variable */
- {
- if (element >= var->avalues)
- {
-- const char **temp; /* Temporary pointer */
-+ char **temp; /* Temporary pointer */
-
-- temp = (const char **)realloc((void *)(var->values),
-- sizeof(char *) * (size_t)(element + 16));
-+ temp = (char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(element + 16));
- if (!temp)
- return;
-
-@@ -401,9 +400,9 @@ cgiSetArray(const char *name, /* I - Name of variable */
- var->nvalues = element + 1;
- }
- else if (var->values[element])
-- _cupsStrFree((char *)var->values[element]);
-+ free((char *)var->values[element]);
-
-- var->values[element] = _cupsStrAlloc(value);
-+ var->values[element] = strdup(value);
- }
- }
-
-@@ -460,10 +459,9 @@ cgiSetSize(const char *name, /* I - Name of variable */
-
- if (size >= var->avalues)
- {
-- const char **temp; /* Temporary pointer */
-+ char **temp; /* Temporary pointer */
-
-- temp = (const char **)realloc((void *)(var->values),
-- sizeof(char *) * (size_t)(size + 16));
-+ temp = (char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(size + 16));
- if (!temp)
- return;
-
-@@ -480,7 +478,7 @@ cgiSetSize(const char *name, /* I - Name of variable */
- {
- for (i = size; i < var->nvalues; i ++)
- if (var->values[i])
-- _cupsStrFree((void *)(var->values[i]));
-+ free((void *)(var->values[i]));
- }
-
- var->nvalues = size;
-@@ -515,9 +513,9 @@ cgiSetVariable(const char *name, /* I - Name of variable */
- {
- for (i = 0; i < var->nvalues; i ++)
- if (var->values[i])
-- _cupsStrFree((char *)var->values[i]);
-+ free((char *)var->values[i]);
-
-- var->values[0] = _cupsStrAlloc(value);
-+ var->values[0] = strdup(value);
- var->nvalues = 1;
- }
- }
-@@ -563,10 +561,10 @@ cgi_add_variable(const char *name, /* I - Variable name */
- if ((var->values = calloc((size_t)element + 1, sizeof(char *))) == NULL)
- return;
-
-- var->name = _cupsStrAlloc(name);
-+ var->name = strdup(name);
- var->nvalues = element + 1;
- var->avalues = element + 1;
-- var->values[element] = _cupsStrAlloc(value);
-+ var->values[element] = strdup(value);
-
- form_count ++;
- }
-@@ -598,7 +596,7 @@ cgi_find_variable(const char *name) /* I - Name of variable */
- if (form_count < 1 || name == NULL)
- return (NULL);
-
-- key.name = name;
-+ key.name = (char *)name;
-
- return ((_cgi_var_t *)bsearch(&key, form_vars, (size_t)form_count, sizeof(_cgi_var_t),
- (int (*)(const void *, const void *))cgi_compare_variables));
-diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c
-index ab91f0fd4..8b496e3b2 100644
---- a/cups/ppd-cache.c
-+++ b/cups/ppd-cache.c
-@@ -1,7 +1,7 @@
- /*
- * PPD cache implementation for CUPS.
- *
-- * Copyright © 2010-2018 by Apple Inc.
-+ * Copyright © 2010-2019 by Apple Inc.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
-@@ -508,24 +508,20 @@ _ppdCacheCreateWithFile(
- else if (!_cups_strcasecmp(line, "Filter"))
- {
- if (!pc->filters)
-- pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0,
-- (cups_acopy_func_t)_cupsStrAlloc,
-- (cups_afree_func_t)_cupsStrFree);
-+ pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
-
- cupsArrayAdd(pc->filters, value);
- }
- else if (!_cups_strcasecmp(line, "PreFilter"))
- {
- if (!pc->prefilters)
-- pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0,
-- (cups_acopy_func_t)_cupsStrAlloc,
-- (cups_afree_func_t)_cupsStrFree);
-+ pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
-
- cupsArrayAdd(pc->prefilters, value);
- }
- else if (!_cups_strcasecmp(line, "Product"))
- {
-- pc->product = _cupsStrAlloc(value);
-+ pc->product = strdup(value);
- }
- else if (!_cups_strcasecmp(line, "SingleFile"))
- {
-@@ -625,8 +621,8 @@ _ppdCacheCreateWithFile(
- }
-
- map = pc->bins + pc->num_bins;
-- map->pwg = _cupsStrAlloc(pwg_keyword);
-- map->ppd = _cupsStrAlloc(ppd_keyword);
-+ map->pwg = strdup(pwg_keyword);
-+ map->ppd = strdup(ppd_keyword);
-
- pc->num_bins ++;
- }
-@@ -680,8 +676,8 @@ _ppdCacheCreateWithFile(
- goto create_error;
- }
-
-- size->map.pwg = _cupsStrAlloc(pwg_keyword);
-- size->map.ppd = _cupsStrAlloc(ppd_keyword);
-+ size->map.pwg = strdup(pwg_keyword);
-+ size->map.ppd = strdup(ppd_keyword);
-
- pc->num_sizes ++;
- }
-@@ -709,15 +705,15 @@ _ppdCacheCreateWithFile(
-
- pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max",
- pc->custom_max_width, pc->custom_max_length, NULL);
-- pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword);
-+ pc->custom_max_keyword = strdup(pwg_keyword);
-
- pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min",
- pc->custom_min_width, pc->custom_min_length, NULL);
-- pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword);
-+ pc->custom_min_keyword = strdup(pwg_keyword);
- }
- else if (!_cups_strcasecmp(line, "SourceOption"))
- {
-- pc->source_option = _cupsStrAlloc(value);
-+ pc->source_option = strdup(value);
- }
- else if (!_cups_strcasecmp(line, "NumSources"))
- {
-@@ -764,8 +760,8 @@ _ppdCacheCreateWithFile(
- }
-
- map = pc->sources + pc->num_sources;
-- map->pwg = _cupsStrAlloc(pwg_keyword);
-- map->ppd = _cupsStrAlloc(ppd_keyword);
-+ map->pwg = strdup(pwg_keyword);
-+ map->ppd = strdup(ppd_keyword);
-
- pc->num_sources ++;
- }
-@@ -813,8 +809,8 @@ _ppdCacheCreateWithFile(
- }
-
- map = pc->types + pc->num_types;
-- map->pwg = _cupsStrAlloc(pwg_keyword);
-- map->ppd = _cupsStrAlloc(ppd_keyword);
-+ map->pwg = strdup(pwg_keyword);
-+ map->ppd = strdup(ppd_keyword);
-
- pc->num_types ++;
- }
-@@ -844,13 +840,13 @@ _ppdCacheCreateWithFile(
- pc->presets[print_color_mode] + print_quality);
- }
- else if (!_cups_strcasecmp(line, "SidesOption"))
-- pc->sides_option = _cupsStrAlloc(value);
-+ pc->sides_option = strdup(value);
- else if (!_cups_strcasecmp(line, "Sides1Sided"))
-- pc->sides_1sided = _cupsStrAlloc(value);
-+ pc->sides_1sided = strdup(value);
- else if (!_cups_strcasecmp(line, "Sides2SidedLong"))
-- pc->sides_2sided_long = _cupsStrAlloc(value);
-+ pc->sides_2sided_long = strdup(value);
- else if (!_cups_strcasecmp(line, "Sides2SidedShort"))
-- pc->sides_2sided_short = _cupsStrAlloc(value);
-+ pc->sides_2sided_short = strdup(value);
- else if (!_cups_strcasecmp(line, "Finishings"))
- {
- if (!pc->finishings)
-@@ -871,13 +867,13 @@ _ppdCacheCreateWithFile(
- else if (!_cups_strcasecmp(line, "MaxCopies"))
- pc->max_copies = atoi(value);
- else if (!_cups_strcasecmp(line, "ChargeInfoURI"))
-- pc->charge_info_uri = _cupsStrAlloc(value);
-+ pc->charge_info_uri = strdup(value);
- else if (!_cups_strcasecmp(line, "JobAccountId"))
- pc->account_id = !_cups_strcasecmp(value, "true");
- else if (!_cups_strcasecmp(line, "JobAccountingUserId"))
- pc->accounting_user_id = !_cups_strcasecmp(value, "true");
- else if (!_cups_strcasecmp(line, "JobPassword"))
-- pc->password = _cupsStrAlloc(value);
-+ pc->password = strdup(value);
- else if (!_cups_strcasecmp(line, "Mandatory"))
- {
- if (pc->mandatory)
-@@ -888,9 +884,7 @@ _ppdCacheCreateWithFile(
- else if (!_cups_strcasecmp(line, "SupportFile"))
- {
- if (!pc->support_files)
-- pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0,
-- (cups_acopy_func_t)_cupsStrAlloc,
-- (cups_afree_func_t)_cupsStrFree);
-+ pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
-
- cupsArrayAdd(pc->support_files, value);
- }
-@@ -1130,8 +1124,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- */
-
- new_size = old_size;
-- _cupsStrFree(old_size->map.ppd);
-- _cupsStrFree(old_size->map.pwg);
-+ free(old_size->map.ppd);
-+ free(old_size->map.pwg);
- }
- }
-
-@@ -1152,8 +1146,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- * Save this size...
- */
-
-- new_size->map.ppd = _cupsStrAlloc(ppd_size->name);
-- new_size->map.pwg = _cupsStrAlloc(pwg_name);
-+ new_size->map.ppd = strdup(ppd_size->name);
-+ new_size->map.pwg = strdup(pwg_name);
- new_size->width = new_width;
- new_size->length = new_length;
- new_size->left = new_left;
-@@ -1173,14 +1167,14 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max",
- PWG_FROM_POINTS(ppd->custom_max[0]),
- PWG_FROM_POINTS(ppd->custom_max[1]), NULL);
-- pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword);
-+ pc->custom_max_keyword = strdup(pwg_keyword);
- pc->custom_max_width = PWG_FROM_POINTS(ppd->custom_max[0]);
- pc->custom_max_length = PWG_FROM_POINTS(ppd->custom_max[1]);
-
- pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min",
- PWG_FROM_POINTS(ppd->custom_min[0]),
- PWG_FROM_POINTS(ppd->custom_min[1]), NULL);
-- pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword);
-+ pc->custom_min_keyword = strdup(pwg_keyword);
- pc->custom_min_width = PWG_FROM_POINTS(ppd->custom_min[0]);
- pc->custom_min_length = PWG_FROM_POINTS(ppd->custom_min[1]);
-
-@@ -1199,7 +1193,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
-
- if (input_slot)
- {
-- pc->source_option = _cupsStrAlloc(input_slot->keyword);
-+ pc->source_option = strdup(input_slot->keyword);
-
- if ((pc->sources = calloc((size_t)input_slot->num_choices, sizeof(pwg_map_t))) == NULL)
- {
-@@ -1251,8 +1245,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- "_");
- }
-
-- map->pwg = _cupsStrAlloc(pwg_name);
-- map->ppd = _cupsStrAlloc(choice->choice);
-+ map->pwg = strdup(pwg_name);
-+ map->ppd = strdup(choice->choice);
- }
- }
-
-@@ -1315,8 +1309,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- "_");
- }
-
-- map->pwg = _cupsStrAlloc(pwg_name);
-- map->ppd = _cupsStrAlloc(choice->choice);
-+ map->pwg = strdup(pwg_name);
-+ map->ppd = strdup(choice->choice);
- }
- }
-
-@@ -1342,8 +1336,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- {
- pwg_unppdize_name(choice->choice, pwg_keyword, sizeof(pwg_keyword), "_");
-
-- map->pwg = _cupsStrAlloc(pwg_keyword);
-- map->ppd = _cupsStrAlloc(choice->choice);
-+ map->pwg = strdup(pwg_keyword);
-+ map->ppd = strdup(choice->choice);
- }
- }
-
-@@ -1558,7 +1552,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
-
- if (duplex)
- {
-- pc->sides_option = _cupsStrAlloc(duplex->keyword);
-+ pc->sides_option = strdup(duplex->keyword);
-
- for (i = duplex->num_choices, choice = duplex->choices;
- i > 0;
-@@ -1566,16 +1560,16 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- {
- if ((!_cups_strcasecmp(choice->choice, "None") ||
- !_cups_strcasecmp(choice->choice, "False")) && !pc->sides_1sided)
-- pc->sides_1sided = _cupsStrAlloc(choice->choice);
-+ pc->sides_1sided = strdup(choice->choice);
- else if ((!_cups_strcasecmp(choice->choice, "DuplexNoTumble") ||
- !_cups_strcasecmp(choice->choice, "LongEdge") ||
- !_cups_strcasecmp(choice->choice, "Top")) && !pc->sides_2sided_long)
-- pc->sides_2sided_long = _cupsStrAlloc(choice->choice);
-+ pc->sides_2sided_long = strdup(choice->choice);
- else if ((!_cups_strcasecmp(choice->choice, "DuplexTumble") ||
- !_cups_strcasecmp(choice->choice, "ShortEdge") ||
- !_cups_strcasecmp(choice->choice, "Bottom")) &&
- !pc->sides_2sided_short)
-- pc->sides_2sided_short = _cupsStrAlloc(choice->choice);
-+ pc->sides_2sided_short = strdup(choice->choice);
- }
- }
-
-@@ -1583,9 +1577,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- * Copy filters and pre-filters...
- */
-
-- pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0,
-- (cups_acopy_func_t)_cupsStrAlloc,
-- (cups_afree_func_t)_cupsStrFree);
-+ pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
-
- cupsArrayAdd(pc->filters,
- "application/vnd.cups-raw application/octet-stream 0 -");
-@@ -1642,9 +1634,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
-
- if ((ppd_attr = ppdFindAttr(ppd, "cupsPreFilter", NULL)) != NULL)
- {
-- pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0,
-- (cups_acopy_func_t)_cupsStrAlloc,
-- (cups_afree_func_t)_cupsStrFree);
-+ pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
-
- do
- {
-@@ -1661,7 +1651,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- */
-
- if (ppd->product)
-- pc->product = _cupsStrAlloc(ppd->product);
-+ pc->product = strdup(ppd->product);
-
- /*
- * Copy finishings mapping data...
-@@ -1818,7 +1808,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- */
-
- if ((ppd_attr = ppdFindAttr(ppd, "cupsChargeInfoURI", NULL)) != NULL)
-- pc->charge_info_uri = _cupsStrAlloc(ppd_attr->value);
-+ pc->charge_info_uri = strdup(ppd_attr->value);
-
- if ((ppd_attr = ppdFindAttr(ppd, "cupsJobAccountId", NULL)) != NULL)
- pc->account_id = !_cups_strcasecmp(ppd_attr->value, "true");
-@@ -1827,7 +1817,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- pc->accounting_user_id = !_cups_strcasecmp(ppd_attr->value, "true");
-
- if ((ppd_attr = ppdFindAttr(ppd, "cupsJobPassword", NULL)) != NULL)
-- pc->password = _cupsStrAlloc(ppd_attr->value);
-+ pc->password = strdup(ppd_attr->value);
-
- if ((ppd_attr = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL)
- pc->mandatory = _cupsArrayNewStrings(ppd_attr->value, ' ');
-@@ -1836,9 +1826,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
- * Support files...
- */
-
-- pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0,
-- (cups_acopy_func_t)_cupsStrAlloc,
-- (cups_afree_func_t)_cupsStrFree);
-+ pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
-
- for (ppd_attr = ppdFindAttr(ppd, "cupsICCProfile", NULL);
- ppd_attr;
-@@ -1894,8 +1882,8 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */
- {
- for (i = pc->num_bins, map = pc->bins; i > 0; i --, map ++)
- {
-- _cupsStrFree(map->pwg);
-- _cupsStrFree(map->ppd);
-+ free(map->pwg);
-+ free(map->ppd);
- }
-
- free(pc->bins);
-@@ -1905,22 +1893,21 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */
- {
- for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++)
- {
-- _cupsStrFree(size->map.pwg);
-- _cupsStrFree(size->map.ppd);
-+ free(size->map.pwg);
-+ free(size->map.ppd);
- }
-
- free(pc->sizes);
- }
-
-- if (pc->source_option)
-- _cupsStrFree(pc->source_option);
-+ free(pc->source_option);
-
- if (pc->sources)
- {
- for (i = pc->num_sources, map = pc->sources; i > 0; i --, map ++)
- {
-- _cupsStrFree(map->pwg);
-- _cupsStrFree(map->ppd);
-+ free(map->pwg);
-+ free(map->ppd);
- }
-
- free(pc->sources);
-@@ -1930,26 +1917,23 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */
- {
- for (i = pc->num_types, map = pc->types; i > 0; i --, map ++)
- {
-- _cupsStrFree(map->pwg);
-- _cupsStrFree(map->ppd);
-+ free(map->pwg);
-+ free(map->ppd);
- }
-
- free(pc->types);
- }
-
-- if (pc->custom_max_keyword)
-- _cupsStrFree(pc->custom_max_keyword);
--
-- if (pc->custom_min_keyword)
-- _cupsStrFree(pc->custom_min_keyword);
-+ free(pc->custom_max_keyword);
-+ free(pc->custom_min_keyword);
-
-- _cupsStrFree(pc->product);
-+ free(pc->product);
- cupsArrayDelete(pc->filters);
- cupsArrayDelete(pc->prefilters);
- cupsArrayDelete(pc->finishings);
-
-- _cupsStrFree(pc->charge_info_uri);
-- _cupsStrFree(pc->password);
-+ free(pc->charge_info_uri);
-+ free(pc->password);
-
- cupsArrayDelete(pc->mandatory);
-
-diff --git a/cups/ppd-mark.c b/cups/ppd-mark.c
-index 464c09a98..2d106ba9e 100644
---- a/cups/ppd-mark.c
-+++ b/cups/ppd-mark.c
-@@ -1,8 +1,8 @@
- /*
- * Option marking routines for CUPS.
- *
-- * Copyright 2007-2017 by Apple Inc.
-- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
-+ * Copyright © 2007-2019 by Apple Inc.
-+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
-@@ -890,9 +890,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
- case PPD_CUSTOM_PASSWORD :
- case PPD_CUSTOM_STRING :
- if (cparam->current.custom_string)
-- _cupsStrFree(cparam->current.custom_string);
-+ free(cparam->current.custom_string);
-
-- cparam->current.custom_string = _cupsStrAlloc(choice + 7);
-+ cparam->current.custom_string = strdup(choice + 7);
- break;
- }
- }
-@@ -967,9 +967,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
- case PPD_CUSTOM_PASSWORD :
- case PPD_CUSTOM_STRING :
- if (cparam->current.custom_string)
-- _cupsStrFree(cparam->current.custom_string);
-+ free(cparam->current.custom_string);
-
-- cparam->current.custom_string = _cupsStrRetain(val->value);
-+ cparam->current.custom_string = strdup(val->value);
- break;
- }
- }
-diff --git a/cups/ppd.c b/cups/ppd.c
-index 968ea8bf3..435b992f4 100644
---- a/cups/ppd.c
-+++ b/cups/ppd.c
-@@ -34,8 +34,6 @@
- * Definitions...
- */
-
--#define ppd_free(p) if (p) free(p) /* Safe free macro */
--
- #define PPD_KEYWORD 1 /* Line contained a keyword */
- #define PPD_OPTION 2 /* Line contained an option name */
- #define PPD_TEXT 4 /* Line contained human-readable text */
-@@ -135,13 +133,12 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- * Free all strings at the top level...
- */
-
-- _cupsStrFree(ppd->lang_encoding);
-- _cupsStrFree(ppd->nickname);
-- if (ppd->patches)
-- free(ppd->patches);
-- _cupsStrFree(ppd->jcl_begin);
-- _cupsStrFree(ppd->jcl_end);
-- _cupsStrFree(ppd->jcl_ps);
-+ free(ppd->lang_encoding);
-+ free(ppd->nickname);
-+ free(ppd->patches);
-+ free(ppd->jcl_begin);
-+ free(ppd->jcl_end);
-+ free(ppd->jcl_ps);
-
- /*
- * Free any UI groups, subgroups, and options...
-@@ -152,7 +149,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++)
- ppd_free_group(group);
-
-- ppd_free(ppd->groups);
-+ free(ppd->groups);
- }
-
- cupsArrayDelete(ppd->options);
-@@ -163,14 +160,14 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- */
-
- if (ppd->num_sizes > 0)
-- ppd_free(ppd->sizes);
-+ free(ppd->sizes);
-
- /*
- * Free any constraints...
- */
-
- if (ppd->num_consts > 0)
-- ppd_free(ppd->consts);
-+ free(ppd->consts);
-
- /*
- * Free any filters...
-@@ -185,9 +182,9 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- if (ppd->num_fonts > 0)
- {
- for (i = ppd->num_fonts, font = ppd->fonts; i > 0; i --, font ++)
-- _cupsStrFree(*font);
-+ free(*font);
-
-- ppd_free(ppd->fonts);
-+ free(ppd->fonts);
- }
-
- /*
-@@ -195,7 +192,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- */
-
- if (ppd->num_profiles > 0)
-- ppd_free(ppd->profiles);
-+ free(ppd->profiles);
-
- /*
- * Free any attributes...
-@@ -205,11 +202,11 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- {
- for (i = ppd->num_attrs, attr = ppd->attrs; i > 0; i --, attr ++)
- {
-- _cupsStrFree((*attr)->value);
-- ppd_free(*attr);
-+ free((*attr)->value);
-+ free(*attr);
- }
-
-- ppd_free(ppd->attrs);
-+ free(ppd->attrs);
- }
-
- cupsArrayDelete(ppd->sorted_attrs);
-@@ -231,7 +228,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- case PPD_CUSTOM_PASSCODE :
- case PPD_CUSTOM_PASSWORD :
- case PPD_CUSTOM_STRING :
-- _cupsStrFree(cparam->current.custom_string);
-+ free(cparam->current.custom_string);
- break;
-
- default :
-@@ -279,7 +276,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
- * Free the whole record...
- */
-
-- ppd_free(ppd);
-+ free(ppd);
- }
-
-
-@@ -617,15 +614,15 @@ _ppdOpen(
- if (pg->ppd_status == PPD_OK)
- pg->ppd_status = PPD_MISSING_PPDADOBE4;
-
-- _cupsStrFree(string);
-- ppd_free(line.buffer);
-+ free(string);
-+ free(line.buffer);
-
- return (NULL);
- }
-
- DEBUG_printf(("2_ppdOpen: keyword=%s, string=%p", keyword, string));
-
-- _cupsStrFree(string);
-+ free(string);
-
- /*
- * Allocate memory for the PPD file record...
-@@ -635,8 +632,8 @@ _ppdOpen(
- {
- pg->ppd_status = PPD_ALLOC_ERROR;
-
-- _cupsStrFree(string);
-- ppd_free(line.buffer);
-+ free(string);
-+ free(line.buffer);
-
- return (NULL);
- }
-@@ -833,7 +830,7 @@ _ppdOpen(
- * Say all PPD files are UTF-8, since we convert to UTF-8...
- */
-
-- ppd->lang_encoding = _cupsStrAlloc("UTF-8");
-+ ppd->lang_encoding = strdup("UTF-8");
- encoding = _ppdGetEncoding(string);
- }
- else if (!strcmp(keyword, "LanguageVersion"))
-@@ -854,10 +851,10 @@ _ppdOpen(
-
-
- cupsCharsetToUTF8(utf8, string, sizeof(utf8), encoding);
-- ppd->nickname = _cupsStrAlloc((char *)utf8);
-+ ppd->nickname = strdup((char *)utf8);
- }
- else
-- ppd->nickname = _cupsStrAlloc(string);
-+ ppd->nickname = strdup(string);
- }
- else if (!strcmp(keyword, "Product"))
- ppd->product = string;
-@@ -867,17 +864,17 @@ _ppdOpen(
- ppd->ttrasterizer = string;
- else if (!strcmp(keyword, "JCLBegin"))
- {
-- ppd->jcl_begin = _cupsStrAlloc(string);
-+ ppd->jcl_begin = strdup(string);
- ppd_decode(ppd->jcl_begin); /* Decode quoted string */
- }
- else if (!strcmp(keyword, "JCLEnd"))
- {
-- ppd->jcl_end = _cupsStrAlloc(string);
-+ ppd->jcl_end = strdup(string);
- ppd_decode(ppd->jcl_end); /* Decode quoted string */
- }
- else if (!strcmp(keyword, "JCLToPSInterpreter"))
- {
-- ppd->jcl_ps = _cupsStrAlloc(string);
-+ ppd->jcl_ps = strdup(string);
- ppd_decode(ppd->jcl_ps); /* Decode quoted string */
- }
- else if (!strcmp(keyword, "AccurateScreensSupport"))
-@@ -945,10 +942,10 @@ _ppdOpen(
- ppd->num_filters ++;
-
- /*
-- * Retain a copy of the filter string...
-+ * Make a copy of the filter string...
- */
-
-- *filter = _cupsStrRetain(string);
-+ *filter = strdup(string);
- }
- else if (!strcmp(keyword, "Throughput"))
- ppd->throughput = atoi(string);
-@@ -971,7 +968,7 @@ _ppdOpen(
- }
-
- ppd->fonts = tempfonts;
-- ppd->fonts[ppd->num_fonts] = _cupsStrAlloc(name);
-+ ppd->fonts[ppd->num_fonts] = strdup(name);
- ppd->num_fonts ++;
- }
- else if (!strncmp(keyword, "ParamCustom", 11))
-@@ -1136,7 +1133,7 @@ _ppdOpen(
- strlcpy(choice->text, text[0] ? text : _("Custom"),
- sizeof(choice->text));
-
-- choice->code = _cupsStrAlloc(string);
-+ choice->code = strdup(string);
-
- if (custom_option->section == PPD_ORDER_JCL)
- ppd_decode(choice->code);
-@@ -1338,7 +1335,7 @@ _ppdOpen(
-
- option->section = PPD_ORDER_ANY;
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
-
- /*
-@@ -1366,7 +1363,7 @@ _ppdOpen(
- strlcpy(choice->text,
- custom_attr->text[0] ? custom_attr->text : _("Custom"),
- sizeof(choice->text));
-- choice->code = _cupsStrRetain(custom_attr->value);
-+ choice->code = strdup(custom_attr->value);
- }
- }
- else if (!strcmp(keyword, "JCLOpenUI"))
-@@ -1445,7 +1442,7 @@ _ppdOpen(
- option->section = PPD_ORDER_JCL;
- group = NULL;
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
-
- /*
-@@ -1469,7 +1466,7 @@ _ppdOpen(
- strlcpy(choice->text,
- custom_attr->text[0] ? custom_attr->text : _("Custom"),
- sizeof(choice->text));
-- choice->code = _cupsStrRetain(custom_attr->value);
-+ choice->code = strdup(custom_attr->value);
- }
- }
- else if (!strcmp(keyword, "CloseUI"))
-@@ -1483,7 +1480,7 @@ _ppdOpen(
-
- option = NULL;
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
- }
- else if (!strcmp(keyword, "JCLCloseUI"))
-@@ -1497,7 +1494,7 @@ _ppdOpen(
-
- option = NULL;
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
- }
- else if (!strcmp(keyword, "OpenGroup"))
-@@ -1544,14 +1541,14 @@ _ppdOpen(
- if (group == NULL)
- goto error;
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
- }
- else if (!strcmp(keyword, "CloseGroup"))
- {
- group = NULL;
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
- }
- else if (!strcmp(keyword, "OrderDependency"))
-@@ -1609,7 +1606,7 @@ _ppdOpen(
- option->order = order;
- }
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
- }
- else if (!strncmp(keyword, "Default", 7))
-@@ -1852,7 +1849,7 @@ _ppdOpen(
- * Don't add this one as an attribute...
- */
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
- }
- else if (!strcmp(keyword, "PaperDimension"))
-@@ -1874,7 +1871,7 @@ _ppdOpen(
- size->width = (float)_cupsStrScand(string, &sptr, loc);
- size->length = (float)_cupsStrScand(sptr, NULL, loc);
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
- }
- else if (!strcmp(keyword, "ImageableArea"))
-@@ -1898,7 +1895,7 @@ _ppdOpen(
- size->right = (float)_cupsStrScand(sptr, &sptr, loc);
- size->top = (float)_cupsStrScand(sptr, NULL, loc);
-
-- _cupsStrFree(string);
-+ free(string);
- string = NULL;
- }
- else if (option != NULL &&
-@@ -1954,7 +1951,7 @@ _ppdOpen(
- (mask & (PPD_KEYWORD | PPD_STRING)) == (PPD_KEYWORD | PPD_STRING))
- ppd_add_attr(ppd, keyword, name, text, string);
- else
-- _cupsStrFree(string);
-+ free(string);
- }
-
- /*
-@@ -1977,7 +1974,7 @@ _ppdOpen(
- goto error;
- }
-
-- ppd_free(line.buffer);
-+ free(line.buffer);
-
- /*
- * Reset language preferences...
-@@ -2059,8 +2056,8 @@ _ppdOpen(
-
- error:
-
-- _cupsStrFree(string);
-- ppd_free(line.buffer);
-+ free(string);
-+ free(line.buffer);
-
- ppdClose(ppd);
-
-@@ -2498,9 +2495,9 @@ ppd_free_filters(ppd_file_t *ppd) /* I - PPD file */
- if (ppd->num_filters > 0)
- {
- for (i = ppd->num_filters, filter = ppd->filters; i > 0; i --, filter ++)
-- _cupsStrFree(*filter);
-+ free(*filter);
-
-- ppd_free(ppd->filters);
-+ free(ppd->filters);
-
- ppd->num_filters = 0;
- ppd->filters = NULL;
-@@ -2527,7 +2524,7 @@ ppd_free_group(ppd_group_t *group) /* I - Group to free */
- i --, option ++)
- ppd_free_option(option);
-
-- ppd_free(group->options);
-+ free(group->options);
- }
-
- if (group->num_subgroups > 0)
-@@ -2537,7 +2534,7 @@ ppd_free_group(ppd_group_t *group) /* I - Group to free */
- i --, subgroup ++)
- ppd_free_group(subgroup);
-
-- ppd_free(group->subgroups);
-+ free(group->subgroups);
- }
- }
-
-@@ -2559,10 +2556,10 @@ ppd_free_option(ppd_option_t *option) /* I - Option to free */
- i > 0;
- i --, choice ++)
- {
-- _cupsStrFree(choice->code);
-+ free(choice->code);
- }
-
-- ppd_free(option->choices);
-+ free(option->choices);
- }
- }
-
-@@ -3299,7 +3296,7 @@ ppd_read(cups_file_t *fp, /* I - File to read from */
- lineptr ++;
- }
-
-- *string = _cupsStrAlloc(lineptr);
-+ *string = strdup(lineptr);
-
- mask |= PPD_STRING;
- }
-@@ -3421,7 +3418,7 @@ ppd_update_filters(ppd_file_t *ppd, /* I - PPD file */
- filter += ppd->num_filters;
- ppd->num_filters ++;
-
-- *filter = _cupsStrAlloc(buffer);
-+ *filter = strdup(buffer);
- }
- while ((attr = ppdFindNextAttr(ppd, "cupsFilter2", NULL)) != NULL);
-
-diff --git a/cups/string.c b/cups/string.c
-index 0d4ed0f50..dd9c12ce8 100644
---- a/cups/string.c
-+++ b/cups/string.c
-@@ -1,8 +1,8 @@
- /*
- * String functions for CUPS.
- *
-- * Copyright 2007-2014 by Apple Inc.
-- * Copyright 1997-2007 by Easy Software Products.
-+ * Copyright © 2007-2019 by Apple Inc.
-+ * Copyright © 1997-2007 by Easy Software Products.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
-@@ -316,15 +316,6 @@ _cupsStrFree(const char *s) /* I - String to free */
-
- key = (_cups_sp_item_t *)(s - offsetof(_cups_sp_item_t, str));
-
--#ifdef DEBUG_GUARDS
-- if (key->guard != _CUPS_STR_GUARD)
-- {
-- DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, "
-- "ref_count=%d", key, key->str, key->guard, key->ref_count));
-- abort();
-- }
--#endif /* DEBUG_GUARDS */
--
- if ((item = (_cups_sp_item_t *)cupsArrayFind(stringpool, key)) != NULL &&
- item == key)
- {
-@@ -332,6 +323,14 @@ _cupsStrFree(const char *s) /* I - String to free */
- * Found it, dereference...
- */
-
-+#ifdef DEBUG_GUARDS
-+ if (key->guard != _CUPS_STR_GUARD)
-+ {
-+ DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, ref_count=%d", key, key->str, key->guard, key->ref_count));
-+ abort();
-+ }
-+#endif /* DEBUG_GUARDS */
-+
- item->ref_count --;
-
- if (!item->ref_count)
-diff --git a/scheduler/ipp.c b/scheduler/ipp.c
-index e00275b09..9be8a7f3b 100644
---- a/scheduler/ipp.c
-+++ b/scheduler/ipp.c
-@@ -2601,8 +2601,7 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
- if (!strcmp(attr->values[i].string.text, "none"))
- continue;
-
-- printer->reasons[printer->num_reasons] =
-- _cupsStrRetain(attr->values[i].string.text);
-+ printer->reasons[printer->num_reasons] = _cupsStrAlloc(attr->values[i].string.text);
- printer->num_reasons ++;
-
- if (!strcmp(attr->values[i].string.text, "paused") &&
-@@ -4892,8 +4891,9 @@ copy_printer_attrs(
-
- if ((p2_uri = ippFindAttribute(p2->attrs, "printer-uri-supported",
- IPP_TAG_URI)) != NULL)
-- member_uris->values[i].string.text =
-- _cupsStrRetain(p2_uri->values[0].string.text);
-+ {
-+ member_uris->values[i].string.text = _cupsStrAlloc(p2_uri->values[0].string.text);
-+ }
- else
- {
- httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri,
diff --git a/debian/patches/0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch b/debian/patches/0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch
deleted file mode 100644
index e4a3f6a2b..000000000
--- a/debian/patches/0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 917e6f4ff70eed933c80d21eed4c6bfeb2cb68b7 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <michael.r.sweet@gmail.com>
-Date: Mon, 11 Mar 2019 13:54:46 -0400
-Subject: Fix an issue with `PreserveJobHistory` and time values (Issue #5538)
-
-Closes: #921741
----
- scheduler/job.c | 36 ++++++++++++++++++------------------
- 1 file changed, 18 insertions(+), 18 deletions(-)
-
-diff --git a/scheduler/job.c b/scheduler/job.c
-index cc9283fb8..d4793cbb1 100644
---- a/scheduler/job.c
-+++ b/scheduler/job.c
-@@ -437,10 +437,20 @@ cupsdCleanJobs(void)
- curtime = time(NULL);
- JobHistoryUpdate = 0;
-
-+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: curtime=%d", (int)curtime);
-+
- for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
- job;
- job = (cupsd_job_t *)cupsArrayNext(Jobs))
- {
-+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: Job %d, state=%d, printer=%p, history_time=%d, file_time=%d", job->id, (int)job->state_value, (void *)job->printer, (int)job->history_time, (int)job->file_time);
-+
-+ if ((job->history_time && job->history_time) < JobHistoryUpdate || !JobHistoryUpdate)
-+ JobHistoryUpdate = job->history_time;
-+
-+ if ((job->file_time && job->file_time < JobHistoryUpdate) || !JobHistoryUpdate)
-+ JobHistoryUpdate = job->file_time;
-+
- if (job->state_value >= IPP_JOB_CANCELED && !job->printer)
- {
- /*
-@@ -456,21 +466,9 @@ cupsdCleanJobs(void)
- else if (job->file_time && job->file_time <= curtime)
- {
- cupsdLogJob(job, CUPSD_LOG_DEBUG, "Removing document files.");
-- cupsdLogJob(job, CUPSD_LOG_DEBUG2, "curtime=%ld, job->file_time=%ld", (long)curtime, (long)job->file_time);
- remove_job_files(job);
-
- cupsdMarkDirty(CUPSD_DIRTY_JOBS);
--
-- if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate)
-- JobHistoryUpdate = job->history_time;
-- }
-- else
-- {
-- if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate)
-- JobHistoryUpdate = job->history_time;
--
-- if (job->file_time < JobHistoryUpdate || !JobHistoryUpdate)
-- JobHistoryUpdate = job->file_time;
- }
- }
- }
-@@ -1729,7 +1727,7 @@ cupsdLoadJob(cupsd_job_t *job) /* I - Job */
- job->completed_time = attr->values[0].integer;
-
- if (JobHistory < INT_MAX)
-- job->history_time = attr->values[0].integer + JobHistory;
-+ job->history_time = job->completed_time + JobHistory;
- else
- job->history_time = INT_MAX;
-
-@@ -1740,7 +1738,7 @@ cupsdLoadJob(cupsd_job_t *job) /* I - Job */
- JobHistoryUpdate = job->history_time;
-
- if (JobFiles < INT_MAX)
-- job->file_time = attr->values[0].integer + JobFiles;
-+ job->file_time = job->completed_time + JobFiles;
- else
- job->file_time = INT_MAX;
-
-@@ -2862,8 +2860,10 @@ cupsdUpdateJobs(void)
- * Update history/file expiration times...
- */
-
-+ job->completed_time = attr->values[0].integer;
-+
- if (JobHistory < INT_MAX)
-- job->history_time = attr->values[0].integer + JobHistory;
-+ job->history_time = job->completed_time + JobHistory;
- else
- job->history_time = INT_MAX;
-
-@@ -2877,7 +2877,7 @@ cupsdUpdateJobs(void)
- JobHistoryUpdate = job->history_time;
-
- if (JobFiles < INT_MAX)
-- job->file_time = attr->values[0].integer + JobFiles;
-+ job->file_time = job->completed_time + JobFiles;
- else
- job->file_time = INT_MAX;
-
-@@ -4693,7 +4693,7 @@ set_time(cupsd_job_t *job, /* I - Job to update */
- job->completed_time = curtime;
-
- if (JobHistory < INT_MAX && attr)
-- job->history_time = attr->values[0].integer + JobHistory;
-+ job->history_time = job->completed_time + JobHistory;
- else
- job->history_time = INT_MAX;
-
-@@ -4701,7 +4701,7 @@ set_time(cupsd_job_t *job, /* I - Job to update */
- JobHistoryUpdate = job->history_time;
-
- if (JobFiles < INT_MAX && attr)
-- job->file_time = curtime + JobFiles;
-+ job->file_time = job->completed_time + JobFiles;
- else
- job->file_time = INT_MAX;
-
diff --git a/debian/patches/airprint-support.patch b/debian/patches/airprint-support.patch
index 415227c60..8441efd23 100644
--- a/debian/patches/airprint-support.patch
+++ b/debian/patches/airprint-support.patch
@@ -1,4 +1,4 @@
-From 93864a81b630172c7d8162394c0fc9d2a2cb7f78 Mon Sep 17 00:00:00 2001
+From cd67c9b31e932eaa8cbbb4755b75cea4ef1ff4eb Mon Sep 17 00:00:00 2001
From: Till Kamppeter <till.kamppeter@gmail.com>
Date: Tue, 9 Aug 2016 18:11:29 +0200
Subject: Patch to support Apple AirPrint (printing from iPhone, iPad, iPod
@@ -48,7 +48,7 @@ index fa5371486..84cb0fffe 100644
#
# Text files...
diff --git a/scheduler/conf.c b/scheduler/conf.c
-index 9c1be7089..52f2a6d35 100644
+index 11c94d2e4..2d02af752 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -745,7 +745,7 @@ cupsdReadConfiguration(void)
@@ -78,10 +78,10 @@ index 3dab90ca9..f21942af3 100644
{
keyvalue[count ][0] = "air";
diff --git a/scheduler/printers.c b/scheduler/printers.c
-index 865e3693b..968005059 100644
+index 6f04711f1..1135b133f 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
-@@ -3765,7 +3765,9 @@ add_printer_formats(cupsd_printer_t *p) /* I - Printer */
+@@ -3759,7 +3759,9 @@ add_printer_formats(cupsd_printer_t *p) /* I - Printer */
}
else if (!_cups_strcasecmp(type->super, "image"))
{
diff --git a/debian/patches/confdirperms.patch b/debian/patches/confdirperms.patch
index afb824ee6..43e6cccc5 100644
--- a/debian/patches/confdirperms.patch
+++ b/debian/patches/confdirperms.patch
@@ -1,4 +1,4 @@
-From 2a03d964274a972df70409b72302ef65ff43b043 Mon Sep 17 00:00:00 2001
+From 743868ed0a64d376638adb5b454a18baf8a541ed Mon Sep 17 00:00:00 2001
From: Martin Pitt <mpitt@debian.org>
Date: Tue, 9 Aug 2016 18:11:41 +0200
Subject: Do not mess with the permissions of cupsd.conf.
@@ -11,7 +11,7 @@ Patch-Name: confdirperms.patch
1 file changed, 2 insertions(+)
diff --git a/scheduler/conf.c b/scheduler/conf.c
-index 03fc8ecd5..86e37582b 100644
+index a159b6ff8..6892085a4 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -1134,10 +1134,12 @@ cupsdReadConfiguration(void)
diff --git a/debian/patches/cups-set-default-error-policy-retry-job.patch b/debian/patches/cups-set-default-error-policy-retry-job.patch
index f96173a29..5f4c82a59 100644
--- a/debian/patches/cups-set-default-error-policy-retry-job.patch
+++ b/debian/patches/cups-set-default-error-policy-retry-job.patch
@@ -1,4 +1,4 @@
-From de6d00cd1b3c7a447281e09f7496f25efe5f0957 Mon Sep 17 00:00:00 2001
+From 6edfb5edc10c8fb5b8ade6db14c0efc642092fdb Mon Sep 17 00:00:00 2001
From: Martin Pitt <martin.pitt@ubuntu.com>
Date: Tue, 9 Aug 2016 18:11:47 +0200
Subject: Set default job error policy to "retry-job", since it is less
@@ -18,7 +18,7 @@ Patch-Name: cups-set-default-error-policy-retry-job.patch
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/doc/help/man-cupsd.conf.html b/doc/help/man-cupsd.conf.html
-index 4ba6ecf8f..7f7126475 100644
+index 8850f3523..e5a2d3dd4 100644
--- a/doc/help/man-cupsd.conf.html
+++ b/doc/help/man-cupsd.conf.html
@@ -91,9 +91,9 @@ The default value is "30".
@@ -34,7 +34,7 @@ index 4ba6ecf8f..7f7126475 100644
<dd style="margin-left: 5.0em">Specifies the maximum cost of filters that are run concurrently, which can be used to minimize disk, memory, and CPU resource problems.
A limit of 0 disables filter limiting.
diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in
-index 6cec33969..df2b5bbd5 100644
+index 2d6c5b89e..a870ff91d 100644
--- a/man/cupsd.conf.man.in
+++ b/man/cupsd.conf.man.in
@@ -136,10 +136,10 @@ Specifies that a failed print job should be aborted (discarded) unless otherwise
@@ -51,7 +51,7 @@ index 6cec33969..df2b5bbd5 100644
.TP 5
\fBFilterLimit \fIlimit\fR
diff --git a/scheduler/conf.c b/scheduler/conf.c
-index 755243170..aae7443de 100644
+index 743f64cab..1b70afc94 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -751,7 +751,7 @@ cupsdReadConfiguration(void)
diff --git a/debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch b/debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch
index e435688a4..78104c861 100644
--- a/debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch
+++ b/debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch
@@ -1,4 +1,4 @@
-From e7fd9b04ab5847dc694607543ed8bbd4655044dd Mon Sep 17 00:00:00 2001
+From 71646b0c6c2caf1bb758dc3e500e53f76d2e243c Mon Sep 17 00:00:00 2001
From: Tim Waugh <twaugh@redhat.com>
Date: Tue, 9 Aug 2016 18:11:46 +0200
Subject: Set the default for SyncOnClose to Yes
@@ -53,7 +53,7 @@ index f5e6a9f39..c3d8eeb2b 100644
.TP 5
\fBSystemGroup \fIgroup-name \fR[ ... \fIgroup-name\fR ]
diff --git a/scheduler/conf.c b/scheduler/conf.c
-index b12bda1f6..755243170 100644
+index 898b84f3e..743f64cab 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -735,7 +735,7 @@ cupsdReadConfiguration(void)
@@ -62,6 +62,6 @@ index b12bda1f6..755243170 100644
StrictConformance = FALSE;
- SyncOnClose = FALSE;
+ SyncOnClose = TRUE;
- Timeout = DEFAULT_TIMEOUT;
+ Timeout = 900;
WebInterface = CUPS_DEFAULT_WEBIF;
diff --git a/debian/patches/debianize_cups-config.patch b/debian/patches/debianize_cups-config.patch
index b17824746..f14890ed5 100644
--- a/debian/patches/debianize_cups-config.patch
+++ b/debian/patches/debianize_cups-config.patch
@@ -1,4 +1,4 @@
-From 46797627880e057a4e6e35575636b93b8450d54d Mon Sep 17 00:00:00 2001
+From 7a2def69b1ef279ea750c661b0f95a24b3f1574f Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:49 +0200
Subject: Use dpkg-architecture in cups-config to make it
diff --git a/debian/patches/default_log_settings.patch b/debian/patches/default_log_settings.patch
index dce4c16bd..e99596564 100644
--- a/debian/patches/default_log_settings.patch
+++ b/debian/patches/default_log_settings.patch
@@ -1,4 +1,4 @@
-From 309d0a1a54ca11e25b545e9ba5903d59bbdce1b1 Mon Sep 17 00:00:00 2001
+From 4051e3ad3ccfb42fde52f612696b9edb4521f8d9 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:40 +0200
Subject: Deactivate CUPS' own log rotating as the system already provides a
diff --git a/debian/patches/do-not-broadcast-with-hostnames.patch b/debian/patches/do-not-broadcast-with-hostnames.patch
index dd521216c..ef0e16d29 100644
--- a/debian/patches/do-not-broadcast-with-hostnames.patch
+++ b/debian/patches/do-not-broadcast-with-hostnames.patch
@@ -1,4 +1,4 @@
-From 1779852a06df8333c948b745c3aa3f1f231be64f Mon Sep 17 00:00:00 2001
+From d3ec4d94e1f8c178c4a7d228da2dde11041f33ef Mon Sep 17 00:00:00 2001
From: Till Kampetter <till.kampetter@gmail.com>
Date: Tue, 9 Aug 2016 18:11:35 +0200
Subject: Do not use host names for broadcasting print queues and
@@ -13,7 +13,7 @@ Patch-Name: do-not-broadcast-with-hostnames.patch
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scheduler/conf.c b/scheduler/conf.c
-index 52f2a6d35..03fc8ecd5 100644
+index 2d02af752..a159b6ff8 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -898,7 +898,7 @@ cupsdReadConfiguration(void)
diff --git a/debian/patches/drop_unnecessary_dependencies.patch b/debian/patches/drop_unnecessary_dependencies.patch
index bd18f89c3..a11d03796 100644
--- a/debian/patches/drop_unnecessary_dependencies.patch
+++ b/debian/patches/drop_unnecessary_dependencies.patch
@@ -1,4 +1,4 @@
-From f5a40c519699d77a7265fbe7993df890ab4c00c0 Mon Sep 17 00:00:00 2001
+From c9157cfdf76f24d00775745d9651716112972937 Mon Sep 17 00:00:00 2001
From: Martin Pitt <mpitt@debian.org>
Date: Tue, 9 Aug 2016 18:11:25 +0200
Subject: Do not link libcups.so and libcupsimage.so unnecessarily
@@ -16,7 +16,7 @@ Patch-Name: drop_unnecessary_dependencies.patch
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/Makedefs.in b/Makedefs.in
-index f614c0c1d..431d14019 100644
+index 8541b4976..dd86cde4b 100644
--- a/Makedefs.in
+++ b/Makedefs.in
@@ -156,7 +156,7 @@ DBUS_NOTIFIER = @DBUS_NOTIFIER@
diff --git a/debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch b/debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch
index 9e6a8d07d..db22baf1b 100644
--- a/debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch
+++ b/debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch
@@ -1,4 +1,4 @@
-From 958625d59f2ff723fbf4a535cee7e6ea251b8732 Mon Sep 17 00:00:00 2001
+From d07ce26c5b3a2a79a8e97821a1a88f2ad54b30ee Mon Sep 17 00:00:00 2001
From: Tim Waugh <twaugh@redhat.com>
Date: Tue, 9 Aug 2016 18:11:07 +0200
Subject: Fix jobs with multiple files or multiple formats
@@ -12,7 +12,7 @@ Patch-Name: fixes-for-jobs-with-multiple-files-and-multiple-formats.patch
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/backend/ipp.c b/backend/ipp.c
-index f14a44e66..bc678f50a 100644
+index c364e1978..e072249bd 100644
--- a/backend/ipp.c
+++ b/backend/ipp.c
@@ -1788,7 +1788,10 @@ main(int argc, /* I - Number of command-line args */
diff --git a/debian/patches/log-debug-history-nearly-unlimited.patch b/debian/patches/log-debug-history-nearly-unlimited.patch
index a973aaae8..eabfc4b80 100644
--- a/debian/patches/log-debug-history-nearly-unlimited.patch
+++ b/debian/patches/log-debug-history-nearly-unlimited.patch
@@ -1,4 +1,4 @@
-From 833d317f0520b037c79ad4b1ceeca31529797641 Mon Sep 17 00:00:00 2001
+From 8d4d092df601951637c199a190666b1c11d7be43 Mon Sep 17 00:00:00 2001
From: Till Kampetter <till.kampetter@gmail.com>
Date: Tue, 9 Aug 2016 18:11:45 +0200
Subject: Make log debug history nearly unlimited
@@ -11,7 +11,7 @@ Patch-Name: log-debug-history-nearly-unlimited.patch
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scheduler/conf.c b/scheduler/conf.c
-index 86e37582b..b12bda1f6 100644
+index 6892085a4..898b84f3e 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -721,7 +721,7 @@ cupsdReadConfiguration(void)
diff --git a/debian/patches/logfiles_adm_readable.patch b/debian/patches/logfiles_adm_readable.patch
index 27370c326..af03afba7 100644
--- a/debian/patches/logfiles_adm_readable.patch
+++ b/debian/patches/logfiles_adm_readable.patch
@@ -1,4 +1,4 @@
-From 868577abc6613d776682af81906a38cc2f68d5fb Mon Sep 17 00:00:00 2001
+From 48fcd4a99f5e75be488426a7aa01d2e393bd5520 Mon Sep 17 00:00:00 2001
From: Martin Pitt <mpitt@debian.org>
Date: Tue, 9 Aug 2016 18:11:38 +0200
Subject: Make log files readable to group "adm", if present.
diff --git a/debian/patches/man-cups-lpd-drop-dangling-references.patch b/debian/patches/man-cups-lpd-drop-dangling-references.patch
index 3e11dd901..761339339 100644
--- a/debian/patches/man-cups-lpd-drop-dangling-references.patch
+++ b/debian/patches/man-cups-lpd-drop-dangling-references.patch
@@ -1,4 +1,4 @@
-From 361a21356d8f1bbb0794cad4509bfed141f1a721 Mon Sep 17 00:00:00 2001
+From 2e3633bed229ae17798c9456625591012469ef5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bastien=20ROUCARI=C3=88S?= <bastien.roucaries@u-cergy.fr>
Date: Tue, 9 Aug 2016 18:11:48 +0200
Subject: Drop dangling references from cups-lpd.man
diff --git a/debian/patches/manpage-hyphen-minus.patch b/debian/patches/manpage-hyphen-minus.patch
index 645cf7a6a..2c7134cee 100644
--- a/debian/patches/manpage-hyphen-minus.patch
+++ b/debian/patches/manpage-hyphen-minus.patch
@@ -1,4 +1,4 @@
-From 4d804d883eed3c12719fd830bb24a8e9bc638105 Mon Sep 17 00:00:00 2001
+From ca4c0f32fb4b03e8f1be9feb64abdfe367aac7a3 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:05 +0200
Subject: Fix hyphen-used-as-minus-sign manpage errors
@@ -254,7 +254,7 @@ index 8672afa09..04ba12d35 100644
.BR cupsd (8),
.BR cupsd.conf (5),
diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in
-index 15a5fa9e6..6cec33969 100644
+index 97bf87917..2d6c5b89e 100644
--- a/man/cupsd.conf.man.in
+++ b/man/cupsd.conf.man.in
@@ -443,7 +443,7 @@ The \fIAllowDH\fR option enables cipher suites using plain Diffie-Hellman key ne
@@ -324,7 +324,7 @@ index 253e05799..ce26c50ca 100644
Expressions may also contain modifiers:
.TP 5
diff --git a/man/ipptoolfile.man b/man/ipptoolfile.man
-index 35b050419..c10254f64 100644
+index 5e8384b69..b7c594a0f 100644
--- a/man/ipptoolfile.man
+++ b/man/ipptoolfile.man
@@ -169,8 +169,8 @@ The following directives are understood within a \fItest\fR:
diff --git a/debian/patches/manpage-translations.patch b/debian/patches/manpage-translations.patch
index 480d1add0..1e326e7e0 100644
--- a/debian/patches/manpage-translations.patch
+++ b/debian/patches/manpage-translations.patch
@@ -1,4 +1,4 @@
-From 9615ef5f2b8374bfe2816f8ff4314234362ce841 Mon Sep 17 00:00:00 2001
+From 1cd07131ecfb487064814a2c315e89b38066d73c Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:50 +0200
Subject: po4a infrastructure and translations for manpages.
diff --git a/debian/patches/move-cupsd-conf-default-to-share.patch b/debian/patches/move-cupsd-conf-default-to-share.patch
index c181061f2..e437d81c4 100644
--- a/debian/patches/move-cupsd-conf-default-to-share.patch
+++ b/debian/patches/move-cupsd-conf-default-to-share.patch
@@ -1,4 +1,4 @@
-From 636736bf6b694603432da1f72f07754d29e1673d Mon Sep 17 00:00:00 2001
+From df76c461bbe020dade1881bcdaa3732182303092 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:24 +0200
Subject: Move cupsd.conf.default from SERVERROOT to DATADIR
@@ -15,7 +15,7 @@ Patch-Name: move-cupsd-conf-default-to-share.patch
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
-index ce9297765..00830e486 100644
+index 43fad787e..f0d01598d 100644
--- a/cgi-bin/admin.c
+++ b/cgi-bin/admin.c
@@ -1922,6 +1922,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
diff --git a/debian/patches/no-conffile-timestamp.patch b/debian/patches/no-conffile-timestamp.patch
index 3915049d7..9ee7f150a 100644
--- a/debian/patches/no-conffile-timestamp.patch
+++ b/debian/patches/no-conffile-timestamp.patch
@@ -1,4 +1,4 @@
-From 1d450c07d37d9a44ebc8ee270e0dd322bfbeb7f0 Mon Sep 17 00:00:00 2001
+From cafaeeefc9d27d50954752525cd534069354df78 Mon Sep 17 00:00:00 2001
From: Joey Hess <joeyh@debian.org>
Date: Tue, 9 Aug 2016 18:11:31 +0200
Subject: Disable time stamps in conffiles, to avoid ever-changing files in
@@ -29,7 +29,7 @@ index 57f9a8f44..74036fd46 100644
/*
diff --git a/scheduler/job.c b/scheduler/job.c
-index bbef60c64..cc9283fb8 100644
+index dcee43d83..79142bc61 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -2205,7 +2205,7 @@ cupsdSaveAllJobs(void)
@@ -42,10 +42,10 @@ index bbef60c64..cc9283fb8 100644
/*
diff --git a/scheduler/printers.c b/scheduler/printers.c
-index 968005059..fda5316ee 100644
+index 1135b133f..309c1cbe1 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
-@@ -1458,7 +1458,7 @@ cupsdSaveAllPrinters(void)
+@@ -1452,7 +1452,7 @@ cupsdSaveAllPrinters(void)
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate);
cupsFilePuts(fp, "# Printer configuration file for " CUPS_SVERSION "\n");
@@ -55,10 +55,10 @@ index 968005059..fda5316ee 100644
/*
diff --git a/scheduler/subscriptions.c b/scheduler/subscriptions.c
-index b2abf14ee..bf36ced4e 100644
+index cac340520..c0e03b8cb 100644
--- a/scheduler/subscriptions.c
+++ b/scheduler/subscriptions.c
-@@ -1085,7 +1085,7 @@ cupsdSaveAllSubscriptions(void)
+@@ -1088,7 +1088,7 @@ cupsdSaveAllSubscriptions(void)
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate);
cupsFilePuts(fp, "# Subscription configuration file for " CUPS_SVERSION "\n");
diff --git a/debian/patches/pwg-raster-attributes.patch b/debian/patches/pwg-raster-attributes.patch
index 9fa2373d3..3ecf47a46 100644
--- a/debian/patches/pwg-raster-attributes.patch
+++ b/debian/patches/pwg-raster-attributes.patch
@@ -1,4 +1,4 @@
-From b19b9601ea12d001c2ae7f2ef3bdfe43eaca2a9f Mon Sep 17 00:00:00 2001
+From bfed0c1e33e103ccfe934be6eb525ba6aff73b85 Mon Sep 17 00:00:00 2001
From: Till Kamppeter <till.kamppeter@gmail.com>
Date: Tue, 9 Aug 2016 18:11:04 +0200
Subject: For PWG Raster, add required IPP attributes
@@ -14,10 +14,10 @@ Patch-Name: pwg-raster-attributes.patch
1 file changed, 76 insertions(+), 1 deletion(-)
diff --git a/scheduler/printers.c b/scheduler/printers.c
-index 68239d85d..865e3693b 100644
+index 937d0f3c9..6f04711f1 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
-@@ -2199,9 +2199,10 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
+@@ -2193,9 +2193,10 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
cupsd_location_t *auth; /* Pointer to authentication element */
const char *auth_supported; /* Authentication supported */
ipp_t *oldattrs; /* Old printer attributes */
@@ -29,7 +29,7 @@ index 68239d85d..865e3693b 100644
DEBUG_printf(("cupsdSetPrinterAttrs: entering name = %s, type = %x\n", p->name,
-@@ -2538,6 +2539,80 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
+@@ -2532,6 +2533,80 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
DEBUG_printf(("cupsdSetPrinterAttrs: leaving name = %s, type = %x\n", p->name,
p->type));
diff --git a/debian/patches/reactivate_recommended_driver.patch b/debian/patches/reactivate_recommended_driver.patch
index 6df2d7f0c..aa2c93429 100644
--- a/debian/patches/reactivate_recommended_driver.patch
+++ b/debian/patches/reactivate_recommended_driver.patch
@@ -1,4 +1,4 @@
-From 04481c8139358649196c570bff2fb32132d408a2 Mon Sep 17 00:00:00 2001
+From d4f20a4097f2dda79d35df9a87935d8d74021f50 Mon Sep 17 00:00:00 2001
From: Till Kampetter <till.kampetter@gmail.com>
Date: Tue, 9 Aug 2016 18:11:36 +0200
Subject: CUPS removes the "(recommended)" comments of the NickNames of
@@ -13,10 +13,10 @@ Patch-Name: reactivate_recommended_driver.patch
1 file changed, 10 deletions(-)
diff --git a/scheduler/cups-driverd.cxx b/scheduler/cups-driverd.cxx
-index e6684a139..1d4291a73 100644
+index 81c447ad8..d48c75165 100644
--- a/scheduler/cups-driverd.cxx
+++ b/scheduler/cups-driverd.cxx
-@@ -246,7 +246,6 @@ add_ppd(const char *filename, /* I - PPD filename */
+@@ -243,7 +243,6 @@ add_ppd(const char *filename, /* I - PPD filename */
const char *scheme) /* I - PPD scheme */
{
ppd_info_t *ppd; /* PPD */
@@ -24,7 +24,7 @@ index e6684a139..1d4291a73 100644
/*
-@@ -284,15 +283,6 @@ add_ppd(const char *filename, /* I - PPD filename */
+@@ -281,15 +280,6 @@ add_ppd(const char *filename, /* I - PPD filename */
strlcpy(ppd->record.device_id, device_id, sizeof(ppd->record.device_id));
strlcpy(ppd->record.scheme, scheme, sizeof(ppd->record.scheme));
diff --git a/debian/patches/removecvstag.patch b/debian/patches/removecvstag.patch
index ed8183f12..d7dfeae9f 100644
--- a/debian/patches/removecvstag.patch
+++ b/debian/patches/removecvstag.patch
@@ -1,4 +1,4 @@
-From 13c7f079928135d2fe90728ddb073d8571bb0150 Mon Sep 17 00:00:00 2001
+From 84da8ceb42cfed4b7cfe3ee6704d67593e7b0941 Mon Sep 17 00:00:00 2001
From: Kenshi Muto <kmuto@debian.org>
Date: Tue, 9 Aug 2016 18:11:33 +0200
Subject: Do not write VCS tags into installed conffiles
diff --git a/debian/patches/rename-systemd-units.patch b/debian/patches/rename-systemd-units.patch
index 4e318e424..e32949304 100644
--- a/debian/patches/rename-systemd-units.patch
+++ b/debian/patches/rename-systemd-units.patch
@@ -1,4 +1,4 @@
-From 27e3f4429e71af41c18eabcd5e1436e8f40deec1 Mon Sep 17 00:00:00 2001
+From 5deeb9908be6bec764654b35ac23d379bfb5d024 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:34 +0200
Subject: Rename the systemd service file from org.cups.cups.* to cups.*
@@ -36,10 +36,10 @@ index 0f1cc46f2..7c8509fa6 100644
[Path]
PathExists=@CUPS_CACHEDIR@/org.cups.cupsd
diff --git a/scheduler/org.cups.cupsd.service.in b/scheduler/org.cups.cupsd.service.in
-index f2afa1124..3c273612a 100644
+index 5273762fb..cd2334396 100644
--- a/scheduler/org.cups.cupsd.service.in
+++ b/scheduler/org.cups.cupsd.service.in
-@@ -8,5 +8,5 @@ Type=simple
+@@ -9,5 +9,5 @@ Type=simple
Restart=on-failure
[Install]
diff --git a/debian/patches/series b/debian/patches/series
index a25495ef7..ad63fbf33 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -32,15 +32,4 @@ cups-set-default-error-policy-retry-job.patch
man-cups-lpd-drop-dangling-references.patch
debianize_cups-config.patch
0034-Build-mantohtml-with-the-build-architecture-compiler.patch
-0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch
-0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch
-0037-Use-the-same-requested-attributes-values-for-all-IPP.patch
-0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch
-0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch
-0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch
-0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch
-0042-Fix-compile-error-on-Linux-Issue-5483.patch
-0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch
-0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch
-0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch
manpage-translations.patch
diff --git a/debian/patches/show-compile-command-lines.patch b/debian/patches/show-compile-command-lines.patch
index acfe678ea..2191590d8 100644
--- a/debian/patches/show-compile-command-lines.patch
+++ b/debian/patches/show-compile-command-lines.patch
@@ -1,4 +1,4 @@
-From 84cdb2bf1b52f1d2c874cb11e043d145b97f6dc8 Mon Sep 17 00:00:00 2001
+From 0baeb1d78fa49fa2656706f7951e59f520e8e98c Mon Sep 17 00:00:00 2001
From: Till Kampetter <till.kampetter@gmail.com>
Date: Tue, 9 Aug 2016 18:11:43 +0200
Subject: Show compile command lines
@@ -9,7 +9,7 @@ Patch-Name: show-compile-command-lines.patch
1 file changed, 1 deletion(-)
diff --git a/Makedefs.in b/Makedefs.in
-index 431d14019..656d7b44c 100644
+index dd86cde4b..83eae7ce8 100644
--- a/Makedefs.in
+++ b/Makedefs.in
@@ -261,7 +261,6 @@ USBQUIRKS = @USBQUIRKS@
diff --git a/debian/patches/test-i18n-nonlinux.patch b/debian/patches/test-i18n-nonlinux.patch
index 69534b597..93368ff92 100644
--- a/debian/patches/test-i18n-nonlinux.patch
+++ b/debian/patches/test-i18n-nonlinux.patch
@@ -1,4 +1,4 @@
-From e80cf44f0e8306861e4a6cd501d9176ba6321ba8 Mon Sep 17 00:00:00 2001
+From 8db74bb2d98ae2cf7838bbcc080f22b59016a1c5 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:16 +0200
Subject: Tests: Do not run the CUPS_EUC_JP test case on BSD/Hurd either, as
diff --git a/debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch b/debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch
index 94a79c659..35caeb259 100644
--- a/debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch
+++ b/debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch
@@ -1,4 +1,4 @@
-From ad183a459c66cc1bec8727a685235d9ae277ea46 Mon Sep 17 00:00:00 2001
+From 995b47b758bb86a184d923c3960bb8867254557a Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:18 +0200
Subject: Tests: Force LC_* environment variables when testing (non)
@@ -13,7 +13,7 @@ Patch-Name: tests-fix-ppdLocalize-on-unclean-env.patch
1 file changed, 8 insertions(+)
diff --git a/cups/testppd.c b/cups/testppd.c
-index a127a7947..e6cdea5ed 100644
+index 776304b24..943e70033 100644
--- a/cups/testppd.c
+++ b/cups/testppd.c
@@ -503,6 +503,14 @@ main(int argc, /* I - Number of command-line arguments */
diff --git a/debian/patches/tests-ignore-ipv6-address-family-not-supported.patch b/debian/patches/tests-ignore-ipv6-address-family-not-supported.patch
index 5acd26cb7..6531b364e 100644
--- a/debian/patches/tests-ignore-ipv6-address-family-not-supported.patch
+++ b/debian/patches/tests-ignore-ipv6-address-family-not-supported.patch
@@ -1,4 +1,4 @@
-From 216ab53fd4e0efbd4c9bff23e0db41aa0e89ff2f Mon Sep 17 00:00:00 2001
+From 97665110b28de873d64ce94779be5811907104ce Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:33:56 +0200
Subject: Tests: ignore errors triggered on ipv6-deprived hosts
@@ -13,10 +13,10 @@ Patch-Name: tests-ignore-ipv6-address-family-not-supported.patch
1 file changed, 1 insertion(+)
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index fd4cf20d6..99239caea 100755
+index 41da930f0..8c6b2d617 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
-@@ -972,6 +972,7 @@ count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup'
+@@ -1038,6 +1038,7 @@ count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup'
$GREP -v '(dnssd) stopped with status 1' | \
$GREP -v 'loadFile failed: temp file: not a PDF file' | \
$GREP -v 'Failed to connect to system bus' | \
diff --git a/debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch b/debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch
index b1d6359b0..3830b2e59 100644
--- a/debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch
+++ b/debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch
@@ -1,4 +1,4 @@
-From 0c0de72ae34c09b6ec938d4a78be9bf190d16e7d Mon Sep 17 00:00:00 2001
+From 45897f280686076a46b2540cde47e80876354292 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:30:48 +0200
Subject: Tests: ignore loadFile failures
@@ -13,10 +13,10 @@ Patch-Name: tests-ignore-kfreebsd-amd64-not-a-pdf.patch
1 file changed, 2 insertions(+)
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index 8219f1e26..fd4cf20d6 100755
+index c842cf530..41da930f0 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
-@@ -970,6 +970,8 @@ fi
+@@ -1036,6 +1036,8 @@ fi
count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | \
$GREP -v '(usb) crashed on signal 11' | \
$GREP -v '(dnssd) stopped with status 1' | \
diff --git a/debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch b/debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch
index 23c7c2a2a..039733afa 100644
--- a/debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch
+++ b/debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch
@@ -1,4 +1,4 @@
-From 31de6465febf604c20afde267596e98e733ba990 Mon Sep 17 00:00:00 2001
+From e570284abae7d406a2c33b488a4fd0b20dfd93d0 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:36:02 +0200
Subject: Tests: ignore the failure to write uncompressed data
@@ -14,10 +14,10 @@ Patch-Name: tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch
1 file changed, 1 insertion(+)
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index 99239caea..97dc3866f 100755
+index 8c6b2d617..b79149f23 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
-@@ -973,6 +973,7 @@ count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup'
+@@ -1039,6 +1039,7 @@ count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup'
$GREP -v 'loadFile failed: temp file: not a PDF file' | \
$GREP -v 'Failed to connect to system bus' | \
$GREP -v -E 'Unable to open listen socket for address .* Address family not supported by protocol.' | \
diff --git a/debian/patches/tests-ignore-usb-crash.patch b/debian/patches/tests-ignore-usb-crash.patch
index 8faf1757f..3d1cb547d 100644
--- a/debian/patches/tests-ignore-usb-crash.patch
+++ b/debian/patches/tests-ignore-usb-crash.patch
@@ -1,4 +1,4 @@
-From a377691ca08b10ec3976300d5ad02b05f19307cf Mon Sep 17 00:00:00 2001
+From 31f3c8e45c30721385539cf035660a0b6969b82f Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:10 +0200
Subject: Tests: ignore usb & dnssd backend unexpected exits
@@ -17,10 +17,10 @@ Patch-Name: tests-ignore-usb-crash.patch
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index c7de337ae..8219f1e26 100755
+index ce1f386c0..c842cf530 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
-@@ -967,7 +967,10 @@ else
+@@ -1033,7 +1033,10 @@ else
fi
# Error log messages
diff --git a/debian/patches/tests-ignore-warnings.patch b/debian/patches/tests-ignore-warnings.patch
index fcfb94276..946197c76 100644
--- a/debian/patches/tests-ignore-warnings.patch
+++ b/debian/patches/tests-ignore-warnings.patch
@@ -1,4 +1,4 @@
-From 44d082e3a3d2f673801d8e78d66ce08a2cb2236d Mon Sep 17 00:00:00 2001
+From e2af6d00fedf677671093538f24fcca5b75e34bd Mon Sep 17 00:00:00 2001
From: Martin Pitt <mpitt@debian.org>
Date: Tue, 9 Aug 2016 18:11:09 +0200
Subject: Tests: Ignore warnings from colord and Avahi
@@ -13,10 +13,10 @@ Patch-Name: tests-ignore-warnings.patch
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index fc7e2525c..c7de337ae 100755
+index 9cf7bd08a..ce1f386c0 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
-@@ -982,7 +982,11 @@ else
+@@ -1048,7 +1048,11 @@ else
fi
# Warning log messages
diff --git a/debian/patches/tests-make-lpstat-call-reproducible.patch b/debian/patches/tests-make-lpstat-call-reproducible.patch
index 4da028da5..389964326 100644
--- a/debian/patches/tests-make-lpstat-call-reproducible.patch
+++ b/debian/patches/tests-make-lpstat-call-reproducible.patch
@@ -1,4 +1,4 @@
-From d0b8a43d94dc57cb5363e48c3bcb18449d3b9505 Mon Sep 17 00:00:00 2001
+From 56a04f5d453be250b79670a09c1f85d96c8d4ad6 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:22 +0200
Subject: Force LC_ALL=C environment variable when grepping the output of
@@ -13,10 +13,10 @@ Patch-Name: tests-make-lpstat-call-reproducible.patch
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index bcdfd5efe..1c7cc27e7 100755
+index 974da77a5..10ad26495 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
-@@ -695,7 +695,7 @@ else
+@@ -703,7 +703,7 @@ else
fi
while true; do
@@ -25,7 +25,7 @@ index bcdfd5efe..1c7cc27e7 100755
if test "x$running" = "xscheduler is running"; then
break
fi
-@@ -809,13 +809,13 @@ kill -HUP $cupsd
+@@ -817,13 +817,13 @@ kill -HUP $cupsd
while true; do
sleep 10
diff --git a/debian/patches/tests-no-pdftourf.patch b/debian/patches/tests-no-pdftourf.patch
index 8d6bc089b..5e59b1198 100644
--- a/debian/patches/tests-no-pdftourf.patch
+++ b/debian/patches/tests-no-pdftourf.patch
@@ -1,4 +1,4 @@
-From 6a354c3169ea6469bb71e51fc6d7d23e62f7fcaa Mon Sep 17 00:00:00 2001
+From 8d7b0fef89aaf7e175ca5e2fb03851edbce2bb09 Mon Sep 17 00:00:00 2001
From: Michael Sweet <michael.r.sweet@gmail.com>
Date: Tue, 9 Aug 2016 18:11:23 +0200
Subject: Revert pdftourf filter addition in tests
@@ -18,7 +18,7 @@ Patch-Name: tests-no-pdftourf.patch
delete mode 100644 test/test.types
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index 1c7cc27e7..7fd69652c 100755
+index 10ad26495..f7cf61c36 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
@@ -271,7 +271,7 @@ case "$usedebugprintfs" in
diff --git a/debian/patches/tests-use-ipv4-lo-address.patch b/debian/patches/tests-use-ipv4-lo-address.patch
index 4642a7213..481cce3f5 100644
--- a/debian/patches/tests-use-ipv4-lo-address.patch
+++ b/debian/patches/tests-use-ipv4-lo-address.patch
@@ -1,4 +1,4 @@
-From 1697ce7557145b73c55f1c82aec6b70f45228432 Mon Sep 17 00:00:00 2001
+From cbea213e73eb736d8bfa66fc8bea7522ee1ba526 Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:21 +0200
Subject: Use 127.0.0.1 instead of localhost in the test-suite. This should
@@ -30,10 +30,10 @@ index 7efc39892..08b8c508f 100644
echo " FAILED"
exit 1
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index 411689141..bcdfd5efe 100755
+index d64bd89fc..974da77a5 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
-@@ -485,7 +485,7 @@ fi
+@@ -493,7 +493,7 @@ fi
cat >$BASE/cupsd.conf <<EOF
StrictConformance Yes
Browsing Off
@@ -42,7 +42,7 @@ index 411689141..bcdfd5efe 100755
Listen $BASE/sock
MaxSubscriptions 3
MaxLogSize 0
-@@ -599,7 +599,7 @@ fi
+@@ -607,7 +607,7 @@ fi
# These get exported because they don't have side-effects...
CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
@@ -51,7 +51,7 @@ index 411689141..bcdfd5efe 100755
CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT
CUPS_STATEDIR=$BASE; export CUPS_STATEDIR
CUPS_DATADIR=$BASE/share; export CUPS_DATADIR
-@@ -735,10 +735,10 @@ for file in 4*.test ipp-2.1.test; do
+@@ -743,10 +743,10 @@ for file in 4*.test ipp-2.1.test; do
echo $ac_n "`date '+[%d/%b/%Y:%H:%M:%S %z]'` $ac_c" >>$strfile
if test $file = ipp-2.1.test; then
diff --git a/debian/patches/tests-wait-on-unfinished-jobs-everytime.patch b/debian/patches/tests-wait-on-unfinished-jobs-everytime.patch
index deee87c69..b010e02ea 100644
--- a/debian/patches/tests-wait-on-unfinished-jobs-everytime.patch
+++ b/debian/patches/tests-wait-on-unfinished-jobs-everytime.patch
@@ -1,4 +1,4 @@
-From faa9cfa7c22a95abb45d5ed38d894b518e934a2c Mon Sep 17 00:00:00 2001
+From 1b90626cfba63b97d53e17b2e9980ac17ea75e1c Mon Sep 17 00:00:00 2001
From: Didier Raboud <odyx@debian.org>
Date: Tue, 9 Aug 2016 18:11:17 +0200
Subject: Tests: Make sure that all scheduled jobs are finished before
@@ -14,10 +14,10 @@ Patch-Name: tests-wait-on-unfinished-jobs-everytime.patch
1 file changed, 5 insertions(+)
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
-index 97dc3866f..411689141 100755
+index b79149f23..d64bd89fc 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
-@@ -768,6 +768,11 @@ echo " $date by $user on `hostname`." >>$strfile
+@@ -776,6 +776,11 @@ echo " $date by $user on `hostname`." >>$strfile
echo " <pre>" >>$strfile
for file in 5*.sh; do
diff --git a/doc/cups.css b/doc/cups.css
index da6ac1594..79774b104 100644
--- a/doc/cups.css
+++ b/doc/cups.css
@@ -76,6 +76,7 @@
float: left;
margin-left: 0.5%;
margin-right: 0;
+ padding-bottom: 40px;
width: 33%;
}
.row .thirds:first-child {
@@ -86,6 +87,7 @@
float: left;
margin-left: 0.5%;
margin-right: 0;
+ padding-bottom: 40px;
width: 49.75%;
}
.row .halves:first-child {
diff --git a/doc/de/index.html.in b/doc/de/index.html.in
index cbae07b73..cdc29b158 100644
--- a/doc/de/index.html.in
+++ b/doc/de/index.html.in
@@ -50,6 +50,6 @@
</div>
</div>
</div>
- <div class="footer">CUPS und das CUPS Logo sind Warenzeichen der <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. Alle Rechte vorbehalten.</div>
+ <div class="footer">CUPS und das CUPS Logo sind Warenzeichen der <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. Alle Rechte vorbehalten.</div>
</body>
</html>
diff --git a/doc/es/index.html.in b/doc/es/index.html.in
index 6c12f4fdd..6343c38a6 100644
--- a/doc/es/index.html.in
+++ b/doc/es/index.html.in
@@ -50,6 +50,6 @@
</div>
</div>
</div>
- <div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor &copy; 2007-2018 Apple Inc. Todos los derechos reservados.</div>
+ <div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor &copy; 2007-2019 Apple Inc. Todos los derechos reservados.</div>
</body>
</html>
diff --git a/doc/help/man-cupsd.conf.html b/doc/help/man-cupsd.conf.html
index 7f7126475..e5a2d3dd4 100644
--- a/doc/help/man-cupsd.conf.html
+++ b/doc/help/man-cupsd.conf.html
@@ -219,7 +219,7 @@ The value "0" disables log rotation.
The default is "1048576" (1MB).
<dt><a name="MultipleOperationTimeout"></a><b>MultipleOperationTimeout </b><i>seconds</i>
<dd style="margin-left: 5.0em">Specifies the maximum amount of time to allow between files in a multiple file print job.
-The default is "300" (5 minutes).
+The default is "900" (15 minutes).
<dt><a name="Policy"></a><b>&lt;Policy </b><i>name</i><b>> </b>... <b>&lt;/Policy></b>
<dd style="margin-left: 5.0em">Specifies access control for the named policy.
<dt><a name="Port"></a><b>Port </b><i>number</i>
@@ -294,7 +294,7 @@ The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum p
The default is "No".
<dt><a name="Timeout"></a><b>Timeout </b><i>seconds</i>
<dd style="margin-left: 5.0em">Specifies the HTTP request timeout.
-The default is "300" (5 minutes).
+The default is "900" (15 minutes).
<dt><a name="WebInterface"></a><b>WebInterface yes</b>
<dd style="margin-left: 5.0em"><dt><b>WebInterface no</b>
<dd style="margin-left: 5.0em">Specifies whether the web interface is enabled.
@@ -601,7 +601,7 @@ Require authentication for accesses from outside the 10. network:
<a href="man-subscriptions.conf.html?TOPIC=Man+Pages"><b>subscriptions.conf</b>(5),</a>
CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2018 by Apple Inc.
+Copyright &copy; 2007-2019 by Apple Inc.
</body>
</html>
diff --git a/doc/help/man-ipptoolfile.html b/doc/help/man-ipptoolfile.html
index c426af7d8..d8cae816e 100644
--- a/doc/help/man-ipptoolfile.html
+++ b/doc/help/man-ipptoolfile.html
@@ -230,7 +230,7 @@ The following predicates are understood following the <b>EXPECT</b> test directi
<dd style="margin-left: 5.0em">Makes the <b>EXPECT</b> conditions apply only if the specified variable is not defined.
<dt><b>IN-GROUP </b><i>tag</i>
<dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to be in the specified group tag.
-<dt><b>OF-TYPE </b><i>tag[,tag,...]</i>
+<dt><b>OF-TYPE </b><i>tag[|tag,...]</i>
<dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to use one of the specified value tag(s).
<dt><b>REPEAT-LIMIT </b><i>number</i>
<dd style="margin-left: 5.0em"><br>
@@ -532,7 +532,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp-registrations)">
PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp)">http://www.pwg.org/ipp)</a>,
RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011">http://tools.ietf.org/html/rfc8011</a>)
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2017 by Apple Inc.
+Copyright &copy; 2007-2019 by Apple Inc.
</body>
</html>
diff --git a/doc/index.html.in b/doc/index.html.in
index 0cb0164ba..48f18ada4 100644
--- a/doc/index.html.in
+++ b/doc/index.html.in
@@ -50,6 +50,6 @@
</div>
</div>
</div>
- <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. All rights reserved.</div>
+ <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. All rights reserved.</div>
</body>
</html>
diff --git a/doc/ja/index.html.in b/doc/ja/index.html.in
index 08549f9f8..eacc15725 100644
--- a/doc/ja/index.html.in
+++ b/doc/ja/index.html.in
@@ -50,6 +50,6 @@
</div>
</div>
</div>
- <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. All rights reserved.</div>
+ <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. All rights reserved.</div>
</body>
</html>
diff --git a/doc/pt_BR/index.html.in b/doc/pt_BR/index.html.in
index ace82269a..b3ea3582b 100644
--- a/doc/pt_BR/index.html.in
+++ b/doc/pt_BR/index.html.in
@@ -51,6 +51,6 @@
</div>
</div>
</div>
- <div class="footer">CUPS e o logo do CUPS s&atilde;o marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. Todos os direitos reservados.</div>
+ <div class="footer">CUPS e o logo do CUPS s&atilde;o marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. Todos os direitos reservados.</div>
</body>
</html>
diff --git a/doc/ru/index.html.in b/doc/ru/index.html.in
index 7bfc5a37f..47dc6d8fd 100644
--- a/doc/ru/index.html.in
+++ b/doc/ru/index.html.in
@@ -51,6 +51,6 @@
</div>
</div>
</div>
- <div class="footer">CUPS Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ CUPS ΡΠ²Π»ΡΡŽΡ‚ΡΡ зарСгистрированными Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ°Ρ€ΠΊΠ°ΠΌΠΈ <A HREF="http://www.apple.com">Apple Inc.</A> АвторскиС ΠΏΡ€Π°Π²Π° Π½Π° CUPS ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ (2007-2018) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Apple Inc. ВсС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹.</div>
+ <div class="footer">CUPS Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ CUPS ΡΠ²Π»ΡΡŽΡ‚ΡΡ зарСгистрированными Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ°Ρ€ΠΊΠ°ΠΌΠΈ <A HREF="http://www.apple.com">Apple Inc.</A> АвторскиС ΠΏΡ€Π°Π²Π° Π½Π° CUPS ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ (2007-2019) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Apple Inc. ВсС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹.</div>
</body>
</html>
diff --git a/filter/rastertolabel.c b/filter/rastertolabel.c
index 6ad6c625a..b44f49057 100644
--- a/filter/rastertolabel.c
+++ b/filter/rastertolabel.c
@@ -1,7 +1,7 @@
/*
* Label printer filter for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 2001-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -619,7 +619,14 @@ EndPage(ppd_file_t *ppd, /* I - PPD file */
*/
puts("^XZ");
+
+ /*
+ * Delete the label image...
+ */
+
+ puts("^XA");
puts("^IDR:CUPS.GRF^FS");
+ puts("^XZ");
/*
* Cut the label as needed...
diff --git a/locale/cups.pot b/locale/cups.pot
index 46edb9d93..39ea967ee 100644
--- a/locale/cups.pot
+++ b/locale/cups.pot
@@ -26,9 +26,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: CUPS 2.2.9\n"
+"Project-Id-Version: CUPS 2.2.11\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -976,23 +976,23 @@ msgstr ""
msgid " ( expressions ) Group expressions."
msgstr ""
-#: systemv/cupsctl.c:203
+#: systemv/cupsctl.c:244
msgid " --[no-]debug-logging Turn debug logging on/off."
msgstr ""
-#: systemv/cupsctl.c:205
+#: systemv/cupsctl.c:246
msgid " --[no-]remote-admin Turn remote administration on/off."
msgstr ""
-#: systemv/cupsctl.c:207
+#: systemv/cupsctl.c:248
msgid " --[no-]remote-any Allow/prevent access from the Internet."
msgstr ""
-#: systemv/cupsctl.c:209
+#: systemv/cupsctl.c:250
msgid " --[no-]share-printers Turn printer sharing on/off."
msgstr ""
-#: systemv/cupsctl.c:211
+#: systemv/cupsctl.c:252
msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job."
msgstr ""
@@ -1128,7 +1128,7 @@ msgstr ""
msgid " -D name=value Set named variable to value."
msgstr ""
-#: systemv/cupsaddsmb.c:277 systemv/cupsctl.c:198
+#: systemv/cupsaddsmb.c:277 systemv/cupsctl.c:239
msgid " -E Encrypt the connection."
msgstr ""
@@ -1136,7 +1136,7 @@ msgstr ""
msgid " -E Test with encryption using HTTP Upgrade to TLS."
msgstr ""
-#: scheduler/main.c:2106
+#: scheduler/main.c:2100
msgid " -F Run in the foreground but detach from console."
msgstr ""
@@ -1188,7 +1188,7 @@ msgstr ""
msgid " -T seconds Set the receive/send timeout in seconds."
msgstr ""
-#: scheduler/cupsfilter.c:1484 systemv/cupsaddsmb.c:280 systemv/cupsctl.c:199
+#: scheduler/cupsfilter.c:1484 systemv/cupsaddsmb.c:280 systemv/cupsctl.c:240
msgid " -U username Specify username."
msgstr ""
@@ -1220,7 +1220,7 @@ msgstr ""
msgid " -c cups-files.conf Set cups-files.conf file to use."
msgstr ""
-#: scheduler/main.c:2104
+#: scheduler/main.c:2098
msgid " -c cupsd.conf Set cupsd.conf file to use."
msgstr ""
@@ -1244,7 +1244,7 @@ msgstr ""
msgid " -e Use every filter from the PPD file."
msgstr ""
-#: scheduler/main.c:2105
+#: scheduler/main.c:2099
msgid " -f Run in the foreground."
msgstr ""
@@ -1252,7 +1252,7 @@ msgstr ""
msgid " -f filename Set default request filename."
msgstr ""
-#: scheduler/main.c:2107
+#: scheduler/main.c:2101
msgid " -h Show this usage message."
msgstr ""
@@ -1264,7 +1264,7 @@ msgstr ""
msgid " -h regex Match hostname to regular expression."
msgstr ""
-#: systemv/cupsaddsmb.c:282 systemv/cupsctl.c:200
+#: systemv/cupsaddsmb.c:282 systemv/cupsctl.c:241
msgid " -h server[:port] Specify server address."
msgstr ""
@@ -1288,7 +1288,7 @@ msgstr ""
msgid " -l Produce plain text output."
msgstr ""
-#: scheduler/main.c:2109
+#: scheduler/main.c:2103
msgid " -l Run cupsd on demand."
msgstr ""
@@ -1320,7 +1320,7 @@ msgstr ""
msgid " -o filename.drv Set driver information file (otherwise ppdi.drv)."
msgstr ""
-#: ppdc/ppdmerge.cxx:362
+#: ppdc/ppdmerge.cxx:360
msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)."
msgstr ""
@@ -1356,7 +1356,7 @@ msgstr ""
msgid " -s Print service name if true."
msgstr ""
-#: scheduler/main.c:2111
+#: scheduler/main.c:2105
msgid " -s cups-files.conf Set cups-files.conf file to use."
msgstr ""
@@ -1368,7 +1368,7 @@ msgstr ""
msgid " -t Test PPDs instead of generating them."
msgstr ""
-#: scheduler/main.c:2112
+#: scheduler/main.c:2106
msgid " -t Test the configuration file."
msgstr ""
@@ -1555,191 +1555,191 @@ msgstr ""
msgid " PASS"
msgstr ""
-#: cups/ipp.c:5145
+#: cups/ipp.c:5129
#, c-format
msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
msgstr ""
-#: cups/ipp.c:5152
+#: cups/ipp.c:5136
#, c-format
msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
-#: cups/ipp.c:4763
+#: cups/ipp.c:4759
#, c-format
msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-#: cups/ipp.c:4755
+#: cups/ipp.c:4751
#, c-format
msgid "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
-#: cups/ipp.c:4781
+#: cups/ipp.c:4777
#, c-format
msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
msgstr ""
-#: cups/ipp.c:5204
+#: cups/ipp.c:5188
#, c-format
msgid "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
-#: cups/ipp.c:5213
+#: cups/ipp.c:5197
#, c-format
msgid "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
-#: cups/ipp.c:4881
+#: cups/ipp.c:4877
#, c-format
msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4889
+#: cups/ipp.c:4885
#, c-format
msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4873
+#: cups/ipp.c:4869
#, c-format
msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4833
+#: cups/ipp.c:4829
#, c-format
msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4865
+#: cups/ipp.c:4861
#, c-format
msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4841
+#: cups/ipp.c:4837
#, c-format
msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4849
+#: cups/ipp.c:4845
#, c-format
msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4825
+#: cups/ipp.c:4821
#, c-format
msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4857
+#: cups/ipp.c:4853
#, c-format
msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
msgstr ""
-#: cups/ipp.c:4795
+#: cups/ipp.c:4791
#, c-format
msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
-#: cups/ipp.c:5124
+#: cups/ipp.c:5108
#, c-format
msgid "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-#: cups/ipp.c:5115
+#: cups/ipp.c:5099
#, c-format
msgid "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
-#: cups/ipp.c:5313
+#: cups/ipp.c:5297
#, c-format
msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)."
msgstr ""
-#: cups/ipp.c:5323
+#: cups/ipp.c:5307
#, c-format
msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)."
msgstr ""
-#: cups/ipp.c:5087
+#: cups/ipp.c:5071
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
-#: cups/ipp.c:5082
+#: cups/ipp.c:5066
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."
msgstr ""
-#: cups/ipp.c:5095
+#: cups/ipp.c:5079
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
-#: cups/ipp.c:5259
+#: cups/ipp.c:5243
#, c-format
msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)."
msgstr ""
-#: cups/ipp.c:5269
+#: cups/ipp.c:5253
#, c-format
msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)."
msgstr ""
-#: cups/ipp.c:4809
+#: cups/ipp.c:4805
#, c-format
msgid "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
-#: cups/ipp.c:4952
+#: cups/ipp.c:4948
#, c-format
msgid "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14)."
msgstr ""
-#: cups/ipp.c:4933
+#: cups/ipp.c:4929
#, c-format
msgid "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16)."
msgstr ""
-#: cups/ipp.c:4902
+#: cups/ipp.c:4898
#, c-format
msgid "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)."
msgstr ""
-#: cups/ipp.c:4917
+#: cups/ipp.c:4913
#, c-format
msgid "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)."
msgstr ""
-#: cups/ipp.c:5022
+#: cups/ipp.c:5012
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
-#: cups/ipp.c:5017
+#: cups/ipp.c:5007
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."
msgstr ""
-#: cups/ipp.c:5030
+#: cups/ipp.c:5020
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
-#: cups/ipp.c:5175
+#: cups/ipp.c:5159
#, c-format
msgid "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
-#: cups/ipp.c:5184
+#: cups/ipp.c:5168
#, c-format
msgid "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
-#: scheduler/ipp.c:377
+#: scheduler/ipp.c:375
msgid "\"requesting-user-name\" attribute in wrong group."
msgstr ""
-#: scheduler/ipp.c:383 scheduler/ipp.c:398
+#: scheduler/ipp.c:381 scheduler/ipp.c:396
msgid "\"requesting-user-name\" attribute with wrong syntax."
msgstr ""
@@ -1788,7 +1788,7 @@ msgstr ""
msgid "%s accepting requests since %s"
msgstr ""
-#: scheduler/ipp.c:10349
+#: scheduler/ipp.c:10352
#, c-format
msgid "%s cannot be changed."
msgstr ""
@@ -1824,7 +1824,7 @@ msgstr ""
msgid "%s not accepting requests since %s -"
msgstr ""
-#: scheduler/ipp.c:620
+#: scheduler/ipp.c:618
#, c-format
msgid "%s not supported."
msgstr ""
@@ -1847,8 +1847,8 @@ msgstr ""
#. TRANSLATORS: Message is "subject: error"
#: cups/langprintf.c:75 scheduler/cupsfilter.c:724 systemv/lpadmin.c:801
#: systemv/lpadmin.c:852 systemv/lpadmin.c:902 systemv/lpadmin.c:958
-#: systemv/lpadmin.c:1056 systemv/lpadmin.c:1108 systemv/lpadmin.c:1150
-#: systemv/lpadmin.c:1164 systemv/lpadmin.c:1614
+#: systemv/lpadmin.c:1056 systemv/lpadmin.c:1108 systemv/lpadmin.c:1151
+#: systemv/lpadmin.c:1165 systemv/lpadmin.c:1615
#, c-format
msgid "%s: %s"
msgstr ""
@@ -1858,7 +1858,7 @@ msgstr ""
msgid "%s: %s failed: %s"
msgstr ""
-#: systemv/lpadmin.c:1225
+#: systemv/lpadmin.c:1224
#, c-format
msgid "%s: Bad printer URI \"%s\"."
msgstr ""
@@ -2126,7 +2126,7 @@ msgstr ""
msgid "%s: Sorry, no encryption support."
msgstr ""
-#: systemv/lpadmin.c:1232
+#: systemv/lpadmin.c:1231
#, c-format
msgid "%s: Unable to connect to \"%s:%d\": %s"
msgstr ""
@@ -2142,7 +2142,7 @@ msgstr ""
msgid "%s: Unable to contact server."
msgstr ""
-#: systemv/lpadmin.c:1262
+#: systemv/lpadmin.c:1261
#, c-format
msgid "%s: Unable to create PPD file: %s"
msgstr ""
@@ -2157,17 +2157,17 @@ msgstr ""
msgid "%s: Unable to open \"%s\": %s"
msgstr ""
-#: ppdc/ppdmerge.cxx:88
+#: ppdc/ppdmerge.cxx:89
#, c-format
msgid "%s: Unable to open %s: %s"
msgstr ""
-#: scheduler/cupsfilter.c:672 ppdc/ppdmerge.cxx:104
+#: scheduler/cupsfilter.c:672 ppdc/ppdmerge.cxx:105
#, c-format
msgid "%s: Unable to open PPD file: %s on line %d."
msgstr ""
-#: systemv/lpadmin.c:1247
+#: systemv/lpadmin.c:1246
#, c-format
msgid "%s: Unable to query printer: %s"
msgstr ""
@@ -2177,7 +2177,7 @@ msgstr ""
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
msgstr ""
-#: systemv/lpadmin.c:1216
+#: systemv/lpadmin.c:1215
#, c-format
msgid "%s: Unable to resolve \"%s\"."
msgstr ""
@@ -2562,23 +2562,23 @@ msgstr ""
msgid "2 inches/sec."
msgstr ""
-#: cups/ppd-cache.c:3012
+#: cups/ppd-cache.c:2996
msgid "2-Hole Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3013
+#: cups/ppd-cache.c:2997
msgid "2-Hole Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3011
+#: cups/ppd-cache.c:2995
msgid "2-Hole Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3010
+#: cups/ppd-cache.c:2994
msgid "2-Hole Punch (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3735 ppdc/sample.c:262
+#: cups/ppd-cache.c:3737 ppdc/sample.c:262
msgid "2-Sided Printing"
msgstr ""
@@ -2730,19 +2730,19 @@ msgstr ""
msgid "3 x 5"
msgstr ""
-#: cups/ppd-cache.c:3023
+#: cups/ppd-cache.c:3007
msgid "3-Hole Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3021
+#: cups/ppd-cache.c:3005
msgid "3-Hole Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3020
+#: cups/ppd-cache.c:3004
msgid "3-Hole Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3022
+#: cups/ppd-cache.c:3006
msgid "3-Hole Punch (Reverse Portrait)"
msgstr ""
@@ -2834,19 +2834,19 @@ msgstr ""
msgid "4 inches/sec."
msgstr ""
-#: cups/ppd-cache.c:3017
+#: cups/ppd-cache.c:3001
msgid "4-Hole Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3015
+#: cups/ppd-cache.c:2999
msgid "4-Hole Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3014
+#: cups/ppd-cache.c:2998
msgid "4-Hole Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3016
+#: cups/ppd-cache.c:3000
msgid "4-Hole Punch (Reverse Portrait)"
msgstr ""
@@ -3090,12 +3090,12 @@ msgstr ""
msgid "A Samba username is required to export printer drivers"
msgstr ""
-#: scheduler/ipp.c:2298
+#: scheduler/ipp.c:2296
#, c-format
msgid "A class named \"%s\" already exists."
msgstr ""
-#: scheduler/ipp.c:902
+#: scheduler/ipp.c:900
#, c-format
msgid "A printer named \"%s\" already exists."
msgstr ""
@@ -3244,7 +3244,7 @@ msgstr ""
msgid "Accepted"
msgstr ""
-#: cups/ppd-cache.c:2993
+#: cups/ppd-cache.c:2977
msgid "Accordian Fold"
msgstr ""
@@ -3269,19 +3269,19 @@ msgstr ""
msgid "Administration"
msgstr ""
-#: cups/ppd-cache.c:3483
+#: cups/ppd-cache.c:3485
msgid "Advanced Photo Paper"
msgstr ""
-#: cups/ppd-cache.c:3396
+#: cups/ppd-cache.c:3398
msgid "Alternate"
msgstr ""
-#: cups/ppd-cache.c:3404
+#: cups/ppd-cache.c:3406
msgid "Alternate Roll"
msgstr ""
-#: cups/ppd-cache.c:3477
+#: cups/ppd-cache.c:3479
msgid "Aluminum"
msgstr ""
@@ -3297,43 +3297,43 @@ msgstr ""
msgid "Applicator"
msgstr ""
-#: cups/ppd-cache.c:3511
+#: cups/ppd-cache.c:3513
msgid "Archival Envelope"
msgstr ""
-#: cups/ppd-cache.c:3523
+#: cups/ppd-cache.c:3525
msgid "Archival Fabric"
msgstr ""
-#: cups/ppd-cache.c:3600
+#: cups/ppd-cache.c:3602
msgid "Archival Paper"
msgstr ""
-#: cups/ppd-cache.c:3572
+#: cups/ppd-cache.c:3574
msgid "Archival Photo Paper"
msgstr ""
-#: scheduler/ipp.c:997
+#: scheduler/ipp.c:995
#, c-format
msgid "Attempt to set %s printer-state to bad value %d."
msgstr ""
-#: scheduler/ipp.c:5455 scheduler/ipp.c:5481
+#: scheduler/ipp.c:5458 scheduler/ipp.c:5484
#, c-format
msgid "Attribute \"%s\" is in the wrong group."
msgstr ""
-#: scheduler/ipp.c:5457 scheduler/ipp.c:5483
+#: scheduler/ipp.c:5460 scheduler/ipp.c:5486
#, c-format
msgid "Attribute \"%s\" is the wrong value type."
msgstr ""
-#: scheduler/ipp.c:239
+#: scheduler/ipp.c:237
#, c-format
msgid "Attribute groups are out of order (%x < %x)."
msgstr ""
-#: cups/ppd-cache.c:3394 cups/ppd-cache.c:3478 cups/ppd-cache.c:3801
+#: cups/ppd-cache.c:3396 cups/ppd-cache.c:3480 cups/ppd-cache.c:3803
msgid "Automatic"
msgstr ""
@@ -3385,21 +3385,21 @@ msgstr ""
msgid "B9"
msgstr ""
-#: cups/ppd-cache.c:3479
+#: cups/ppd-cache.c:3481
msgid "Back Print Film"
msgstr ""
-#: scheduler/ipp.c:10358
+#: scheduler/ipp.c:10361
#, c-format
msgid "Bad '%s' value."
msgstr ""
-#: scheduler/ipp.c:11306
+#: scheduler/ipp.c:11309
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
-#: cups/ppd.c:337
+#: cups/ppd.c:318
msgid "Bad CloseUI/JCLCloseUI"
msgstr ""
@@ -3407,32 +3407,32 @@ msgstr ""
msgid "Bad NULL dests pointer"
msgstr ""
-#: cups/ppd.c:320
+#: cups/ppd.c:301
msgid "Bad OpenGroup"
msgstr ""
-#: cups/ppd.c:322
+#: cups/ppd.c:303
msgid "Bad OpenUI/JCLOpenUI"
msgstr ""
-#: cups/ppd.c:324
+#: cups/ppd.c:305
msgid "Bad OrderDependency"
msgstr ""
-#: cups/ppd-cache.c:458 cups/ppd-cache.c:505 cups/ppd-cache.c:543
-#: cups/ppd-cache.c:549 cups/ppd-cache.c:565 cups/ppd-cache.c:581
-#: cups/ppd-cache.c:590 cups/ppd-cache.c:598 cups/ppd-cache.c:615
-#: cups/ppd-cache.c:623 cups/ppd-cache.c:638 cups/ppd-cache.c:646
-#: cups/ppd-cache.c:667 cups/ppd-cache.c:679 cups/ppd-cache.c:694
-#: cups/ppd-cache.c:706 cups/ppd-cache.c:728 cups/ppd-cache.c:736
-#: cups/ppd-cache.c:754 cups/ppd-cache.c:762 cups/ppd-cache.c:777
-#: cups/ppd-cache.c:785 cups/ppd-cache.c:803 cups/ppd-cache.c:811
-#: cups/ppd-cache.c:838 cups/ppd-cache.c:908 cups/ppd-cache.c:916
-#: cups/ppd-cache.c:924
+#: cups/ppd-cache.c:458 cups/ppd-cache.c:505 cups/ppd-cache.c:539
+#: cups/ppd-cache.c:545 cups/ppd-cache.c:561 cups/ppd-cache.c:577
+#: cups/ppd-cache.c:586 cups/ppd-cache.c:594 cups/ppd-cache.c:611
+#: cups/ppd-cache.c:619 cups/ppd-cache.c:634 cups/ppd-cache.c:642
+#: cups/ppd-cache.c:663 cups/ppd-cache.c:675 cups/ppd-cache.c:690
+#: cups/ppd-cache.c:702 cups/ppd-cache.c:724 cups/ppd-cache.c:732
+#: cups/ppd-cache.c:750 cups/ppd-cache.c:758 cups/ppd-cache.c:773
+#: cups/ppd-cache.c:781 cups/ppd-cache.c:799 cups/ppd-cache.c:807
+#: cups/ppd-cache.c:834 cups/ppd-cache.c:902 cups/ppd-cache.c:910
+#: cups/ppd-cache.c:918
msgid "Bad PPD cache file."
msgstr ""
-#: scheduler/ipp.c:2673
+#: scheduler/ipp.c:2670
msgid "Bad PPD file."
msgstr ""
@@ -3444,7 +3444,7 @@ msgstr ""
msgid "Bad SNMP version number"
msgstr ""
-#: cups/ppd.c:325
+#: cups/ppd.c:306
msgid "Bad UIConstraints"
msgstr ""
@@ -3452,31 +3452,31 @@ msgstr ""
msgid "Bad arguments to function"
msgstr ""
-#: scheduler/ipp.c:1382
+#: scheduler/ipp.c:1380
#, c-format
msgid "Bad copies value %d."
msgstr ""
-#: cups/ppd.c:333
+#: cups/ppd.c:314
msgid "Bad custom parameter"
msgstr ""
-#: cups/http-support.c:1750 scheduler/ipp.c:2378
+#: cups/http-support.c:1750 scheduler/ipp.c:2376
#, c-format
msgid "Bad device-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2423
+#: scheduler/ipp.c:2421
#, c-format
msgid "Bad device-uri scheme \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8504 scheduler/ipp.c:8522 scheduler/ipp.c:9750
+#: scheduler/ipp.c:8507 scheduler/ipp.c:8525 scheduler/ipp.c:9753
#, c-format
msgid "Bad document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9768
+#: scheduler/ipp.c:9771
#, c-format
msgid "Bad document-format-default \"%s\"."
msgstr ""
@@ -3489,56 +3489,56 @@ msgstr ""
msgid "Bad hostname/address in URI"
msgstr ""
-#: scheduler/ipp.c:1564
+#: scheduler/ipp.c:1562
#, c-format
msgid "Bad job-name value: %s"
msgstr ""
-#: scheduler/ipp.c:1550
+#: scheduler/ipp.c:1548
msgid "Bad job-name value: Wrong type or count."
msgstr ""
-#: scheduler/ipp.c:10396
+#: scheduler/ipp.c:10399
msgid "Bad job-priority value."
msgstr ""
-#: scheduler/ipp.c:1412
+#: scheduler/ipp.c:1410
#, c-format
msgid "Bad job-sheets value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:1396
+#: scheduler/ipp.c:1394
msgid "Bad job-sheets value type."
msgstr ""
-#: scheduler/ipp.c:10426
+#: scheduler/ipp.c:10429
msgid "Bad job-state value."
msgstr ""
-#: scheduler/ipp.c:3014 scheduler/ipp.c:3476 scheduler/ipp.c:6286
-#: scheduler/ipp.c:6433 scheduler/ipp.c:7930 scheduler/ipp.c:8202
-#: scheduler/ipp.c:9068 scheduler/ipp.c:9292 scheduler/ipp.c:9644
-#: scheduler/ipp.c:10257
+#: scheduler/ipp.c:3011 scheduler/ipp.c:3473 scheduler/ipp.c:6289
+#: scheduler/ipp.c:6436 scheduler/ipp.c:7933 scheduler/ipp.c:8205
+#: scheduler/ipp.c:9071 scheduler/ipp.c:9295 scheduler/ipp.c:9647
+#: scheduler/ipp.c:10260
#, c-format
msgid "Bad job-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2064 scheduler/ipp.c:5806
+#: scheduler/ipp.c:2062 scheduler/ipp.c:5809
#, c-format
msgid "Bad notify-pull-method \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2028 scheduler/ipp.c:5770
+#: scheduler/ipp.c:2026 scheduler/ipp.c:5773
#, c-format
msgid "Bad notify-recipient-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:5881
+#: scheduler/ipp.c:5884
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
-#: scheduler/ipp.c:1428
+#: scheduler/ipp.c:1426
#, c-format
msgid "Bad number-up value %d."
msgstr ""
@@ -3548,7 +3548,7 @@ msgstr ""
msgid "Bad option + choice on line %d."
msgstr ""
-#: scheduler/ipp.c:1445
+#: scheduler/ipp.c:1443
#, c-format
msgid "Bad page-ranges values %d-%d."
msgstr ""
@@ -3557,12 +3557,12 @@ msgstr ""
msgid "Bad port number in URI"
msgstr ""
-#: scheduler/ipp.c:2469
+#: scheduler/ipp.c:2467
#, c-format
msgid "Bad port-monitor \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2550
+#: scheduler/ipp.c:2548
#, c-format
msgid "Bad printer-state value %d."
msgstr ""
@@ -3571,12 +3571,12 @@ msgstr ""
msgid "Bad printer-uri."
msgstr ""
-#: scheduler/ipp.c:213
+#: scheduler/ipp.c:211
#, c-format
msgid "Bad request ID %d."
msgstr ""
-#: scheduler/ipp.c:203
+#: scheduler/ipp.c:201
#, c-format
msgid "Bad request version number %d.%d."
msgstr ""
@@ -3597,7 +3597,7 @@ msgstr ""
msgid "Bad username in URI"
msgstr ""
-#: cups/ppd.c:335
+#: cups/ppd.c:316
msgid "Bad value string"
msgstr ""
@@ -3605,7 +3605,7 @@ msgstr ""
msgid "Bad/empty URI"
msgstr ""
-#: cups/ppd-cache.c:2978
+#: cups/ppd-cache.c:2962
msgid "Bale"
msgstr ""
@@ -3613,27 +3613,27 @@ msgstr ""
msgid "Banners"
msgstr ""
-#: cups/ppd-cache.c:2979
+#: cups/ppd-cache.c:2963
msgid "Bind"
msgstr ""
-#: cups/ppd-cache.c:2983
+#: cups/ppd-cache.c:2967
msgid "Bind (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:2981
+#: cups/ppd-cache.c:2965
msgid "Bind (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:2980
+#: cups/ppd-cache.c:2964
msgid "Bind (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:2982
+#: cups/ppd-cache.c:2966
msgid "Bind (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3512
+#: cups/ppd-cache.c:3514
msgid "Bond Envelope"
msgstr ""
@@ -3641,11 +3641,11 @@ msgstr ""
msgid "Bond Paper"
msgstr ""
-#: cups/ppd-cache.c:4061
+#: cups/ppd-cache.c:4063
msgid "Booklet"
msgstr ""
-#: cups/ppd-cache.c:2984
+#: cups/ppd-cache.c:2968
msgid "Booklet Maker"
msgstr ""
@@ -3654,19 +3654,19 @@ msgstr ""
msgid "Boolean expected for waiteof option \"%s\"."
msgstr ""
-#: cups/ppd-cache.c:3407
+#: cups/ppd-cache.c:3409
msgid "Bottom"
msgstr ""
-#: cups/ppd-cache.c:3802
+#: cups/ppd-cache.c:3804
msgid "Bottom Tray"
msgstr ""
-#: filter/pstops.c:2032
+#: filter/pstops.c:2031
msgid "Buffer overflow detected, aborting."
msgstr ""
-#: cups/ppd-cache.c:3482
+#: cups/ppd-cache.c:3484
msgid "CD"
msgstr ""
@@ -3686,23 +3686,23 @@ msgstr ""
msgid "Cancel RSS Subscription"
msgstr ""
-#: backend/ipp.c:2271
+#: backend/ipp.c:2272
msgid "Canceling print job."
msgstr ""
-#: scheduler/ipp.c:973 scheduler/ipp.c:2525
+#: scheduler/ipp.c:971 scheduler/ipp.c:2523
msgid "Cannot change printer-is-shared for remote queues."
msgstr ""
-#: scheduler/ipp.c:2512
+#: scheduler/ipp.c:2510
msgid "Cannot share a remote Kerberized printer."
msgstr ""
-#: cups/ppd-cache.c:3480
+#: cups/ppd-cache.c:3482
msgid "Cardboard"
msgstr ""
-#: cups/ppd-cache.c:3481
+#: cups/ppd-cache.c:3483
msgid "Cardstock"
msgstr ""
@@ -3710,11 +3710,11 @@ msgstr ""
msgid "Cassette"
msgstr ""
-#: cups/ppd-cache.c:3411
+#: cups/ppd-cache.c:3413
msgid "Center"
msgstr ""
-#: cups/ppd-cache.c:3803
+#: cups/ppd-cache.c:3805
msgid "Center Tray"
msgstr ""
@@ -3723,7 +3723,7 @@ msgstr ""
msgid "Change Settings"
msgstr ""
-#: scheduler/ipp.c:2076 scheduler/ipp.c:5818
+#: scheduler/ipp.c:2074 scheduler/ipp.c:5821
#, c-format
msgid "Character set \"%s\" not supported."
msgstr ""
@@ -3736,32 +3736,32 @@ msgstr ""
msgid "Clean Print Heads"
msgstr ""
-#: scheduler/ipp.c:3928
+#: scheduler/ipp.c:3925
msgid "Close-Job doesn't support the job-uri attribute."
msgstr ""
-#: cups/ppd-cache.c:2985
+#: cups/ppd-cache.c:2969
msgid "Coat"
msgstr ""
-#: cups/ppd-cache.c:3513
+#: cups/ppd-cache.c:3515
msgid "Coated Envelope"
msgstr ""
-#: cups/ppd-cache.c:3601
+#: cups/ppd-cache.c:3603
msgid "Coated Paper"
msgstr ""
-#: cups/ppd-cache.c:3694 ppdc/sample.c:276
+#: cups/ppd-cache.c:3696 ppdc/sample.c:276
msgid "Color"
msgstr ""
-#: cups/ppd-cache.c:3668 cups/ppd-cache.c:3680 cups/ppd-cache.c:3692
-#: cups/ppd-cache.c:3703 ppdc/sample.c:274
+#: cups/ppd-cache.c:3670 cups/ppd-cache.c:3682 cups/ppd-cache.c:3694
+#: cups/ppd-cache.c:3705 ppdc/sample.c:274
msgid "Color Mode"
msgstr ""
-#: cups/ppd-cache.c:3548
+#: cups/ppd-cache.c:3550
msgid "Colored Labels"
msgstr ""
@@ -3788,15 +3788,15 @@ msgstr ""
msgid "Continue"
msgstr ""
-#: cups/ppd-cache.c:3496 ppdc/sample.c:360
+#: cups/ppd-cache.c:3498 ppdc/sample.c:360
msgid "Continuous"
msgstr ""
-#: cups/ppd-cache.c:3497
+#: cups/ppd-cache.c:3499
msgid "Continuous Long"
msgstr ""
-#: cups/ppd-cache.c:3498
+#: cups/ppd-cache.c:3500
msgid "Continuous Short"
msgstr ""
@@ -3808,15 +3808,15 @@ msgstr ""
msgid "Copying print data."
msgstr ""
-#: cups/ppd-cache.c:3514
+#: cups/ppd-cache.c:3516
msgid "Cotton Envelope"
msgstr ""
-#: cups/ppd-cache.c:3602
+#: cups/ppd-cache.c:3604
msgid "Cotton Paper"
msgstr ""
-#: cups/ppd-cache.c:2986
+#: cups/ppd-cache.c:2970
msgid "Cover"
msgstr ""
@@ -3824,15 +3824,15 @@ msgstr ""
msgid "Created"
msgstr ""
-#: cups/tls-darwin.c:730 cups/tls-gnutls.c:562
+#: cups/tls-darwin.c:730 cups/tls-gnutls.c:587
msgid "Credentials do not validate against site CA certificate."
msgstr ""
-#: cups/tls-darwin.c:741 cups/tls-gnutls.c:579
+#: cups/tls-darwin.c:741 cups/tls-gnutls.c:604
msgid "Credentials have expired."
msgstr ""
-#: cups/ppd.c:1154 cups/ppd.c:1194 cups/ppd.c:1439 cups/ppd.c:1542
+#: cups/ppd.c:1133 cups/ppd.c:1173 cups/ppd.c:1382 cups/ppd.c:1485
msgid "Custom"
msgstr ""
@@ -3848,7 +3848,7 @@ msgstr ""
msgid "Cut"
msgstr ""
-#: cups/ppd-cache.c:3042
+#: cups/ppd-cache.c:3026
msgid "Cut Media"
msgstr ""
@@ -3856,7 +3856,7 @@ msgstr ""
msgid "Cutter"
msgstr ""
-#: cups/ppd-cache.c:3507
+#: cups/ppd-cache.c:3509
msgid "DVD"
msgstr ""
@@ -3872,7 +3872,7 @@ msgstr ""
msgid "Data file sent successfully."
msgstr ""
-#: cups/ppd-cache.c:3705
+#: cups/ppd-cache.c:3707
msgid "Deep Color"
msgstr ""
@@ -3888,7 +3888,7 @@ msgstr ""
msgid "DeskJet Series"
msgstr ""
-#: scheduler/ipp.c:1311
+#: scheduler/ipp.c:1309
#, c-format
msgid "Destination \"%s\" is not accepting jobs."
msgstr ""
@@ -3908,27 +3908,27 @@ msgstr ""
msgid "Direct Thermal Media"
msgstr ""
-#: cups/file.c:256
+#: cups/file.c:289
#, c-format
msgid "Directory \"%s\" contains a relative path."
msgstr ""
-#: cups/file.c:228
+#: cups/file.c:261
#, c-format
msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
msgstr ""
-#: cups/file.c:245
+#: cups/file.c:278
#, c-format
msgid "Directory \"%s\" is a file."
msgstr ""
-#: cups/file.c:216
+#: cups/file.c:249
#, c-format
msgid "Directory \"%s\" not available: %s"
msgstr ""
-#: cups/file.c:201
+#: cups/file.c:234
#, c-format
msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
msgstr ""
@@ -3937,45 +3937,45 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: cups/ppd-cache.c:3400
+#: cups/ppd-cache.c:3402
msgid "Disc"
msgstr ""
-#: scheduler/ipp.c:6335
+#: scheduler/ipp.c:6338
#, c-format
msgid "Document #%d does not exist in job #%d."
msgstr ""
-#: cups/ppd-cache.c:2994
+#: cups/ppd-cache.c:2978
msgid "Double Gate Fold"
msgstr ""
-#: cups/ppd-cache.c:3035
+#: cups/ppd-cache.c:3019
msgid "Double Staple (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3033
+#: cups/ppd-cache.c:3017
msgid "Double Staple (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3032
+#: cups/ppd-cache.c:3016
msgid "Double Staple (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3034
+#: cups/ppd-cache.c:3018
msgid "Double Staple (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3505
+#: cups/ppd-cache.c:3507
msgid "Double Wall Cardboard"
msgstr ""
-#: cups/ppd-cache.c:4119 cups/ppd-cache.c:4121 cups/ppd-cache.c:4184
-#: cups/ppd-cache.c:4221
+#: cups/ppd-cache.c:4121 cups/ppd-cache.c:4123 cups/ppd-cache.c:4186
+#: cups/ppd-cache.c:4223
msgid "Draft"
msgstr ""
-#: cups/ppd-cache.c:3506
+#: cups/ppd-cache.c:3508
msgid "Dry Film"
msgstr ""
@@ -4001,7 +4001,7 @@ msgstr ""
msgid "Edit Configuration File"
msgstr ""
-#: cups/ppd-cache.c:3508
+#: cups/ppd-cache.c:3510
msgid "Embossing Foil"
msgstr ""
@@ -4009,11 +4009,11 @@ msgstr ""
msgid "Empty PPD file."
msgstr ""
-#: cups/http.c:4641
+#: cups/http.c:4688
msgid "Encryption is not supported."
msgstr ""
-#: cups/ppd-cache.c:3509
+#: cups/ppd-cache.c:3511
msgid "End Board"
msgstr ""
@@ -4022,7 +4022,7 @@ msgstr ""
msgid "Ending Banner"
msgstr ""
-#: cups/ppd-cache.c:2995
+#: cups/ppd-cache.c:2979
msgid "Engineering Z Fold"
msgstr ""
@@ -4034,7 +4034,7 @@ msgstr ""
msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."
msgstr ""
-#: cups/ppd-cache.c:3399 cups/ppd-cache.c:3510
+#: cups/ppd-cache.c:3401 cups/ppd-cache.c:3512
msgid "Envelope"
msgstr ""
@@ -4323,11 +4323,11 @@ msgstr ""
msgid "Every Label"
msgstr ""
-#: cups/ppd-cache.c:3488
+#: cups/ppd-cache.c:3490
msgid "Everyday Glossy Photo Paper"
msgstr ""
-#: cups/ppd-cache.c:3489
+#: cups/ppd-cache.c:3491
msgid "Everyday Matte Paper"
msgstr ""
@@ -4347,7 +4347,7 @@ msgstr ""
msgid "Expressions:"
msgstr ""
-#: cups/ppd-cache.c:3490
+#: cups/ppd-cache.c:3492
msgid "Extra Heavyweight Paper"
msgstr ""
@@ -4361,43 +4361,43 @@ msgstr ""
msgid "FAIL"
msgstr ""
-#: cups/ppd-cache.c:3522
+#: cups/ppd-cache.c:3524
msgid "Fabric"
msgstr ""
-#: cups/ppd-cache.c:3804
+#: cups/ppd-cache.c:3806
msgid "Face Down"
msgstr ""
-#: cups/ppd-cache.c:3805
+#: cups/ppd-cache.c:3807
msgid "Face Up"
msgstr ""
-#: cups/ppd-cache.c:3670
+#: cups/ppd-cache.c:3672
msgid "Fast Grayscale"
msgstr ""
-#: cups/file.c:260
+#: cups/file.c:293
#, c-format
msgid "File \"%s\" contains a relative path."
msgstr ""
-#: cups/file.c:235
+#: cups/file.c:268
#, c-format
msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
msgstr ""
-#: cups/file.c:249
+#: cups/file.c:282
#, c-format
msgid "File \"%s\" is a directory."
msgstr ""
-#: cups/file.c:221
+#: cups/file.c:254
#, c-format
msgid "File \"%s\" not available: %s"
msgstr ""
-#: cups/file.c:207
+#: cups/file.c:240
#, c-format
msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
msgstr ""
@@ -4406,16 +4406,16 @@ msgstr ""
msgid "File Folder"
msgstr ""
-#: scheduler/ipp.c:2399
+#: scheduler/ipp.c:2397
#, c-format
msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"."
msgstr ""
-#: cups/ppd-cache.c:3529
+#: cups/ppd-cache.c:3531
msgid "Film"
msgstr ""
-#: cups/ppd-cache.c:3515
+#: cups/ppd-cache.c:3517
msgid "Fine Envelope"
msgstr ""
@@ -4425,23 +4425,23 @@ msgstr ""
msgid "Finished page %d."
msgstr ""
-#: cups/ppd-cache.c:3530
+#: cups/ppd-cache.c:3532
msgid "Flexo Base"
msgstr ""
-#: cups/ppd-cache.c:3531
+#: cups/ppd-cache.c:3533
msgid "Flexo Photo Polymer"
msgstr ""
-#: cups/ppd-cache.c:3532
+#: cups/ppd-cache.c:3534
msgid "Flute"
msgstr ""
-#: cups/ppd-cache.c:3533
+#: cups/ppd-cache.c:3535
msgid "Foil"
msgstr ""
-#: cups/ppd-cache.c:2992 cups/ppd-cache.c:3970
+#: cups/ppd-cache.c:2976 cups/ppd-cache.c:3972
msgid "Fold"
msgstr ""
@@ -4457,15 +4457,15 @@ msgstr ""
msgid "Found"
msgstr ""
-#: cups/ppd-cache.c:3534
+#: cups/ppd-cache.c:3536
msgid "Full Cut Tabs"
msgstr ""
-#: cups/ppd-cache.c:2996
+#: cups/ppd-cache.c:2980
msgid "Gate Fold"
msgstr ""
-#: cups/ppd.c:785 cups/ppd.c:1343
+#: cups/ppd.c:764 cups/ppd.c:1286
msgid "General"
msgstr ""
@@ -4477,39 +4477,39 @@ msgstr ""
msgid "Get-Response-PDU uses indefinite length"
msgstr ""
-#: cups/ppd-cache.c:3535
+#: cups/ppd-cache.c:3537
msgid "Glass"
msgstr ""
-#: cups/ppd-cache.c:3536
+#: cups/ppd-cache.c:3538
msgid "Glass Colored"
msgstr ""
-#: cups/ppd-cache.c:3537
+#: cups/ppd-cache.c:3539
msgid "Glass Opaque"
msgstr ""
-#: cups/ppd-cache.c:3538
+#: cups/ppd-cache.c:3540
msgid "Glass Surfaced"
msgstr ""
-#: cups/ppd-cache.c:3539
+#: cups/ppd-cache.c:3541
msgid "Glass Textured"
msgstr ""
-#: cups/ppd-cache.c:3484
+#: cups/ppd-cache.c:3486
msgid "Glossy Brochure Paper"
msgstr ""
-#: cups/ppd-cache.c:3524
+#: cups/ppd-cache.c:3526
msgid "Glossy Fabric"
msgstr ""
-#: cups/ppd-cache.c:3549
+#: cups/ppd-cache.c:3551
msgid "Glossy Labels"
msgstr ""
-#: cups/ppd-cache.c:3500
+#: cups/ppd-cache.c:3502
msgid "Glossy Optical Disc"
msgstr ""
@@ -4517,22 +4517,22 @@ msgstr ""
msgid "Glossy Paper"
msgstr ""
-#: cups/ppd-cache.c:3574
+#: cups/ppd-cache.c:3576
msgid "Glossy Photo Paper"
msgstr ""
-#: scheduler/ipp.c:2992 scheduler/ipp.c:3402 scheduler/ipp.c:3940
-#: scheduler/ipp.c:6264 scheduler/ipp.c:6411 scheduler/ipp.c:7907
-#: scheduler/ipp.c:9046 scheduler/ipp.c:9270 scheduler/ipp.c:9622
-#: scheduler/ipp.c:10235
+#: scheduler/ipp.c:2989 scheduler/ipp.c:3399 scheduler/ipp.c:3937
+#: scheduler/ipp.c:6267 scheduler/ipp.c:6414 scheduler/ipp.c:7910
+#: scheduler/ipp.c:9049 scheduler/ipp.c:9273 scheduler/ipp.c:9625
+#: scheduler/ipp.c:10238
msgid "Got a printer-uri attribute but no job-id."
msgstr ""
-#: cups/ppd-cache.c:3540
+#: cups/ppd-cache.c:3542
msgid "Gravure Cylinder"
msgstr ""
-#: cups/ppd-cache.c:3682 ppdc/sample.c:275
+#: cups/ppd-cache.c:3684 ppdc/sample.c:275
msgid "Grayscale"
msgstr ""
@@ -4540,15 +4540,15 @@ msgstr ""
msgid "HP"
msgstr ""
-#: cups/ppd-cache.c:3402
+#: cups/ppd-cache.c:3404
msgid "Hagaki"
msgstr ""
-#: cups/ppd-cache.c:2997
+#: cups/ppd-cache.c:2981
msgid "Half Fold"
msgstr ""
-#: cups/ppd-cache.c:2998
+#: cups/ppd-cache.c:2982
msgid "Half Z Fold"
msgstr ""
@@ -4560,15 +4560,15 @@ msgstr ""
msgid "Hash buffer too small."
msgstr ""
-#: cups/ppd-cache.c:3605
+#: cups/ppd-cache.c:3607
msgid "Heavyweight Coated Paper"
msgstr ""
-#: cups/ppd-cache.c:3516
+#: cups/ppd-cache.c:3518
msgid "Heavyweight Envelope"
msgstr ""
-#: cups/ppd-cache.c:3604
+#: cups/ppd-cache.c:3606
msgid "Heavyweight Paper"
msgstr ""
@@ -4576,115 +4576,115 @@ msgstr ""
msgid "Help file not in index."
msgstr ""
-#: cups/ppd-cache.c:4126 cups/ppd-cache.c:4195 cups/ppd-cache.c:4226
+#: cups/ppd-cache.c:4128 cups/ppd-cache.c:4197 cups/ppd-cache.c:4228
msgid "High"
msgstr ""
-#: cups/ppd-cache.c:3525
+#: cups/ppd-cache.c:3527
msgid "High Gloss Fabric"
msgstr ""
-#: cups/ppd-cache.c:3550
+#: cups/ppd-cache.c:3552
msgid "High Gloss Labels"
msgstr ""
-#: cups/ppd-cache.c:3501
+#: cups/ppd-cache.c:3503
msgid "High Gloss Optical Disc"
msgstr ""
-#: cups/ppd-cache.c:3575
+#: cups/ppd-cache.c:3577
msgid "High Gloss Photo Paper"
msgstr ""
-#: cups/ipp.c:3097 cups/ipp.c:3124 cups/ipp.c:3147
+#: cups/ipp.c:3093 cups/ipp.c:3120 cups/ipp.c:3143
msgid "IPP 1setOf attribute with incompatible value tags."
msgstr ""
-#: cups/ipp.c:3060
+#: cups/ipp.c:3056
msgid "IPP attribute has no name."
msgstr ""
-#: cups/ipp.c:6932
+#: cups/ipp.c:6916
msgid "IPP attribute is not a member of the message."
msgstr ""
-#: cups/ipp.c:3510
+#: cups/ipp.c:3506
msgid "IPP begCollection value not 0 bytes."
msgstr ""
-#: cups/ipp.c:3288
+#: cups/ipp.c:3284
msgid "IPP boolean value not 1 byte."
msgstr ""
-#: cups/ipp.c:3353
+#: cups/ipp.c:3349
msgid "IPP date value not 11 bytes."
msgstr ""
-#: cups/ipp.c:3531
+#: cups/ipp.c:3527
msgid "IPP endCollection value not 0 bytes."
msgstr ""
-#: cups/ipp.c:3263
+#: cups/ipp.c:3259
msgid "IPP enum value not 4 bytes."
msgstr ""
-#: cups/ipp.c:2983
+#: cups/ipp.c:2979
msgid "IPP extension tag larger than 0x7FFFFFFF."
msgstr ""
-#: cups/ipp.c:3260
+#: cups/ipp.c:3256
msgid "IPP integer value not 4 bytes."
msgstr ""
-#: cups/ipp.c:3463
+#: cups/ipp.c:3459
msgid "IPP language length overflows value."
msgstr ""
-#: cups/ipp.c:3472
+#: cups/ipp.c:3468
msgid "IPP language length too large."
msgstr ""
-#: cups/ipp.c:3174
+#: cups/ipp.c:3170
msgid "IPP member name is not empty."
msgstr ""
-#: cups/ipp.c:3557
+#: cups/ipp.c:3553
msgid "IPP memberName value is empty."
msgstr ""
-#: cups/ipp.c:3549
+#: cups/ipp.c:3545
msgid "IPP memberName with no attribute."
msgstr ""
-#: cups/ipp.c:3043
+#: cups/ipp.c:3039
msgid "IPP name larger than 32767 bytes."
msgstr ""
-#: cups/ipp.c:3430
+#: cups/ipp.c:3426
msgid "IPP nameWithLanguage value less than minimum 4 bytes."
msgstr ""
-#: cups/ipp.c:3587
+#: cups/ipp.c:3583
msgid "IPP octetString length too large."
msgstr ""
-#: cups/ipp.c:3398
+#: cups/ipp.c:3394
msgid "IPP rangeOfInteger value not 8 bytes."
msgstr ""
-#: cups/ipp.c:3371
+#: cups/ipp.c:3367
msgid "IPP resolution value not 9 bytes."
msgstr ""
-#: cups/ipp.c:3490
+#: cups/ipp.c:3486
msgid "IPP string length overflows value."
msgstr ""
-#: cups/ipp.c:3426
+#: cups/ipp.c:3422
msgid "IPP textWithLanguage value less than minimum 4 bytes."
msgstr ""
-#: cups/ipp.c:3246
+#: cups/ipp.c:3242
msgid "IPP value larger than 32767 bytes."
msgstr ""
@@ -4692,43 +4692,43 @@ msgstr ""
msgid "ISOLatin1"
msgstr ""
-#: cups/ppd.c:328
+#: cups/ppd.c:309
msgid "Illegal control character"
msgstr ""
-#: cups/ppd.c:329
+#: cups/ppd.c:310
msgid "Illegal main keyword string"
msgstr ""
-#: cups/ppd.c:330
+#: cups/ppd.c:311
msgid "Illegal option keyword string"
msgstr ""
-#: cups/ppd.c:331
+#: cups/ppd.c:312
msgid "Illegal translation string"
msgstr ""
-#: cups/ppd.c:332
+#: cups/ppd.c:313
msgid "Illegal whitespace character"
msgstr ""
-#: cups/ppd-cache.c:3541
+#: cups/ppd-cache.c:3543
msgid "Image Setter Paper"
msgstr ""
-#: cups/ppd-cache.c:3542
+#: cups/ppd-cache.c:3544
msgid "Imaging Cylinder"
msgstr ""
-#: cups/ppd-cache.c:3517
+#: cups/ppd-cache.c:3519
msgid "Inkjet Envelope"
msgstr ""
-#: cups/ppd-cache.c:3551
+#: cups/ppd-cache.c:3553
msgid "Inkjet Labels"
msgstr ""
-#: cups/ppd-cache.c:3606
+#: cups/ppd-cache.c:3608
msgid "Inkjet Paper"
msgstr ""
@@ -4752,7 +4752,7 @@ msgstr ""
msgid "Internal Server Error"
msgstr ""
-#: cups/ppd.c:319
+#: cups/ppd.c:300
msgid "Internal error"
msgstr ""
@@ -4768,19 +4768,19 @@ msgstr ""
msgid "Internet Printing Protocol"
msgstr ""
-#: cups/ipp.c:3003
+#: cups/ipp.c:2999
msgid "Invalid group tag."
msgstr ""
-#: cups/pwg-media.c:291 cups/pwg-media.c:310
+#: cups/pwg-media.c:292 cups/pwg-media.c:311
msgid "Invalid media name arguments."
msgstr ""
-#: cups/dest-options.c:1099
+#: cups/dest-options.c:1108
msgid "Invalid media size."
msgstr ""
-#: scheduler/ipp.c:2719 scheduler/ipp.c:7078
+#: scheduler/ipp.c:2716 scheduler/ipp.c:7081
msgid "Invalid ppd-name value."
msgstr ""
@@ -4789,7 +4789,7 @@ msgstr ""
msgid "Invalid printer command \"%s\"."
msgstr ""
-#: cups/ppd.c:1461
+#: cups/ppd.c:1404
msgid "JCL"
msgstr ""
@@ -4849,52 +4849,52 @@ msgstr ""
msgid "JIS B9"
msgstr ""
-#: scheduler/ipp.c:9342
+#: scheduler/ipp.c:9345
#, c-format
msgid "Job #%d cannot be restarted - no files."
msgstr ""
-#: scheduler/ipp.c:3032 scheduler/ipp.c:3266 scheduler/ipp.c:3325
-#: scheduler/ipp.c:3504 scheduler/ipp.c:3950 scheduler/ipp.c:5923
-#: scheduler/ipp.c:6304 scheduler/ipp.c:6451 scheduler/ipp.c:6788
-#: scheduler/ipp.c:7748 scheduler/ipp.c:7770 scheduler/ipp.c:7948
-#: scheduler/ipp.c:8176 scheduler/ipp.c:8219 scheduler/ipp.c:9086
-#: scheduler/ipp.c:9310 scheduler/ipp.c:9662 scheduler/ipp.c:10275
+#: scheduler/ipp.c:3029 scheduler/ipp.c:3263 scheduler/ipp.c:3322
+#: scheduler/ipp.c:3501 scheduler/ipp.c:3947 scheduler/ipp.c:5926
+#: scheduler/ipp.c:6307 scheduler/ipp.c:6454 scheduler/ipp.c:6791
+#: scheduler/ipp.c:7751 scheduler/ipp.c:7773 scheduler/ipp.c:7951
+#: scheduler/ipp.c:8179 scheduler/ipp.c:8222 scheduler/ipp.c:9089
+#: scheduler/ipp.c:9313 scheduler/ipp.c:9665 scheduler/ipp.c:10278
#, c-format
msgid "Job #%d does not exist."
msgstr ""
-#: scheduler/ipp.c:3536
+#: scheduler/ipp.c:3533
#, c-format
msgid "Job #%d is already aborted - can't cancel."
msgstr ""
-#: scheduler/ipp.c:3530
+#: scheduler/ipp.c:3527
#, c-format
msgid "Job #%d is already canceled - can't cancel."
msgstr ""
-#: scheduler/ipp.c:3542
+#: scheduler/ipp.c:3539
#, c-format
msgid "Job #%d is already completed - can't cancel."
msgstr ""
-#: scheduler/ipp.c:7974 scheduler/ipp.c:8261 scheduler/ipp.c:10290
+#: scheduler/ipp.c:7977 scheduler/ipp.c:8264 scheduler/ipp.c:10293
#, c-format
msgid "Job #%d is finished and cannot be altered."
msgstr ""
-#: scheduler/ipp.c:9324
+#: scheduler/ipp.c:9327
#, c-format
msgid "Job #%d is not complete."
msgstr ""
-#: scheduler/ipp.c:3047
+#: scheduler/ipp.c:3044
#, c-format
msgid "Job #%d is not held for authentication."
msgstr ""
-#: scheduler/ipp.c:9100
+#: scheduler/ipp.c:9103
#, c-format
msgid "Job #%d is not held."
msgstr ""
@@ -4915,7 +4915,7 @@ msgstr ""
msgid "Job Stopped"
msgstr ""
-#: scheduler/ipp.c:10404
+#: scheduler/ipp.c:10407
msgid "Job is completed and cannot be changed."
msgstr ""
@@ -4923,11 +4923,11 @@ msgstr ""
msgid "Job operation failed"
msgstr ""
-#: scheduler/ipp.c:10440 scheduler/ipp.c:10457 scheduler/ipp.c:10468
+#: scheduler/ipp.c:10443 scheduler/ipp.c:10460 scheduler/ipp.c:10471
msgid "Job state cannot be changed."
msgstr ""
-#: scheduler/ipp.c:9190
+#: scheduler/ipp.c:9193
msgid "Job subscriptions cannot be renewed."
msgstr ""
@@ -4935,7 +4935,7 @@ msgstr ""
msgid "Jobs"
msgstr ""
-#: cups/ppd-cache.c:3005
+#: cups/ppd-cache.c:2989
msgid "Jog"
msgstr ""
@@ -4951,19 +4951,19 @@ msgstr ""
msgid "Label Top"
msgstr ""
-#: cups/ppd-cache.c:3547
+#: cups/ppd-cache.c:3549
msgid "Labels"
msgstr ""
-#: cups/ppd-cache.c:3006
+#: cups/ppd-cache.c:2990
msgid "Laminate"
msgstr ""
-#: cups/ppd-cache.c:3557
+#: cups/ppd-cache.c:3559
msgid "Laminating Foil"
msgstr ""
-#: scheduler/ipp.c:2085 scheduler/ipp.c:5827
+#: scheduler/ipp.c:2083 scheduler/ipp.c:5830
#, c-format
msgid "Language \"%s\" not supported."
msgstr ""
@@ -4972,11 +4972,11 @@ msgstr ""
msgid "Large Address"
msgstr ""
-#: cups/ppd-cache.c:3397
+#: cups/ppd-cache.c:3399
msgid "Large Capacity"
msgstr ""
-#: cups/ppd-cache.c:3806
+#: cups/ppd-cache.c:3808
msgid "Large Capacity Tray"
msgstr ""
@@ -4984,19 +4984,19 @@ msgstr ""
msgid "LaserJet Series PCL 4/5"
msgstr ""
-#: cups/ppd-cache.c:3409
+#: cups/ppd-cache.c:3411
msgid "Left"
msgstr ""
-#: cups/ppd-cache.c:2999
+#: cups/ppd-cache.c:2983
msgid "Left Gate Fold"
msgstr ""
-#: cups/ppd-cache.c:3807
+#: cups/ppd-cache.c:3809
msgid "Left Tray"
msgstr ""
-#: cups/ppd-cache.c:3000
+#: cups/ppd-cache.c:2984
msgid "Letter Fold"
msgstr ""
@@ -5008,7 +5008,7 @@ msgstr ""
msgid "Letter Oversize Long Edge"
msgstr ""
-#: cups/ppd-cache.c:3558 cups/ppd-cache.c:3607
+#: cups/ppd-cache.c:3560 cups/ppd-cache.c:3609
msgid "Letterhead"
msgstr ""
@@ -5016,15 +5016,15 @@ msgstr ""
msgid "Light"
msgstr ""
-#: cups/ppd-cache.c:3518
+#: cups/ppd-cache.c:3520
msgid "Lightweight Envelope"
msgstr ""
-#: cups/ppd-cache.c:3608
+#: cups/ppd-cache.c:3610
msgid "Lightweight Paper"
msgstr ""
-#: cups/ppd.c:327
+#: cups/ppd.c:308
msgid "Line longer than the maximum allowed (255 characters)"
msgstr ""
@@ -5036,67 +5036,67 @@ msgstr ""
msgid "Load paper."
msgstr ""
-#: scheduler/ipp.c:5536
+#: scheduler/ipp.c:5539
msgid "Local printer created."
msgstr ""
-#: cups/ppd-cache.c:3735 ppdc/sample.c:264
+#: cups/ppd-cache.c:3737 ppdc/sample.c:264
msgid "Long-Edge (Portrait)"
msgstr ""
-#: cups/http-support.c:1877
+#: cups/http-support.c:1874
msgid "Looking for printer."
msgstr ""
-#: cups/ppd-cache.c:3808
+#: cups/ppd-cache.c:3810
msgid "Mailbox 1"
msgstr ""
-#: cups/ppd-cache.c:3817
+#: cups/ppd-cache.c:3819
msgid "Mailbox 10"
msgstr ""
-#: cups/ppd-cache.c:3809
+#: cups/ppd-cache.c:3811
msgid "Mailbox 2"
msgstr ""
-#: cups/ppd-cache.c:3810
+#: cups/ppd-cache.c:3812
msgid "Mailbox 3"
msgstr ""
-#: cups/ppd-cache.c:3811
+#: cups/ppd-cache.c:3813
msgid "Mailbox 4"
msgstr ""
-#: cups/ppd-cache.c:3812
+#: cups/ppd-cache.c:3814
msgid "Mailbox 5"
msgstr ""
-#: cups/ppd-cache.c:3813
+#: cups/ppd-cache.c:3815
msgid "Mailbox 6"
msgstr ""
-#: cups/ppd-cache.c:3814
+#: cups/ppd-cache.c:3816
msgid "Mailbox 7"
msgstr ""
-#: cups/ppd-cache.c:3815
+#: cups/ppd-cache.c:3817
msgid "Mailbox 8"
msgstr ""
-#: cups/ppd-cache.c:3816
+#: cups/ppd-cache.c:3818
msgid "Mailbox 9"
msgstr ""
-#: cups/ppd-cache.c:3395
+#: cups/ppd-cache.c:3397
msgid "Main"
msgstr ""
-#: cups/ppd-cache.c:3403
+#: cups/ppd-cache.c:3405
msgid "Main Roll"
msgstr ""
-#: cups/ppd-cache.c:3398
+#: cups/ppd-cache.c:3400
msgid "Manual"
msgstr ""
@@ -5104,35 +5104,35 @@ msgstr ""
msgid "Manual Feed"
msgstr ""
-#: cups/ppd-cache.c:3485
+#: cups/ppd-cache.c:3487
msgid "Matte Brochure Paper"
msgstr ""
-#: cups/ppd-cache.c:3486
+#: cups/ppd-cache.c:3488
msgid "Matte Cover Paper"
msgstr ""
-#: cups/ppd-cache.c:3526
+#: cups/ppd-cache.c:3528
msgid "Matte Fabric"
msgstr ""
-#: cups/ppd-cache.c:3552
+#: cups/ppd-cache.c:3554
msgid "Matte Labels"
msgstr ""
-#: cups/ppd-cache.c:3502
+#: cups/ppd-cache.c:3504
msgid "Matte Optical Disc"
msgstr ""
-#: cups/ppd-cache.c:3576
+#: cups/ppd-cache.c:3578
msgid "Matte Photo Paper"
msgstr ""
-#: cups/ppd.c:832 cups/ppd.c:1398
+#: cups/ppd.c:811 cups/ppd.c:1341
msgid "Media Size"
msgstr ""
-#: cups/ppd.c:836 cups/ppd.c:1402 ppdc/sample.c:254
+#: cups/ppd.c:815 cups/ppd.c:1345 ppdc/sample.c:254
msgid "Media Source"
msgstr ""
@@ -5140,7 +5140,7 @@ msgstr ""
msgid "Media Tracking"
msgstr ""
-#: cups/ppd.c:834 cups/ppd.c:1400 ppdc/sample.c:280
+#: cups/ppd.c:813 cups/ppd.c:1343 ppdc/sample.c:280
msgid "Media Type"
msgstr ""
@@ -5148,59 +5148,59 @@ msgstr ""
msgid "Medium"
msgstr ""
-#: cups/ppd.c:316
+#: cups/ppd.c:297
msgid "Memory allocation error"
msgstr ""
-#: cups/ppd-cache.c:3559
+#: cups/ppd-cache.c:3561
msgid "Metal"
msgstr ""
-#: cups/ppd-cache.c:3560
+#: cups/ppd-cache.c:3562
msgid "Metal Glossy"
msgstr ""
-#: cups/ppd-cache.c:3561
+#: cups/ppd-cache.c:3563
msgid "Metal High Gloss"
msgstr ""
-#: cups/ppd-cache.c:3562
+#: cups/ppd-cache.c:3564
msgid "Metal Matte"
msgstr ""
-#: cups/ppd-cache.c:3563
+#: cups/ppd-cache.c:3565
msgid "Metal Satin"
msgstr ""
-#: cups/ppd-cache.c:3564
+#: cups/ppd-cache.c:3566
msgid "Metal Semi Gloss"
msgstr ""
-#: cups/ppd-cache.c:3492
+#: cups/ppd-cache.c:3494
msgid "Mid-Weight Paper"
msgstr ""
-#: cups/ppd-cache.c:3406 cups/ppd-cache.c:3818
+#: cups/ppd-cache.c:3408 cups/ppd-cache.c:3820
msgid "Middle"
msgstr ""
-#: cups/ppd.c:336
+#: cups/ppd.c:317
msgid "Missing CloseGroup"
msgstr ""
-#: cups/ppd.c:338
+#: cups/ppd.c:319
msgid "Missing CloseUI/JCLCloseUI"
msgstr ""
-#: cups/ppd.c:317
+#: cups/ppd.c:298
msgid "Missing PPD-Adobe-4.x header"
msgstr ""
-#: cups/ppd.c:326
+#: cups/ppd.c:307
msgid "Missing asterisk in column 1"
msgstr ""
-#: scheduler/ipp.c:6327
+#: scheduler/ipp.c:6330
msgid "Missing document-number attribute."
msgstr ""
@@ -5215,36 +5215,36 @@ msgstr ""
msgid "Missing form variable"
msgstr ""
-#: scheduler/ipp.c:9716
+#: scheduler/ipp.c:9719
msgid "Missing last-document attribute in request."
msgstr ""
-#: cups/pwg-media.c:550
+#: cups/pwg-media.c:551
msgid "Missing media or media-col."
msgstr ""
-#: cups/pwg-media.c:469
+#: cups/pwg-media.c:470
msgid "Missing media-size in media-col."
msgstr ""
-#: scheduler/ipp.c:6928
+#: scheduler/ipp.c:6931
msgid "Missing notify-subscription-ids attribute."
msgstr ""
-#: cups/ppd.c:334
+#: cups/ppd.c:315
msgid "Missing option keyword"
msgstr ""
-#: scheduler/ipp.c:3173 scheduler/ipp.c:3198
+#: scheduler/ipp.c:3170 scheduler/ipp.c:3195
msgid "Missing requesting-user-name attribute."
msgstr ""
-#: scheduler/ipp.c:5453 scheduler/ipp.c:5479
+#: scheduler/ipp.c:5456 scheduler/ipp.c:5482
#, c-format
msgid "Missing required attribute \"%s\"."
msgstr ""
-#: scheduler/ipp.c:359
+#: scheduler/ipp.c:357
msgid "Missing required attributes."
msgstr ""
@@ -5261,15 +5261,15 @@ msgstr ""
msgid "Missing value on line %d."
msgstr ""
-#: cups/ppd.c:318
+#: cups/ppd.c:299
msgid "Missing value string"
msgstr ""
-#: cups/pwg-media.c:457
+#: cups/pwg-media.c:458
msgid "Missing x-dimension in media-size."
msgstr ""
-#: cups/pwg-media.c:463
+#: cups/pwg-media.c:464
msgid "Missing y-dimension in media-size."
msgstr ""
@@ -5294,7 +5294,7 @@ msgstr ""
msgid "Modify Printer"
msgstr ""
-#: cups/ppd-cache.c:3565
+#: cups/ppd-cache.c:3567
msgid "Mounting Tape"
msgstr ""
@@ -5310,43 +5310,43 @@ msgstr ""
msgid "Moved Permanently"
msgstr ""
-#: cups/ppd-cache.c:3566
+#: cups/ppd-cache.c:3568
msgid "Multi Layer"
msgstr ""
-#: cups/ppd-cache.c:3567
+#: cups/ppd-cache.c:3569
msgid "Multi Part Form"
msgstr ""
-#: cups/ppd-cache.c:3027
+#: cups/ppd-cache.c:3011
msgid "Multi-Hole Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3025
+#: cups/ppd-cache.c:3009
msgid "Multi-Hole Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3024
+#: cups/ppd-cache.c:3008
msgid "Multi-Hole Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3026
+#: cups/ppd-cache.c:3010
msgid "Multi-Hole Punch (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3413
+#: cups/ppd-cache.c:3415
msgid "Multipurpose"
msgstr ""
-#: cups/ppd-cache.c:3491
+#: cups/ppd-cache.c:3493
msgid "Multipurpose Paper"
msgstr ""
-#: cups/ppd-cache.c:3819
+#: cups/ppd-cache.c:3821
msgid "My Mailbox"
msgstr ""
-#: cups/ppd.c:315
+#: cups/ppd.c:296
msgid "NULL PPD file pointer"
msgstr ""
@@ -5354,7 +5354,7 @@ msgstr ""
msgid "Name OID uses indefinite length"
msgstr ""
-#: scheduler/ipp.c:1066
+#: scheduler/ipp.c:1064
msgid "Nested classes are not allowed."
msgstr ""
@@ -5362,15 +5362,15 @@ msgstr ""
msgid "Never"
msgstr ""
-#: cups/tls-darwin.c:672 cups/tls-gnutls.c:504
+#: cups/tls-darwin.c:672 cups/tls-gnutls.c:529
msgid "New credentials are not valid for name."
msgstr ""
-#: cups/tls-darwin.c:662 cups/tls-gnutls.c:494
+#: cups/tls-darwin.c:662 cups/tls-gnutls.c:519
msgid "New credentials are older than stored credentials."
msgstr ""
-#: cups/ppd.c:2010
+#: cups/ppd.c:1953
msgid "No"
msgstr ""
@@ -5378,7 +5378,7 @@ msgstr ""
msgid "No Content"
msgstr ""
-#: cups/ppd-cache.c:3061
+#: cups/ppd-cache.c:3045
msgid "No IPP attributes."
msgstr ""
@@ -5402,20 +5402,20 @@ msgstr ""
msgid "No active connection."
msgstr ""
-#: scheduler/ipp.c:3453
+#: scheduler/ipp.c:3450
#, c-format
msgid "No active jobs on %s."
msgstr ""
-#: scheduler/ipp.c:219
+#: scheduler/ipp.c:217
msgid "No attributes in request."
msgstr ""
-#: scheduler/ipp.c:3074
+#: scheduler/ipp.c:3071
msgid "No authentication information provided."
msgstr ""
-#: cups/tls-darwin.c:612 cups/tls-gnutls.c:441
+#: cups/tls-darwin.c:612 cups/tls-gnutls.c:466
msgid "No common name specified."
msgstr ""
@@ -5423,11 +5423,11 @@ msgstr ""
msgid "No community name"
msgstr ""
-#: scheduler/ipp.c:6127
+#: scheduler/ipp.c:6130
msgid "No default printer."
msgstr ""
-#: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7508
+#: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7511
msgid "No destinations added."
msgstr ""
@@ -5443,7 +5443,7 @@ msgstr ""
msgid "No error-status"
msgstr ""
-#: scheduler/ipp.c:8466 scheduler/ipp.c:9730
+#: scheduler/ipp.c:8469 scheduler/ipp.c:9733
msgid "No file in print request."
msgstr ""
@@ -5472,15 +5472,15 @@ msgstr ""
msgid "No printer-uri found for class"
msgstr ""
-#: scheduler/ipp.c:6534
+#: scheduler/ipp.c:6537
msgid "No printer-uri in request."
msgstr ""
-#: cups/http.c:2245
+#: cups/http.c:2257
msgid "No request URI."
msgstr ""
-#: cups/http.c:2262
+#: cups/http.c:2274
msgid "No request protocol version."
msgstr ""
@@ -5492,15 +5492,15 @@ msgstr ""
msgid "No request-id"
msgstr ""
-#: cups/tls-darwin.c:692 cups/tls-gnutls.c:524
+#: cups/tls-darwin.c:692 cups/tls-gnutls.c:549
msgid "No stored credentials, not valid for name."
msgstr ""
-#: scheduler/ipp.c:5712
+#: scheduler/ipp.c:5715
msgid "No subscription attributes in request."
msgstr ""
-#: scheduler/ipp.c:7847
+#: scheduler/ipp.c:7850
msgid "No subscriptions found."
msgstr ""
@@ -5520,11 +5520,11 @@ msgstr ""
msgid "Non-continuous (Web sensing)"
msgstr ""
-#: cups/ppd-cache.c:3923 cups/ppd-cache.c:3973 cups/ppd-cache.c:4023
+#: cups/ppd-cache.c:3925 cups/ppd-cache.c:3975 cups/ppd-cache.c:4025
msgid "None"
msgstr ""
-#: cups/ppd-cache.c:4123 cups/ppd-cache.c:4189 cups/ppd-cache.c:4223
+#: cups/ppd-cache.c:4125 cups/ppd-cache.c:4191 cups/ppd-cache.c:4225
#: ppdc/sample.c:238
msgid "Normal"
msgstr ""
@@ -5549,7 +5549,7 @@ msgstr ""
msgid "Not Supported"
msgstr ""
-#: scheduler/ipp.c:1520 scheduler/ipp.c:11001
+#: scheduler/ipp.c:1518 scheduler/ipp.c:11004
msgid "Not allowed to print."
msgstr ""
@@ -5561,15 +5561,15 @@ msgstr ""
msgid "Note: this program only validates the DSC comments, not the PostScript itself."
msgstr ""
-#: cups/http-support.c:1492 cups/http-support.c:1631 cups/ppd.c:313
+#: cups/http-support.c:1492 cups/http-support.c:1631 cups/ppd.c:294
msgid "OK"
msgstr ""
-#: cups/ppd-cache.c:3735 ppdc/sample.c:263
+#: cups/ppd-cache.c:3737 ppdc/sample.c:263
msgid "Off (1-Sided)"
msgstr ""
-#: cups/ppd-cache.c:3487
+#: cups/ppd-cache.c:3489
msgid "Office Recycled Paper"
msgstr ""
@@ -5581,7 +5581,7 @@ msgstr ""
msgid "Online Help"
msgstr ""
-#: scheduler/ipp.c:5432
+#: scheduler/ipp.c:5435
msgid "Only local users can create a local printer."
msgstr ""
@@ -5590,11 +5590,11 @@ msgstr ""
msgid "Open of %s failed: %s"
msgstr ""
-#: cups/ppd.c:321
+#: cups/ppd.c:302
msgid "OpenGroup without a CloseGroup first"
msgstr ""
-#: cups/ppd.c:323
+#: cups/ppd.c:304
msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
msgstr ""
@@ -5602,11 +5602,11 @@ msgstr ""
msgid "Operation Policy"
msgstr ""
-#: cups/ppd-cache.c:3499
+#: cups/ppd-cache.c:3501
msgid "Optical Disc"
msgstr ""
-#: filter/pstops.c:2180
+#: filter/pstops.c:2179
#, c-format
msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
msgstr ""
@@ -5615,15 +5615,15 @@ msgstr ""
msgid "Options Installed"
msgstr ""
-#: scheduler/cupsfilter.c:1480 scheduler/main.c:2103 systemv/cupsaddsmb.c:276
-#: systemv/cupsctl.c:196 systemv/cupstestdsc.c:421 systemv/cupstestppd.c:3859
+#: scheduler/cupsfilter.c:1480 scheduler/main.c:2097 systemv/cupsaddsmb.c:276
+#: systemv/cupsctl.c:237 systemv/cupstestdsc.c:421 systemv/cupstestppd.c:3859
#: test/ippfind.c:2802 test/ipptool.c:5063 ppdc/ppdc.cxx:430
-#: ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:123 ppdc/ppdmerge.cxx:361
+#: ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:123 ppdc/ppdmerge.cxx:359
#: ppdc/ppdpo.cxx:247
msgid "Options:"
msgstr ""
-#: cups/ppd-cache.c:3568
+#: cups/ppd-cache.c:3570
msgid "Other"
msgstr ""
@@ -5631,11 +5631,11 @@ msgstr ""
msgid "Out of date PPD cache file."
msgstr ""
-#: cups/ppd-cache.c:1863
+#: cups/ppd-cache.c:1851
msgid "Out of memory."
msgstr ""
-#: cups/ppd.c:838 cups/ppd.c:1404
+#: cups/ppd.c:817 cups/ppd.c:1347
msgid "Output Mode"
msgstr ""
@@ -5691,7 +5691,7 @@ msgstr ""
msgid "Packet does not start with SEQUENCE"
msgstr ""
-#: cups/ppd-cache.c:3569
+#: cups/ppd-cache.c:3571
msgid "Paper"
msgstr ""
@@ -5711,7 +5711,7 @@ msgstr ""
msgid "Paper tray is missing."
msgstr ""
-#: cups/ppd-cache.c:3001
+#: cups/ppd-cache.c:2985
msgid "Parallel Fold"
msgstr ""
@@ -5723,7 +5723,7 @@ msgstr ""
msgid "ParamCustominTearInterval"
msgstr ""
-#: cups/auth.c:222 cups/auth.c:370
+#: cups/auth.c:245 cups/auth.c:404
#, c-format
msgid "Password for %s on %s? "
msgstr ""
@@ -5745,15 +5745,15 @@ msgstr ""
msgid "Peel-Off"
msgstr ""
-#: cups/ppd-cache.c:3553
+#: cups/ppd-cache.c:3555
msgid "Permanent Labels"
msgstr ""
-#: cups/ppd-cache.c:3401 ppdc/sample.c:160
+#: cups/ppd-cache.c:3403 ppdc/sample.c:160
msgid "Photo"
msgstr ""
-#: cups/ppd-cache.c:3573
+#: cups/ppd-cache.c:3575
msgid "Photo Film"
msgstr ""
@@ -5761,59 +5761,59 @@ msgstr ""
msgid "Photo Labels"
msgstr ""
-#: cups/ppd-cache.c:3570 cups/ppd-cache.c:3571
+#: cups/ppd-cache.c:3572 cups/ppd-cache.c:3573
msgid "Photo Paper"
msgstr ""
-#: cups/ppd-cache.c:3543 cups/ppd-cache.c:3545
+#: cups/ppd-cache.c:3545 cups/ppd-cache.c:3547
msgid "Photo Paper Plus Glossy II"
msgstr ""
-#: cups/ppd-cache.c:3544 cups/ppd-cache.c:3546
+#: cups/ppd-cache.c:3546 cups/ppd-cache.c:3548
msgid "Photo Paper Pro Platinum"
msgstr ""
-#: cups/ppd-cache.c:3519
+#: cups/ppd-cache.c:3521
msgid "Plain Envelope"
msgstr ""
-#: cups/ppd-cache.c:3599 ppdc/sample.c:281
+#: cups/ppd-cache.c:3601 ppdc/sample.c:281
msgid "Plain Paper"
msgstr ""
-#: cups/ppd-cache.c:3579
+#: cups/ppd-cache.c:3581
msgid "Plastic"
msgstr ""
-#: cups/ppd-cache.c:3580
+#: cups/ppd-cache.c:3582
msgid "Plastic Archival"
msgstr ""
-#: cups/ppd-cache.c:3581
+#: cups/ppd-cache.c:3583
msgid "Plastic Colored"
msgstr ""
-#: cups/ppd-cache.c:3582
+#: cups/ppd-cache.c:3584
msgid "Plastic Glossy"
msgstr ""
-#: cups/ppd-cache.c:3583
+#: cups/ppd-cache.c:3585
msgid "Plastic High Gloss"
msgstr ""
-#: cups/ppd-cache.c:3584
+#: cups/ppd-cache.c:3586
msgid "Plastic Matte"
msgstr ""
-#: cups/ppd-cache.c:3585
+#: cups/ppd-cache.c:3587
msgid "Plastic Satin"
msgstr ""
-#: cups/ppd-cache.c:3586
+#: cups/ppd-cache.c:3588
msgid "Plastic Semi Gloss"
msgstr ""
-#: cups/ppd-cache.c:3587
+#: cups/ppd-cache.c:3589
msgid "Plate"
msgstr ""
@@ -5821,7 +5821,7 @@ msgstr ""
msgid "Policies"
msgstr ""
-#: cups/ppd-cache.c:3588
+#: cups/ppd-cache.c:3590
msgid "Polyester"
msgstr ""
@@ -5849,23 +5849,23 @@ msgstr ""
msgid "Postcard Long Edge"
msgstr ""
-#: cups/ppd-cache.c:3002
+#: cups/ppd-cache.c:2986
msgid "Poster Fold"
msgstr ""
-#: cups/ppd-cache.c:3589
+#: cups/ppd-cache.c:3591
msgid "Pre Cut Tabs"
msgstr ""
-#: cups/ppd-cache.c:3493
+#: cups/ppd-cache.c:3495
msgid "Premium Inkjet Paper"
msgstr ""
-#: cups/ppd-cache.c:3494
+#: cups/ppd-cache.c:3496
msgid "Premium Photo Glossy Paper"
msgstr ""
-#: cups/ppd-cache.c:3495
+#: cups/ppd-cache.c:3497
msgid "Premium Presentation Matte Paper"
msgstr ""
@@ -5873,11 +5873,11 @@ msgstr ""
msgid "Preparing to print."
msgstr ""
-#: cups/ppd-cache.c:3520
+#: cups/ppd-cache.c:3522
msgid "Preprinted Envelope"
msgstr ""
-#: cups/ppd-cache.c:3609
+#: cups/ppd-cache.c:3611
msgid "Preprinted Paper"
msgstr ""
@@ -5893,7 +5893,7 @@ msgstr ""
msgid "Print Mode"
msgstr ""
-#: cups/ppd-cache.c:4117 cups/ppd-cache.c:4179 cups/ppd-cache.c:4219
+#: cups/ppd-cache.c:4119 cups/ppd-cache.c:4181 cups/ppd-cache.c:4221
msgid "Print Quality"
msgstr ""
@@ -5921,15 +5921,15 @@ msgstr ""
msgid "Print and Tear"
msgstr ""
-#: backend/socket.c:409 backend/usb-unix.c:182
+#: backend/socket.c:411 backend/usb-unix.c:182
msgid "Print file sent."
msgstr ""
-#: backend/ipp.c:2245
+#: backend/ipp.c:2246
msgid "Print job canceled at printer."
msgstr ""
-#: backend/ipp.c:2237
+#: backend/ipp.c:2238
msgid "Print job too large."
msgstr ""
@@ -5937,7 +5937,7 @@ msgstr ""
msgid "Print job was not accepted."
msgstr ""
-#: scheduler/ipp.c:5498
+#: scheduler/ipp.c:5501
#, c-format
msgid "Printer \"%s\" already exists."
msgstr ""
@@ -5966,15 +5966,15 @@ msgstr ""
msgid "Printer Settings"
msgstr ""
-#: backend/ipp.c:2240
+#: backend/ipp.c:2241
msgid "Printer cannot print supplied content."
msgstr ""
-#: backend/ipp.c:2243
+#: backend/ipp.c:2244
msgid "Printer cannot print with supplied options."
msgstr ""
-#: cups/ppd-cache.c:4248
+#: cups/ppd-cache.c:4250
msgid "Printer does not support required IPP attributes or document formats."
msgstr ""
@@ -5992,11 +5992,11 @@ msgstr ""
msgid "Printing page %d, %u%% complete."
msgstr ""
-#: cups/ppd-cache.c:3007 cups/ppd-cache.c:4020
+#: cups/ppd-cache.c:2991 cups/ppd-cache.c:4022
msgid "Punch"
msgstr ""
-#: cups/ppd-cache.c:3610
+#: cups/ppd-cache.c:3612
msgid "Punched Paper"
msgstr ""
@@ -6004,7 +6004,7 @@ msgstr ""
msgid "Quarto"
msgstr ""
-#: scheduler/ipp.c:1515 scheduler/ipp.c:10996
+#: scheduler/ipp.c:1513 scheduler/ipp.c:10999
msgid "Quota limit reached."
msgstr ""
@@ -6012,11 +6012,11 @@ msgstr ""
msgid "Rank Owner Job File(s) Total Size"
msgstr ""
-#: cups/ppd-cache.c:3412
+#: cups/ppd-cache.c:3414
msgid "Rear"
msgstr ""
-#: cups/ppd-cache.c:3820
+#: cups/ppd-cache.c:3822
msgid "Rear Tray"
msgstr ""
@@ -6042,7 +6042,7 @@ msgstr ""
msgid "Request Entity Too Large"
msgstr ""
-#: cups/ppd.c:840 cups/ppd.c:1406 ppdc/sample.c:231
+#: cups/ppd.c:819 cups/ppd.c:1349 ppdc/sample.c:231
msgid "Resolution"
msgstr ""
@@ -6062,59 +6062,59 @@ msgstr ""
msgid "Rewind"
msgstr ""
-#: cups/ppd-cache.c:3410
+#: cups/ppd-cache.c:3412
msgid "Right"
msgstr ""
-#: cups/ppd-cache.c:3003
+#: cups/ppd-cache.c:2987
msgid "Right Gate Fold"
msgstr ""
-#: cups/ppd-cache.c:3821
+#: cups/ppd-cache.c:3823
msgid "Right Tray"
msgstr ""
-#: cups/ppd-cache.c:3590
+#: cups/ppd-cache.c:3592
msgid "Roll"
msgstr ""
-#: cups/ppd-cache.c:3434
+#: cups/ppd-cache.c:3436
msgid "Roll 1"
msgstr ""
-#: cups/ppd-cache.c:3443
+#: cups/ppd-cache.c:3445
msgid "Roll 10"
msgstr ""
-#: cups/ppd-cache.c:3435
+#: cups/ppd-cache.c:3437
msgid "Roll 2"
msgstr ""
-#: cups/ppd-cache.c:3436
+#: cups/ppd-cache.c:3438
msgid "Roll 3"
msgstr ""
-#: cups/ppd-cache.c:3437
+#: cups/ppd-cache.c:3439
msgid "Roll 4"
msgstr ""
-#: cups/ppd-cache.c:3438
+#: cups/ppd-cache.c:3440
msgid "Roll 5"
msgstr ""
-#: cups/ppd-cache.c:3439
+#: cups/ppd-cache.c:3441
msgid "Roll 6"
msgstr ""
-#: cups/ppd-cache.c:3440
+#: cups/ppd-cache.c:3442
msgid "Roll 7"
msgstr ""
-#: cups/ppd-cache.c:3441
+#: cups/ppd-cache.c:3443
msgid "Roll 8"
msgstr ""
-#: cups/ppd-cache.c:3442
+#: cups/ppd-cache.c:3444
msgid "Roll 9"
msgstr ""
@@ -6131,31 +6131,31 @@ msgstr ""
msgid "SSL/TLS Negotiation Error"
msgstr ""
-#: cups/ppd-cache.c:3028
+#: cups/ppd-cache.c:3012
msgid "Saddle Stitch"
msgstr ""
-#: cups/ppd-cache.c:3554
+#: cups/ppd-cache.c:3556
msgid "Satin Labels"
msgstr ""
-#: cups/ppd-cache.c:3503
+#: cups/ppd-cache.c:3505
msgid "Satin Optical Disc"
msgstr ""
-#: cups/ppd-cache.c:3577
+#: cups/ppd-cache.c:3579
msgid "Satin Photo Paper"
msgstr ""
-#: cups/ppd-cache.c:3591
+#: cups/ppd-cache.c:3593
msgid "Screen"
msgstr ""
-#: cups/ppd-cache.c:3592
+#: cups/ppd-cache.c:3594
msgid "Screen Paged"
msgstr ""
-#: cups/ppd-cache.c:3555
+#: cups/ppd-cache.c:3557
msgid "Security Labels"
msgstr ""
@@ -6163,35 +6163,35 @@ msgstr ""
msgid "See Other"
msgstr ""
-#: scheduler/ipp.c:7132 scheduler/ipp.c:7151
+#: scheduler/ipp.c:7135 scheduler/ipp.c:7154
msgid "See remote printer."
msgstr ""
-#: cups/ppd-cache.c:3593
+#: cups/ppd-cache.c:3595
msgid "Self Adhesive"
msgstr ""
-#: cups/ppd-cache.c:3594
+#: cups/ppd-cache.c:3596
msgid "Self Adhesive Film"
msgstr ""
-#: cups/tls-darwin.c:747 cups/tls-gnutls.c:586
+#: cups/tls-darwin.c:747 cups/tls-gnutls.c:611
msgid "Self-signed credentials are blocked."
msgstr ""
-#: cups/ppd-cache.c:3527
+#: cups/ppd-cache.c:3529
msgid "Semi-Gloss Fabric"
msgstr ""
-#: cups/ppd-cache.c:3556
+#: cups/ppd-cache.c:3558
msgid "Semi-Gloss Labels"
msgstr ""
-#: cups/ppd-cache.c:3504
+#: cups/ppd-cache.c:3506
msgid "Semi-Gloss Optical Disc"
msgstr ""
-#: cups/ppd-cache.c:3578
+#: cups/ppd-cache.c:3580
msgid "Semi-Gloss Photo Paper"
msgstr ""
@@ -6215,7 +6215,7 @@ msgstr ""
msgid "Server Stopped"
msgstr ""
-#: cups/tls-darwin.c:1191 cups/tls-gnutls.c:1282
+#: cups/tls-darwin.c:1191 cups/tls-gnutls.c:1307
msgid "Server credentials not set."
msgstr ""
@@ -6248,63 +6248,63 @@ msgstr ""
msgid "Shipping Address"
msgstr ""
-#: cups/ppd-cache.c:3735 ppdc/sample.c:265
+#: cups/ppd-cache.c:3737 ppdc/sample.c:265
msgid "Short-Edge (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3595
+#: cups/ppd-cache.c:3597
msgid "Shrink Foil"
msgstr ""
-#: cups/ppd-cache.c:3408
+#: cups/ppd-cache.c:3410
msgid "Side"
msgstr ""
-#: cups/ppd-cache.c:3822
+#: cups/ppd-cache.c:3824
msgid "Side Tray"
msgstr ""
-#: cups/ppd-cache.c:3596
+#: cups/ppd-cache.c:3598
msgid "Single Face"
msgstr ""
-#: cups/ppd-cache.c:3019
+#: cups/ppd-cache.c:3003
msgid "Single Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3018
+#: cups/ppd-cache.c:3002
msgid "Single Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3008
+#: cups/ppd-cache.c:2992
msgid "Single Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3009
+#: cups/ppd-cache.c:2993
msgid "Single Punch (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3037
+#: cups/ppd-cache.c:3021
msgid "Single Staple (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3036
+#: cups/ppd-cache.c:3020
msgid "Single Staple (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3030
+#: cups/ppd-cache.c:3014
msgid "Single Staple (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3031
+#: cups/ppd-cache.c:3015
msgid "Single Staple (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3597
+#: cups/ppd-cache.c:3599
msgid "Single Wall Cardboard"
msgstr ""
-#: cups/ppd-cache.c:3598
+#: cups/ppd-cache.c:3600
msgid "Sleeve"
msgstr ""
@@ -6317,43 +6317,43 @@ msgstr ""
msgid "Spooling job, %.0f%% complete."
msgstr ""
-#: cups/ppd-cache.c:3823
+#: cups/ppd-cache.c:3825
msgid "Stacker 1"
msgstr ""
-#: cups/ppd-cache.c:3832
+#: cups/ppd-cache.c:3834
msgid "Stacker 10"
msgstr ""
-#: cups/ppd-cache.c:3824
+#: cups/ppd-cache.c:3826
msgid "Stacker 2"
msgstr ""
-#: cups/ppd-cache.c:3825
+#: cups/ppd-cache.c:3827
msgid "Stacker 3"
msgstr ""
-#: cups/ppd-cache.c:3826
+#: cups/ppd-cache.c:3828
msgid "Stacker 4"
msgstr ""
-#: cups/ppd-cache.c:3827
+#: cups/ppd-cache.c:3829
msgid "Stacker 5"
msgstr ""
-#: cups/ppd-cache.c:3828
+#: cups/ppd-cache.c:3830
msgid "Stacker 6"
msgstr ""
-#: cups/ppd-cache.c:3829
+#: cups/ppd-cache.c:3831
msgid "Stacker 7"
msgstr ""
-#: cups/ppd-cache.c:3830
+#: cups/ppd-cache.c:3832
msgid "Stacker 8"
msgstr ""
-#: cups/ppd-cache.c:3831
+#: cups/ppd-cache.c:3833
msgid "Stacker 9"
msgstr ""
@@ -6361,27 +6361,27 @@ msgstr ""
msgid "Standard"
msgstr ""
-#: cups/ppd-cache.c:3029 cups/ppd-cache.c:3920
+#: cups/ppd-cache.c:3013 cups/ppd-cache.c:3922
msgid "Staple"
msgstr ""
-#: cups/ppd-cache.c:2987
+#: cups/ppd-cache.c:2971
msgid "Staple Edge"
msgstr ""
-#: cups/ppd-cache.c:2991
+#: cups/ppd-cache.c:2975
msgid "Staple Edge (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:2989
+#: cups/ppd-cache.c:2973
msgid "Staple Edge (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:2988
+#: cups/ppd-cache.c:2972
msgid "Staple Edge (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:2990
+#: cups/ppd-cache.c:2974
msgid "Staple Edge (Reverse Portrait)"
msgstr ""
@@ -6400,8 +6400,8 @@ msgstr ""
msgid "Statement"
msgstr ""
-#: scheduler/ipp.c:3599 scheduler/ipp.c:6944 scheduler/ipp.c:7654
-#: scheduler/ipp.c:9178
+#: scheduler/ipp.c:3596 scheduler/ipp.c:6947 scheduler/ipp.c:7657
+#: scheduler/ipp.c:9181
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
@@ -6426,7 +6426,7 @@ msgstr ""
msgid "Switching Protocols"
msgstr ""
-#: cups/ppd-cache.c:3611
+#: cups/ppd-cache.c:3613
msgid "Tab Stock"
msgstr ""
@@ -6454,33 +6454,33 @@ msgstr ""
msgid "Tear-Off Adjust Position"
msgstr ""
-#: scheduler/ipp.c:1351
+#: scheduler/ipp.c:1349
#, c-format
msgid "The \"%s\" attribute is required for print jobs."
msgstr ""
-#: scheduler/ipp.c:6605 scheduler/ipp.c:6685 scheduler/ipp.c:6698
-#: scheduler/ipp.c:6710 scheduler/ipp.c:6725
+#: scheduler/ipp.c:6608 scheduler/ipp.c:6688 scheduler/ipp.c:6701
+#: scheduler/ipp.c:6713 scheduler/ipp.c:6728
#, c-format
msgid "The %s attribute cannot be provided with job-ids."
msgstr ""
-#: scheduler/ipp.c:1330
+#: scheduler/ipp.c:1328
#, c-format
msgid "The '%s' Job Status attribute cannot be supplied in a job creation request."
msgstr ""
-#: scheduler/ipp.c:5232
+#: scheduler/ipp.c:5230
#, c-format
msgid "The '%s' operation attribute cannot be supplied in a Create-Job request."
msgstr ""
-#: scheduler/ipp.c:7174
+#: scheduler/ipp.c:7177
#, c-format
msgid "The PPD file \"%s\" could not be found."
msgstr ""
-#: scheduler/ipp.c:7163
+#: scheduler/ipp.c:7166
#, c-format
msgid "The PPD file \"%s\" could not be opened: %s"
msgstr ""
@@ -6510,11 +6510,11 @@ msgstr ""
msgid "The fuser's temperature is low."
msgstr ""
-#: scheduler/ipp.c:2112
+#: scheduler/ipp.c:2110
msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
msgstr ""
-#: scheduler/ipp.c:2095 scheduler/ipp.c:5837
+#: scheduler/ipp.c:2093 scheduler/ipp.c:5840
#, c-format
msgid "The notify-user-data value is too large (%d > 63 octets)."
msgstr ""
@@ -6590,18 +6590,18 @@ msgstr ""
msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
msgstr ""
-#: scheduler/ipp.c:774 scheduler/ipp.c:1057 scheduler/ipp.c:3238
-#: scheduler/ipp.c:3419 scheduler/ipp.c:5215 scheduler/ipp.c:5671
-#: scheduler/ipp.c:6005 scheduler/ipp.c:6571 scheduler/ipp.c:7378
-#: scheduler/ipp.c:7434 scheduler/ipp.c:7760 scheduler/ipp.c:8035
-#: scheduler/ipp.c:8124 scheduler/ipp.c:8157 scheduler/ipp.c:8481
-#: scheduler/ipp.c:8888 scheduler/ipp.c:8970 scheduler/ipp.c:10144
-#: scheduler/ipp.c:10606 scheduler/ipp.c:10959 scheduler/ipp.c:11041
-#: scheduler/ipp.c:11370
+#: scheduler/ipp.c:772 scheduler/ipp.c:1055 scheduler/ipp.c:3235
+#: scheduler/ipp.c:3416 scheduler/ipp.c:5213 scheduler/ipp.c:5674
+#: scheduler/ipp.c:6008 scheduler/ipp.c:6574 scheduler/ipp.c:7381
+#: scheduler/ipp.c:7437 scheduler/ipp.c:7763 scheduler/ipp.c:8038
+#: scheduler/ipp.c:8127 scheduler/ipp.c:8160 scheduler/ipp.c:8484
+#: scheduler/ipp.c:8891 scheduler/ipp.c:8973 scheduler/ipp.c:10147
+#: scheduler/ipp.c:10609 scheduler/ipp.c:10962 scheduler/ipp.c:11044
+#: scheduler/ipp.c:11373
msgid "The printer or class does not exist."
msgstr ""
-#: scheduler/ipp.c:1269
+#: scheduler/ipp.c:1267
msgid "The printer or class is not shared."
msgstr ""
@@ -6625,20 +6625,20 @@ msgstr ""
msgid "The printer's waste bin is full."
msgstr ""
-#: scheduler/ipp.c:880 scheduler/ipp.c:2276
+#: scheduler/ipp.c:878 scheduler/ipp.c:2274
#, c-format
msgid "The printer-uri \"%s\" contains invalid characters."
msgstr ""
-#: scheduler/ipp.c:3215
+#: scheduler/ipp.c:3212
msgid "The printer-uri attribute is required."
msgstr ""
-#: scheduler/ipp.c:864
+#: scheduler/ipp.c:862
msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
msgstr ""
-#: scheduler/ipp.c:2260
+#: scheduler/ipp.c:2258
msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
msgstr ""
@@ -6650,12 +6650,12 @@ msgstr ""
msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
msgstr ""
-#: scheduler/ipp.c:6669
+#: scheduler/ipp.c:6672
#, c-format
msgid "The which-jobs value \"%s\" is not supported."
msgstr ""
-#: scheduler/ipp.c:5934
+#: scheduler/ipp.c:5937
msgid "There are too many subscriptions."
msgstr ""
@@ -6668,37 +6668,37 @@ msgstr ""
msgid "Thermal Transfer Media"
msgstr ""
-#: scheduler/ipp.c:1509
+#: scheduler/ipp.c:1507
msgid "Too many active jobs."
msgstr ""
-#: scheduler/ipp.c:1403
+#: scheduler/ipp.c:1401
#, c-format
msgid "Too many job-sheets values (%d > 2)."
msgstr ""
-#: scheduler/ipp.c:2587
+#: scheduler/ipp.c:2585
#, c-format
msgid "Too many printer-state-reasons values (%d > %d)."
msgstr ""
-#: cups/ppd-cache.c:3405
+#: cups/ppd-cache.c:3407
msgid "Top"
msgstr ""
-#: cups/ppd-cache.c:3833
+#: cups/ppd-cache.c:3835
msgid "Top Tray"
msgstr ""
-#: cups/ppd-cache.c:3612
+#: cups/ppd-cache.c:3614
msgid "Tractor"
msgstr ""
-#: cups/ppd-cache.c:3613
+#: cups/ppd-cache.c:3615
msgid "Transfer"
msgstr ""
-#: cups/ppd-cache.c:3614 ppdc/sample.c:284
+#: cups/ppd-cache.c:3616 ppdc/sample.c:284
msgid "Transparency"
msgstr ""
@@ -6706,108 +6706,108 @@ msgstr ""
msgid "Tray"
msgstr ""
-#: cups/ppd-cache.c:3414 cups/ppd-cache.c:3834 ppdc/sample.c:256
+#: cups/ppd-cache.c:3416 cups/ppd-cache.c:3836 ppdc/sample.c:256
msgid "Tray 1"
msgstr ""
-#: cups/ppd-cache.c:3423 cups/ppd-cache.c:3843
+#: cups/ppd-cache.c:3425 cups/ppd-cache.c:3845
msgid "Tray 10"
msgstr ""
-#: cups/ppd-cache.c:3424
+#: cups/ppd-cache.c:3426
msgid "Tray 11"
msgstr ""
-#: cups/ppd-cache.c:3425
+#: cups/ppd-cache.c:3427
msgid "Tray 12"
msgstr ""
-#: cups/ppd-cache.c:3426
+#: cups/ppd-cache.c:3428
msgid "Tray 13"
msgstr ""
-#: cups/ppd-cache.c:3427
+#: cups/ppd-cache.c:3429
msgid "Tray 14"
msgstr ""
-#: cups/ppd-cache.c:3428
+#: cups/ppd-cache.c:3430
msgid "Tray 15"
msgstr ""
-#: cups/ppd-cache.c:3429
+#: cups/ppd-cache.c:3431
msgid "Tray 16"
msgstr ""
-#: cups/ppd-cache.c:3430
+#: cups/ppd-cache.c:3432
msgid "Tray 17"
msgstr ""
-#: cups/ppd-cache.c:3431
+#: cups/ppd-cache.c:3433
msgid "Tray 18"
msgstr ""
-#: cups/ppd-cache.c:3432
+#: cups/ppd-cache.c:3434
msgid "Tray 19"
msgstr ""
-#: cups/ppd-cache.c:3415 cups/ppd-cache.c:3835 ppdc/sample.c:257
+#: cups/ppd-cache.c:3417 cups/ppd-cache.c:3837 ppdc/sample.c:257
msgid "Tray 2"
msgstr ""
-#: cups/ppd-cache.c:3433
+#: cups/ppd-cache.c:3435
msgid "Tray 20"
msgstr ""
-#: cups/ppd-cache.c:3416 cups/ppd-cache.c:3836 ppdc/sample.c:258
+#: cups/ppd-cache.c:3418 cups/ppd-cache.c:3838 ppdc/sample.c:258
msgid "Tray 3"
msgstr ""
-#: cups/ppd-cache.c:3417 cups/ppd-cache.c:3837 ppdc/sample.c:259
+#: cups/ppd-cache.c:3419 cups/ppd-cache.c:3839 ppdc/sample.c:259
msgid "Tray 4"
msgstr ""
-#: cups/ppd-cache.c:3418 cups/ppd-cache.c:3838
+#: cups/ppd-cache.c:3420 cups/ppd-cache.c:3840
msgid "Tray 5"
msgstr ""
-#: cups/ppd-cache.c:3419 cups/ppd-cache.c:3839
+#: cups/ppd-cache.c:3421 cups/ppd-cache.c:3841
msgid "Tray 6"
msgstr ""
-#: cups/ppd-cache.c:3420 cups/ppd-cache.c:3840
+#: cups/ppd-cache.c:3422 cups/ppd-cache.c:3842
msgid "Tray 7"
msgstr ""
-#: cups/ppd-cache.c:3421 cups/ppd-cache.c:3841
+#: cups/ppd-cache.c:3423 cups/ppd-cache.c:3843
msgid "Tray 8"
msgstr ""
-#: cups/ppd-cache.c:3422 cups/ppd-cache.c:3842
+#: cups/ppd-cache.c:3424 cups/ppd-cache.c:3844
msgid "Tray 9"
msgstr ""
-#: cups/ppd-cache.c:3041
+#: cups/ppd-cache.c:3025
msgid "Triple Staple (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3039
+#: cups/ppd-cache.c:3023
msgid "Triple Staple (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3038
+#: cups/ppd-cache.c:3022
msgid "Triple Staple (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3040
+#: cups/ppd-cache.c:3024
msgid "Triple Staple (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3615
+#: cups/ppd-cache.c:3617
msgid "Triple Wall Cardboard"
msgstr ""
-#: cups/tls-darwin.c:652 cups/tls-darwin.c:734 cups/tls-gnutls.c:484
-#: cups/tls-gnutls.c:566
+#: cups/tls-darwin.c:652 cups/tls-darwin.c:734 cups/tls-gnutls.c:509
+#: cups/tls-gnutls.c:591
msgid "Trust on first use is disabled."
msgstr ""
@@ -6875,7 +6875,7 @@ msgstr ""
msgid "Unable to add document to print job."
msgstr ""
-#: scheduler/ipp.c:1584
+#: scheduler/ipp.c:1582
#, c-format
msgid "Unable to add job for destination \"%s\"."
msgstr ""
@@ -6884,15 +6884,15 @@ msgstr ""
msgid "Unable to add printer"
msgstr ""
-#: scheduler/ipp.c:1187
+#: scheduler/ipp.c:1185
msgid "Unable to allocate memory for file types."
msgstr ""
-#: filter/pstops.c:421
+#: filter/pstops.c:420
msgid "Unable to allocate memory for page info"
msgstr ""
-#: filter/pstops.c:415
+#: filter/pstops.c:414
msgid "Unable to allocate memory for pages array"
msgstr ""
@@ -6900,7 +6900,7 @@ msgstr ""
msgid "Unable to cancel RSS subscription"
msgstr ""
-#: backend/ipp.c:2150 backend/ipp.c:2682
+#: backend/ipp.c:2150 backend/ipp.c:2683
msgid "Unable to cancel print job."
msgstr ""
@@ -6916,12 +6916,12 @@ msgstr ""
msgid "Unable to change server settings"
msgstr ""
-#: cups/ipp.c:5303
+#: cups/ipp.c:5287
#, c-format
msgid "Unable to compile mimeMediaType regular expression: %s."
msgstr ""
-#: cups/ipp.c:5249
+#: cups/ipp.c:5233
#, c-format
msgid "Unable to compile naturalLanguage regular expression: %s."
msgstr ""
@@ -6954,12 +6954,12 @@ msgstr ""
msgid "Unable to copy CUPS printer driver files (%d)."
msgstr ""
-#: scheduler/ipp.c:2690
+#: scheduler/ipp.c:2687
#, c-format
msgid "Unable to copy PPD file - %s"
msgstr ""
-#: scheduler/ipp.c:2735
+#: scheduler/ipp.c:2732
msgid "Unable to copy PPD file."
msgstr ""
@@ -6973,7 +6973,7 @@ msgstr ""
msgid "Unable to copy Windows 9x printer driver files (%d)."
msgstr ""
-#: cups/tls-darwin.c:618 cups/tls-gnutls.c:447
+#: cups/tls-darwin.c:618 cups/tls-gnutls.c:472
msgid "Unable to create credentials from array."
msgstr ""
@@ -6981,11 +6981,11 @@ msgstr ""
msgid "Unable to create printer-uri"
msgstr ""
-#: scheduler/ipp.c:5508
+#: scheduler/ipp.c:5511
msgid "Unable to create printer."
msgstr ""
-#: cups/tls-darwin.c:1484 cups/tls-gnutls.c:1494
+#: cups/tls-darwin.c:1484 cups/tls-gnutls.c:1519
msgid "Unable to create server credentials."
msgstr ""
@@ -7045,7 +7045,7 @@ msgstr ""
msgid "Unable to find destination for job"
msgstr ""
-#: cups/http-support.c:2101
+#: cups/http-support.c:2098
msgid "Unable to find printer."
msgstr ""
@@ -7053,7 +7053,7 @@ msgstr ""
msgid "Unable to find server credentials."
msgstr ""
-#: backend/ipp.c:3345
+#: backend/ipp.c:3346
msgid "Unable to get backend exit status."
msgstr ""
@@ -7125,7 +7125,7 @@ msgstr ""
msgid "Unable to move jobs"
msgstr ""
-#: cgi-bin/admin.c:3171 cups/ppd.c:314
+#: cgi-bin/admin.c:3171 cups/ppd.c:295
msgid "Unable to open PPD file"
msgstr ""
@@ -7137,7 +7137,7 @@ msgstr ""
msgid "Unable to open device file"
msgstr ""
-#: scheduler/ipp.c:6348
+#: scheduler/ipp.c:6351
#, c-format
msgid "Unable to open document #%d in job #%d."
msgstr ""
@@ -7148,7 +7148,7 @@ msgstr ""
#: backend/ipp.c:386 backend/ipp.c:1605 backend/ipp.c:1818 backend/lpd.c:479
#: backend/socket.c:147 backend/usb.c:229 filter/gziptoany.c:71
-#: filter/pstops.c:268
+#: filter/pstops.c:267
msgid "Unable to open print file"
msgstr ""
@@ -7166,7 +7166,7 @@ msgstr ""
msgid "Unable to read print data."
msgstr ""
-#: scheduler/ipp.c:8640 scheduler/ipp.c:9883
+#: scheduler/ipp.c:8643 scheduler/ipp.c:9886
msgid "Unable to rename job document file."
msgstr ""
@@ -7179,7 +7179,7 @@ msgstr ""
msgid "Unable to run \"%s\": %s"
msgstr ""
-#: filter/pstops.c:533
+#: filter/pstops.c:532
msgid "Unable to see in file"
msgstr ""
@@ -7204,7 +7204,7 @@ msgstr ""
msgid "Unable to set server default"
msgstr ""
-#: backend/ipp.c:3204 backend/ipp.c:3281 backend/ipp.c:3289
+#: backend/ipp.c:3205 backend/ipp.c:3282 backend/ipp.c:3290
msgid "Unable to start backend process."
msgstr ""
@@ -7233,11 +7233,11 @@ msgstr ""
msgid "Units"
msgstr ""
-#: cups/http-support.c:1560 cups/http-support.c:1644 cups/ppd.c:343
+#: cups/http-support.c:1560 cups/http-support.c:1644 cups/ppd.c:324
msgid "Unknown"
msgstr ""
-#: filter/pstops.c:2188
+#: filter/pstops.c:2187
#, c-format
msgid "Unknown choice \"%s\" for option \"%s\"."
msgstr ""
@@ -7261,7 +7261,7 @@ msgstr ""
msgid "Unknown hash algorithm."
msgstr ""
-#: cups/dest-options.c:1024
+#: cups/dest-options.c:1033
msgid "Unknown media size name."
msgstr ""
@@ -7270,7 +7270,7 @@ msgstr ""
msgid "Unknown option \"%s\" with value \"%s\"."
msgstr ""
-#: filter/pstops.c:2171
+#: filter/pstops.c:2170
#, c-format
msgid "Unknown option \"%s\"."
msgstr ""
@@ -7280,21 +7280,21 @@ msgstr ""
msgid "Unknown print mode: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10828
+#: scheduler/ipp.c:10831
#, c-format
msgid "Unknown printer-error-policy \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10811
+#: scheduler/ipp.c:10814
#, c-format
msgid "Unknown printer-op-policy \"%s\"."
msgstr ""
-#: cups/http.c:2294
+#: cups/http.c:2306
msgid "Unknown request method."
msgstr ""
-#: cups/http.c:2314
+#: cups/http.c:2326
msgid "Unknown request version."
msgstr ""
@@ -7302,7 +7302,7 @@ msgstr ""
msgid "Unknown scheme in URI"
msgstr ""
-#: cups/http-addrlist.c:822
+#: cups/http-addrlist.c:824
msgid "Unknown service name."
msgstr ""
@@ -7311,68 +7311,68 @@ msgstr ""
msgid "Unknown version option value: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:11287
+#: scheduler/ipp.c:11290
#, c-format
msgid "Unsupported 'compression' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:11317
+#: scheduler/ipp.c:11320
#, c-format
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:7987 scheduler/ipp.c:10370 scheduler/ipp.c:11331
+#: scheduler/ipp.c:7990 scheduler/ipp.c:10373 scheduler/ipp.c:11334
msgid "Unsupported 'job-hold-until' value."
msgstr ""
-#: scheduler/ipp.c:11347
+#: scheduler/ipp.c:11350
msgid "Unsupported 'job-name' value."
msgstr ""
-#: scheduler/ipp.c:310
+#: scheduler/ipp.c:308
#, c-format
msgid "Unsupported character set \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8447 scheduler/ipp.c:9695
+#: scheduler/ipp.c:8450 scheduler/ipp.c:9698
#, c-format
msgid "Unsupported compression \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8583 scheduler/ipp.c:9848
+#: scheduler/ipp.c:8586 scheduler/ipp.c:9851
#, c-format
msgid "Unsupported document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9831
+#: scheduler/ipp.c:9834
#, c-format
msgid "Unsupported document-format \"%s/%s\"."
msgstr ""
-#: scheduler/ipp.c:1369
+#: scheduler/ipp.c:1367
#, c-format
msgid "Unsupported format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:1467
+#: scheduler/ipp.c:1465
msgid "Unsupported margins."
msgstr ""
-#: cups/pwg-media.c:544
+#: cups/pwg-media.c:545
msgid "Unsupported media value."
msgstr ""
-#: filter/pstops.c:2453
+#: filter/pstops.c:2452
#, c-format
msgid "Unsupported number-up value %d, using number-up=1."
msgstr ""
-#: filter/pstops.c:2487
+#: filter/pstops.c:2486
#, c-format
msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
msgstr ""
-#: filter/pstops.c:2538
+#: filter/pstops.c:2537
#, c-format
msgid "Unsupported page-border value %s, using page-border=none."
msgstr ""
@@ -7404,7 +7404,7 @@ msgstr ""
#: backend/dnssd.c:225 backend/ipp.c:334 backend/lpd.c:178
#: backend/socket.c:124 backend/usb.c:175 filter/commandtops.c:61
-#: filter/gziptoany.c:44 filter/pstops.c:229 monitor/bcp.c:54
+#: filter/gziptoany.c:44 filter/pstops.c:228 monitor/bcp.c:54
#: monitor/tbcp.c:53
#, c-format
msgid "Usage: %s job-id user title copies options [file]"
@@ -7414,11 +7414,11 @@ msgstr ""
msgid "Usage: cupsaddsmb [options] printer1 ... printerN"
msgstr ""
-#: systemv/cupsctl.c:193
+#: systemv/cupsctl.c:234
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
msgstr ""
-#: scheduler/main.c:2102
+#: scheduler/main.c:2096
msgid "Usage: cupsd [options]"
msgstr ""
@@ -7450,7 +7450,7 @@ msgstr ""
msgid "Usage: lpmove job/src dest"
msgstr ""
-#: systemv/lpoptions.c:523
+#: systemv/lpoptions.c:536
msgid ""
"Usage: lpoptions [-h server] [-E] -d printer\n"
" lpoptions [-h server] [-E] [-p printer] -l\n"
@@ -7474,7 +7474,7 @@ msgstr ""
msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]"
msgstr ""
-#: ppdc/ppdmerge.cxx:359
+#: ppdc/ppdmerge.cxx:357
msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
msgstr ""
@@ -7494,7 +7494,7 @@ msgstr ""
msgid "VarBind uses indefinite length"
msgstr ""
-#: cups/ppd-cache.c:3603
+#: cups/ppd-cache.c:3605
msgid "Vellum Paper"
msgstr ""
@@ -7510,7 +7510,7 @@ msgstr ""
msgid "Waiting for printer to become available."
msgstr ""
-#: backend/socket.c:420
+#: backend/socket.c:422
msgid "Waiting for printer to finish."
msgstr ""
@@ -7518,7 +7518,7 @@ msgstr ""
msgid "Warning, no Windows 2000 printer drivers are installed."
msgstr ""
-#: cups/ppd-cache.c:3528
+#: cups/ppd-cache.c:3530
msgid "Waterproof Fabric"
msgstr ""
@@ -7526,15 +7526,15 @@ msgstr ""
msgid "Web Interface is Disabled"
msgstr ""
-#: cups/ppd-cache.c:3616
+#: cups/ppd-cache.c:3618
msgid "Wet Film"
msgstr ""
-#: cups/ppd-cache.c:3521
+#: cups/ppd-cache.c:3523
msgid "Windowed Envelope"
msgstr ""
-#: cups/ppd.c:2008
+#: cups/ppd.c:1951
msgid "Yes"
msgstr ""
@@ -7543,7 +7543,7 @@ msgstr ""
msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
msgstr ""
-#: cups/ppd-cache.c:3004
+#: cups/ppd-cache.c:2988
msgid "Z Fold"
msgstr ""
@@ -7567,11 +7567,11 @@ msgstr ""
msgid "completed"
msgstr ""
-#: scheduler/ipp.c:6220
+#: scheduler/ipp.c:6223
msgid "cups-deviced failed to execute."
msgstr ""
-#: scheduler/ipp.c:7106 scheduler/ipp.c:7345
+#: scheduler/ipp.c:7109 scheduler/ipp.c:7348
msgid "cups-driverd failed to execute."
msgstr ""
@@ -7580,21 +7580,22 @@ msgstr ""
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr ""
-#: systemv/cupsctl.c:134
-msgid "cupsctl: Cannot set Listen or Port directly."
+#: systemv/cupsctl.c:173
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
msgstr ""
-#: systemv/cupsctl.c:145
+#: systemv/cupsctl.c:186
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
msgstr ""
-#: systemv/cupsctl.c:188
+#: systemv/cupsctl.c:229
#, c-format
msgid "cupsctl: Unknown option \"%s\""
msgstr ""
-#: systemv/cupsctl.c:190
+#: systemv/cupsctl.c:231
#, c-format
msgid "cupsctl: Unknown option \"-%c\""
msgstr ""
@@ -7836,7 +7837,7 @@ msgstr ""
msgid "ipptool: Unknown option \"-%c\"."
msgstr ""
-#: scheduler/ipp.c:8113
+#: scheduler/ipp.c:8116
msgid "job-printer-uri attribute missing."
msgstr ""
@@ -7944,7 +7945,7 @@ msgstr ""
msgid "lpadmin: Unable to connect to server: %s"
msgstr ""
-#: systemv/lpadmin.c:1460
+#: systemv/lpadmin.c:1461
msgid "lpadmin: Unable to create temporary file"
msgstr ""
@@ -7959,7 +7960,7 @@ msgstr ""
msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
msgstr ""
-#: systemv/lpadmin.c:1472
+#: systemv/lpadmin.c:1473
#, c-format
msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
msgstr ""
@@ -8050,12 +8051,12 @@ msgstr ""
msgid "lpoptions: Unable to add printer or instance: %s"
msgstr ""
-#: systemv/lpoptions.c:491
+#: systemv/lpoptions.c:493 systemv/lpoptions.c:502
#, c-format
msgid "lpoptions: Unable to get PPD file for %s: %s"
msgstr ""
-#: systemv/lpoptions.c:499
+#: systemv/lpoptions.c:512
#, c-format
msgid "lpoptions: Unable to open PPD file for %s."
msgstr ""
@@ -8082,16 +8083,16 @@ msgstr ""
msgid "no system default destination"
msgstr ""
-#: scheduler/ipp.c:5905
+#: scheduler/ipp.c:5908
msgid "notify-events not specified."
msgstr ""
-#: scheduler/ipp.c:2049 scheduler/ipp.c:5791
+#: scheduler/ipp.c:2047 scheduler/ipp.c:5794
#, c-format
msgid "notify-recipient-uri URI \"%s\" is already used."
msgstr ""
-#: scheduler/ipp.c:2039 scheduler/ipp.c:5781
+#: scheduler/ipp.c:2037 scheduler/ipp.c:5784
#, c-format
msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
msgstr ""
@@ -8558,17 +8559,17 @@ msgstr ""
msgid "ppdc: Writing PPD files to directory \"%s\"."
msgstr ""
-#: ppdc/ppdmerge.cxx:128
+#: ppdc/ppdmerge.cxx:129
#, c-format
msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s."
msgstr ""
-#: ppdc/ppdmerge.cxx:168
+#: ppdc/ppdmerge.cxx:166
#, c-format
msgid "ppdmerge: Ignoring PPD file %s."
msgstr ""
-#: ppdc/ppdmerge.cxx:152
+#: ppdc/ppdmerge.cxx:150
#, c-format
msgid "ppdmerge: Unable to backup %s to %s - %s"
msgstr ""
diff --git a/locale/cups.strings b/locale/cups.strings
index 6a708f2c1..0c484f33b 100644
--- a/locale/cups.strings
+++ b/locale/cups.strings
@@ -1722,7 +1722,7 @@
"cups-deviced failed to execute." = "cups-deviced failed to execute.";
"cups-driverd failed to execute." = "cups-driverd failed to execute.";
"cupsaddsmb: No PPD file for printer \"%s\" - %s" = "cupsaddsmb: No PPD file for printer β€œ%s” - %s";
-"cupsctl: Cannot set Listen or Port directly." = "cupsctl: Cannot set Listen or Port directly.";
+"cupsctl: Cannot set %s directly." = "cupsctl: Cannot set %s directly.";
"cupsctl: Unable to connect to server: %s" = "cupsctl: Unable to connect to server: %s";
"cupsctl: Unknown option \"%s\"" = "cupsctl: Unknown option β€œ%s”";
"cupsctl: Unknown option \"-%c\"" = "cupsctl: Unknown option β€œ-%c”";
diff --git a/locale/cups_ca.po b/locale/cups_ca.po
index 248c4f227..a4b28a505 100644
--- a/locale/cups_ca.po
+++ b/locale/cups_ca.po
@@ -32,7 +32,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.4.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2012-09-29 11:21+0200\n"
"Last-Translator: Γ€ngel MompΓ³ <mecatxis@gmail.com>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
@@ -6271,8 +6271,9 @@ msgstr "no s'ha pogut executar correctament la cups-driverd"
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: falta el fitxer PPD per la impressora Β«%sΒ» - %s"
-msgid "cupsctl: Cannot set Listen or Port directly."
-msgstr "cupsctl: no es pot establir Listen o Port directament."
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
+msgstr ""
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
@@ -13776,6 +13777,9 @@ msgstr "Z Offset"
#~ "convert: feu servir l'opciΓ³ -f per especificar el fitxer que voleu "
#~ "convertir."
+#~ msgid "cupsctl: Cannot set Listen or Port directly."
+#~ msgstr "cupsctl: no es pot establir Listen o Port directament."
+
#~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
#~ msgstr ""
#~ "cupsd: no s'ha compilat amb compatibilitat per launchd(8). S'executa en "
diff --git a/locale/cups_cs.po b/locale/cups_cs.po
index a2710919b..a38c8aa62 100644
--- a/locale/cups_cs.po
+++ b/locale/cups_cs.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2012-09-14 10:26+0100\n"
"Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
"Language-Team: Czech\n"
@@ -6002,7 +6002,8 @@ msgstr "NepodaΕ™ilo se spustit \"cups-driverd\"."
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr ""
-msgid "cupsctl: Cannot set Listen or Port directly."
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
msgstr ""
#, c-format
diff --git a/locale/cups_de.po b/locale/cups_de.po
index 1d3e2c338..9349ae87b 100644
--- a/locale/cups_de.po
+++ b/locale/cups_de.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2017-10-25 14:57+0200\n"
"Last-Translator: Michael Weghorn <m.weghorn@posteo.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -6132,8 +6132,9 @@ msgstr "β€žcups-driverdβ€œ konnte nicht ausgefΓΌhrt werden."
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: Keine PPD Datei fΓΌr Drucker Β»%sΒ« - %s"
-msgid "cupsctl: Cannot set Listen or Port directly."
-msgstr "cupsctl: Kann nicht direkt auf dem Port hΓΆren."
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
+msgstr ""
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
@@ -13326,6 +13327,9 @@ msgstr "Z Offset"
#~ msgid "compression.none"
#~ msgstr "None"
+#~ msgid "cupsctl: Cannot set Listen or Port directly."
+#~ msgstr "cupsctl: Kann nicht direkt auf dem Port hΓΆren."
+
#~ msgid "destination-accesses"
#~ msgstr "Destination Accesses"
diff --git a/locale/cups_es.po b/locale/cups_es.po
index 0a8aa18e7..2eee2f0ac 100644
--- a/locale/cups_es.po
+++ b/locale/cups_es.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.2\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2016-06-26 21:17+0100\n"
"Last-Translator: Juan Pablo GonzΓ‘lez Riopedre <jpgriopedre@yahoo.es>\n"
"Language-Team: Spanish\n"
@@ -5978,8 +5978,8 @@ msgstr "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]"
msgid ""
"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
msgstr ""
-"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN."
-"ppd[.gz]]"
+"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd"
+"[.gz]]"
msgid ""
"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
@@ -6315,8 +6315,9 @@ msgstr "Ha fallado al ejecutarse cups-driverd."
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: No hay archivo PPD para la impresora \"%s\" - %s"
-msgid "cupsctl: Cannot set Listen or Port directly."
-msgstr "cupsctl: No se puede establecer Listen o Port directamente."
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
+msgstr ""
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
@@ -13715,6 +13716,9 @@ msgstr "Z Offset"
#~ msgid "compression.none"
#~ msgstr "None"
+#~ msgid "cupsctl: Cannot set Listen or Port directly."
+#~ msgstr "cupsctl: No se puede establecer Listen o Port directamente."
+
#~ msgid "destination-accesses"
#~ msgstr "Destination Accesses"
diff --git a/locale/cups_fr.po b/locale/cups_fr.po
index 8e0f4fa90..a8924357a 100644
--- a/locale/cups_fr.po
+++ b/locale/cups_fr.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2012-12-12 11:12+0100\n"
"Last-Translator: StΓ©phane Blondon <stephane.blondon@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -6069,7 +6069,8 @@ msgstr "L’exΓ©cution de Β« cups-driverdΒ Β» a Γ©chouΓ©."
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr ""
-msgid "cupsctl: Cannot set Listen or Port directly."
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
msgstr ""
#, c-format
diff --git a/locale/cups_it.po b/locale/cups_it.po
index d83fa974f..cb3aa418a 100644
--- a/locale/cups_it.po
+++ b/locale/cups_it.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2013-07-14 12:00+0200\n"
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
"Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
@@ -6294,8 +6294,9 @@ msgstr "cups-driverd ha smesso di funzionare."
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: nessun file PPD per la stampante \"%s\" - %s"
-msgid "cupsctl: Cannot set Listen or Port directly."
-msgstr "cupsctl: non Γ¨ possibile impostare direttamente Listen o Port."
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
+msgstr ""
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
@@ -13823,6 +13824,9 @@ msgstr "Z Offset"
#~ msgid "compression.none"
#~ msgstr "None"
+#~ msgid "cupsctl: Cannot set Listen or Port directly."
+#~ msgstr "cupsctl: non Γ¨ possibile impostare direttamente Listen o Port."
+
#~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
#~ msgstr ""
#~ "cupsd: launchd(8) non supporta i compilati, quando Γ¨ in modalitΓ  normale."
diff --git a/locale/cups_ja.po b/locale/cups_ja.po
index af7852bb7..035265e1e 100644
--- a/locale/cups_ja.po
+++ b/locale/cups_ja.po
@@ -28,7 +28,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2014-11-15 19:27+0900\n"
"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
"Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
@@ -6251,8 +6251,9 @@ msgstr "cups-driverd γεŸθ‘Œγ«ε€±ζ•—γ—γΎγ—γŸγ€‚"
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: γƒ—γƒͺンター \"%s\" だPPD γƒ•γ‚‘γ‚€γƒ«γŒγ‚γ‚ŠγΎγ›γ‚“ - %s"
-msgid "cupsctl: Cannot set Listen or Port directly."
-msgstr "cupsctl: Listen あるいは Port γ‚’η›΄ζŽ₯θ¨­εšγ§γγΎγ›γ‚“。"
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
+msgstr ""
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
@@ -13843,6 +13844,9 @@ msgstr "Z Offset"
#~ msgid "compression.none"
#~ msgstr "None"
+#~ msgid "cupsctl: Cannot set Listen or Port directly."
+#~ msgstr "cupsctl: Listen あるいは Port γ‚’η›΄ζŽ₯θ¨­εšγ§γγΎγ›γ‚“。"
+
#~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
#~ msgstr ""
#~ "cupsd: launchd(8) γ‚΅γƒγƒΌγƒˆγŒγ‚³γƒ³γƒ‘γ‚€γƒ«γ•γ‚Œγ¦γ„γͺいγγ§γ€ι€šεΈΈγƒ’γƒΌγƒ‰γ§ε‹•δ½œγ—"
diff --git a/locale/cups_pt_BR.po b/locale/cups_pt_BR.po
index 3be06c4a5..2bfb92a63 100644
--- a/locale/cups_pt_BR.po
+++ b/locale/cups_pt_BR.po
@@ -40,7 +40,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.1.2\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2016-01-31 16:45-0200\n"
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
"Language-Team: Brazilian Portuguese <traducao-cups-pt-br@googlegroups.com>\n"
@@ -6295,8 +6295,9 @@ msgstr "cups-driverd falhou na execução."
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: Nenhum arquivo PPD para a impressora \"%s\" - %s"
-msgid "cupsctl: Cannot set Listen or Port directly."
-msgstr "cupsctl: NΓ£o foi possΓ­vel definir diretamente Porta ou Listen."
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
+msgstr ""
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
@@ -13814,6 +13815,9 @@ msgstr "Z Offset"
#~ msgid "compression.none"
#~ msgstr "None"
+#~ msgid "cupsctl: Cannot set Listen or Port directly."
+#~ msgstr "cupsctl: NΓ£o foi possΓ­vel definir diretamente Porta ou Listen."
+
#~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
#~ msgstr ""
#~ "cupsd: Compilado sem suporte a launchd(8) e, portanto, executando no modo "
diff --git a/locale/cups_ru.po b/locale/cups_ru.po
index 790b54ac5..35f13fcf7 100644
--- a/locale/cups_ru.po
+++ b/locale/cups_ru.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2015-01-28 12:00-0800\n"
"Last-Translator: Aleksandr Proklov\n"
"Language-Team: PuppyRus Linux Team\n"
@@ -6208,8 +6208,9 @@ msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ cups-driverd."
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: НСт PPD-Ρ„Π°ΠΉΠ»Π° для ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π° \"%s\" - %s"
-msgid "cupsctl: Cannot set Listen or Port directly."
-msgstr "cupsctl: НС удаСтся Π·Π°Π΄Π°Ρ‚ΡŒ Listen ΠΈΠ»ΠΈ Port."
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
+msgstr ""
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
@@ -13605,6 +13606,9 @@ msgstr "Z Offset"
#~ msgid "compression.none"
#~ msgstr "None"
+#~ msgid "cupsctl: Cannot set Listen or Port directly."
+#~ msgstr "cupsctl: НС удаСтся Π·Π°Π΄Π°Ρ‚ΡŒ Listen ΠΈΠ»ΠΈ Port."
+
#~ msgid "destination-accesses"
#~ msgstr "Destination Accesses"
diff --git a/locale/cups_zh_CN.po b/locale/cups_zh_CN.po
index d9ef00639..99bc60b83 100644
--- a/locale/cups_zh_CN.po
+++ b/locale/cups_zh_CN.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-09-28 11:22-0400\n"
+"POT-Creation-Date: 2019-05-15 10:31-0400\n"
"PO-Revision-Date: 2017-06-11 12:38+0800\n"
"Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n"
"Language-Team: \n"
@@ -6165,8 +6165,9 @@ msgstr "ζ— ζ³•ζ‰§θ‘Œ cups-driverd。"
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmbοΌšζ‰“ε°ζœΊβ€œ%s”无 PPD ζ–‡δ»Ά β€” %s"
-msgid "cupsctl: Cannot set Listen or Port directly."
-msgstr "cupsctlοΌšζ— ζ³•η›΄ζŽ₯θΎη½ Listen ζˆ– Port 值。"
+#, c-format
+msgid "cupsctl: Cannot set %s directly."
+msgstr ""
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
@@ -13505,6 +13506,9 @@ msgstr "Z Offset"
#~ msgid "compression.none"
#~ msgstr "None"
+#~ msgid "cupsctl: Cannot set Listen or Port directly."
+#~ msgstr "cupsctlοΌšζ— ζ³•η›΄ζŽ₯θΎη½ Listen ζˆ– Port 值。"
+
#~ msgid "destination-accesses"
#~ msgstr "Destination Accesses"
diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in
index df2b5bbd5..a870ff91d 100644
--- a/man/cupsd.conf.man.in
+++ b/man/cupsd.conf.man.in
@@ -1,7 +1,7 @@
.\"
.\" cupsd.conf man page for CUPS.
.\"
-.\" Copyright © 2007-2018 by Apple Inc.
+.\" Copyright © 2007-2019 by Apple Inc.
.\" Copyright © 1997-2006 by Easy Software Products.
.\"
.\" These coded instructions, statements, and computer programs are the
@@ -10,7 +10,7 @@
.\" which should have been included with this file. If this file is
.\" file is missing or damaged, see the license at "http://www.cups.org/".
.\"
-.TH cupsd.conf 5 "CUPS" "24 April 2018" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "2 May 2019" "Apple Inc."
.SH NAME
cupsd.conf \- server configuration file for cups
.SH DESCRIPTION
@@ -341,7 +341,7 @@ The default is "1048576" (1MB).
.TP 5
\fBMultipleOperationTimeout \fIseconds\fR
Specifies the maximum amount of time to allow between files in a multiple file print job.
-The default is "300" (5 minutes).
+The default is "900" (15 minutes).
.\"#Policy
.TP 5
\fB<Policy \fIname\fB> \fR... \fB</Policy>\fR
@@ -459,7 +459,7 @@ The default is "No".
.TP 5
\fBTimeout \fIseconds\fR
Specifies the HTTP request timeout.
-The default is "300" (5 minutes).
+The default is "900" (15 minutes).
.\"#WebInterface
.TP 5
\fBWebInterface yes\fR
@@ -876,4 +876,4 @@ Require authentication for accesses from outside the 10. network:
.BR subscriptions.conf (5),
CUPS Online Help (http://localhost:631/help)
.SH COPYRIGHT
-Copyright \[co] 2007-2018 by Apple Inc.
+Copyright \[co] 2007-2019 by Apple Inc.
diff --git a/man/ipptoolfile.man b/man/ipptoolfile.man
index c10254f64..b7c594a0f 100644
--- a/man/ipptoolfile.man
+++ b/man/ipptoolfile.man
@@ -1,7 +1,7 @@
.\"
.\" ipptoolfile man page.
.\"
-.\" Copyright 2010-2017 by Apple Inc.
+.\" Copyright 2010-2019 by Apple Inc.
.\"
.\" These coded instructions, statements, and computer programs are the
.\" property of Apple Inc. and are protected by Federal copyright
@@ -9,7 +9,7 @@
.\" which should have been included with this file. If this file is
.\" file is missing or damaged, see the license at "http://www.cups.org/".
.\"
-.TH ipptoolfile 5 "CUPS" "15 June 2017" "Apple Inc."
+.TH ipptoolfile 5 "CUPS" "5 August 2019" "Apple Inc."
.SH NAME
ipptoolfile \- ipptool file format
.SH DESCRIPTION
@@ -297,7 +297,7 @@ Makes the \fBEXPECT\fR conditions apply only if the specified variable is not de
\fBIN\-GROUP \fItag\fR
Requires the \fBEXPECT\fR attribute to be in the specified group tag.
.TP 5
-\fBOF\-TYPE \fItag[,tag,...]\fR
+\fBOF\-TYPE \fItag[|tag,...]\fR
Requires the \fBEXPECT\fR attribute to use one of the specified value tag(s).
.TP 5
\fBREPEAT\-LIMIT \fInumber\fR
@@ -649,4 +649,4 @@ IANA IPP Registry (http://www.iana.org/assignments/ipp-registrations),
PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp),
RFC 8011 (http://tools.ietf.org/html/rfc8011)
.SH COPYRIGHT
-Copyright \[co] 2007-2017 by Apple Inc.
+Copyright \[co] 2007-2019 by Apple Inc.
diff --git a/packaging/cups.spec b/packaging/cups.spec
index 84007d3f8..a15f03d74 100644
--- a/packaging/cups.spec
+++ b/packaging/cups.spec
@@ -43,12 +43,12 @@
Summary: CUPS
Name: cups
-Version: 2.2.10
+Version: 2.2.12
Release: 0
Epoch: 1
License: GPL
Group: System Environment/Daemons
-Source: https://github.com/apple/cups/releases/download/v2.2.10/cups-2.2.10-source.tar.gz
+Source: https://github.com/apple/cups/releases/download/v2.2.12/cups-2.2.12-source.tar.gz
Url: http://www.cups.org
Packager: Anonymous <anonymous@example.com>
Vendor: Example Corp
diff --git a/ppdc/ppdc-array.cxx b/ppdc/ppdc-array.cxx
index 2dd494490..b33cd627d 100644
--- a/ppdc/ppdc-array.cxx
+++ b/ppdc/ppdc-array.cxx
@@ -1,7 +1,7 @@
//
// Array class for the CUPS PPD Compiler.
//
-// Copyright 2007-2014 by Apple Inc.
+// Copyright 2007-2019 by Apple Inc.
// Copyright 2002-2005 by Easy Software Products.
//
// These coded instructions, statements, and computer programs are the
@@ -39,7 +39,7 @@ ppdcArray::ppdcArray(ppdcArray *a)
memcpy(data, a->data, (size_t)count * sizeof(ppdcShared *));
- for (int i = 0; i < count; i ++)
+ for (size_t i = 0; i < count; i ++)
data[i]->retain();
}
else
@@ -64,7 +64,7 @@ ppdcArray::~ppdcArray()
{
PPDC_DELETE;
- for (int i = 0; i < count; i ++)
+ for (size_t i = 0; i < count; i ++)
data[i]->release();
if (alloc)
@@ -134,7 +134,7 @@ ppdcArray::next()
void
ppdcArray::remove(ppdcShared *d) // I - Data element
{
- int i; // Looping var
+ size_t i; // Looping var
for (i = 0; i < count; i ++)
diff --git a/ppdc/ppdc.h b/ppdc/ppdc.h
index 6a69c6eb2..a5e1de953 100644
--- a/ppdc/ppdc.h
+++ b/ppdc/ppdc.h
@@ -1,7 +1,7 @@
//
// Definitions for the CUPS PPD Compiler.
//
-// Copyright 2007-2009 by Apple Inc.
+// Copyright 2007-2019 by Apple Inc.
// Copyright 2002-2007 by Easy Software Products.
//
// These coded instructions, statements, and computer programs are the
@@ -109,7 +109,7 @@ class ppdcArray //// Shared Array
{
public:
- int count, // Number of elements
+ size_t count, // Number of elements
alloc, // Allocated elements
current; // Current element
ppdcShared **data; // Elements
diff --git a/ppdc/ppdmerge.cxx b/ppdc/ppdmerge.cxx
index 3f6670f25..f8781827c 100644
--- a/ppdc/ppdmerge.cxx
+++ b/ppdc/ppdmerge.cxx
@@ -1,8 +1,8 @@
//
// PPD file merge utility for the CUPS PPD Compiler.
//
-// Copyright 2007-2014 by Apple Inc.
-// Copyright 2002-2007 by Easy Software Products.
+// Copyright © 2007-2018 by Apple Inc.
+// Copyright © 2002-2007 by Easy Software Products.
//
// These coded instructions, statements, and computer programs are the
// property of Apple Inc. and are protected by Federal copyright
@@ -42,6 +42,7 @@ main(int argc, // I - Number of command-line arguments
cups_array_t *ppds; // Array of PPD files
const char *inname, // First input filename
*outname; // Output filename (if any)
+ char bckname[1024]; // Backup filename
cups_file_t *infile, // Input file
*outfile; // Output file
cups_array_t *languages; // Languages in file
@@ -141,9 +142,6 @@ main(int argc, // I - Number of command-line arguments
if (outname && !strcmp(inname, outname))
{
// Rename input filename so that we don't overwrite it...
- char bckname[1024]; // Backup filename
-
-
snprintf(bckname, sizeof(bckname), "%s.bck", inname);
if (rename(inname, bckname))
diff --git a/ppdc/testcatalog.cxx b/ppdc/testcatalog.cxx
index 71cbc3630..583601067 100644
--- a/ppdc/testcatalog.cxx
+++ b/ppdc/testcatalog.cxx
@@ -1,7 +1,7 @@
//
// Test program for message catalog class.
//
-// Copyright 2008 by Apple Inc.
+// Copyright © 2008-2019 by Apple Inc.
//
// These coded instructions, statements, and computer programs are the
// property of Apple Inc. and are protected by Federal copyright
@@ -38,7 +38,7 @@ main(int argc, // I - Number of command-line arguments
// Scan the command-line...
catalog = new ppdcCatalog(NULL, argv[1]);
- printf("%s: %d messages\n", argv[1], catalog->messages->count);
+ printf("%s: %u messages\n", argv[1], (unsigned)catalog->messages->count);
for (m = (ppdcMessage *)catalog->messages->first();
m;
diff --git a/scheduler/auth.c b/scheduler/auth.c
index fa4e2715d..1fb3ffcc0 100644
--- a/scheduler/auth.c
+++ b/scheduler/auth.c
@@ -1176,7 +1176,23 @@ cupsdCheckGroup(
groupid = group->gr_gid;
+ for (i = 0; group->gr_mem[i]; i ++)
+ {
+ /*
+ * User appears in the group membership...
+ */
+
+ if (!_cups_strcasecmp(username, group->gr_mem[i]))
+ return (1);
+ }
+
#ifdef HAVE_GETGROUPLIST
+ /*
+ * If the user isn't in the group membership list, try the results from
+ * getgrouplist() which is supposed to return the full list of groups a user
+ * belongs to...
+ */
+
if (user)
{
int ngroups; /* Number of groups */
@@ -1197,13 +1213,6 @@ cupsdCheckGroup(
if ((int)groupid == (int)groups[i])
return (1);
}
-
-#else
- for (i = 0; group->gr_mem[i]; i ++)
- {
- if (!_cups_strcasecmp(username, group->gr_mem[i]))
- return (1);
- }
#endif /* HAVE_GETGROUPLIST */
}
else
diff --git a/scheduler/client.c b/scheduler/client.c
index a21b909a8..680508047 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -568,6 +568,17 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdReadClient: error=%d, used=%d, state=%s, data_encoding=HTTP_ENCODING_%s, data_remaining=" CUPS_LLFMT ", request=%p(%s), file=%d", httpError(con->http), (int)httpGetReady(con->http), httpStateString(httpGetState(con->http)), httpIsChunked(con->http) ? "CHUNKED" : "LENGTH", CUPS_LLCAST httpGetRemaining(con->http), con->request, con->request ? ippStateString(ippGetState(con->request)) : "", con->file);
+ if (httpError(con->http) == EPIPE && !httpGetReady(con->http) && recv(httpGetFd(con->http), buf, 1, MSG_PEEK) < 1)
+ {
+ /*
+ * Connection closed...
+ */
+
+ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on EOF.");
+ cupsdCloseClient(con);
+ return;
+ }
+
if (httpGetState(con->http) == HTTP_STATE_GET_SEND ||
httpGetState(con->http) == HTTP_STATE_POST_SEND ||
httpGetState(con->http) == HTTP_STATE_STATUS)
@@ -577,17 +588,6 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
* connection and we need to shut it down...
*/
- if (!httpGetReady(con->http) && recv(httpGetFd(con->http), buf, 1, MSG_PEEK) < 1)
- {
- /*
- * Connection closed...
- */
-
- cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on EOF.");
- cupsdCloseClient(con);
- return;
- }
-
cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on unexpected HTTP read state %s.", httpStateString(httpGetState(con->http)));
cupsdCloseClient(con);
return;
@@ -2209,6 +2209,7 @@ cupsdSendError(cupsd_client_t *con, /* I - Connection */
strlcpy(location, httpGetField(con->http, HTTP_FIELD_LOCATION), sizeof(location));
httpClearFields(con->http);
+ httpClearCookie(con->http);
httpSetField(con->http, HTTP_FIELD_LOCATION, location);
diff --git a/scheduler/conf.c b/scheduler/conf.c
index aae7443de..1b70afc94 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -1,7 +1,7 @@
/*
* Configuration routines for the CUPS scheduler.
*
- * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -729,14 +729,14 @@ cupsdReadConfiguration(void)
MaxClientsPerHost = 0;
MaxLogSize = 1024 * 1024;
MaxRequestSize = 0;
- MultipleOperationTimeout = DEFAULT_TIMEOUT;
+ MultipleOperationTimeout = 900;
NumSystemGroups = 0;
ReloadTimeout = DEFAULT_KEEPALIVE;
RootCertDuration = 300;
Sandboxing = CUPSD_SANDBOXING_STRICT;
StrictConformance = FALSE;
SyncOnClose = TRUE;
- Timeout = DEFAULT_TIMEOUT;
+ Timeout = 900;
WebInterface = CUPS_DEFAULT_WEBIF;
BrowseLocalProtocols = parse_protocols(CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS);
diff --git a/scheduler/cups-driverd.cxx b/scheduler/cups-driverd.cxx
index 1d4291a73..d48c75165 100644
--- a/scheduler/cups-driverd.cxx
+++ b/scheduler/cups-driverd.cxx
@@ -5,8 +5,8 @@
* created from driver information files, and dynamically generated PPD files
* using driver helper programs.
*
- * Copyright 2007-2018 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products.
+ * Copyright Β 2007-2019 by Apple Inc.
+ * Copyright Β 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -31,7 +31,7 @@
* Constants...
*/
-#define PPD_SYNC 0x50504439 /* Sync word for ppds.dat (PPD9) */
+#define PPD_SYNC 0x50504441 /* Sync word for ppds.dat (PPDA) */
#define PPD_MAX_LANG 32 /* Maximum languages */
#define PPD_MAX_PROD 32 /* Maximum products */
#define PPD_MAX_VERS 32 /* Maximum versions */
@@ -40,12 +40,9 @@
#define PPD_TYPE_PDF 1 /* PDF PPD */
#define PPD_TYPE_RASTER 2 /* CUPS raster PPD */
#define PPD_TYPE_FAX 3 /* Facsimile/MFD PPD */
-#define PPD_TYPE_OBJECT_ANY 4 /* 3D (AMF/STL/g-code) PPD */
-#define PPD_TYPE_OBJECT_DIRECT 5 /* 3D (AMF/STL/g-code) PPD over any connection */
-#define PPD_TYPE_OBJECT_STORAGE 6 /* 3D (AMF/STL/g-code) PPD for storage to SD card, etc. */
-#define PPD_TYPE_UNKNOWN 7 /* Other/hybrid PPD */
-#define PPD_TYPE_DRV 8 /* Driver info file */
-#define PPD_TYPE_ARCHIVE 9 /* Archive file */
+#define PPD_TYPE_UNKNOWN 4 /* Other/hybrid PPD */
+#define PPD_TYPE_DRV 5 /* Driver info file */
+#define PPD_TYPE_ARCHIVE 6 /* Archive file */
#define TAR_BLOCK 512 /* Number of bytes in a block */
#define TAR_BLOCKS 10 /* Blocking factor */
@@ -362,8 +359,7 @@ cat_drv(const char *name, /* I - PPD name */
ppdcCatalog *catalog; // Message catalog in .drv file
- fprintf(stderr, "DEBUG2: [cups-driverd] %d locales defined in \"%s\"...\n",
- src->po_files->count, filename);
+ fprintf(stderr, "DEBUG2: [cups-driverd] %u locales defined in \"%s\"...\n", (unsigned)src->po_files->count, filename);
locales = new ppdcArray();
for (catalog = (ppdcCatalog *)src->po_files->first();
@@ -1517,8 +1513,20 @@ list_ppds(int request_id, /* I - Request ID */
}
if (send_type)
- cupsdSendIPPString(IPP_TAG_KEYWORD, "ppd-type",
- PPDTypes[ppd->record.type]);
+ {
+ if (ppd->record.type < PPD_TYPE_POSTSCRIPT || ppd->record.type > PPD_TYPE_ARCHIVE)
+ {
+ /*
+ * This cache file is corrupted, remove it!
+ */
+
+ unlink(filename);
+
+ cupsdSendIPPString(IPP_TAG_KEYWORD, "ppd-type", PPDTypes[PPD_TYPE_UNKNOWN]);
+ }
+ else
+ cupsdSendIPPString(IPP_TAG_KEYWORD, "ppd-type", PPDTypes[ppd->record.type]);
+ }
if (send_model_number)
cupsdSendIPPInteger(IPP_TAG_INTEGER, "ppd-model-number",
@@ -2101,22 +2109,6 @@ load_ppd(const char *filename, /* I - Real filename */
type = PPD_TYPE_RASTER;
else if (strstr(line + 12, "application/vnd.cups-pdf"))
type = PPD_TYPE_PDF;
- else if (strstr(line + 12, "application/amf") ||
- strstr(line + 12, "application/g-code") ||
- strstr(line + 12, "application/sla"))
- type = PPD_TYPE_OBJECT_ANY;
- }
- else if (!strncmp(line, "*cups3DWorkflows:", 17))
- {
- int is_direct = strstr(line + 17, "direct") != NULL;
- int is_storage = strstr(line + 17, "storage") != NULL;
-
- if (is_direct && !is_storage)
- type = PPD_TYPE_OBJECT_DIRECT;
- else if (!is_direct && is_storage)
- type = PPD_TYPE_OBJECT_STORAGE;
- else
- type = PPD_TYPE_OBJECT_ANY;
}
else if (!strncmp(line, "*cupsModelNumber:", 17))
sscanf(line, "*cupsModelNumber:%d", &model_number);
diff --git a/scheduler/job.c b/scheduler/job.c
index d4793cbb1..79142bc61 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -1,7 +1,7 @@
/*
* Job management routines for the CUPS scheduler.
*
- * Copyright 2007-2018 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -307,10 +307,12 @@ cupsdCheckJobs(void)
if (cupsdTimeoutJob(job))
continue;
- }
- cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
- "Job submission timed out.");
+ cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Job submission timed out.");
+ cupsdLogJob(job, CUPSD_LOG_ERROR, "Job submission timed out.");
+ }
+ else
+ cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Job hold expired.");
}
/*
@@ -445,7 +447,7 @@ cupsdCleanJobs(void)
{
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: Job %d, state=%d, printer=%p, history_time=%d, file_time=%d", job->id, (int)job->state_value, (void *)job->printer, (int)job->history_time, (int)job->file_time);
- if ((job->history_time && job->history_time) < JobHistoryUpdate || !JobHistoryUpdate)
+ if ((job->history_time && job->history_time < JobHistoryUpdate) || !JobHistoryUpdate)
JobHistoryUpdate = job->history_time;
if ((job->file_time && job->file_time < JobHistoryUpdate) || !JobHistoryUpdate)
@@ -3442,6 +3444,12 @@ finalize_job(cupsd_job_t *job, /* I - Job */
* Stop the printer...
*/
+ if (job_state == IPP_JSTATE_CANCELED || job_state == IPP_JSTATE_ABORTED)
+ {
+ cupsdLogJob(job, CUPSD_LOG_INFO, "Ignored STOP from backend since the job is %s.", job_state == IPP_JSTATE_CANCELED ? "canceled" : "aborted");
+ break;
+ }
+
printer_state = IPP_PRINTER_STOPPED;
if (ErrorLog)
@@ -3456,8 +3464,7 @@ finalize_job(cupsd_job_t *job, /* I - Job */
{
job_state = IPP_JOB_PENDING;
- ippSetString(job->attrs, &job->reasons, 0,
- "resources-are-not-ready");
+ ippSetString(job->attrs, &job->reasons, 0, "resources-are-not-ready");
}
break;
@@ -4016,6 +4023,45 @@ get_options(cupsd_job_t *job, /* I - Job */
break;
case IPP_TAG_STRING :
+ {
+ int length = attr->values[i].unknown.length;
+
+ for (valptr = attr->values[i].unknown.data; length > 0; length --)
+ {
+ if ((*valptr & 255) < 0x20 || *valptr == 0x7f)
+ break;
+ }
+
+ if (length > 0)
+ {
+ /*
+ * Encode this string as hex characters...
+ */
+
+ *optptr++ = '<';
+
+ for (valptr = attr->values[i].unknown.data, length = attr->values[i].unknown.length; length > 0; length --)
+ {
+ snprintf(optptr, optlength - (size_t)(optptr - options) - 1, "%02X", *valptr & 255);
+ optptr += 2;
+ }
+
+ *optptr++ = '>';
+ }
+ else
+ {
+ for (valptr = attr->values[i].unknown.data, length = attr->values[i].unknown.length; length > 0; length --)
+ {
+ if (strchr(" \t\n\\\'\"", *valptr))
+ *optptr++ = '\\';
+ *optptr++ = *valptr++;
+ }
+ }
+ }
+
+ *optptr = '\0';
+ break;
+
case IPP_TAG_TEXT :
case IPP_TAG_NAME :
case IPP_TAG_KEYWORD :
@@ -4161,6 +4207,16 @@ ipp_length(ipp_t *ipp) /* I - IPP request */
break;
case IPP_TAG_STRING :
+ /*
+ * Octet strings can contain characters that need quoting. We need
+ * at least 2 * len + 2 characters to cover the quotes and any
+ * backslashes in the string.
+ */
+
+ for (i = 0; i < attr->num_values; i ++)
+ bytes += 2 * (size_t)attr->values[i].unknown.length + 2;
+ break;
+
case IPP_TAG_TEXT :
case IPP_TAG_NAME :
case IPP_TAG_KEYWORD :
diff --git a/scheduler/main.c b/scheduler/main.c
index a61592cd8..de3681566 100644
--- a/scheduler/main.c
+++ b/scheduler/main.c
@@ -1,7 +1,7 @@
/*
* Main loop for the CUPS scheduler.
*
- * Copyright 2007-2018 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -749,7 +749,10 @@ main(int argc, /* I - Number of command-line args */
#ifdef HAVE_ONDEMAND
if (OnDemand)
+ {
+ stop_scheduler = 1;
break;
+ }
#endif /* HAVE_ONDEMAND */
DoingShutdown = 1;
@@ -808,14 +811,25 @@ main(int argc, /* I - Number of command-line args */
*/
if (timeout == 86400 && OnDemand && IdleExitTimeout &&
- !cupsArrayCount(ActiveJobs) &&
# ifdef HAVE_SYSTEMD
!WebInterface &&
# endif /* HAVE_SYSTEMD */
- (!Browsing || !BrowseLocalProtocols || !cupsArrayCount(Printers)))
+ !cupsArrayCount(ActiveJobs))
{
- timeout = IdleExitTimeout;
- service_idle_exit = 1;
+ cupsd_printer_t *p = NULL; /* Current printer */
+
+ if (Browsing && BrowseLocalProtocols)
+ {
+ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers))
+ if (p->shared)
+ break;
+ }
+
+ if (!p)
+ {
+ timeout = IdleExitTimeout;
+ service_idle_exit = 1;
+ }
}
else
service_idle_exit = 0;
@@ -946,8 +960,7 @@ main(int argc, /* I - Number of command-line args */
if (current_time > expire_time)
{
- if (cupsArrayCount(Subscriptions) > 0)
- cupsdExpireSubscriptions(NULL, NULL);
+ cupsdExpireSubscriptions(NULL, NULL);
cupsdUnloadCompletedJobs();
@@ -983,6 +996,23 @@ main(int argc, /* I - Number of command-line args */
#endif /* !HAVE_AUTHORIZATION_H */
/*
+ * Clean job history...
+ */
+
+ if (JobHistoryUpdate && current_time >= JobHistoryUpdate)
+ cupsdCleanJobs();
+
+ /*
+ * Update any pending multi-file documents...
+ */
+
+ if ((current_time - senddoc_time) >= 10)
+ {
+ cupsdCheckJobs();
+ senddoc_time = current_time;
+ }
+
+ /*
* Check for new data on the client sockets...
*/
@@ -1015,23 +1045,6 @@ main(int argc, /* I - Number of command-line args */
}
/*
- * Update any pending multi-file documents...
- */
-
- if ((current_time - senddoc_time) >= 10)
- {
- cupsdCheckJobs();
- senddoc_time = current_time;
- }
-
- /*
- * Clean job history...
- */
-
- if (JobHistoryUpdate && current_time >= JobHistoryUpdate)
- cupsdCleanJobs();
-
- /*
* Log statistics at most once a minute when in debug mode...
*/
@@ -1612,7 +1625,6 @@ select_timeout(int fds) /* I - Number of descriptors returned */
time_t now; /* Current time */
cupsd_client_t *con; /* Client information */
cupsd_job_t *job; /* Job information */
- cupsd_printer_t *printer; /* Printer information */
const char *why; /* Debugging aid */
@@ -1701,12 +1713,6 @@ select_timeout(int fds) /* I - Number of descriptors returned */
* Check for any job activity...
*/
- if (JobHistoryUpdate && timeout > JobHistoryUpdate)
- {
- timeout = JobHistoryUpdate;
- why = "update job history";
- }
-
for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
job;
job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
@@ -1738,22 +1744,6 @@ select_timeout(int fds) /* I - Number of descriptors returned */
}
/*
- * Check for temporary printers that need to be deleted...
- */
-
- for (printer = (cupsd_printer_t *)cupsArrayFirst(Printers); printer; printer = (cupsd_printer_t *)cupsArrayNext(Printers))
- {
- if (printer->temporary && !printer->job && (!local_timeout || local_timeout > (printer->state_time + 60)))
- local_timeout = printer->state_time + 60;
- }
-
- if (timeout > local_timeout && local_timeout)
- {
- timeout = local_timeout;
- why = "delete stale local printers";
- }
-
- /*
* Adjust from absolute to relative time. We add 1 second to the timeout since
* events occur after the timeout expires, and limit the timeout to 86400
* seconds (1 day) to avoid select() timeout limits present on some operating
@@ -2046,13 +2036,31 @@ service_checkout(int shutdown) /* I - Shutting down? */
#ifdef HAVE_ONDEMAND
if (OnDemand)
{
+ int shared_printers = 0; /* Do we have shared printers? */
+
strlcpy(pidfile, CUPS_KEEPALIVE, sizeof(pidfile));
+ /*
+ * If printer sharing is on see if there are any actual shared printers...
+ */
+
+ if (Browsing && BrowseLocalProtocols)
+ {
+ cupsd_printer_t *p = NULL; /* Current printer */
+
+ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers))
+ {
+ if (p->shared)
+ break;
+ }
+
+ shared_printers = (p != NULL);
+ }
+
if (cupsArrayCount(ActiveJobs) || /* Active jobs */
WebInterface || /* Web interface enabled */
NeedReload || /* Doing a reload */
- (Browsing && BrowseLocalProtocols && cupsArrayCount(Printers)))
- /* Printers being shared */
+ shared_printers) /* Printers being shared */
{
/*
* Create or remove the "keep-alive" file based on whether there are active
diff --git a/scheduler/org.cups.cupsd.service.in b/scheduler/org.cups.cupsd.service.in
index 3c273612a..cd2334396 100644
--- a/scheduler/org.cups.cupsd.service.in
+++ b/scheduler/org.cups.cupsd.service.in
@@ -1,6 +1,7 @@
[Unit]
Description=CUPS Scheduler
Documentation=man:cupsd(8)
+After=sssd.service
[Service]
ExecStart=@sbindir@/cupsd -l
diff --git a/scheduler/printers.c b/scheduler/printers.c
index fda5316ee..309c1cbe1 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
@@ -1,7 +1,7 @@
/*
* Printer routines for the CUPS scheduler.
*
- * Copyright 2007-2017 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -48,8 +48,7 @@ static int compare_printers(void *first, void *second, void *data);
static void delete_printer_filters(cupsd_printer_t *p);
static void dirty_printer(cupsd_printer_t *p);
static void load_ppd(cupsd_printer_t *p);
-static ipp_t *new_media_col(pwg_size_t *size, const char *source,
- const char *type);
+static ipp_t *new_media_col(pwg_size_t *size);
static void write_xml_string(cups_file_t *fp, const char *s);
@@ -1022,8 +1021,7 @@ cupsdLoadAllPrinters(void)
}
else if (!_cups_strcasecmp(line, "Info"))
{
- if (value)
- cupsdSetString(&p->info, value);
+ cupsdSetString(&p->info, value ? value : "");
}
else if (!_cups_strcasecmp(line, "MakeModel"))
{
@@ -1032,23 +1030,19 @@ cupsdLoadAllPrinters(void)
}
else if (!_cups_strcasecmp(line, "Location"))
{
- if (value)
- cupsdSetString(&p->location, value);
+ cupsdSetString(&p->location, value ? value : "");
}
else if (!_cups_strcasecmp(line, "GeoLocation"))
{
- if (value)
- cupsdSetString(&p->geo_location, value);
+ cupsdSetString(&p->geo_location, value ? value : "");
}
else if (!_cups_strcasecmp(line, "Organization"))
{
- if (value)
- cupsdSetString(&p->organization, value);
+ cupsdSetString(&p->organization, value ? value : "");
}
else if (!_cups_strcasecmp(line, "OrganizationalUnit"))
{
- if (value)
- cupsdSetString(&p->organizational_unit, value);
+ cupsdSetString(&p->organizational_unit, value ? value : "");
}
else if (!_cups_strcasecmp(line, "DeviceURI"))
{
@@ -3876,7 +3870,7 @@ dirty_printer(cupsd_printer_t *p) /* I - Printer */
static void
load_ppd(cupsd_printer_t *p) /* I - Printer */
{
- int i, j, k; /* Looping vars */
+ int i, j; /* Looping vars */
char cache_name[1024]; /* Cache filename */
struct stat cache_info; /* Cache file info */
ppd_file_t *ppd; /* PPD file */
@@ -3888,9 +3882,7 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
*output_bin, /* OutputBin option */
*output_mode, /* OutputMode option */
*resolution; /* (Set|JCL|)Resolution option */
- ppd_choice_t *choice, /* Current PPD choice */
- *input_slot, /* Current input slot */
- *media_type; /* Current media type */
+ ppd_choice_t *choice; /* Current PPD choice */
ppd_attr_t *ppd_attr; /* PPD attribute */
int xdpi, /* Horizontal resolution */
ydpi; /* Vertical resolution */
@@ -4150,20 +4142,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
{
ipp_t *col; /* Collection value */
- input_slot = ppdFindMarkedChoice(ppd, "InputSlot");
- media_type = ppdFindMarkedChoice(ppd, "MediaType");
- col = new_media_col(pwgsize,
- input_slot ?
- _ppdCacheGetSource(p->pc,
- input_slot->choice) :
- NULL,
- media_type ?
- _ppdCacheGetType(p->pc,
- media_type->choice) :
- NULL);
-
- ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-default",
- col);
+ col = new_media_col(pwgsize);
+ ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-default", col);
ippDelete(col);
}
@@ -4357,89 +4337,19 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
* media-col-database
*/
- num_media = p->pc->num_sizes;
- if (p->pc->num_sources)
+ if ((attr = ippAddCollections(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-database", p->pc->num_sizes, NULL)) != NULL)
{
- if (p->pc->num_types > 0)
- num_media += p->pc->num_sizes * p->pc->num_sources *
- p->pc->num_types;
- else
- num_media += p->pc->num_sizes * p->pc->num_sources;
- }
- else if (p->pc->num_types)
- num_media += p->pc->num_sizes * p->pc->num_types;
-
- if ((attr = ippAddCollections(p->ppd_attrs, IPP_TAG_PRINTER,
- "media-col-database", num_media,
- NULL)) != NULL)
- {
- for (i = p->pc->num_sizes, pwgsize = p->pc->sizes, val = attr->values;
- i > 0;
- i --, pwgsize ++)
- {
- /*
- * Start by adding the page size without source or type...
- */
-
- ppdMarkOption(ppd, "PageSize", pwgsize->map.ppd);
-
- val->collection = new_media_col(pwgsize, NULL, NULL);
- val ++;
-
- /*
- * Then add the specific, supported combinations of size, source, and
- * type...
- */
-
- if (p->pc->num_sources > 0)
- {
- for (j = p->pc->num_sources, pwgsource = p->pc->sources;
- j > 0;
- j --, pwgsource ++)
- {
- ppdMarkOption(ppd, "InputSlot", pwgsource->ppd);
-
- if (p->pc->num_types > 0)
- {
- for (k = p->pc->num_types, pwgtype = p->pc->types;
- k > 0;
- k --, pwgtype ++)
- {
- if (!ppdMarkOption(ppd, "MediaType", pwgtype->ppd))
- {
- val->collection = new_media_col(pwgsize, pwgsource->pwg,
- pwgtype->pwg);
- val ++;
- }
- }
- }
- else if (!ppdConflicts(ppd))
- {
- val->collection = new_media_col(pwgsize, pwgsource->pwg, NULL);
- val ++;
- }
- }
- }
- else if (p->pc->num_types > 0)
- {
- for (j = p->pc->num_types, pwgtype = p->pc->types;
- j > 0;
- j --, pwgtype ++)
- {
- if (!ppdMarkOption(ppd, "MediaType", pwgtype->ppd))
- {
- val->collection = new_media_col(pwgsize, NULL, pwgtype->pwg);
- val ++;
- }
- }
- }
- }
-
/*
- * Update the number of media-col-database values...
+ * Adding each page size without source or type...
*/
- attr->num_values = val - attr->values;
+ for (i = 0, pwgsize = p->pc->sizes; i < p->pc->num_sizes; i ++, pwgsize ++)
+ {
+ ipp_t *col = new_media_col(pwgsize);
+
+ ippSetCollection(p->ppd_attrs, &attr, i, col);
+ ippDelete(col);
+ }
}
}
@@ -5137,9 +5047,7 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
*/
static ipp_t * /* O - Collection value */
-new_media_col(pwg_size_t *size, /* I - media-size/margin values */
- const char *source, /* I - media-source value */
- const char *type) /* I - media-type value */
+new_media_col(pwg_size_t *size) /* I - media-size/margin values */
{
ipp_t *media_col, /* Collection value */
*media_size; /* media-size value */
@@ -5148,29 +5056,15 @@ new_media_col(pwg_size_t *size, /* I - media-size/margin values */
media_col = ippNew();
media_size = ippNew();
- ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
- "x-dimension", size->width);
- ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
- "y-dimension", size->length);
+ ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "x-dimension", size->width);
+ ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "y-dimension", size->length);
ippAddCollection(media_col, IPP_TAG_PRINTER, "media-size", media_size);
ippDelete(media_size);
- ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
- "media-bottom-margin", size->bottom);
- ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
- "media-left-margin", size->left);
- ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
- "media-right-margin", size->right);
- ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
- "media-top-margin", size->top);
-
- if (source)
- ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source",
- NULL, source);
-
- if (type)
- ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type",
- NULL, type);
+ ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-bottom-margin", size->bottom);
+ ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-left-margin", size->left);
+ ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-right-margin", size->right);
+ ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-top-margin", size->top);
return (media_col);
}
diff --git a/scheduler/server.c b/scheduler/server.c
index 63fcf90bf..4714a6150 100644
--- a/scheduler/server.c
+++ b/scheduler/server.c
@@ -1,7 +1,7 @@
/*
* Server start/stop routines for the CUPS scheduler.
*
- * Copyright 2007-2018 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -177,6 +177,15 @@ cupsdStopServer(void)
DefaultProfile = NULL;
/*
+ * Expire subscriptions and clean out old jobs...
+ */
+
+ cupsdExpireSubscriptions(NULL, NULL);
+
+ if (JobHistoryUpdate)
+ cupsdCleanJobs();
+
+ /*
* Write out any dirty files...
*/
diff --git a/scheduler/subscriptions.c b/scheduler/subscriptions.c
index bf36ced4e..c0e03b8cb 100644
--- a/scheduler/subscriptions.c
+++ b/scheduler/subscriptions.c
@@ -1,7 +1,7 @@
/*
* Subscription routines for the CUPS scheduler.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -652,6 +652,9 @@ cupsdExpireSubscriptions(
time_t curtime; /* Current time */
+ if (cupsArrayCount(Subscriptions) == 0)
+ return;
+
curtime = time(NULL);
update = 0;
diff --git a/systemv/cupsctl.c b/systemv/cupsctl.c
index c60c21885..f8d9dc82d 100644
--- a/systemv/cupsctl.c
+++ b/systemv/cupsctl.c
@@ -1,7 +1,7 @@
/*
* Scheduler control program for CUPS.
*
- * Copyright 2007-2018 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 2006-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -36,11 +36,47 @@ int /* O - Exit status */
main(int argc, /* I - Number of command-line args */
char *argv[]) /* I - Command-line arguments */
{
- int i, /* Looping var */
+ int i, j, /* Looping vars */
num_settings; /* Number of settings */
- cups_option_t *settings; /* Settings */
+ cups_option_t *settings, /* Settings */
+ *setting; /* Current setting */
const char *opt; /* Current option character */
http_t *http; /* Connection to server */
+ static const char * const disallowed[] =
+ { /* List of disallowed directives for cupsd.conf */
+ "AccessLog",
+ "CacheDir",
+ "ConfigFilePerm",
+ "DataDir",
+ "DocumentRoot",
+ "ErrorLog",
+ "FatalErrors",
+ "FileDevice",
+ "FontPath",
+ "Group",
+ "Listen",
+ "LogFilePerm",
+ "LPDConfigFile",
+ "PageLog",
+ "PassEnv",
+ "Port",
+ "Printcap",
+ "PrintcapFormat",
+ "RemoteRoot",
+ "RequestRoot",
+ "ServerBin",
+ "ServerCertificate",
+ "ServerKey",
+ "ServerKeychain",
+ "ServerRoot",
+ "SetEnv",
+ "SMBConfigFile",
+ "StateDir",
+ "SystemGroup",
+ "SystemGroupAuthKey",
+ "TempDir",
+ "User"
+ };
/*
@@ -128,11 +164,16 @@ main(int argc, /* I - Number of command-line args */
usage(argv[i]);
}
- if (cupsGetOption("Listen", num_settings, settings) ||
- cupsGetOption("Port", num_settings, settings))
+ for (i = num_settings, setting = settings; i > 0; i --, setting ++)
{
- _cupsLangPuts(stderr, _("cupsctl: Cannot set Listen or Port directly."));
- return (1);
+ for (j = 0; j < (int)(sizeof(disallowed) / sizeof(disallowed[0])); j ++)
+ {
+ if (!_cups_strcasecmp(setting->name, disallowed[j]))
+ {
+ _cupsLangPrintf(stderr, _("cupsctl: Cannot set %s directly."), disallowed[j]);
+ return (1);
+ }
+ }
}
/*
diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c
index e979e56c4..a69647493 100644
--- a/systemv/lpadmin.c
+++ b/systemv/lpadmin.c
@@ -1140,6 +1140,7 @@ enable_printer(http_t *http, /* I - Server connection */
request = ippNewRequest(IPP_OP_ENABLE_PRINTER);
+ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", ippPort(), "/printers/%s", printer);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
@@ -1449,6 +1450,7 @@ set_printer_options(
/* Status code */
_cupsLangPrintf(stderr, _("lpadmin: Unable to open PPD \"%s\": %s on line %d."), ppdfile, ppdErrorString(status), linenum);
+ return (1);
}
ppdMarkDefaults(ppd);
@@ -1486,6 +1488,7 @@ set_printer_options(
(boolval = cupsGetOption("cupsIPPSupplies", num_options,
options)) != NULL)
{
+ ppdchanged = 1;
wrote_ipp_supplies = 1;
cupsFilePrintf(out, "*cupsIPPSupplies: %s\n",
(!_cups_strcasecmp(boolval, "true") ||
@@ -1496,6 +1499,7 @@ set_printer_options(
(boolval = cupsGetOption("cupsSNMPSupplies", num_options,
options)) != NULL)
{
+ ppdchanged = 1;
wrote_snmp_supplies = 1;
cupsFilePrintf(out, "*cupsSNMPSupplies: %s\n",
(!_cups_strcasecmp(boolval, "true") ||
@@ -1556,6 +1560,8 @@ set_printer_options(
(boolval = cupsGetOption("cupsIPPSupplies", num_options,
options)) != NULL)
{
+ ppdchanged = 1;
+
cupsFilePrintf(out, "*cupsIPPSupplies: %s\n",
(!_cups_strcasecmp(boolval, "true") ||
!_cups_strcasecmp(boolval, "yes") ||
@@ -1566,6 +1572,8 @@ set_printer_options(
(boolval = cupsGetOption("cupsSNMPSupplies", num_options,
options)) != NULL)
{
+ ppdchanged = 1;
+
cupsFilePrintf(out, "*cupsSNMPSupplies: %s\n",
(!_cups_strcasecmp(boolval, "true") ||
!_cups_strcasecmp(boolval, "yes") ||
@@ -1580,8 +1588,7 @@ set_printer_options(
* Do the request...
*/
- ippDelete(cupsDoFileRequest(http, request, "/admin/",
- ppdchanged ? tempfile : file));
+ ippDelete(cupsDoFileRequest(http, request, "/admin/", ppdchanged ? tempfile : file));
/*
* Clean up temp files... (TODO: catch signals in case we CTRL-C during
diff --git a/templates/de/trailer.tmpl b/templates/de/trailer.tmpl
index 54f03ac78..c1f5d38d8 100644
--- a/templates/de/trailer.tmpl
+++ b/templates/de/trailer.tmpl
@@ -1,5 +1,5 @@
</div>
</div>
- <div class="footer">CUPS und das CUPS-Logo sind Warenzeichen der <a href="https://www.apple.com/">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. Alle Rechte vorbehalten.</div>
+ <div class="footer">CUPS und das CUPS-Logo sind Warenzeichen der <a href="https://www.apple.com/">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. Alle Rechte vorbehalten.</div>
</body>
</html>
diff --git a/templates/es/trailer.tmpl b/templates/es/trailer.tmpl
index 399189ec2..c1cb58ff5 100644
--- a/templates/es/trailer.tmpl
+++ b/templates/es/trailer.tmpl
@@ -1,5 +1,5 @@
</div>
</div>
- <div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor &copy; 2007-2018 Apple Inc. Todos los derechos reservados.</div>
+ <div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor &copy; 2007-2019 Apple Inc. Todos los derechos reservados.</div>
</body>
</html>
diff --git a/templates/fr/trailer.tmpl b/templates/fr/trailer.tmpl
index 907155ecf..6e9b8b1fe 100644
--- a/templates/fr/trailer.tmpl
+++ b/templates/fr/trailer.tmpl
@@ -1,5 +1,5 @@
</div>
</div>
- <div class="footer">CUPS et le logo CUPS sont des marques d&eacute;pos&eacute;es de <a href="http://www.apple.com">Apple Inc.</a> CUPS est sous copyright 2007-2018 Apple Inc. Tous droits r&eacute;serv&eacute;s.</div>
+ <div class="footer">CUPS et le logo CUPS sont des marques d&eacute;pos&eacute;es de <a href="http://www.apple.com">Apple Inc.</a> CUPS est sous copyright 2007-2019 Apple Inc. Tous droits r&eacute;serv&eacute;s.</div>
</body>
</html>
diff --git a/templates/ja/trailer.tmpl b/templates/ja/trailer.tmpl
index 04a205e0a..a4f86b1a6 100644
--- a/templates/ja/trailer.tmpl
+++ b/templates/ja/trailer.tmpl
@@ -1,5 +1,5 @@
</div>
</div>
- <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. All rights reserved.</div>
+ <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. All rights reserved.</div>
</body>
</html>
diff --git a/templates/pt_BR/trailer.tmpl b/templates/pt_BR/trailer.tmpl
index d1a1e64dc..673a55557 100644
--- a/templates/pt_BR/trailer.tmpl
+++ b/templates/pt_BR/trailer.tmpl
@@ -1,5 +1,5 @@
</div>
</div>
- <div class="footer">CUPS e sua logo s&atilde;o marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. Todos os direitos reservados.</div>
+ <div class="footer">CUPS e sua logo s&atilde;o marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. Todos os direitos reservados.</div>
</body>
</html>
diff --git a/templates/ru/trailer.tmpl b/templates/ru/trailer.tmpl
index 0da429890..260d0e9c2 100644
--- a/templates/ru/trailer.tmpl
+++ b/templates/ru/trailer.tmpl
@@ -1,6 +1,6 @@
</div>
</div>
<div class="footer">CUPS, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ CUPS ΡΠ²Π»ΡΡŽΡ‚ΡΡ зарСгистрированными Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ°Ρ€ΠΊΠ°ΠΌΠΈ
-<A HREF="http://www.apple.com">Apple Inc.</A> АвторскиС ΠΏΡ€Π°Π²Π° Π½Π° CUPS ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ (2007-2018) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Apple Inc. ВсС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹.</div>
+<A HREF="http://www.apple.com">Apple Inc.</A> АвторскиС ΠΏΡ€Π°Π²Π° Π½Π° CUPS ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ (2007-2019) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Apple Inc. ВсС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹.</div>
</body>
</html>
diff --git a/templates/trailer.tmpl b/templates/trailer.tmpl
index 04a205e0a..a4f86b1a6 100644
--- a/templates/trailer.tmpl
+++ b/templates/trailer.tmpl
@@ -1,5 +1,5 @@
</div>
</div>
- <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. All rights reserved.</div>
+ <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. All rights reserved.</div>
</body>
</html>
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
index 7fd69652c..f7cf61c36 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
@@ -3,7 +3,7 @@
# Perform the complete set of IPP compliance tests specified in the
# CUPS Software Test Plan.
#
-# Copyright © 2007-2018 by Apple Inc.
+# Copyright © 2007-2019 by Apple Inc.
# Copyright © 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -480,6 +480,14 @@ else
encryption=""
fi
+if test $testtype = 0; then
+ jobhistory="30m"
+ jobfiles="5m"
+else
+ jobhistory="30"
+ jobfiles="Off"
+fi
+
cat >$BASE/cupsd.conf <<EOF
StrictConformance Yes
Browsing Off
@@ -490,8 +498,8 @@ MaxLogSize 0
AccessLogLevel actions
LogLevel $loglevel
LogTimeFormat usecs
-PreserveJobHistory Yes
-PreserveJobFiles 5m
+PreserveJobHistory $jobhistory
+PreserveJobFiles $jobfiles
<Policy default>
<Limit All>
Order Allow,Deny
@@ -823,12 +831,70 @@ else
echo PASS
fi
-echo " </pre>" >>$strfile
+
+#
+# Perform job history test...
+#
+
+echo $ac_n "Starting history test: $ac_c"
+echo "" >>$strfile
+echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.11-history\":" >>$strfile
+
+echo " lp -d Test1 testfile.jpg" >>$strfile
+
+$runcups ../systemv/lp -d Test1 testfile.jpg 2>&1 >>$strfile
+if test $? != 0; then
+ echo "FAIL (unable to queue test job)"
+ echo " FAILED" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS"
+ echo " PASSED" >>$strfile
+
+ ./waitjobs.sh >>$strfile
+
+ echo $ac_n "Verifying that history still exists: $ac_c"
+
+ echo " ls -l $BASE/spool" >>$strfile
+ count=`ls -1 $BASE/spool | wc -l`
+ if test $count = 1; then
+ echo "FAIL"
+ echo " FAILED (job control files not present)" >>$strfile
+ ls -l $BASE/spool >>$strfile
+ fail=`expr $fail + 1`
+ else
+ echo "PASS"
+ echo " PASSED" >>$strfile
+
+ echo $ac_n "Waiting for job history to expire: $ac_c"
+ echo "" >>$strfile
+ echo " sleep 35" >>$strfile
+ sleep 35
+
+ echo " lpstat" >>$strfile
+ $runcups ../systemv/lpstat 2>&1 >>$strfile
+
+ echo " ls -l $BASE/spool" >>$strfile
+ count=`ls -1 $BASE/spool | wc -l`
+ if test $count != 1; then
+ echo "FAIL"
+ echo " FAILED (job control files still present)" >>$strfile
+ ls -l $BASE/spool >>$strfile
+ fail=`expr $fail + 1`
+ else
+ echo "PASS"
+ echo " PASSED" >>$strfile
+ fi
+ fi
+fi
+
#
# Stop the server...
#
+echo " </pre>" >>$strfile
+
kill $cupsd
wait $cupsd
cupsdstatus=$?
@@ -901,7 +967,7 @@ fi
# Requests logged
count=`wc -l $BASE/log/access_log | awk '{print $1}'`
-expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
+expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4 + 2`
if test $count != $expected; then
echo "FAIL: $count requests logged, expected $expected."
echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
diff --git a/vcnet/config.h b/vcnet/config.h
index 753f38063..3a6b3fc7b 100644
--- a/vcnet/config.h
+++ b/vcnet/config.h
@@ -94,8 +94,8 @@ typedef unsigned long useconds_t;
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.2.10"
-#define CUPS_MINIMAL "CUPS/2.2.10"
+#define CUPS_SVERSION "CUPS v2.2.12"
+#define CUPS_MINIMAL "CUPS/2.2.12"
/*
@@ -380,6 +380,13 @@ typedef unsigned long useconds_t;
/*
+ * Do we have the gnutls_fips140_set_mode function?
+ */
+
+/* #undef HAVE_GNUTLS_FIPS140_SET_MODE */
+
+
+/*
* Do we have the gnutls_transport_set_pull_timeout_function function?
*/
diff --git a/xcode/config.h b/xcode/config.h
index ea8b067a1..490b606cd 100644
--- a/xcode/config.h
+++ b/xcode/config.h
@@ -22,8 +22,8 @@
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.2.10"
-#define CUPS_MINIMAL "CUPS/2.2.10"
+#define CUPS_SVERSION "CUPS v2.2.12"
+#define CUPS_MINIMAL "CUPS/2.2.12"
/*
@@ -310,6 +310,13 @@
/*
+ * Do we have the gnutls_fips140_set_mode function?
+ */
+
+/* #undef HAVE_GNUTLS_FIPS140_SET_MODE */
+
+
+/*
* Do we have the gnutls_transport_set_pull_timeout_function function?
*/