Imported Upstream version 2.2.12 upstream/2.2.12
authorDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 20 Jan 2020 05:36:39 +0000 (14:36 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 20 Jan 2020 05:36:39 +0000 (14:36 +0900)
71 files changed:
CHANGES.md
INSTALL.md
Makedefs.in
README.md
backend/org.cups.usb-quirks
backend/usb-libusb.c
cgi-bin/admin.c
config-scripts/cups-common.m4
config-scripts/cups-ssl.m4
config.h.in
configure
configure.ac
cups/cups-private.h
cups/cups.h
cups/dest-options.c
cups/dest.c
cups/hash.c
cups/http.c
cups/ipp.c
cups/ppd-emit.c
cups/ppd-mark.c
cups/ppd.c
cups/ppd.h
cups/snmp.c
cups/snprintf.c
cups/testdest.c
cups/testipp.c
cups/testppd.c
doc/cups.css
doc/de/index.html.in
doc/es/index.html.in
doc/help/man-cupsd.conf.html
doc/help/man-ipptoolfile.html
doc/index.html.in
doc/ja/index.html.in
doc/pt_BR/index.html.in
doc/ru/index.html.in
filter/rastertolabel.c
locale/cups.pot
locale/cups.strings
locale/cups_ca.po
locale/cups_cs.po
locale/cups_de.po
locale/cups_es.po
locale/cups_fr.po
locale/cups_it.po
locale/cups_ja.po
locale/cups_pt_BR.po
locale/cups_ru.po
locale/cups_zh_CN.po
man/cupsd.conf.man.in
man/ipptoolfile.man
packaging/cups.spec
scheduler/auth.c
scheduler/client.c
scheduler/conf.c
scheduler/job.c
scheduler/main.c
scheduler/org.cups.cupsd.service.in
scheduler/printers.c
systemv/cupsctl.c
systemv/lpadmin.c
templates/de/trailer.tmpl
templates/es/trailer.tmpl
templates/fr/trailer.tmpl
templates/ja/trailer.tmpl
templates/pt_BR/trailer.tmpl
templates/ru/trailer.tmpl
templates/trailer.tmpl
vcnet/config.h
xcode/config.h

index 6e8705f..9cc2e20 100644 (file)
@@ -1,7 +1,49 @@
-CHANGES - 2.2.11 - 2019-03-22
+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
 -----------------------
 
@@ -41,7 +83,7 @@ Changes in CUPS v2.2.11
 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)
index 2ea5120..63075db 100644 (file)
@@ -1,4 +1,4 @@
-INSTALL - CUPS v2.2.11 - 2019-03-22
+INSTALL - CUPS v2.2.12 - 2019-08-15
 ===================================
 
 This file describes how to compile and install CUPS from source code. For more
index f614c0c..8541b49 100644 (file)
@@ -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
@@ -29,7 +29,7 @@ CHMOD         =       @CHMOD@
 CXX            =       @LIBTOOL_CXX@ @CXX@
 DSO            =       @DSO@
 DSOXX          =       @DSOXX@
-GZIP           =       @GZIP@
+GZIPPROG       =       @GZIPPROG@
 INSTALL                =       @INSTALL@
 LD             =       @LD@
 LD_CC          =       @LD_CC@
index 7afc078..54ced6c 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-README - CUPS v2.2.11 - 2019-03-22
+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
index 44d6bb8..cd684d3 100644 (file)
 # 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
 
index 7fc95c2..042854b 100644 (file)
@@ -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, <))
index e27c078..43fad78 100644 (file)
@@ -3410,6 +3410,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))
                    {
@@ -4009,6 +4012,9 @@ get_option_value(
 
     switch (cparam->type)
     {
+      case PPD_CUSTOM_UNKNOWN :
+          break;
+
       case PPD_CUSTOM_CURVE :
       case PPD_CUSTOM_INVCURVE :
       case PPD_CUSTOM_REAL :
@@ -4087,6 +4093,9 @@ get_option_value(
 
       switch (cparam->type)
       {
+        case PPD_CUSTOM_UNKNOWN :
+            break;
+
        case PPD_CUSTOM_CURVE :
        case PPD_CUSTOM_INVCURVE :
        case PPD_CUSTOM_REAL :
index a1185bc..0859efe 100644 (file)
@@ -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)
 
index 52f9c39..49fe42f 100644 (file)
@@ -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"
index f3b5e4c..d81c59e 100644 (file)
 
 
 /*
+ * 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?
  */
 
index 3689061..0392af1 100755 (executable)
--- 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.11.
+# 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.11'
-PACKAGE_STRING='CUPS 2.2.11'
+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.11 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.11:";;
+     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.11
+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.11, 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.11"
+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.11, 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.11
+CUPS config.status 2.2.12
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index 4c770e7..7762599 100644 (file)
@@ -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.11], [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)
index 6fd66a9..4ec4e68 100644 (file)
@@ -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);
index 4efe6d1..c548bde 100644 (file)
@@ -47,10 +47,10 @@ extern "C" {
  * Constants...
  */
 
-#  define CUPS_VERSION                 2.0211
+#  define CUPS_VERSION                 2.0212
 #  define CUPS_VERSION_MAJOR           2
 #  define CUPS_VERSION_MINOR           2
-#  define CUPS_VERSION_PATCH           11
+#  define CUPS_VERSION_PATCH           12
 
 #  define CUPS_BC_FD                   3
                                        /* Back-channel file descriptor for
index 51705a5..e9361ad 100644 (file)
@@ -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;
index 7ef85a1..fd635b1 100644 (file)
@@ -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));
-
-    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);
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad 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...
   */
 
@@ -1883,6 +1793,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 +1806,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 +1817,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 +1849,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));
@@ -1948,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);
   }
 
  /*
@@ -2130,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...
     */
 
@@ -2195,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 ++)
       {
@@ -2204,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;
 
        /*
@@ -2233,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...
@@ -2287,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)
@@ -2720,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 :
@@ -2956,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.
@@ -3065,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 */
@@ -3078,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) */
@@ -3094,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 */
@@ -3543,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 */
@@ -3580,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));
@@ -3598,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;
@@ -3619,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;
@@ -3652,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;
 
@@ -3714,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);
   }
 
@@ -3724,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);
   }
 
@@ -3741,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 */
@@ -3757,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);
   }
 
@@ -3769,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);
   }
 
@@ -3779,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);
   }
 
@@ -3791,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 */
@@ -3903,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;
@@ -3935,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)
@@ -4166,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 */
@@ -4180,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...
@@ -4248,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)
@@ -4262,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;
@@ -4290,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...
index a313725..621d119 100644 (file)
@@ -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);
 }
index 5c14ef6..3fadb5a 100644 (file)
@@ -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
   {
index f4171bc..b0762fd 100644 (file)
@@ -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...
@@ -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)
index 4b153ac..392b013 100644 (file)
@@ -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 :
index 2d106ba..4131ca6 100644 (file)
@@ -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 :
index 435b992..58d92c1 100644 (file)
@@ -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));
 
index ae63c0d..b6326a5 100644 (file)
@@ -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) */
index 8437528..fc93961 100644 (file)
@@ -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) ++;
 
index c5d8908..72b3fc8 100644 (file)
@@ -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;
 
index 9eab8d2..a65e099 100644 (file)
@@ -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("");
index 2ef2496..a8d3662 100644 (file)
@@ -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;
index a127a79..776304b 100644 (file)
@@ -1054,6 +1054,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,
index da6ac15..79774b1 100644 (file)
@@ -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 {
index cbae07b..cdc29b1 100644 (file)
@@ -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>
index 6c12f4f..6343c38 100644 (file)
@@ -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>
index 4ba6ecf..8850f35 100644 (file)
@@ -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>
index c426af7..d8cae81 100644 (file)
@@ -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>
index 0cb0164..48f18ad 100644 (file)
@@ -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>
index 08549f9..eacc157 100644 (file)
@@ -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>
index ace8226..b3ea358 100644 (file)
@@ -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>
index 7bfc5a3..47dc6d8 100644 (file)
@@ -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>
index 6ad6c62..b44f490 100644 (file)
@@ -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...
index 46edb9d..39ea967 100644 (file)
@@ -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 ""
index 6a708f2..0c484f3 100644 (file)
 "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”";
index 248c4f2..a4b28a5 100644 (file)
@@ -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 "
index a271091..a38c8aa 100644 (file)
@@ -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
index 1d3e2c3..9349ae8 100644 (file)
@@ -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"
 
index 0a8aa18..2eee2f0 100644 (file)
@@ -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"
 
index 8e0f4fa..a892435 100644 (file)
@@ -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
index d83fa97..cb3aa41 100644 (file)
@@ -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."
index af7852b..035265e 100644 (file)
@@ -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) サポートがコンパイルされていないので、通常モードで動作し"
index 3be06c4..2bfb92a 100644 (file)
@@ -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 "
index 790b54a..35f13fc 100644 (file)
@@ -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"
 
index d9ef006..99bc60b 100644 (file)
@@ -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"
 
index 15a5fa9..97bf879 100644 (file)
@@ -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.
index 35b0504..5e8384b 100644 (file)
@@ -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.
index 82310fb..a15f03d 100644 (file)
 
 Summary: CUPS
 Name: cups
-Version: 2.2.11
+Version: 2.2.12
 Release: 0
 Epoch: 1
 License: GPL
 Group: System Environment/Daemons
-Source: https://github.com/apple/cups/releases/download/v2.2.11/cups-2.2.11-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
index fa4e271..1fb3ffc 100644 (file)
@@ -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
index a21b909..6805080 100644 (file)
@@ -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);
 
index 9c1be70..11c94d2 100644 (file)
@@ -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              = FALSE;
-  Timeout                  = DEFAULT_TIMEOUT;
+  Timeout                  = 900;
   WebInterface             = CUPS_DEFAULT_WEBIF;
 
   BrowseLocalProtocols     = parse_protocols(CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS);
index 4f04138..1a7a34c 100644 (file)
@@ -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)
@@ -4021,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 :
@@ -4166,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 :
index 2b8db00..de36815 100644 (file)
@@ -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;
@@ -2033,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
index f2afa11..5273762 100644 (file)
@@ -1,6 +1,7 @@
 [Unit]
 Description=CUPS Scheduler
 Documentation=man:cupsd(8)
+After=sssd.service
 
 [Service]
 ExecStart=@sbindir@/cupsd -l
index 0589e6d..937d0f3 100644 (file)
@@ -1021,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"))
     {
@@ -1031,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"))
     {
index c60c218..f8d9dc8 100644 (file)
@@ -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);
+      }
+    }
   }
 
  /*
index cb9a9ba..a696474 100644 (file)
@@ -1488,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") ||
@@ -1498,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") ||
@@ -1558,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") ||
@@ -1568,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") ||
@@ -1582,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
index 54f03ac..c1f5d38 100644 (file)
@@ -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>
index 399189e..c1cb58f 100644 (file)
@@ -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>
index 907155e..6e9b8b1 100644 (file)
@@ -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>
index 04a205e..a4f86b1 100644 (file)
@@ -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>
index d1a1e64..673a555 100644 (file)
@@ -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>
index 0da4298..260d0e9 100644 (file)
@@ -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>
index 04a205e..a4f86b1 100644 (file)
@@ -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>
index 3fb5229..3a6b3fc 100644 (file)
@@ -94,8 +94,8 @@ typedef unsigned long useconds_t;
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.2.11"
-#define CUPS_MINIMAL "CUPS/2.2.11"
+#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?
  */
 
index 3ae3e09..490b606 100644 (file)
@@ -22,8 +22,8 @@
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.2.11"
-#define CUPS_MINIMAL "CUPS/2.2.11"
+#define CUPS_SVERSION "CUPS v2.2.12"
+#define CUPS_MINIMAL "CUPS/2.2.12"
 
 
 /*
 
 
 /*
+ * 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?
  */