Imported Upstream version 2.2.8 upstream/2.2.8
authorDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 20 Jan 2020 05:35:37 +0000 (14:35 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 20 Jan 2020 05:35:37 +0000 (14:35 +0900)
69 files changed:
CHANGES.md
INSTALL.md
README.md
backend/ipp.c
backend/org.cups.usb-quirks
configure
configure.ac
cups/auth.c
cups/cups.h
cups/http-support.c
cups/ipp.c
cups/testhttp.c
cups/tls-darwin.c
cups/util.c
doc/help/cupspm.epub
doc/help/man-cupsd.conf.html
doc/help/man-ippfind.html
doc/help/man-lpoptions.html
doc/help/options.html
doc/help/sharing.html
doc/help/spec-command.html
doc/help/spec-ppd.html
filter/pstops.c
filter/spec-ppd.shtml
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/cups-files.conf.man.in
man/cupsd.conf.man.in
man/ippfind.man
man/lpoptions.man.in
notifier/mailto.c
packaging/cups.spec
scheduler/auth.c
scheduler/client.c
scheduler/client.h
scheduler/conf.c
scheduler/ipp.c
scheduler/job.c
scheduler/org.cups.cupsd.service.in
scheduler/process.c
scheduler/server.c
templates/fr/add-class.tmpl
templates/fr/add-printer.tmpl
templates/fr/choose-model.tmpl
templates/fr/choose-uri.tmpl
templates/fr/class.tmpl
templates/fr/classes-header.tmpl
templates/fr/classes.tmpl
templates/fr/help-header.tmpl
templates/fr/job-moved.tmpl
templates/fr/jobs.tmpl
templates/fr/printer-default.tmpl
templates/fr/printer.tmpl
test/ipp-everywhere.test
test/ippfind.c
test/ipptool.c
test/run-stp-tests.sh
vcnet/config.h
xcode/config.h

index f568f35..7220dc9 100644 (file)
@@ -1,7 +1,40 @@
-CHANGES - 2.2.7 - 2018-03-22
+CHANGES - 2.2.8 - 2018-06-05
 ============================
 
 
+Changes in CUPS v2.2.8
+----------------------
+
+- Additional changes for the scheduler to substitute default values for invalid
+  job attributes when running in "relaxed conformance" mode (Issue #5229)
+- The `ipptool` program no longer checks for duplicate attributes when running
+  in list or CSV mode (Issue #5278)
+- Fixed builds without PAM (Issue #5283)
+- Fixed `lpoptions` man page (Issue #5286)
+- The `cupsCreateJob`, `cupsPrintFile2`, and `cupsPrintFiles2` APIs did not use
+  the supplied HTTP connection (Issue #5288)
+- Fixed another crash in the scheduler when adding an IPP Everywhere printer
+  (Issue #5290)
+- Added a workaround for certain web browsers that do not support multiple
+  authentication schemes in a single response header (Issue #5289)
+- Fixed policy limits containing the `All` operation (Issue #5296)
+- The scheduler was always restarted after idle-exit with systemd (Issue #5297)
+- Added a USB quirks rule for the HP LaserJet P1102 (Issue #5310)
+- The mailto notifier did not wait for the welcome message (Issue #5312)
+- Fixed a parsing bug in the pstops filter (Issue #5321)
+- Documentation updates (Issue #5299, Issue #5301, Issue #5306)
+- Localization updates (Issue #5317)
+- The scheduler allowed environment variables to be specified in the
+  `cupsd.conf` file (rdar://37836779, rdar://37836995, rdar://37837252,
+  rdar://37837581)
+- Fax queues did not support pause (p) or wait-for-dialtone (w) characters
+  (rdar://39212256)
+- The scheduler did not validate notify-recipient-uri values properly
+  (rdar://40068936)
+- The IPP parser allowed invalid group tags (rdar://40442124)
+- Fixed a parsing bug in the new authentication code.
+
+
 Changes in CUPS v2.2.7
 ----------------------
 
index 0b7a847..9b534b1 100644 (file)
@@ -1,4 +1,4 @@
-INSTALL - CUPS v2.2.7 - 2018-03-22
+INSTALL - CUPS v2.2.8 - 2018-06-05
 ==================================
 
 This file describes how to compile and install CUPS from source code. For more
index cf204df..ff8e1b5 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-README - CUPS v2.2.7 - 2018-03-22
+README - CUPS v2.2.8 - 2018-06-05
 =================================
 
 Looking for compile instructions?  Read the file `INSTALL.md` instead...
index 44ce8d2..61e706e 100644 (file)
@@ -2785,7 +2785,7 @@ new_request(
        char    phone[1024],            /* Phone number string */
                *ptr,                   /* Pointer into string */
                tel_uri[1024];          /* tel: URI */
-        static const char * const allowed = "0123456789#*-+.()";
+        static const char * const allowed = "0123456789#*-+.()pw";
                                        /* Allowed characters */
 
         destination = ippNew();
@@ -2798,7 +2798,9 @@ new_request(
         _httpDecodeURI(phone, keyword, sizeof(phone));
         for (ptr = phone; *ptr;)
        {
-         if (!strchr(allowed, *ptr))
+         if (*ptr == ',')
+           *ptr = 'p';
+         else if (!strchr(allowed, *ptr))
            _cups_strcpy(ptr, ptr + 1);
          else
            ptr ++;
index f0ba5c2..1f1feff 100644 (file)
 
 # Lexmark Optra E310 (Issue #5259)
 0x043d 0x000c no-reattach
+
+# HP LaserJet P1102 (Issue #5310)
+0x03F0 0x002A no-reattach
index 21eca26..9134476 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.7.
+# Generated by GNU Autoconf 2.69 for CUPS 2.2.8.
 #
 # 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.7'
-PACKAGE_STRING='CUPS 2.2.7'
+PACKAGE_VERSION='2.2.8'
+PACKAGE_STRING='CUPS 2.2.8'
 PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
 PACKAGE_URL='https://www.cups.org/'
 
@@ -1482,7 +1482,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.7 to adapt to many kinds of systems.
+\`configure' configures CUPS 2.2.8 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1547,7 +1547,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of CUPS 2.2.7:";;
+     short | recursive ) echo "Configuration of CUPS 2.2.8:";;
    esac
   cat <<\_ACEOF
 
@@ -1728,7 +1728,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-CUPS configure 2.2.7
+CUPS configure 2.2.8
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2192,7 +2192,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.7, which was
+It was created by CUPS $as_me 2.2.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2667,7 +2667,7 @@ fi
 ac_config_headers="$ac_config_headers config.h"
 
 
-CUPS_VERSION="2.2.7"
+CUPS_VERSION="2.2.8"
 CUPS_REVISION=""
 CUPS_BUILD="cups-$CUPS_VERSION"
 
@@ -10901,7 +10901,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.7, which was
+This file was extended by CUPS $as_me 2.2.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -10964,7 +10964,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.7
+CUPS config.status 2.2.8
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index ed26daa..438e56c 100644 (file)
@@ -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.7], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
+AC_INIT([CUPS], [2.2.8], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
 
 sinclude(config-scripts/cups-opsys.m4)
 sinclude(config-scripts/cups-common.m4)
index 4c38c9b..740b079 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Authentication functions for CUPS.
  *
- * Copyright 2007-2016 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products.
  *
  * This file contains Kerberos support code, copyright 2006 by
  * Jelmer Vernooij.
@@ -218,7 +218,7 @@ cupsDoAuthentication(
       if (!cg->lang_default)
        cg->lang_default = cupsLangDefault();
 
-      if (cups_auth_param(scheme, "username", default_username, sizeof(default_username)))
+      if (cups_auth_param(schemedata, "username", default_username, sizeof(default_username)))
        cupsSetUser(default_username);
 
       snprintf(prompt, sizeof(prompt), _cupsLangString(cg->lang_default, _("Password for %s on %s? ")), cupsUser(), http->hostname[0] == '/' ? "localhost" : http->hostname);
@@ -620,7 +620,7 @@ cups_auth_find(const char *www_authenticate,        /* I - Pointer into WWW-Authenticat
     * See if this is "Scheme" followed by whitespace or the end of the string.
     */
 
-    if (!strncmp(www_authenticate, scheme, schemelen) && (isspace(www_authenticate[schemelen] & 255) || !www_authenticate[schemelen]))
+    if (!strncmp(www_authenticate, scheme, schemelen) && (isspace(www_authenticate[schemelen] & 255) || www_authenticate[schemelen] == ',' || !www_authenticate[schemelen]))
     {
      /*
       * Yes, this is the start of the scheme-specific information...
@@ -801,7 +801,7 @@ cups_auth_scheme(const char *www_authenticate,      /* I - Pointer into WWW-Authentic
     * Parse the scheme name or param="value" string...
     */
 
-    for (sptr = scheme, start = www_authenticate, param = 0; *www_authenticate && !isspace(*www_authenticate & 255); www_authenticate ++)
+    for (sptr = scheme, start = www_authenticate, param = 0; *www_authenticate && *www_authenticate != ',' && !isspace(*www_authenticate & 255); www_authenticate ++)
     {
       if (*www_authenticate == '=')
         param = 1;
index 3f8d91e..92826d7 100644 (file)
@@ -47,10 +47,10 @@ extern "C" {
  * Constants...
  */
 
-#  define CUPS_VERSION                 2.0207
+#  define CUPS_VERSION                 2.0208
 #  define CUPS_VERSION_MAJOR           2
 #  define CUPS_VERSION_MINOR           2
-#  define CUPS_VERSION_PATCH           7
+#  define CUPS_VERSION_PATCH           8
 
 #  define CUPS_BC_FD                   3
                                        /* Back-channel file descriptor for
index cbee9ab..76c1272 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * HTTP support routines for CUPS.
  *
- * Copyright 2007-2017 by Apple Inc.
+ * Copyright 2007-2018 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -1032,7 +1032,7 @@ httpSeparateURI(
 
     *ptr = '\0';
 
-    if (*uri != ':')
+    if (*uri != ':' || *scheme == '.' || !*scheme)
     {
       *scheme = '\0';
       return (HTTP_URI_STATUS_BAD_SCHEME);
index 0adc3ef..b33a3bc 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Internet Printing Protocol functions for CUPS.
  *
- * Copyright 2007-2017 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
  * property of Apple Inc. and are protected by Federal copyright
@@ -3089,6 +3089,13 @@ ippReadIO(void       *src,               /* I - Data source */
            ipp->state = IPP_STATE_DATA;
            break;
          }
+         else if (tag == IPP_TAG_ZERO || (tag == IPP_TAG_OPERATION && ipp->curtag != IPP_TAG_ZERO))
+         {
+           _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid group tag."), 1);
+           DEBUG_printf(("1ippReadIO: bad tag 0x%02x.", tag));
+           _cupsBufferRelease((char *)buffer);
+           return (IPP_STATE_ERROR);
+         }
           else if (tag < IPP_TAG_UNSUPPORTED_VALUE)
          {
           /*
@@ -4812,21 +4819,6 @@ ippValidateAttribute(
   ipp_attribute_t *colattr;            /* Collection attribute */
   regex_t      re;                     /* Regular expression */
   ipp_uchar_t  *date;                  /* Current date value */
-  static const char * const uri_status_strings[] =
-  {                                    /* URI status strings */
-    "URI too large",
-    "Bad arguments to function",
-    "Bad resource in URI",
-    "Bad port number in URI",
-    "Bad hostname/address in URI",
-    "Bad username in URI",
-    "Bad scheme in URI",
-    "Bad/empty URI",
-    "OK",
-    "Missing scheme in URI",
-    "Unknown scheme in URI",
-    "Missing resource in URI"
-  };
 
 
  /*
@@ -5101,14 +5093,18 @@ ippValidateAttribute(
            }
            else if (*ptr & 0x80)
              break;
+           else if ((*ptr < ' ' && *ptr != '\n' && *ptr != '\r' && *ptr != '\t') || *ptr == 0x7f)
+             break;
          }
 
-         if (*ptr)
+         if (*ptr < ' ' || *ptr == 0x7f)
          {
-           ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
-                         _("\"%s\": Bad text value \"%s\" - bad UTF-8 "
-                           "sequence (RFC 8011 section 5.1.2)."), attr->name,
-                         attr->values[i].string.text);
+           ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."), attr->name, attr->values[i].string.text);
+           return (0);
+         }
+         else if (*ptr)
+         {
+           ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text);
            return (0);
          }
 
@@ -5159,14 +5155,18 @@ ippValidateAttribute(
            }
            else if (*ptr & 0x80)
              break;
+           else if (*ptr < ' ' || *ptr == 0x7f)
+             break;
          }
 
-         if (*ptr)
+         if (*ptr < ' ' || *ptr == 0x7f)
          {
-           ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
-                         _("\"%s\": Bad name value \"%s\" - bad UTF-8 "
-                           "sequence (RFC 8011 section 5.1.3)."), attr->name,
-                         attr->values[i].string.text);
+           ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."), attr->name, attr->values[i].string.text);
+           return (0);
+         }
+         else if (*ptr)
+         {
+           ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text);
            return (0);
          }
 
@@ -5223,12 +5223,7 @@ ippValidateAttribute(
 
          if (uri_status < HTTP_URI_STATUS_OK)
          {
-           ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
-                         _("\"%s\": Bad URI value \"%s\" - %s "
-                           "(RFC 8011 section 5.1.6)."), attr->name,
-                         attr->values[i].string.text,
-                         uri_status_strings[uri_status -
-                                            HTTP_URI_STATUS_OVERFLOW]);
+           ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."), attr->name, attr->values[i].string.text, httpURIStatusString(uri_status));
            return (0);
          }
 
index 376d71f..fa8356c 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * HTTP test program for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
- * Copyright 1997-2006 by Easy Software Products.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2006 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
  * property of Apple Inc. and are protected by Federal copyright
@@ -120,6 +120,9 @@ static uri_test_t   uri_tests[] =   /* URI test data */
                          { HTTP_URI_STATUS_OK, "ipp://%22%23%2F%3A%3C%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D/",
                            "ipp", "", "\"#/:<>?@[\\]^`{|}", "/", 631, 0,
                            HTTP_URI_CODING_MOST  },
+                         { HTTP_URI_STATUS_UNKNOWN_SCHEME, "smb://server/Some%20Printer",
+                           "smb", "", "server", "/Some Printer", 0, 0,
+                           HTTP_URI_CODING_ALL },
 
                          /* Missing scheme */
                          { HTTP_URI_STATUS_MISSING_SCHEME, "/path/to/file/index.html",
@@ -148,6 +151,9 @@ static uri_test_t   uri_tests[] =   /* URI test data */
                            HTTP_URI_CODING_MOST  },
 
                          /* Bad scheme */
+                         { HTTP_URI_STATUS_BAD_SCHEME, "://server/ipp",
+                           "", "", "", "", 0, 0,
+                           HTTP_URI_CODING_MOST  },
                          { HTTP_URI_STATUS_BAD_SCHEME, "bad_scheme://server/resource",
                            "", "", "", "", 0, 0,
                            HTTP_URI_CODING_MOST  },
@@ -180,6 +186,9 @@ static uri_test_t   uri_tests[] =   /* URI test data */
                            HTTP_URI_CODING_MOST  },
 
                          /* Bad resource */
+                         { HTTP_URI_STATUS_BAD_RESOURCE, "mailto:\r\nbla",
+                           "mailto", "", "", "", 0, 0,
+                           HTTP_URI_CODING_MOST  },
                          { HTTP_URI_STATUS_BAD_RESOURCE, "http://server/index.html%",
                            "http", "", "server", "", 80, 0,
                            HTTP_URI_CODING_MOST  },
index 80cd660..9aa316b 100644 (file)
@@ -1897,7 +1897,9 @@ http_cdsa_copy_server(
   DEBUG_printf(("4http_cdsa_copy_server: Returning %p.", (void *)certificates));
 
   return (certificates);
+
 #else
+  (void)common_name;
 
   if (!tls_selfsigned)
     return (NULL);
index 2f5ebdf..e800449 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Printing utilities for CUPS.
  *
- * Copyright 2007-2017 by Apple Inc.
- * Copyright 1997-2006 by Easy Software Products.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2006 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
  * property of Apple Inc. and are protected by Federal copyright
 
 
 /*
- * Enumeration data and callback...
- */
-
-typedef struct _cups_createdata_s
-{
-  const char  *name;                    /* Destination name */
-  cups_dest_t *dest;                    /* Matching destination */
-} _cups_createdata_t;
-
-static int  cups_create_cb(_cups_createdata_t *data, unsigned flags, cups_dest_t *dest);
-
-
-/*
  * 'cupsCancelJob()' - Cancel a print job on the default server.
  *
  * Pass @code CUPS_JOBID_ALL@ to cancel all jobs or @code CUPS_JOBID_CURRENT@
@@ -174,7 +161,7 @@ cupsCreateJob(
 {
   int          job_id = 0;             /* job-id value */
   ipp_status_t  status;                 /* Create-Job status */
-  _cups_createdata_t data;              /* Enumeration data */
+  cups_dest_t  *dest;                  /* Destination */
   cups_dinfo_t  *info;                  /* Destination information */
 
 
@@ -194,12 +181,7 @@ cupsCreateJob(
   * Lookup the destination...
   */
 
-  data.name = name;
-  data.dest = NULL;
-
-  cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_create_cb, &data);
-
-  if (!data.dest)
+  if ((dest = cupsGetNamedDest(http, name, NULL)) == NULL)
   {
     DEBUG_puts("1cupsCreateJob: Destination not found.");
     _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
@@ -211,18 +193,18 @@ cupsCreateJob(
   */
 
   DEBUG_puts("1cupsCreateJob: Querying destination info.");
-  if ((info = cupsCopyDestInfo(http, data.dest)) == NULL)
+  if ((info = cupsCopyDestInfo(http, dest)) == NULL)
   {
     DEBUG_puts("1cupsCreateJob: Query failed.");
-    cupsFreeDests(1, data.dest);
+    cupsFreeDests(1, dest);
     return (0);
   }
 
-  status = cupsCreateDestJob(http, data.dest, info, &job_id, title, num_options, options);
+  status = cupsCreateDestJob(http, dest, info, &job_id, title, num_options, options);
   DEBUG_printf(("1cupsCreateJob: cupsCreateDestJob returned %04x (%s)", status, ippErrorString(status)));
 
   cupsFreeDestInfo(info);
-  cupsFreeDests(1, data.dest);
+  cupsFreeDests(1, dest);
 
  /*
   * Return the job...
@@ -974,25 +956,3 @@ cupsStartDocument(
   return (status);
 }
 
-
-/*
- * 'cups_create_cb()' - Find the destination for printing.
- */
-
-static int                              /* O - 0 on match */
-cups_create_cb(
-    _cups_createdata_t *data,           /* I - Data from cupsCreateJob call */
-    unsigned           flags,           /* I - Enumeration flags */
-    cups_dest_t        *dest)           /* I - Destination */
-{
-  DEBUG_printf(("2cups_create_cb(data=%p(%s), flags=%08x, dest=%p(%s))", (void *)data, data->name, flags, (void *)dest, dest->name));
-
-  (void)flags;
-
-  if (dest->instance || strcasecmp(data->name, dest->name))
-    return (1);
-
-  cupsCopyDest(dest, 0, &data->dest);
-
-  return (0);
-}
index cbffada..a73e5f6 100644 (file)
Binary files a/doc/help/cupspm.epub and b/doc/help/cupspm.epub differ
index fe4902d..9438953 100644 (file)
@@ -88,10 +88,10 @@ A value of 0 causes the update to happen as soon as possible, typically within a
 The default value is "30".
 <dt><a name="ErrorPolicy"></a><b>ErrorPolicy abort-job</b>
 <dd style="margin-left: 5.0em">Specifies that a failed print job should be aborted (discarded) unless otherwise specified for the printer.
+<dt><b>ErrorPolicy retry-current-job</b>
+<dd style="margin-left: 5.0em">Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
 <dt><b>ErrorPolicy retry-job</b>
 <dd style="margin-left: 5.0em">Specifies that a failed print job should be retried at a later time unless otherwise specified for the printer.
-<dt><b>ErrorPolicy retry-this-job</b>
-<dd style="margin-left: 5.0em">Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
 <dt><b>ErrorPolicy stop-printer</b>
 <dd style="margin-left: 5.0em">Specifies that a failed print job should stop the printer unless otherwise specified for the printer. The 'stop-printer' error policy is the default.
 <dt><a name="FilterLimit"></a><b>FilterLimit </b><i>limit</i>
@@ -605,7 +605,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-2017 by Apple Inc.
+Copyright &copy; 2007-2018 by Apple Inc.
 
 </body>
 </html>
index 41445fe..2e2ebb1 100644 (file)
@@ -70,6 +70,9 @@ The following expressions are supported:
 The result is true if the URI is accessible, false otherwise.
 <dt><b>--local</b>
 <dd style="margin-left: 5.0em">True if the service is local to this computer.
+<dt><b>-N </b><i>name</i>
+<dd style="margin-left: 5.0em"><dt><b>--literal-name </b><i>name</i>
+<dd style="margin-left: 5.0em">True if the service instance name matches the given name.
 <dt><b>-n </b><i>regex</i>
 <dd style="margin-left: 5.0em"><dt><b>--name </b><i>regex</i>
 <dd style="margin-left: 5.0em">True if the service instance name matches the given regular expression.
@@ -198,7 +201,7 @@ Similarly, to send a PostScript test page to every PostScript printer, run:
 <h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
 <a href="man-ipptool.html?TOPIC=Man+Pages"><b>ipptool</b>(1)</a>
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2013-2015 by Apple Inc.
+Copyright &copy; 2013-2018 by Apple Inc.
 
 </body>
 </html>
index e4eaf71..e8213c4 100644 (file)
@@ -14,9 +14,6 @@ lpoptions - display or set printer options and defaults
 [
 <b>-E</b>
 ] [
-<b>-U</b>
-<i>username</i>
-] [
 <b>-h </b><i>server</i>[<b>:</b><i>port</i>]
 ]
 <b>-d </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -28,9 +25,6 @@ lpoptions - display or set printer options and defaults
 [
 <b>-E</b>
 ] [
-<b>-U</b>
-<i>username</i>
-] [
 <b>-h </b><i>server</i>[<b>:</b><i>port</i>]
 ] [
 <b>-p </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -41,9 +35,6 @@ lpoptions - display or set printer options and defaults
 [
 <b>-E</b>
 ] [
-<b>-U</b>
-<i>username</i>
-] [
 <b>-h </b><i>server</i>[<b>:</b><i>port</i>]
 ] [
 <b>-p </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -55,9 +46,6 @@ lpoptions - display or set printer options and defaults
 [
 <b>-E</b>
 ] [
-<b>-U</b>
-<i>username</i>
-] [
 <b>-h </b><i>server</i>[<b>:</b><i>port</i>]
 ]
 <b>-x </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -78,8 +66,6 @@ Otherwise, the per-user defaults are managed in the <i>~/.cups/lpoptions</i> fil
 <dl class="man">
 <dt><b>-E</b>
 <dd style="margin-left: 5.0em">Enables encryption when communicating with the CUPS server.
-<dt><b>-U </b><i>username</i>
-<dd style="margin-left: 5.0em">Uses an alternate username.
 <dt><b>-d </b><i>destination</i>[<b>/</b><i>instance</i>]
 <dd style="margin-left: 5.0em">Sets the user default printer to <i>destination</i>.
 If <i>instance</i> is supplied then that particular instance is used.
@@ -119,7 +105,7 @@ The <b>lpoptions</b> command is unique to CUPS.
 <a href="man-lprm.html?TOPIC=Man+Pages"><b>lprm</b>(1),</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-2017 by Apple Inc.
+Copyright &copy; 2007-2018 by Apple Inc.
 
 </body>
 </html>
index 044cdb6..9d612fc 100644 (file)
@@ -546,24 +546,5 @@ lpr -o mirror filename
 <P>This is typically used when printing on T-shirt transfer
 media or sometimes on transparencies.</P>
 
-<H3><A NAME="RAW">Raw or Unfiltered Output</A></H3>
-
-<P>The <CODE>-o raw</CODE> option allows you to send files
-directly to a printer without filtering. This is sometimes
-required when printing from applications that provide their own
-"printer drivers" for your printer:</P>
-
-<PRE CLASS="command">
-lp -o raw filename
-lpr -o raw filename
-</PRE>
-
-<P>The <CODE>-l</CODE> option can also be used with the
-<B>lpr</B> command to send files directly to a printer:</P>
-
-<PRE CLASS="command">
-lpr -l filename
-</PRE>
-
 </BODY>
 </HTML>
index 9763da7..a46f393 100644 (file)
@@ -99,7 +99,7 @@ each remote queue by hand using the <a href="man-lpadmin.html">lpadmin(8)</a>
 command:</p>
 
 <pre class='command'>
-lpadmin -p <em>printer</em> -E -v ipp://<em>server</em>/printers/<em>printer</em>
+lpadmin -p <em>printer</em> -E -v ipp://<em>server</em>/printers/<em>printer</em> -m everywhere
 </pre>
 
 <p>The <var>printer</var> name is the name of the printer on the server machine.
index ac33ce4..4bda6ae 100644 (file)
@@ -10,7 +10,7 @@
 <!--
   CUPS command file format specification for CUPS.
 
-  Copyright 2007-2011 by Apple Inc.
+  Copyright 2007-2018 by Apple Inc.
   Copyright 1997-2006 by Easy Software Products.
 
   These coded instructions, statements, and computer programs are the
@@ -43,7 +43,7 @@ files by checking the <code>printer-type</code> attribute for the
 commands separated by spaces, for example:</p>
 
 <pre class='command'>
-*cupsCommand: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"
+*cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"
 </pre>
 
 <p>If no <code>cupsCommands</code> keyword is provided, the command filter
index 06f5769..1c43640 100644 (file)
@@ -1758,7 +1758,20 @@ http://www.vendor.com/help"
 
 <p class='summary'>*cupsJobPassword: "format"</p>
 
-<p>This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.</p>
+<p>This keyword defines the format of the "job-password" IPP attribute, if supported by the printer. The following format characters are supported:</p>
+
+<ul>
+       <li><code>1</code>: US ASCII digits.</li>
+       <li><code>A</code>: US ASCII letters.</li>
+       <li><code>C</code>: US ASCII letters, numbers, and punctuation.</li>
+       <li><code>.</code>: Any US ASCII printable character (0x20 to 0x7e).</li>
+       <li><code>N</code>: Any Unicode digit character.</li>
+       <li><code>U</code>: Any Unicode letter character.</li>
+       <li><code>*</code>: Any Unicode (utf-8) character.</li>
+</ul>
+
+<p>The format characters are repeated to indicate the length of the
+password string.  For example, "1111" indicated a 4-digit US ASCII PIN code.</p>
 
 <p>Example:</p>
 
@@ -2042,7 +2055,7 @@ PPD file extensions was used. Currently it must be the string
 
 <h2 class='title'><a name='MACOSX'>macOS Attributes</a></h2>
 
-<h3><span class='info'>macOS 10.3</span><a name='APDialogExtension'>APDialogExtension</a></h3>
+<h3><span class='info'>Deprecated</span><a name='APDialogExtension'>APDialogExtension</a></h3>
 
 <p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
 
@@ -2054,9 +2067,13 @@ plug-ins.</p>
 
 <blockquote><b>Note:</b>
 
-<p>Starting with macOS 10.5, each plug-in must be compiled "4-way fat"
-(32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled
-in order to be usable with all applications.</p>
+<p>Since 2010, AirPrint has enabled the printing of full quality photos and
+documents from the Mac without requiring driver software. Starting with macOS
+10.12, system level security features prevent print dialog plug-ins from being
+loaded into applications that have enabled the library validation security
+feature. As of macOS 10.14 the <code>APDialogExtension</code> attribute used to
+create macOS print drivers is deprecated. All new printer models should support
+AirPrint moving forward.</p>
 
 </blockquote>
 
index 072356e..65a9db9 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * PostScript filter for CUPS.
  *
- * Copyright 2007-2015 by Apple Inc.
- * Copyright 1993-2007 by Easy Software Products.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1993-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
  * property of Apple Inc. and are protected by Federal copyright
@@ -2235,7 +2235,7 @@ parse_text(const char *start,             /* I - Start of text value */
   bufptr = buffer;
   bufend = buffer + bufsize - 1;
 
-  while (bufptr < bufend)
+  while (*start && bufptr < bufend)
   {
     if (isspace(*start & 255) && !level)
       break;
index 3b75430..53494ad 100644 (file)
@@ -1297,7 +1297,20 @@ http://www.vendor.com/help"
 
 <p class='summary'>*cupsJobPassword: "format"</p>
 
-<p>This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.</p>
+<p>This keyword defines the format of the "job-password" IPP attribute, if supported by the printer. The following format characters are supported:</p>
+
+<ul>
+       <li><code>1</code>: US ASCII digits.</li>
+       <li><code>A</code>: US ASCII letters.</li>
+       <li><code>C</code>: US ASCII letters, numbers, and punctuation.</li>
+       <li><code>.</code>: Any US ASCII printable character (0x20 to 0x7e).</li>
+       <li><code>N</code>: Any Unicode digit character.</li>
+       <li><code>U</code>: Any Unicode letter character.</li>
+       <li><code>*</code>: Any Unicode (utf-8) character.</li>
+</ul>
+
+<p>The format characters are repeated to indicate the length of the
+password string.  For example, "1111" indicated a 4-digit US ASCII PIN code.</p>
 
 <p>Example:</p>
 
@@ -1581,7 +1594,7 @@ PPD file extensions was used. Currently it must be the string
 
 <h2 class='title'><a name='MACOSX'>macOS Attributes</a></h2>
 
-<h3><span class='info'>macOS 10.3</span><a name='APDialogExtension'>APDialogExtension</a></h3>
+<h3><span class='info'>Deprecated</span><a name='APDialogExtension'>APDialogExtension</a></h3>
 
 <p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
 
@@ -1593,9 +1606,13 @@ plug-ins.</p>
 
 <blockquote><b>Note:</b>
 
-<p>Starting with macOS 10.5, each plug-in must be compiled "4-way fat"
-(32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled
-in order to be usable with all applications.</p>
+<p>Since 2010, AirPrint has enabled the printing of full quality photos and
+documents from the Mac without requiring driver software. Starting with macOS
+10.12, system level security features prevent print dialog plug-ins from being
+loaded into applications that have enabled the library validation security
+feature. As of macOS 10.14 the <code>APDialogExtension</code> attribute used to
+create macOS print drivers is deprecated. All new printer models should support
+AirPrint moving forward.</p>
 
 </blockquote>
 
index f14d536..9bfe18c 100644 (file)
@@ -26,9 +26,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: CUPS 2.2.7\n"
+"Project-Id-Version: CUPS 2.2.8\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -968,11 +968,11 @@ msgstr ""
 msgid "    Warning: obsolete DSC version %.1f in file."
 msgstr ""
 
-#: test/ippfind.c:2794
+#: test/ippfind.c:2845
 msgid "  ! expression            Unary NOT of expression."
 msgstr ""
 
-#: test/ippfind.c:2793
+#: test/ippfind.c:2844
 msgid "  ( expressions )         Group expressions."
 msgstr ""
 
@@ -1004,17 +1004,17 @@ msgstr ""
 msgid "  --crlf                  End lines with CR + LF (Windows)."
 msgstr ""
 
-#: test/ippfind.c:2775
+#: test/ippfind.c:2826
 msgid "  --domain regex          Match domain to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2776
+#: test/ippfind.c:2827
 msgid ""
 "  --exec utility [argument ...] ;\n"
 "                          Execute program if true."
 msgstr ""
 
-#: test/ippfind.c:2796
+#: test/ippfind.c:2847
 msgid "  --false                 Always false."
 msgstr ""
 
@@ -1022,11 +1022,11 @@ msgstr ""
 msgid "  --help                  Show help."
 msgstr ""
 
-#: test/ippfind.c:2758
+#: test/ippfind.c:2809
 msgid "  --help                  Show this help."
 msgstr ""
 
-#: test/ippfind.c:2778
+#: test/ippfind.c:2829
 msgid "  --host regex            Match hostname to regular expression."
 msgstr ""
 
@@ -1038,43 +1038,43 @@ msgstr ""
 msgid "  --list-filters          List filters that will be used."
 msgstr ""
 
-#: test/ippfind.c:2780
+#: test/ippfind.c:2831
 msgid "  --local                 True if service is local."
 msgstr ""
 
-#: test/ippfind.c:2779
+#: test/ippfind.c:2830
 msgid "  --ls                    List attributes."
 msgstr ""
 
-#: test/ippfind.c:2781
+#: test/ippfind.c:2832
 msgid "  --name regex            Match service name to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2795
+#: test/ippfind.c:2846
 msgid "  --not expression        Unary NOT of expression."
 msgstr ""
 
-#: test/ippfind.c:2782
+#: test/ippfind.c:2833
 msgid "  --path regex            Match resource path to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2783
+#: test/ippfind.c:2834
 msgid "  --port number[-number]  Match port to number or range."
 msgstr ""
 
-#: test/ippfind.c:2784
+#: test/ippfind.c:2835
 msgid "  --print                 Print URI if true."
 msgstr ""
 
-#: test/ippfind.c:2785
+#: test/ippfind.c:2836
 msgid "  --print-name            Print service name if true."
 msgstr ""
 
-#: test/ippfind.c:2786
+#: test/ippfind.c:2837
 msgid "  --quiet                 Quietly report match via exit code."
 msgstr ""
 
-#: test/ippfind.c:2787
+#: test/ippfind.c:2838
 msgid "  --remote                True if service is remote."
 msgstr ""
 
@@ -1084,23 +1084,23 @@ msgid ""
 "                          Stop tests after a failed INCLUDE."
 msgstr ""
 
-#: test/ippfind.c:2797
+#: test/ippfind.c:2848
 msgid "  --true                  Always true."
 msgstr ""
 
-#: test/ippfind.c:2788
+#: test/ippfind.c:2839
 msgid "  --txt key               True if the TXT record contains the key."
 msgstr ""
 
-#: test/ippfind.c:2789
+#: test/ippfind.c:2840
 msgid "  --txt-* regex           Match TXT record key to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2790
+#: test/ippfind.c:2841
 msgid "  --uri regex             Match URI to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2759
+#: test/ippfind.c:2810
 msgid "  --version               Show program version."
 msgstr ""
 
@@ -1108,11 +1108,11 @@ msgstr ""
 msgid "  --version               Show version."
 msgstr ""
 
-#: test/ippfind.c:2752 test/ipptool.c:5068
+#: test/ippfind.c:2803 test/ipptool.c:5068
 msgid "  -4                      Connect using IPv4."
 msgstr ""
 
-#: test/ippfind.c:2753 test/ipptool.c:5069
+#: test/ippfind.c:2804 test/ipptool.c:5069
 msgid "  -6                      Connect using IPv6."
 msgstr ""
 
@@ -1168,7 +1168,7 @@ msgstr ""
 msgid "  -P filename.ppd         Set PPD file."
 msgstr ""
 
-#: test/ippfind.c:2762
+#: test/ippfind.c:2813
 msgid "  -P number[-number]      Match port to number or range."
 msgstr ""
 
@@ -1180,7 +1180,7 @@ msgstr ""
 msgid "  -S                      Test with encryption using HTTPS."
 msgstr ""
 
-#: test/ippfind.c:2754
+#: test/ippfind.c:2805
 msgid "  -T seconds              Set the browse timeout in seconds."
 msgstr ""
 
@@ -1192,7 +1192,7 @@ msgstr ""
 msgid "  -U username             Specify username."
 msgstr ""
 
-#: test/ippfind.c:2756 test/ipptool.c:5078
+#: test/ippfind.c:2807 test/ipptool.c:5078
 msgid "  -V version              Set default IPP version."
 msgstr ""
 
@@ -1236,7 +1236,7 @@ msgstr ""
 msgid "  -d printer              Use the named printer."
 msgstr ""
 
-#: test/ippfind.c:2763
+#: test/ippfind.c:2814
 msgid "  -d regex                Match domain to regular expression."
 msgstr ""
 
@@ -1260,7 +1260,7 @@ msgstr ""
 msgid "  -h                      Validate HTTP response headers."
 msgstr ""
 
-#: test/ippfind.c:2764
+#: test/ippfind.c:2815
 msgid "  -h regex                Match hostname to regular expression."
 msgstr ""
 
@@ -1280,7 +1280,7 @@ msgstr ""
 msgid "  -j job-id[,N]           Filter file N from the specified job (default is file 1)."
 msgstr ""
 
-#: test/ippfind.c:2765
+#: test/ippfind.c:2816
 msgid "  -l                      List attributes."
 msgstr ""
 
@@ -1312,7 +1312,7 @@ msgstr ""
 msgid "  -n count                Repeat the last file the given number of times."
 msgstr ""
 
-#: test/ippfind.c:2766
+#: test/ippfind.c:2817
 msgid "  -n regex                Match service name to regular expression."
 msgstr ""
 
@@ -1328,7 +1328,7 @@ msgstr ""
 msgid "  -o name=value           Set option(s)."
 msgstr ""
 
-#: test/ippfind.c:2767
+#: test/ippfind.c:2818
 msgid "  -p                      Print URI if true."
 msgstr ""
 
@@ -1336,7 +1336,7 @@ msgstr ""
 msgid "  -p filename.ppd         Set PPD file."
 msgstr ""
 
-#: test/ippfind.c:2768
+#: test/ippfind.c:2819
 msgid "  -q                      Quietly report match via exit code."
 msgstr ""
 
@@ -1344,7 +1344,7 @@ msgstr ""
 msgid "  -q                      Run silently."
 msgstr ""
 
-#: test/ippfind.c:2769
+#: test/ippfind.c:2820
 msgid "  -r                      True if service is remote."
 msgstr ""
 
@@ -1352,7 +1352,7 @@ msgstr ""
 msgid "  -r                      Use 'relaxed' open mode."
 msgstr ""
 
-#: test/ippfind.c:2770
+#: test/ippfind.c:2821
 msgid "  -s                      Print service name if true."
 msgstr ""
 
@@ -1372,7 +1372,7 @@ msgstr ""
 msgid "  -t                      Test the configuration file."
 msgstr ""
 
-#: test/ippfind.c:2771
+#: test/ippfind.c:2822
 msgid "  -t key                  True if the TXT record contains the key."
 msgstr ""
 
@@ -1384,7 +1384,7 @@ msgstr ""
 msgid "  -u                      Remove the PPD file when finished."
 msgstr ""
 
-#: test/ippfind.c:2772
+#: test/ippfind.c:2823
 msgid "  -u regex                Match URI to regular expression."
 msgstr ""
 
@@ -1397,7 +1397,7 @@ msgstr ""
 msgid "  -vv                     Be very verbose."
 msgstr ""
 
-#: test/ippfind.c:2773
+#: test/ippfind.c:2824
 msgid ""
 "  -x utility [argument ...] ;\n"
 "                          Execute program if true."
@@ -1407,89 +1407,89 @@ msgstr ""
 msgid "  -z                      Compress PPD files using GNU zip."
 msgstr ""
 
-#: test/ippfind.c:2816
+#: test/ippfind.c:2867
 msgid "  IPPFIND_SERVICE_DOMAIN  Domain name"
 msgstr ""
 
-#: test/ippfind.c:2817
+#: test/ippfind.c:2868
 msgid ""
 "  IPPFIND_SERVICE_HOSTNAME\n"
 "                          Fully-qualified domain name"
 msgstr ""
 
-#: test/ippfind.c:2819
+#: test/ippfind.c:2870
 msgid "  IPPFIND_SERVICE_NAME    Service instance name"
 msgstr ""
 
-#: test/ippfind.c:2820
+#: test/ippfind.c:2871
 msgid "  IPPFIND_SERVICE_PORT    Port number"
 msgstr ""
 
-#: test/ippfind.c:2821
+#: test/ippfind.c:2872
 msgid "  IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
 msgstr ""
 
-#: test/ippfind.c:2822
+#: test/ippfind.c:2873
 msgid "  IPPFIND_SERVICE_SCHEME  URI scheme"
 msgstr ""
 
-#: test/ippfind.c:2823
+#: test/ippfind.c:2874
 msgid "  IPPFIND_SERVICE_URI     URI"
 msgstr ""
 
-#: test/ippfind.c:2824
+#: test/ippfind.c:2875
 msgid "  IPPFIND_TXT_*           Value of TXT record key"
 msgstr ""
 
-#: test/ippfind.c:2799
+#: test/ippfind.c:2850
 msgid ""
 "  expression --and expression\n"
 "                          Logical AND."
 msgstr ""
 
-#: test/ippfind.c:2801
+#: test/ippfind.c:2852
 msgid ""
 "  expression --or expression\n"
 "                          Logical OR."
 msgstr ""
 
-#: test/ippfind.c:2798
+#: test/ippfind.c:2849
 msgid "  expression expression   Logical AND."
 msgstr ""
 
-#: test/ippfind.c:2806
+#: test/ippfind.c:2857
 msgid "  {service_domain}        Domain name"
 msgstr ""
 
-#: test/ippfind.c:2807
+#: test/ippfind.c:2858
 msgid "  {service_hostname}      Fully-qualified domain name"
 msgstr ""
 
-#: test/ippfind.c:2808
+#: test/ippfind.c:2859
 msgid "  {service_name}          Service instance name"
 msgstr ""
 
-#: test/ippfind.c:2809
+#: test/ippfind.c:2860
 msgid "  {service_port}          Port number"
 msgstr ""
 
-#: test/ippfind.c:2810
+#: test/ippfind.c:2861
 msgid "  {service_regtype}       DNS-SD registration type"
 msgstr ""
 
-#: test/ippfind.c:2811
+#: test/ippfind.c:2862
 msgid "  {service_scheme}        URI scheme"
 msgstr ""
 
-#: test/ippfind.c:2812
+#: test/ippfind.c:2863
 msgid "  {service_uri}           URI"
 msgstr ""
 
-#: test/ippfind.c:2813
+#: test/ippfind.c:2864
 msgid "  {txt_*}                 Value of TXT record key"
 msgstr ""
 
-#: test/ippfind.c:2805
+#: test/ippfind.c:2856
 msgid "  {}                      URI"
 msgstr ""
 
@@ -1555,87 +1555,87 @@ msgstr ""
 msgid " PASS"
 msgstr ""
 
-#: cups/ipp.c:5227
+#: cups/ipp.c:5226
 #, c-format
 msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
 msgstr ""
 
-#: cups/ipp.c:5238
+#: cups/ipp.c:5233
 #, c-format
 msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
 msgstr ""
 
-#: cups/ipp.c:4858
+#: cups/ipp.c:4850
 #, c-format
 msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
 msgstr ""
 
-#: cups/ipp.c:4850
+#: cups/ipp.c:4842
 #, c-format
 msgid "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
 msgstr ""
 
-#: cups/ipp.c:4876
+#: cups/ipp.c:4868
 #, c-format
 msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
 msgstr ""
 
-#: cups/ipp.c:5290
+#: cups/ipp.c:5285
 #, c-format
 msgid "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
 msgstr ""
 
-#: cups/ipp.c:5299
+#: cups/ipp.c:5294
 #, c-format
 msgid "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
 msgstr ""
 
-#: cups/ipp.c:4976
+#: cups/ipp.c:4968
 #, c-format
 msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4984
+#: cups/ipp.c:4976
 #, c-format
 msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4968
+#: cups/ipp.c:4960
 #, c-format
 msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4928
+#: cups/ipp.c:4920
 #, c-format
 msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4960
+#: cups/ipp.c:4952
 #, c-format
 msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4936
+#: cups/ipp.c:4928
 #, c-format
 msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4944
+#: cups/ipp.c:4936
 #, c-format
 msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4920
+#: cups/ipp.c:4912
 #, c-format
 msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4952
+#: cups/ipp.c:4944
 #, c-format
 msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
 msgstr ""
 
-#: cups/ipp.c:4890
+#: cups/ipp.c:4882
 #, c-format
 msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
 msgstr ""
@@ -1650,81 +1650,99 @@ msgstr ""
 msgid "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section 5.1.4)."
 msgstr ""
 
-#: cups/ipp.c:5399
+#: cups/ipp.c:5394
 #, c-format
 msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)."
 msgstr ""
 
-#: cups/ipp.c:5409
+#: cups/ipp.c:5404
 #, c-format
 msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)."
 msgstr ""
 
-#: cups/ipp.c:5167
+#: cups/ipp.c:5169
 #, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
 msgstr ""
 
+#: cups/ipp.c:5164
+#, c-format
+msgid "\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."
+msgstr ""
+
 #: cups/ipp.c:5176
 #, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
-#: cups/ipp.c:5345
+#: cups/ipp.c:5340
 #, c-format
 msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)."
 msgstr ""
 
-#: cups/ipp.c:5355
+#: cups/ipp.c:5350
 #, c-format
 msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)."
 msgstr ""
 
-#: cups/ipp.c:4904
+#: cups/ipp.c:4896
 #, c-format
 msgid "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
 msgstr ""
 
-#: cups/ipp.c:5047
+#: cups/ipp.c:5039
 #, c-format
 msgid "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14)."
 msgstr ""
 
-#: cups/ipp.c:5028
+#: cups/ipp.c:5020
 #, c-format
 msgid "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16)."
 msgstr ""
 
-#: cups/ipp.c:4997
+#: cups/ipp.c:4989
 #, 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:5012
+#: cups/ipp.c:5004
 #, 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:5109
+#: cups/ipp.c:5107
 #, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
 msgstr ""
 
-#: cups/ipp.c:5118
+#: cups/ipp.c:5102
+#, c-format
+msgid "\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."
+msgstr ""
+
+#: cups/ipp.c:5114
 #, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
-#: cups/ipp.c:5261
+#: cups/ipp.c:5256
 #, c-format
 msgid "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
 msgstr ""
 
-#: cups/ipp.c:5270
+#: cups/ipp.c:5265
 #, c-format
 msgid "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+#: scheduler/ipp.c:377
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+#: scheduler/ipp.c:383 scheduler/ipp.c:398
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #: berkeley/lpq.c:542
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -1770,7 +1788,7 @@ msgstr ""
 msgid "%s accepting requests since %s"
 msgstr ""
 
-#: scheduler/ipp.c:10336
+#: scheduler/ipp.c:10357
 #, c-format
 msgid "%s cannot be changed."
 msgstr ""
@@ -1806,7 +1824,7 @@ msgstr ""
 msgid "%s not accepting requests since %s -"
 msgstr ""
 
-#: scheduler/ipp.c:640
+#: scheduler/ipp.c:620
 #, c-format
 msgid "%s not supported."
 msgstr ""
@@ -1845,7 +1863,7 @@ msgstr ""
 msgid "%s: Bad printer URI \"%s\"."
 msgstr ""
 
-#: test/ippfind.c:775 test/ipptool.c:372
+#: test/ippfind.c:801 test/ipptool.c:372
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr ""
@@ -2075,12 +2093,12 @@ msgstr ""
 msgid "%s: Missing filename for \"-P\"."
 msgstr ""
 
-#: test/ippfind.c:747 test/ipptool.c:340
+#: test/ippfind.c:773 test/ipptool.c:340
 #, c-format
 msgid "%s: Missing timeout for \"-T\"."
 msgstr ""
 
-#: test/ippfind.c:760 test/ipptool.c:354
+#: test/ippfind.c:786 test/ipptool.c:354
 #, c-format
 msgid "%s: Missing version for \"-V\"."
 msgstr ""
@@ -2179,12 +2197,12 @@ msgstr ""
 msgid "%s: Unknown option \"%c\"."
 msgstr ""
 
-#: test/ippfind.c:646
+#: test/ippfind.c:660
 #, c-format
 msgid "%s: Unknown option \"%s\"."
 msgstr ""
 
-#: test/ippfind.c:926
+#: test/ippfind.c:952
 #, c-format
 msgid "%s: Unknown option \"-%c\"."
 msgstr ""
@@ -3067,12 +3085,12 @@ msgstr ""
 msgid "A Samba username is required to export printer drivers"
 msgstr ""
 
-#: scheduler/ipp.c:2327
+#: scheduler/ipp.c:2298
 #, c-format
 msgid "A class named \"%s\" already exists."
 msgstr ""
 
-#: scheduler/ipp.c:938
+#: scheduler/ipp.c:902
 #, c-format
 msgid "A printer named \"%s\" already exists."
 msgstr ""
@@ -3290,22 +3308,22 @@ msgstr ""
 msgid "Archival Photo Paper"
 msgstr ""
 
-#: scheduler/ipp.c:1033
+#: scheduler/ipp.c:997
 #, c-format
 msgid "Attempt to set %s printer-state to bad value %d."
 msgstr ""
 
-#: scheduler/ipp.c:5464 scheduler/ipp.c:5490
+#: scheduler/ipp.c:5463 scheduler/ipp.c:5489
 #, c-format
 msgid "Attribute \"%s\" is in the wrong group."
 msgstr ""
 
-#: scheduler/ipp.c:5466 scheduler/ipp.c:5492
+#: scheduler/ipp.c:5465 scheduler/ipp.c:5491
 #, c-format
 msgid "Attribute \"%s\" is the wrong value type."
 msgstr ""
 
-#: scheduler/ipp.c:258
+#: scheduler/ipp.c:239
 #, c-format
 msgid "Attribute groups are out of order (%x < %x)."
 msgstr ""
@@ -3366,7 +3384,12 @@ msgstr ""
 msgid "Back Print Film"
 msgstr ""
 
-#: scheduler/ipp.c:11283
+#: scheduler/ipp.c:10366
+#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#: scheduler/ipp.c:11314
 #, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr ""
@@ -3400,7 +3423,7 @@ msgstr ""
 msgid "Bad PPD cache file."
 msgstr ""
 
-#: scheduler/ipp.c:2702
+#: scheduler/ipp.c:2673
 msgid "Bad PPD file."
 msgstr ""
 
@@ -3420,7 +3443,7 @@ msgstr ""
 msgid "Bad arguments to function"
 msgstr ""
 
-#: scheduler/ipp.c:1418
+#: scheduler/ipp.c:1382
 #, c-format
 msgid "Bad copies value %d."
 msgstr ""
@@ -3429,22 +3452,22 @@ msgstr ""
 msgid "Bad custom parameter"
 msgstr ""
 
-#: cups/http-support.c:1604 scheduler/ipp.c:2407
+#: cups/http-support.c:1604 scheduler/ipp.c:2378
 #, c-format
 msgid "Bad device-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2452
+#: scheduler/ipp.c:2423
 #, c-format
 msgid "Bad device-uri scheme \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8491 scheduler/ipp.c:8509 scheduler/ipp.c:9737
+#: scheduler/ipp.c:8512 scheduler/ipp.c:8530 scheduler/ipp.c:9758
 #, c-format
 msgid "Bad document-format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9755
+#: scheduler/ipp.c:9776
 #, c-format
 msgid "Bad document-format-default \"%s\"."
 msgstr ""
@@ -3457,51 +3480,56 @@ msgstr ""
 msgid "Bad hostname/address in URI"
 msgstr ""
 
-#: scheduler/ipp.c:1593
+#: scheduler/ipp.c:1564
 #, c-format
 msgid "Bad job-name value: %s"
 msgstr ""
 
-#: scheduler/ipp.c:1586
+#: scheduler/ipp.c:1550
 msgid "Bad job-name value: Wrong type or count."
 msgstr ""
 
-#: scheduler/ipp.c:10351
+#: scheduler/ipp.c:10404
 msgid "Bad job-priority value."
 msgstr ""
 
-#: scheduler/ipp.c:1448
+#: scheduler/ipp.c:1412
 #, c-format
 msgid "Bad job-sheets value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1432
+#: scheduler/ipp.c:1396
 msgid "Bad job-sheets value type."
 msgstr ""
 
-#: scheduler/ipp.c:10381
+#: scheduler/ipp.c:10434
 msgid "Bad job-state value."
 msgstr ""
 
-#: scheduler/ipp.c:3043 scheduler/ipp.c:3505 scheduler/ipp.c:6276
-#: scheduler/ipp.c:6423 scheduler/ipp.c:7920 scheduler/ipp.c:8189
-#: scheduler/ipp.c:9055 scheduler/ipp.c:9279 scheduler/ipp.c:9631
-#: scheduler/ipp.c:10244
+#: scheduler/ipp.c:3014 scheduler/ipp.c:3476 scheduler/ipp.c:6294
+#: scheduler/ipp.c:6441 scheduler/ipp.c:7938 scheduler/ipp.c:8210
+#: scheduler/ipp.c:9076 scheduler/ipp.c:9300 scheduler/ipp.c:9652
+#: scheduler/ipp.c:10265
 #, c-format
 msgid "Bad job-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2093 scheduler/ipp.c:5815
+#: scheduler/ipp.c:2064 scheduler/ipp.c:5814
 #, c-format
 msgid "Bad notify-pull-method \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2057 scheduler/ipp.c:5779
+#: scheduler/ipp.c:2028 scheduler/ipp.c:5778
 #, c-format
 msgid "Bad notify-recipient-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1464
+#: scheduler/ipp.c:5889
+#, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#: scheduler/ipp.c:1428
 #, c-format
 msgid "Bad number-up value %d."
 msgstr ""
@@ -3511,7 +3539,7 @@ msgstr ""
 msgid "Bad option + choice on line %d."
 msgstr ""
 
-#: scheduler/ipp.c:1481
+#: scheduler/ipp.c:1445
 #, c-format
 msgid "Bad page-ranges values %d-%d."
 msgstr ""
@@ -3520,12 +3548,12 @@ msgstr ""
 msgid "Bad port number in URI"
 msgstr ""
 
-#: scheduler/ipp.c:2498
+#: scheduler/ipp.c:2469
 #, c-format
 msgid "Bad port-monitor \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2579
+#: scheduler/ipp.c:2550
 #, c-format
 msgid "Bad printer-state value %d."
 msgstr ""
@@ -3534,21 +3562,16 @@ msgstr ""
 msgid "Bad printer-uri."
 msgstr ""
 
-#: scheduler/ipp.c:226
+#: scheduler/ipp.c:213
 #, c-format
 msgid "Bad request ID %d."
 msgstr ""
 
-#: scheduler/ipp.c:211
+#: scheduler/ipp.c:203
 #, c-format
 msgid "Bad request version number %d.%d."
 msgstr ""
 
-#: scheduler/ipp.c:1604
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 #: cups/http-support.c:1467
 msgid "Bad resource in URI"
 msgstr ""
@@ -3658,11 +3681,11 @@ msgstr ""
 msgid "Canceling print job."
 msgstr ""
 
-#: scheduler/ipp.c:1009 scheduler/ipp.c:2554
+#: scheduler/ipp.c:973 scheduler/ipp.c:2525
 msgid "Cannot change printer-is-shared for remote queues."
 msgstr ""
 
-#: scheduler/ipp.c:2541
+#: scheduler/ipp.c:2512
 msgid "Cannot share a remote Kerberized printer."
 msgstr ""
 
@@ -3691,7 +3714,7 @@ msgstr ""
 msgid "Change Settings"
 msgstr ""
 
-#: scheduler/ipp.c:2105 scheduler/ipp.c:5827
+#: scheduler/ipp.c:2076 scheduler/ipp.c:5826
 #, c-format
 msgid "Character set \"%s\" not supported."
 msgstr ""
@@ -3704,7 +3727,7 @@ msgstr ""
 msgid "Clean Print Heads"
 msgstr ""
 
-#: scheduler/ipp.c:3957
+#: scheduler/ipp.c:3928
 msgid "Close-Job doesn't support the job-uri attribute."
 msgstr ""
 
@@ -3856,7 +3879,7 @@ msgstr ""
 msgid "DeskJet Series"
 msgstr ""
 
-#: scheduler/ipp.c:1347
+#: scheduler/ipp.c:1311
 #, c-format
 msgid "Destination \"%s\" is not accepting jobs."
 msgstr ""
@@ -3909,7 +3932,7 @@ msgstr ""
 msgid "Disc"
 msgstr ""
 
-#: scheduler/ipp.c:6325
+#: scheduler/ipp.c:6343
 #, c-format
 msgid "Document #%d does not exist in job #%d."
 msgstr ""
@@ -3998,7 +4021,7 @@ msgstr ""
 msgid "English"
 msgstr ""
 
-#: scheduler/client.c:2226
+#: scheduler/client.c:2238
 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 ""
 
@@ -4218,7 +4241,7 @@ msgstr ""
 msgid "Envelope You4 Long Edge"
 msgstr ""
 
-#: test/ippfind.c:2815
+#: test/ippfind.c:2866
 msgid "Environment Variables:"
 msgstr ""
 
@@ -4311,7 +4334,7 @@ msgstr ""
 msgid "Export Printers to Samba"
 msgstr ""
 
-#: test/ippfind.c:2761
+#: test/ippfind.c:2812
 msgid "Expressions:"
 msgstr ""
 
@@ -4374,7 +4397,7 @@ msgstr ""
 msgid "File Folder"
 msgstr ""
 
-#: scheduler/ipp.c:2428
+#: scheduler/ipp.c:2399
 #, c-format
 msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"."
 msgstr ""
@@ -4489,10 +4512,10 @@ msgstr ""
 msgid "Glossy Photo Paper"
 msgstr ""
 
-#: scheduler/ipp.c:3021 scheduler/ipp.c:3431 scheduler/ipp.c:3969
-#: scheduler/ipp.c:6254 scheduler/ipp.c:6401 scheduler/ipp.c:7897
-#: scheduler/ipp.c:9033 scheduler/ipp.c:9257 scheduler/ipp.c:9609
-#: scheduler/ipp.c:10222
+#: scheduler/ipp.c:2992 scheduler/ipp.c:3402 scheduler/ipp.c:3940
+#: scheduler/ipp.c:6272 scheduler/ipp.c:6419 scheduler/ipp.c:7915
+#: scheduler/ipp.c:9054 scheduler/ipp.c:9278 scheduler/ipp.c:9630
+#: scheduler/ipp.c:10243
 msgid "Got a printer-uri attribute but no job-id."
 msgstr ""
 
@@ -4564,35 +4587,35 @@ msgstr ""
 msgid "High Gloss Photo Paper"
 msgstr ""
 
-#: cups/ipp.c:3181 cups/ipp.c:3208 cups/ipp.c:3231
+#: cups/ipp.c:3188 cups/ipp.c:3215 cups/ipp.c:3238
 msgid "IPP 1setOf attribute with incompatible value tags."
 msgstr ""
 
-#: cups/ipp.c:3144
+#: cups/ipp.c:3151
 msgid "IPP attribute has no name."
 msgstr ""
 
-#: cups/ipp.c:7017
+#: cups/ipp.c:7012
 msgid "IPP attribute is not a member of the message."
 msgstr ""
 
-#: cups/ipp.c:3590
+#: cups/ipp.c:3597
 msgid "IPP begCollection value not 0 bytes."
 msgstr ""
 
-#: cups/ipp.c:3372
+#: cups/ipp.c:3379
 msgid "IPP boolean value not 1 byte."
 msgstr ""
 
-#: cups/ipp.c:3433
+#: cups/ipp.c:3440
 msgid "IPP date value not 11 bytes."
 msgstr ""
 
-#: cups/ipp.c:3611
+#: cups/ipp.c:3618
 msgid "IPP endCollection value not 0 bytes."
 msgstr ""
 
-#: cups/ipp.c:3347
+#: cups/ipp.c:3354
 msgid "IPP enum value not 4 bytes."
 msgstr ""
 
@@ -4600,59 +4623,59 @@ msgstr ""
 msgid "IPP extension tag larger than 0x7FFFFFFF."
 msgstr ""
 
-#: cups/ipp.c:3344
+#: cups/ipp.c:3351
 msgid "IPP integer value not 4 bytes."
 msgstr ""
 
-#: cups/ipp.c:3543
+#: cups/ipp.c:3550
 msgid "IPP language length overflows value."
 msgstr ""
 
-#: cups/ipp.c:3552
+#: cups/ipp.c:3559
 msgid "IPP language length too large."
 msgstr ""
 
-#: cups/ipp.c:3258
+#: cups/ipp.c:3265
 msgid "IPP member name is not empty."
 msgstr ""
 
-#: cups/ipp.c:3637
+#: cups/ipp.c:3644
 msgid "IPP memberName value is empty."
 msgstr ""
 
-#: cups/ipp.c:3629
+#: cups/ipp.c:3636
 msgid "IPP memberName with no attribute."
 msgstr ""
 
-#: cups/ipp.c:3127
+#: cups/ipp.c:3134
 msgid "IPP name larger than 32767 bytes."
 msgstr ""
 
-#: cups/ipp.c:3510
+#: cups/ipp.c:3517
 msgid "IPP nameWithLanguage value less than minimum 4 bytes."
 msgstr ""
 
-#: cups/ipp.c:3667
+#: cups/ipp.c:3674
 msgid "IPP octetString length too large."
 msgstr ""
 
-#: cups/ipp.c:3478
+#: cups/ipp.c:3485
 msgid "IPP rangeOfInteger value not 8 bytes."
 msgstr ""
 
-#: cups/ipp.c:3451
+#: cups/ipp.c:3458
 msgid "IPP resolution value not 9 bytes."
 msgstr ""
 
-#: cups/ipp.c:3570
+#: cups/ipp.c:3577
 msgid "IPP string length overflows value."
 msgstr ""
 
-#: cups/ipp.c:3506
+#: cups/ipp.c:3513
 msgid "IPP textWithLanguage value less than minimum 4 bytes."
 msgstr ""
 
-#: cups/ipp.c:3330
+#: cups/ipp.c:3337
 msgid "IPP value larger than 32767 bytes."
 msgstr ""
 
@@ -4736,6 +4759,10 @@ msgstr ""
 msgid "Internet Printing Protocol"
 msgstr ""
 
+#: cups/ipp.c:3094
+msgid "Invalid group tag."
+msgstr ""
+
 #: cups/pwg-media.c:291 cups/pwg-media.c:310
 msgid "Invalid media name arguments."
 msgstr ""
@@ -4744,7 +4771,7 @@ msgstr ""
 msgid "Invalid media size."
 msgstr ""
 
-#: scheduler/ipp.c:2748 scheduler/ipp.c:7068
+#: scheduler/ipp.c:2719 scheduler/ipp.c:7086
 msgid "Invalid ppd-name value."
 msgstr ""
 
@@ -4813,52 +4840,52 @@ msgstr ""
 msgid "JIS B9"
 msgstr ""
 
-#: scheduler/ipp.c:9329
+#: scheduler/ipp.c:9350
 #, c-format
 msgid "Job #%d cannot be restarted - no files."
 msgstr ""
 
-#: scheduler/ipp.c:3061 scheduler/ipp.c:3295 scheduler/ipp.c:3354
-#: scheduler/ipp.c:3533 scheduler/ipp.c:3979 scheduler/ipp.c:5913
-#: scheduler/ipp.c:6294 scheduler/ipp.c:6441 scheduler/ipp.c:6778
-#: scheduler/ipp.c:7738 scheduler/ipp.c:7760 scheduler/ipp.c:7938
-#: scheduler/ipp.c:8163 scheduler/ipp.c:8206 scheduler/ipp.c:9073
-#: scheduler/ipp.c:9297 scheduler/ipp.c:9649 scheduler/ipp.c:10262
+#: scheduler/ipp.c:3032 scheduler/ipp.c:3266 scheduler/ipp.c:3325
+#: scheduler/ipp.c:3504 scheduler/ipp.c:3950 scheduler/ipp.c:5931
+#: scheduler/ipp.c:6312 scheduler/ipp.c:6459 scheduler/ipp.c:6796
+#: scheduler/ipp.c:7756 scheduler/ipp.c:7778 scheduler/ipp.c:7956
+#: scheduler/ipp.c:8184 scheduler/ipp.c:8227 scheduler/ipp.c:9094
+#: scheduler/ipp.c:9318 scheduler/ipp.c:9670 scheduler/ipp.c:10283
 #, c-format
 msgid "Job #%d does not exist."
 msgstr ""
 
-#: scheduler/ipp.c:3565
+#: scheduler/ipp.c:3536
 #, c-format
 msgid "Job #%d is already aborted - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:3559
+#: scheduler/ipp.c:3530
 #, c-format
 msgid "Job #%d is already canceled - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:3571
+#: scheduler/ipp.c:3542
 #, c-format
 msgid "Job #%d is already completed - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:7964 scheduler/ipp.c:8248 scheduler/ipp.c:10277
+#: scheduler/ipp.c:7982 scheduler/ipp.c:8269 scheduler/ipp.c:10298
 #, c-format
 msgid "Job #%d is finished and cannot be altered."
 msgstr ""
 
-#: scheduler/ipp.c:9311
+#: scheduler/ipp.c:9332
 #, c-format
 msgid "Job #%d is not complete."
 msgstr ""
 
-#: scheduler/ipp.c:3076
+#: scheduler/ipp.c:3047
 #, c-format
 msgid "Job #%d is not held for authentication."
 msgstr ""
 
-#: scheduler/ipp.c:9087
+#: scheduler/ipp.c:9108
 #, c-format
 msgid "Job #%d is not held."
 msgstr ""
@@ -4879,7 +4906,7 @@ msgstr ""
 msgid "Job Stopped"
 msgstr ""
 
-#: scheduler/ipp.c:10359
+#: scheduler/ipp.c:10412
 msgid "Job is completed and cannot be changed."
 msgstr ""
 
@@ -4887,11 +4914,11 @@ msgstr ""
 msgid "Job operation failed"
 msgstr ""
 
-#: scheduler/ipp.c:10395 scheduler/ipp.c:10412 scheduler/ipp.c:10423
+#: scheduler/ipp.c:10448 scheduler/ipp.c:10465 scheduler/ipp.c:10476
 msgid "Job state cannot be changed."
 msgstr ""
 
-#: scheduler/ipp.c:9177
+#: scheduler/ipp.c:9198
 msgid "Job subscriptions cannot be renewed."
 msgstr ""
 
@@ -4927,7 +4954,7 @@ msgstr ""
 msgid "Laminating Foil"
 msgstr ""
 
-#: scheduler/ipp.c:2114 scheduler/ipp.c:5836
+#: scheduler/ipp.c:2085 scheduler/ipp.c:5835
 #, c-format
 msgid "Language \"%s\" not supported."
 msgstr ""
@@ -5000,7 +5027,7 @@ msgstr ""
 msgid "Load paper."
 msgstr ""
 
-#: scheduler/ipp.c:5545
+#: scheduler/ipp.c:5544
 msgid "Local printer created."
 msgstr ""
 
@@ -5160,7 +5187,7 @@ msgstr ""
 msgid "Missing asterisk in column 1"
 msgstr ""
 
-#: scheduler/ipp.c:6317
+#: scheduler/ipp.c:6335
 msgid "Missing document-number attribute."
 msgstr ""
 
@@ -5175,7 +5202,7 @@ msgstr ""
 msgid "Missing form variable"
 msgstr ""
 
-#: scheduler/ipp.c:9703
+#: scheduler/ipp.c:9724
 msgid "Missing last-document attribute in request."
 msgstr ""
 
@@ -5187,7 +5214,7 @@ msgstr ""
 msgid "Missing media-size in media-col."
 msgstr ""
 
-#: scheduler/ipp.c:6918
+#: scheduler/ipp.c:6936
 msgid "Missing notify-subscription-ids attribute."
 msgstr ""
 
@@ -5195,16 +5222,16 @@ msgstr ""
 msgid "Missing option keyword"
 msgstr ""
 
-#: scheduler/ipp.c:3202 scheduler/ipp.c:3227
+#: scheduler/ipp.c:3173 scheduler/ipp.c:3198
 msgid "Missing requesting-user-name attribute."
 msgstr ""
 
-#: scheduler/ipp.c:5462 scheduler/ipp.c:5488
+#: scheduler/ipp.c:5461 scheduler/ipp.c:5487
 #, c-format
 msgid "Missing required attribute \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:407
+#: scheduler/ipp.c:359
 msgid "Missing required attributes."
 msgstr ""
 
@@ -5242,7 +5269,7 @@ msgid ""
 "        device-id = %s"
 msgstr ""
 
-#: test/ippfind.c:2792
+#: test/ippfind.c:2843
 msgid "Modifiers:"
 msgstr ""
 
@@ -5314,7 +5341,7 @@ msgstr ""
 msgid "Name OID uses indefinite length"
 msgstr ""
 
-#: scheduler/ipp.c:1102
+#: scheduler/ipp.c:1066
 msgid "Nested classes are not allowed."
 msgstr ""
 
@@ -5362,16 +5389,16 @@ msgstr ""
 msgid "No active connection."
 msgstr ""
 
-#: scheduler/ipp.c:3482
+#: scheduler/ipp.c:3453
 #, c-format
 msgid "No active jobs on %s."
 msgstr ""
 
-#: scheduler/ipp.c:235
+#: scheduler/ipp.c:219
 msgid "No attributes in request."
 msgstr ""
 
-#: scheduler/ipp.c:3103
+#: scheduler/ipp.c:3074
 msgid "No authentication information provided."
 msgstr ""
 
@@ -5383,11 +5410,11 @@ msgstr ""
 msgid "No community name"
 msgstr ""
 
-#: scheduler/ipp.c:6117
+#: scheduler/ipp.c:6135
 msgid "No default printer."
 msgstr ""
 
-#: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7498
+#: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7516
 msgid "No destinations added."
 msgstr ""
 
@@ -5403,7 +5430,7 @@ msgstr ""
 msgid "No error-status"
 msgstr ""
 
-#: scheduler/ipp.c:8453 scheduler/ipp.c:9717
+#: scheduler/ipp.c:8474 scheduler/ipp.c:9738
 msgid "No file in print request."
 msgstr ""
 
@@ -5432,7 +5459,7 @@ msgstr ""
 msgid "No printer-uri found for class"
 msgstr ""
 
-#: scheduler/ipp.c:6524
+#: scheduler/ipp.c:6542
 msgid "No printer-uri in request."
 msgstr ""
 
@@ -5456,11 +5483,11 @@ msgstr ""
 msgid "No stored credentials, not valid for name."
 msgstr ""
 
-#: scheduler/ipp.c:5721
+#: scheduler/ipp.c:5720
 msgid "No subscription attributes in request."
 msgstr ""
 
-#: scheduler/ipp.c:7837
+#: scheduler/ipp.c:7855
 msgid "No subscriptions found."
 msgstr ""
 
@@ -5509,7 +5536,7 @@ msgstr ""
 msgid "Not Supported"
 msgstr ""
 
-#: scheduler/ipp.c:1556 scheduler/ipp.c:10978
+#: scheduler/ipp.c:1520 scheduler/ipp.c:11009
 msgid "Not allowed to print."
 msgstr ""
 
@@ -5541,7 +5568,7 @@ msgstr ""
 msgid "Online Help"
 msgstr ""
 
-#: scheduler/ipp.c:5441
+#: scheduler/ipp.c:5440
 msgid "Only local users can create a local printer."
 msgstr ""
 
@@ -5577,7 +5604,7 @@ msgstr ""
 
 #: scheduler/cupsfilter.c:1480 scheduler/main.c:2101 systemv/cupsaddsmb.c:276
 #: systemv/cupsctl.c:196 systemv/cupstestdsc.c:421 systemv/cupstestppd.c:3859
-#: test/ippfind.c:2751 test/ipptool.c:5063 ppdc/ppdc.cxx:430
+#: 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/ppdpo.cxx:247
 msgid "Options:"
@@ -5897,7 +5924,7 @@ msgstr ""
 msgid "Print job was not accepted."
 msgstr ""
 
-#: scheduler/ipp.c:5507
+#: scheduler/ipp.c:5506
 #, c-format
 msgid "Printer \"%s\" already exists."
 msgstr ""
@@ -5964,7 +5991,7 @@ msgstr ""
 msgid "Quarto"
 msgstr ""
 
-#: scheduler/ipp.c:1551 scheduler/ipp.c:10973
+#: scheduler/ipp.c:1515 scheduler/ipp.c:11004
 msgid "Quota limit reached."
 msgstr ""
 
@@ -6123,7 +6150,7 @@ msgstr ""
 msgid "See Other"
 msgstr ""
 
-#: scheduler/ipp.c:7122 scheduler/ipp.c:7141
+#: scheduler/ipp.c:7140 scheduler/ipp.c:7159
 msgid "See remote printer."
 msgstr ""
 
@@ -6360,13 +6387,13 @@ msgstr ""
 msgid "Statement"
 msgstr ""
 
-#: scheduler/ipp.c:3628 scheduler/ipp.c:6934 scheduler/ipp.c:7644
-#: scheduler/ipp.c:9165
+#: scheduler/ipp.c:3599 scheduler/ipp.c:6952 scheduler/ipp.c:7662
+#: scheduler/ipp.c:9186
 #, c-format
 msgid "Subscription #%d does not exist."
 msgstr ""
 
-#: test/ippfind.c:2804
+#: test/ippfind.c:2855
 msgid "Substitutions:"
 msgstr ""
 
@@ -6414,33 +6441,33 @@ msgstr ""
 msgid "Tear-Off Adjust Position"
 msgstr ""
 
-#: scheduler/ipp.c:1387
+#: scheduler/ipp.c:1351
 #, c-format
 msgid "The \"%s\" attribute is required for print jobs."
 msgstr ""
 
-#: scheduler/ipp.c:6595 scheduler/ipp.c:6675 scheduler/ipp.c:6688
-#: scheduler/ipp.c:6700 scheduler/ipp.c:6715
+#: scheduler/ipp.c:6613 scheduler/ipp.c:6693 scheduler/ipp.c:6706
+#: scheduler/ipp.c:6718 scheduler/ipp.c:6733
 #, c-format
 msgid "The %s attribute cannot be provided with job-ids."
 msgstr ""
 
-#: scheduler/ipp.c:1366
+#: scheduler/ipp.c:1330
 #, c-format
 msgid "The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
 
-#: scheduler/ipp.c:5269
+#: scheduler/ipp.c:5240
 #, c-format
 msgid "The '%s' operation attribute cannot be supplied in a Create-Job request."
 msgstr ""
 
-#: scheduler/ipp.c:7164
+#: scheduler/ipp.c:7182
 #, c-format
 msgid "The PPD file \"%s\" could not be found."
 msgstr ""
 
-#: scheduler/ipp.c:7153
+#: scheduler/ipp.c:7171
 #, c-format
 msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr ""
@@ -6470,11 +6497,11 @@ msgstr ""
 msgid "The fuser's temperature is low."
 msgstr ""
 
-#: scheduler/ipp.c:2141
+#: scheduler/ipp.c:2112
 msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
 msgstr ""
 
-#: scheduler/ipp.c:2124 scheduler/ipp.c:5846
+#: scheduler/ipp.c:2095 scheduler/ipp.c:5845
 #, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)."
 msgstr ""
@@ -6550,18 +6577,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:810 scheduler/ipp.c:1093 scheduler/ipp.c:3267
-#: scheduler/ipp.c:3448 scheduler/ipp.c:5252 scheduler/ipp.c:5680
-#: scheduler/ipp.c:5995 scheduler/ipp.c:6561 scheduler/ipp.c:7368
-#: scheduler/ipp.c:7424 scheduler/ipp.c:7750 scheduler/ipp.c:8022
-#: scheduler/ipp.c:8111 scheduler/ipp.c:8144 scheduler/ipp.c:8468
-#: scheduler/ipp.c:8875 scheduler/ipp.c:8957 scheduler/ipp.c:10131
-#: scheduler/ipp.c:10583 scheduler/ipp.c:10936 scheduler/ipp.c:11018
-#: scheduler/ipp.c:11393
+#: scheduler/ipp.c:774 scheduler/ipp.c:1057 scheduler/ipp.c:3238
+#: scheduler/ipp.c:3419 scheduler/ipp.c:5223 scheduler/ipp.c:5679
+#: scheduler/ipp.c:6013 scheduler/ipp.c:6579 scheduler/ipp.c:7386
+#: scheduler/ipp.c:7442 scheduler/ipp.c:7768 scheduler/ipp.c:8043
+#: scheduler/ipp.c:8132 scheduler/ipp.c:8165 scheduler/ipp.c:8489
+#: scheduler/ipp.c:8896 scheduler/ipp.c:8978 scheduler/ipp.c:10152
+#: scheduler/ipp.c:10614 scheduler/ipp.c:10967 scheduler/ipp.c:11049
+#: scheduler/ipp.c:11378
 msgid "The printer or class does not exist."
 msgstr ""
 
-#: scheduler/ipp.c:1305
+#: scheduler/ipp.c:1269
 msgid "The printer or class is not shared."
 msgstr ""
 
@@ -6585,20 +6612,20 @@ msgstr ""
 msgid "The printer's waste bin is full."
 msgstr ""
 
-#: scheduler/ipp.c:916 scheduler/ipp.c:2305
+#: scheduler/ipp.c:880 scheduler/ipp.c:2276
 #, c-format
 msgid "The printer-uri \"%s\" contains invalid characters."
 msgstr ""
 
-#: scheduler/ipp.c:3244
+#: scheduler/ipp.c:3215
 msgid "The printer-uri attribute is required."
 msgstr ""
 
-#: scheduler/ipp.c:900
+#: scheduler/ipp.c:864
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
 msgstr ""
 
-#: scheduler/ipp.c:2289
+#: scheduler/ipp.c:2260
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
 msgstr ""
 
@@ -6606,16 +6633,16 @@ msgstr ""
 msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
 msgstr ""
 
-#: scheduler/client.c:2249
+#: scheduler/client.c:2261
 msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
 msgstr ""
 
-#: scheduler/ipp.c:6659
+#: scheduler/ipp.c:6677
 #, c-format
 msgid "The which-jobs value \"%s\" is not supported."
 msgstr ""
 
-#: scheduler/ipp.c:5924
+#: scheduler/ipp.c:5942
 msgid "There are too many subscriptions."
 msgstr ""
 
@@ -6628,16 +6655,16 @@ msgstr ""
 msgid "Thermal Transfer Media"
 msgstr ""
 
-#: scheduler/ipp.c:1545
+#: scheduler/ipp.c:1509
 msgid "Too many active jobs."
 msgstr ""
 
-#: scheduler/ipp.c:1439
+#: scheduler/ipp.c:1403
 #, c-format
 msgid "Too many job-sheets values (%d > 2)."
 msgstr ""
 
-#: scheduler/ipp.c:2616
+#: scheduler/ipp.c:2587
 #, c-format
 msgid "Too many printer-state-reasons values (%d > %d)."
 msgstr ""
@@ -6835,7 +6862,7 @@ msgstr ""
 msgid "Unable to add document to print job."
 msgstr ""
 
-#: scheduler/ipp.c:1613
+#: scheduler/ipp.c:1584
 #, c-format
 msgid "Unable to add job for destination \"%s\"."
 msgstr ""
@@ -6844,7 +6871,7 @@ msgstr ""
 msgid "Unable to add printer"
 msgstr ""
 
-#: scheduler/ipp.c:1223
+#: scheduler/ipp.c:1187
 msgid "Unable to allocate memory for file types."
 msgstr ""
 
@@ -6876,12 +6903,12 @@ msgstr ""
 msgid "Unable to change server settings"
 msgstr ""
 
-#: cups/ipp.c:5389
+#: cups/ipp.c:5384
 #, c-format
 msgid "Unable to compile mimeMediaType regular expression: %s."
 msgstr ""
 
-#: cups/ipp.c:5335
+#: cups/ipp.c:5330
 #, c-format
 msgid "Unable to compile naturalLanguage regular expression: %s."
 msgstr ""
@@ -6914,12 +6941,12 @@ msgstr ""
 msgid "Unable to copy CUPS printer driver files (%d)."
 msgstr ""
 
-#: scheduler/ipp.c:2719
+#: scheduler/ipp.c:2690
 #, c-format
 msgid "Unable to copy PPD file - %s"
 msgstr ""
 
-#: scheduler/ipp.c:2764
+#: scheduler/ipp.c:2735
 msgid "Unable to copy PPD file."
 msgstr ""
 
@@ -6937,11 +6964,11 @@ msgstr ""
 msgid "Unable to create credentials from array."
 msgstr ""
 
-#: cups/ppd-util.c:553 cups/util.c:500
+#: cups/ppd-util.c:553 cups/util.c:482
 msgid "Unable to create printer-uri"
 msgstr ""
 
-#: scheduler/ipp.c:5517
+#: scheduler/ipp.c:5516
 msgid "Unable to create printer."
 msgstr ""
 
@@ -7013,7 +7040,7 @@ msgstr ""
 msgid "Unable to find server credentials."
 msgstr ""
 
-#: backend/ipp.c:3336
+#: backend/ipp.c:3338
 msgid "Unable to get backend exit status."
 msgstr ""
 
@@ -7097,7 +7124,7 @@ msgstr ""
 msgid "Unable to open device file"
 msgstr ""
 
-#: scheduler/ipp.c:6338
+#: scheduler/ipp.c:6356
 #, c-format
 msgid "Unable to open document #%d in job #%d."
 msgstr ""
@@ -7126,7 +7153,7 @@ msgstr ""
 msgid "Unable to read print data."
 msgstr ""
 
-#: scheduler/ipp.c:8627 scheduler/ipp.c:9870
+#: scheduler/ipp.c:8648 scheduler/ipp.c:9891
 msgid "Unable to rename job document file."
 msgstr ""
 
@@ -7164,7 +7191,7 @@ msgstr ""
 msgid "Unable to set server default"
 msgstr ""
 
-#: backend/ipp.c:3195 backend/ipp.c:3272 backend/ipp.c:3280
+#: backend/ipp.c:3197 backend/ipp.c:3274 backend/ipp.c:3282
 msgid "Unable to start backend process."
 msgstr ""
 
@@ -7240,12 +7267,12 @@ msgstr ""
 msgid "Unknown print mode: \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10805
+#: scheduler/ipp.c:10836
 #, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10788
+#: scheduler/ipp.c:10819
 #, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr ""
@@ -7271,46 +7298,50 @@ msgstr ""
 msgid "Unknown version option value: \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:11264
+#: scheduler/ipp.c:11295
 #, c-format
 msgid "Unsupported 'compression' value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:11294
+#: scheduler/ipp.c:11325
 #, c-format
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:11369
+#: scheduler/ipp.c:7995 scheduler/ipp.c:10378 scheduler/ipp.c:11339
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
+#: scheduler/ipp.c:11355
 msgid "Unsupported 'job-name' value."
 msgstr ""
 
-#: scheduler/ipp.c:348
+#: scheduler/ipp.c:310
 #, c-format
 msgid "Unsupported character set \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8434 scheduler/ipp.c:9682
+#: scheduler/ipp.c:8455 scheduler/ipp.c:9703
 #, c-format
 msgid "Unsupported compression \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8570 scheduler/ipp.c:9835
+#: scheduler/ipp.c:8591 scheduler/ipp.c:9856
 #, c-format
 msgid "Unsupported document-format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9818
+#: scheduler/ipp.c:9839
 #, c-format
 msgid "Unsupported document-format \"%s/%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1405
+#: scheduler/ipp.c:1369
 #, c-format
 msgid "Unsupported format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1503
+#: scheduler/ipp.c:1467
 msgid "Unsupported margins."
 msgstr ""
 
@@ -7390,7 +7421,7 @@ msgstr ""
 msgid "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
 msgstr ""
 
-#: test/ippfind.c:2744
+#: test/ippfind.c:2795
 msgid ""
 "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
 "       ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
@@ -7494,7 +7525,7 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
-#: scheduler/client.c:2236
+#: scheduler/client.c:2248
 #, c-format
 msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
 msgstr ""
@@ -7523,11 +7554,11 @@ msgstr ""
 msgid "completed"
 msgstr ""
 
-#: scheduler/ipp.c:6210
+#: scheduler/ipp.c:6228
 msgid "cups-deviced failed to execute."
 msgstr ""
 
-#: scheduler/ipp.c:7096 scheduler/ipp.c:7335
+#: scheduler/ipp.c:7114 scheduler/ipp.c:7353
 msgid "cups-driverd failed to execute."
 msgstr ""
 
@@ -7646,101 +7677,106 @@ msgstr ""
 msgid "idle"
 msgstr ""
 
-#: test/ippfind.c:2463
+#: test/ippfind.c:2514
 #, c-format
 msgid "ippfind: Bad regular expression: %s"
 msgstr ""
 
-#: test/ippfind.c:326
+#: test/ippfind.c:328
 msgid "ippfind: Cannot use --and after --or."
 msgstr ""
 
-#: test/ippfind.c:599
+#: test/ippfind.c:613
 #, c-format
 msgid "ippfind: Expected key name after %s."
 msgstr ""
 
-#: test/ippfind.c:549 test/ippfind.c:732
+#: test/ippfind.c:563 test/ippfind.c:758
 #, c-format
 msgid "ippfind: Expected port range after %s."
 msgstr ""
 
-#: test/ippfind.c:359
+#: test/ippfind.c:361
 #, c-format
 msgid "ippfind: Expected program after %s."
 msgstr ""
 
-#: test/ippfind.c:376
+#: test/ippfind.c:378
 #, c-format
 msgid "ippfind: Expected semi-colon after %s."
 msgstr ""
 
-#: test/ippfind.c:1963
+#: test/ippfind.c:2014
 msgid "ippfind: Missing close brace in substitution."
 msgstr ""
 
-#: test/ippfind.c:1051
+#: test/ippfind.c:1077
 msgid "ippfind: Missing close parenthesis."
 msgstr ""
 
-#: test/ippfind.c:333
+#: test/ippfind.c:335
 msgid "ippfind: Missing expression before \"--and\"."
 msgstr ""
 
-#: test/ippfind.c:446
+#: test/ippfind.c:460
 msgid "ippfind: Missing expression before \"--or\"."
 msgstr ""
 
-#: test/ippfind.c:869
+#: test/ippfind.c:895
 #, c-format
 msgid "ippfind: Missing key name after %s."
 msgstr ""
 
-#: test/ippfind.c:1022
+#: test/ippfind.c:429 test/ippfind.c:745
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
+#: test/ippfind.c:1048
 msgid "ippfind: Missing open parenthesis."
 msgstr ""
 
-#: test/ippfind.c:899
+#: test/ippfind.c:925
 #, c-format
 msgid "ippfind: Missing program after %s."
 msgstr ""
 
-#: test/ippfind.c:345 test/ippfind.c:399 test/ippfind.c:428 test/ippfind.c:534
-#: test/ippfind.c:616 test/ippfind.c:631 test/ippfind.c:786 test/ippfind.c:801
-#: test/ippfind.c:824 test/ippfind.c:884
+#: test/ippfind.c:347 test/ippfind.c:401 test/ippfind.c:442 test/ippfind.c:548
+#: test/ippfind.c:630 test/ippfind.c:645 test/ippfind.c:812 test/ippfind.c:827
+#: test/ippfind.c:850 test/ippfind.c:910
 #, c-format
 msgid "ippfind: Missing regular expression after %s."
 msgstr ""
 
-#: test/ippfind.c:917
+#: test/ippfind.c:943
 #, c-format
 msgid "ippfind: Missing semi-colon after %s."
 msgstr ""
 
-#: test/ippfind.c:1910 test/ippfind.c:1935
+#: test/ippfind.c:1961 test/ippfind.c:1986
 msgid "ippfind: Out of memory."
 msgstr ""
 
-#: test/ippfind.c:995
+#: test/ippfind.c:1021
 msgid "ippfind: Too many parenthesis."
 msgstr ""
 
-#: test/ippfind.c:1264 test/ippfind.c:1400 test/ippfind.c:2555
+#: test/ippfind.c:1320 test/ippfind.c:1448 test/ippfind.c:2606
 #, c-format
 msgid "ippfind: Unable to browse or resolve: %s"
 msgstr ""
 
-#: test/ippfind.c:2033 test/ippfind.c:2060
+#: test/ippfind.c:2084 test/ippfind.c:2111
 #, c-format
 msgid "ippfind: Unable to execute \"%s\": %s"
 msgstr ""
 
-#: test/ippfind.c:1141 test/ippfind.c:1149 test/ippfind.c:1160
+#: test/ippfind.c:1167 test/ippfind.c:1175 test/ippfind.c:1186
 #, c-format
 msgid "ippfind: Unable to use Bonjour: %s"
 msgstr ""
 
-#: test/ippfind.c:1992
+#: test/ippfind.c:2043
 #, c-format
 msgid "ippfind: Unknown variable \"{%s}\"."
 msgstr ""
@@ -7787,7 +7823,7 @@ msgstr ""
 msgid "ipptool: Unknown option \"-%c\"."
 msgstr ""
 
-#: scheduler/ipp.c:8100
+#: scheduler/ipp.c:8121
 msgid "job-printer-uri attribute missing."
 msgstr ""
 
@@ -8033,16 +8069,16 @@ msgstr ""
 msgid "no system default destination"
 msgstr ""
 
-#: scheduler/ipp.c:5895
+#: scheduler/ipp.c:5913
 msgid "notify-events not specified."
 msgstr ""
 
-#: scheduler/ipp.c:2078 scheduler/ipp.c:5800
+#: scheduler/ipp.c:2049 scheduler/ipp.c:5799
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" is already used."
 msgstr ""
 
-#: scheduler/ipp.c:2068 scheduler/ipp.c:5790
+#: scheduler/ipp.c:2039 scheduler/ipp.c:5789
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
 msgstr ""
index 0ba8344..952b10e 100644 (file)
 "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad characters (RFC 8011 section 5.1.10).";
 "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad length %d (RFC 8011 section 5.1.10).";
 "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.3).";
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)." = "“%s”: Bad name value “%s” - bad control character (PWG 5100.14 section 8.1).";
 "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad length %d (RFC 8011 section 5.1.3).";
 "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad characters (RFC 8011 section 5.1.9).";
 "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad length %d (RFC 8011 section 5.1.9).";
 "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16).";
 "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16).";
 "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.2).";
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)." = "“%s”: Bad text value “%s” - bad control character (PWG 5100.14 section 8.3).";
 "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad length %d (RFC 8011 section 5.1.2).";
 "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad characters (RFC 8011 section 5.1.7).";
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad length %d (RFC 8011 section 5.1.7).";
+"\"requesting-user-name\" attribute in wrong group." = "“requesting-user-name” attribute in wrong group.";
+"\"requesting-user-name\" attribute with wrong syntax." = "“requesting-user-name” attribute with wrong syntax.";
 "%-7s %-7.7s %-7d %-31.31s %.0f bytes" = "%-7s %-7.7s %-7d %-31.31s %.0f bytes";
 "%d x %d mm" = "%d x %d mm";
 "%g x %g \"" = "%g x %g ″";
 "B8" = "B8";
 "B9" = "B9";
 "Back Print Film" = "Back Print Film";
+"Bad '%s' value." = "Bad ‘%s’ value.";
 "Bad 'document-format' value \"%s\"." = "Bad ‘document-format’ value “%s”.";
 "Bad NULL dests pointer" = "Bad NULL dests pointer";
 "Bad OpenGroup" = "Bad OpenGroup";
 "Bad job-uri \"%s\"." = "Bad job-uri “%s”.";
 "Bad notify-pull-method \"%s\"." = "Bad notify-pull-method “%s”.";
 "Bad notify-recipient-uri \"%s\"." = "Bad notify-recipient-uri “%s”.";
+"Bad notify-user-data \"%s\"." = "Bad notify-user-data “%s”.";
 "Bad number-up value %d." = "Bad number-up value %d.";
 "Bad option + choice on line %d." = "Bad option + choice on line %d.";
 "Bad page-ranges values %d-%d." = "Bad page-ranges values %d-%d.";
 "Bad printer-uri." = "Bad printer-uri.";
 "Bad request ID %d." = "Bad request ID %d.";
 "Bad request version number %d.%d." = "Bad request version number %d.%d.";
-"Bad requesting-user-name value: %s" = "Bad requesting-user-name value: %s";
 "Bad resource in URI" = "Bad resource in URI";
 "Bad scheme in URI" = "Bad scheme in URI";
 "Bad subscription ID" = "Bad subscription ID";
 "Internet Postage 2-Part" = "Internet Postage 2-Part";
 "Internet Postage 3-Part" = "Internet Postage 3-Part";
 "Internet Printing Protocol" = "Internet Printing Protocol";
+"Invalid group tag." = "Invalid group tag.";
 "Invalid media name arguments." = "Invalid media name arguments.";
 "Invalid media size." = "Invalid media size.";
 "Invalid ppd-name value." = "Invalid ppd-name value.";
 "Unknown version option value: \"%s\"." = "Unknown version option value: “%s”.";
 "Unsupported 'compression' value \"%s\"." = "Unsupported ‘compression’ value “%s”.";
 "Unsupported 'document-format' value \"%s\"." = "Unsupported ‘document-format’ value “%s”.";
+"Unsupported 'job-hold-until' value." = "Unsupported ‘job-hold-until’ value.";
 "Unsupported 'job-name' value." = "Unsupported ‘job-name’ value.";
 "Unsupported character set \"%s\"." = "Unsupported character set “%s”.";
 "Unsupported compression \"%s\"." = "Unsupported compression “%s”.";
 "ippfind: Missing expression before \"--and\"." = "ippfind: Missing expression before “--and”.";
 "ippfind: Missing expression before \"--or\"." = "ippfind: Missing expression before “--or”.";
 "ippfind: Missing key name after %s." = "ippfind: Missing key name after %s.";
+"ippfind: Missing name after %s." = "ippfind: Missing name after %s.";
 "ippfind: Missing open parenthesis." = "ippfind: Missing open parenthesis.";
 "ippfind: Missing program after %s." = "ippfind: Missing program after %s.";
 "ippfind: Missing regular expression after %s." = "ippfind: Missing regular expression after %s.";
index 1627451..30c3d23 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -1475,6 +1475,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1525,6 +1531,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1538,6 +1550,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -2801,6 +2819,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr ""
 
@@ -2896,6 +2918,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "La notify-recipient-uri «%s» és incorrecta."
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "El valor de number-up %d és incorrecte."
 
@@ -2929,10 +2955,6 @@ msgstr "L'identificador %d de la sol·licitud és incorrecte."
 msgid "Bad request version number %d.%d."
 msgstr "El número de versió %d.%d de la sol·licitud és incorrecte."
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr ""
 
@@ -3839,6 +3861,9 @@ msgstr "Franqueig per Internet en 3 parts"
 msgid "Internet Printing Protocol"
 msgstr "Protocol d'impressió per Internet"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr ""
 
@@ -5811,6 +5836,9 @@ msgstr ""
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr ""
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr ""
 
@@ -7402,6 +7430,10 @@ msgstr ""
 msgid "ippfind: Missing key name after %s."
 msgstr ""
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr ""
 
index fe2ebe9..feec1cb 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -1298,6 +1298,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1348,6 +1354,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1361,6 +1373,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr ""
@@ -2609,6 +2627,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr ""
 
@@ -2704,6 +2726,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr ""
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "Chybná hodnota %d."
 
@@ -2737,10 +2763,6 @@ msgstr ""
 msgid "Bad request version number %d.%d."
 msgstr ""
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr ""
 
@@ -3634,6 +3656,9 @@ msgstr "Internet Postage 3-Part"
 msgid "Internet Printing Protocol"
 msgstr "Internetový tiskový protokol"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr ""
 
@@ -5561,6 +5586,9 @@ msgstr ""
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr ""
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr ""
 
@@ -7132,6 +7160,10 @@ msgstr ""
 msgid "ippfind: Missing key name after %s."
 msgstr ""
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr ""
 
index bf834cc..69b8430 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -1362,6 +1362,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1412,6 +1418,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1425,6 +1437,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr ""
@@ -2685,6 +2703,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr "Fehlerhafter 'document-format' Wert \"%s\"."
 
@@ -2780,6 +2802,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "Ungültige notify-recipient-uri \"%s\"."
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "Ungültiger number-up-Wert %d."
 
@@ -2813,10 +2839,6 @@ msgstr "Ungültige Anfrage-ID %d."
 msgid "Bad request version number %d.%d."
 msgstr "Ungültige Versionsnummernanfrage %d.%d."
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr "Ungültige Resource in URI"
 
@@ -3714,6 +3736,9 @@ msgstr "Internet Postage 3-teilig"
 msgid "Internet Printing Protocol"
 msgstr "Internet Printing Protocol"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr "Ungültige Argumente des Mediennamens."
 
@@ -5670,6 +5695,9 @@ msgstr "Nicht unterstützter Kompressionswert »%s«."
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "Nicht unterstützter Wert des 'document-format' »%s«."
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr "Nicht unterstützter 'job-name' Wert."
 
@@ -7263,6 +7291,10 @@ msgstr ""
 msgid "ippfind: Missing key name after %s."
 msgstr ""
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr ""
 
index 63eacfb..3566a66 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -1505,6 +1505,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1555,6 +1561,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1568,6 +1580,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -2831,6 +2849,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr "Valor 'document-format' \"%s\" incorrecto."
 
@@ -2926,6 +2948,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "notify-recipient-uri \"%s\" incorrecto."
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "Valor number-up (páginas por hoja) %d incorrecto."
 
@@ -2959,10 +2985,6 @@ msgstr "Petición incorrecta de ID %d."
 msgid "Bad request version number %d.%d."
 msgstr "Petición incorrecta de número de versión %d.%d."
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr "Recurso incorrecto en URI"
 
@@ -3866,6 +3888,9 @@ msgstr "Correo por Internet Parte-3"
 msgid "Internet Printing Protocol"
 msgstr "Protocolo de Impresión de Internet IPP"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr "Argumentos del nombre del papel no válidos."
 
@@ -5844,6 +5869,9 @@ msgstr "Valor 'compression' \"%s\" no implementado."
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "Valor 'document-format' \"%s\" no implementado."
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr "Valor 'job-name' no implementado."
 
@@ -5940,8 +5968,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"
@@ -7450,6 +7478,10 @@ msgstr "ippfind: Falta una expresión antes de \"--or\"."
 msgid "ippfind: Missing key name after %s."
 msgstr "ippfind: Falta un nombre de clave tras %s."
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr "ippfind: Falta el paréntesis de apertura."
 
index 341551b..ea3d554 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -1358,6 +1358,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1408,6 +1414,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1421,6 +1433,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f octets"
@@ -2669,6 +2687,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr ""
 
@@ -2764,6 +2786,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr ""
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "Valeur de number-up %d incorrecte."
 
@@ -2797,10 +2823,6 @@ msgstr ""
 msgid "Bad request version number %d.%d."
 msgstr ""
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr ""
 
@@ -3696,6 +3718,9 @@ msgstr "Affranchissement Internet en 3 parties"
 msgid "Internet Printing Protocol"
 msgstr "Internet Printing Protocol"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr ""
 
@@ -5628,6 +5653,9 @@ msgstr ""
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr ""
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr ""
 
@@ -7199,6 +7227,10 @@ msgstr ""
 msgid "ippfind: Missing key name after %s."
 msgstr ""
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr ""
 
index 3acab47..1d5ee1d 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -1500,6 +1500,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1550,6 +1556,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1563,6 +1575,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f byte"
@@ -2827,6 +2845,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr "Il valore di 'document-format' non è valido \"%s\"."
 
@@ -2922,6 +2944,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "Il valore di notify-recipient-uri \"%s\" non è valido."
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "Il valore di number-up %d non è valido."
 
@@ -2955,10 +2981,6 @@ msgstr "L'ID della richiesta %d non è valido."
 msgid "Bad request version number %d.%d."
 msgstr "Il numero della versione richiesta %d.%d non è valido."
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr ""
 
@@ -3864,6 +3886,9 @@ msgstr "Internet Postage 3-Part"
 msgid "Internet Printing Protocol"
 msgstr "Internet Printing Protocol"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr "Gli argomenti del nome del supporto non sono validi."
 
@@ -5832,6 +5857,9 @@ msgstr "Valore di 'compressione' non supportato \"%s\"."
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "Valore di 'document-format' non supportato \"%s\"."
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr "Valore di 'job-name' non supportato."
 
@@ -7424,6 +7452,10 @@ msgstr "ippfind: manca l'espressione prima di \"--or\"."
 msgid "ippfind: Missing key name after %s."
 msgstr "ippfind: manca il nome della chiave dopo %s."
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr "ippfind: mancano le parentesi aperte."
 
index a07da5f..7949b4a 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -1476,6 +1476,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1526,6 +1532,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1539,6 +1551,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f バイト"
@@ -2797,6 +2815,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr "誤った 'document-format' の値です \"%s\"。"
 
@@ -2892,6 +2914,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "URI \"%s\" は不正な notify-recipient-uri です。"
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "%d は不正な number-up 値です。"
 
@@ -2925,10 +2951,6 @@ msgstr "%d は無効なリクエストIDです。"
 msgid "Bad request version number %d.%d."
 msgstr "バージョン番号 %d.%d は無効なリクエストです。"
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr "URI のリソースが不正"
 
@@ -3838,6 +3860,9 @@ msgstr "Internet Postage 3-Part"
 msgid "Internet Printing Protocol"
 msgstr "インターネット印刷プロトコル"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr "無効なメディア名引数です。"
 
@@ -5784,6 +5809,9 @@ msgstr "\"%s\" はサポートされていない 'compression' の値です。"
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "\"%s\" はサポートされていない 'document-format' の値です。"
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr "サポートされていない 'job-name' の値です。"
 
@@ -7384,6 +7412,10 @@ msgstr "ippfind: \"--or\" の前には式が必要です。"
 msgid "ippfind: Missing key name after %s."
 msgstr "ippfind: %s のあとにはキー名が必要です。"
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr "ippfind: 開きカッコが足りません。"
 
index 89d1a34..136728a 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-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"
@@ -1509,6 +1509,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1559,6 +1565,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1572,6 +1584,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -2831,6 +2849,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr "Valor de \"document-format\" inválido \"%s\"."
 
@@ -2926,6 +2948,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "notify-recipient-uri inválido \"%s\"."
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "Valor de number-up inválido %d."
 
@@ -2959,10 +2985,6 @@ msgstr "ID da requisição inválido %d."
 msgid "Bad request version number %d.%d."
 msgstr "Número da versão de requisição inválido %d.%d."
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr "Recurso inválido na URI"
 
@@ -3867,6 +3889,9 @@ msgstr "Internet Postage Parte-3"
 msgid "Internet Printing Protocol"
 msgstr "Protocolo de Impressão para Internet"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr "Argumentos de nome de mídia inválidos."
 
@@ -5837,6 +5862,9 @@ msgstr "Não suporte a \"compression\" com valor \"%s\"."
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "Não há suporte a \"document-format\" com valor \"%s\"."
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr "Não há suporte ao valor de \"job-name\"."
 
@@ -7429,6 +7457,10 @@ msgstr "ippfind: Faltando expressão antes de \"--or\"."
 msgid "ippfind: Missing key name after %s."
 msgstr "ippfind: Faltando nome da chave após %s."
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr "ippfind: Faltando parênteses de abertura."
 
index c801f06..0bad416 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-0400\n"
 "PO-Revision-Date: 2015-01-28 12:00-0800\n"
 "Last-Translator: Aleksandr Proklov\n"
 "Language-Team: PuppyRus Linux Team\n"
@@ -1437,6 +1437,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1487,6 +1493,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1500,6 +1512,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f байт"
@@ -2765,6 +2783,10 @@ msgid "Back Print Film"
 msgstr ""
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr ""
 
@@ -2860,6 +2882,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "Неверный notify-recipient-uri \"%s\"."
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "Неверное значение number-up %d."
 
@@ -2893,10 +2919,6 @@ msgstr "Неверный ID запроса %d."
 msgid "Bad request version number %d.%d."
 msgstr "Неверный номер версии запроса %d.%d."
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr ""
 
@@ -3795,6 +3817,9 @@ msgstr "Наклейки Internet Postage 3-Part"
 msgid "Internet Printing Protocol"
 msgstr "Протокол интернет-печати"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr "Неверные аргументы имени бумаги."
 
@@ -5743,6 +5768,9 @@ msgstr "Неподдерживаемое значение 'compression' \"%s\"."
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "Неподдерживаемое значение'document-format' \"%s\"."
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr "Неподдерживаемое значение 'job-name'."
 
@@ -7340,6 +7368,10 @@ msgstr "ippfind: Отсутствует выражение перед \"--or\"."
 msgid "ippfind: Missing key name after %s."
 msgstr "ippfind: Отсутствует key name после %s."
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr "ippfind: Отсутствует открывающая скобка."
 
index ae34e8a..454ab10 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-03-19 18:36-0400\n"
+"POT-Creation-Date: 2018-06-05 11:58-0400\n"
 "PO-Revision-Date: 2017-06-11 12:38+0800\n"
 "Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n"
 "Language-Team: \n"
@@ -1431,6 +1431,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
+"8.1)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
 msgstr ""
 
@@ -1481,6 +1487,12 @@ msgid ""
 msgstr ""
 
 #, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
+"8.3)."
+msgstr ""
+
+#, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
 msgstr ""
 
@@ -1494,6 +1506,12 @@ msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
 msgstr ""
 
+msgid "\"requesting-user-name\" attribute in wrong group."
+msgstr ""
+
+msgid "\"requesting-user-name\" attribute with wrong syntax."
+msgstr ""
+
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f 字节"
@@ -2742,6 +2760,10 @@ msgid "Back Print Film"
 msgstr "印片用胶片"
 
 #, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr "无效的“document-format”值“%s”。"
 
@@ -2837,6 +2859,10 @@ msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "无效的 notify-recipient-uri 值“%s”。"
 
 #, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
 msgid "Bad number-up value %d."
 msgstr "无效的 number-up 值 %d。"
 
@@ -2870,10 +2896,6 @@ msgstr "无效的请求 ID %d。"
 msgid "Bad request version number %d.%d."
 msgstr "无效的请求版本号 %d.%d。"
 
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
 msgid "Bad resource in URI"
 msgstr "URI 中的资源无效"
 
@@ -3777,6 +3799,9 @@ msgstr "网邮 3 部"
 msgid "Internet Printing Protocol"
 msgstr "互联网打印协议"
 
+msgid "Invalid group tag."
+msgstr ""
+
 msgid "Invalid media name arguments."
 msgstr "无效的媒体名称参数。"
 
@@ -5706,6 +5731,9 @@ msgstr "不支持的“compression”值“%s”。"
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "不支持的“document-format”值“%s”。"
 
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
 msgid "Unsupported 'job-name' value."
 msgstr "不支持的“job-name”值。"
 
@@ -7295,6 +7323,10 @@ msgstr "ippfind:“--or”前缺少表达式。"
 msgid "ippfind: Missing key name after %s."
 msgstr "ippfind:在 %s 后缺少键名。"
 
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
 msgid "ippfind: Missing open parenthesis."
 msgstr "ippfind:缺少左括号。"
 
index 2ed4686..6ac4e72 100644 (file)
@@ -157,6 +157,11 @@ The server name may be included in filenames using the string "%s", for example:
 
 .fi
 The default is "/var/log/cups/page_log".
+.\"#PassEnv
+.TP 5
+\fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
+Passes the specified environment variable(s) to child processes.
+Note: the standard CUPS filter and backend environment variables cannot be overridden using this directive.
 .\"#RemoteRoot
 .TP 5
 \fBRemoteRoot \fIusername\fR
@@ -191,6 +196,11 @@ macOS uses its keychain database to store certificates and keys while other plat
 \fBServerRoot \fIdirectory\fR
 Specifies the directory containing the server configuration files.
 The default is "/etc/cups".
+.\"#SetEnv
+.TP 5
+\fBSetEnv \fIvariable value\fR
+Set the specified environment variable to be passed to child processes.
+Note: the standard CUPS filter and backend environment variables cannot be overridden using this directive.
 .\"#StateDir
 .TP 5
 \fBStateDir \fIdirectory\fR
index ab89e15..15a5fa9 100644 (file)
@@ -1,8 +1,8 @@
 .\"
 .\" cupsd.conf man page for CUPS.
 .\"
-.\" Copyright 2007-2017 by Apple Inc.
-.\" Copyright 1997-2006 by Easy Software Products.
+.\" Copyright © 2007-2018 by Apple Inc.
+.\" Copyright © 1997-2006 by Easy Software Products.
 .\"
 .\" These coded instructions, statements, and computer programs are the
 .\" property of Apple Inc. and are protected by Federal copyright
@@ -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" "19 October 2017" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "24 April 2018" "Apple Inc."
 .SH NAME
 cupsd.conf \- server configuration file for cups
 .SH DESCRIPTION
@@ -132,12 +132,12 @@ The default value is "30".
 \fBErrorPolicy abort-job\fR
 Specifies that a failed print job should be aborted (discarded) unless otherwise specified for the printer.
 .TP 5
+\fBErrorPolicy retry-current-job\fR
+Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
+.TP 5
 \fBErrorPolicy retry-job\fR
 Specifies that a failed print job should be retried at a later time unless otherwise specified for the printer.
 .TP 5
-\fBErrorPolicy retry-this-job\fR
-Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
-.TP 5
 \fBErrorPolicy stop-printer\fR
 Specifies that a failed print job should stop the printer unless otherwise specified for the printer. The 'stop-printer' error policy is the default.
 .\"#FilterLimit
@@ -342,10 +342,6 @@ The default is "1048576" (1MB).
 \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).
-.\"#PassEnv
-.TP 5
-\fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
-Passes the specified environment variable(s) to child processes.
 .\"#Policy
 .TP 5
 \fB<Policy \fIname\fB> \fR... \fB</Policy>\fR
@@ -426,10 +422,6 @@ Specifies what information is included in the Server header of HTTP responses.
 command.
 "Full" reports "CUPS 2.0.0 (UNAME) IPP/2.0".
 The default is "Minimal".
-.\"#SetEnv
-.TP 5
-\fBSetEnv \fIvariable value\fR
-Set the specified environment variable to be passed to child processes.
 .\"#SSLListen
 .TP 5
 \fBSSLListen \fIipv4-address\fB:\fIport\fR
@@ -884,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-2017 by Apple Inc.
+Copyright \[co] 2007-2018 by Apple Inc.
index 219c47d..253e057 100644 (file)
@@ -1,7 +1,7 @@
 .\"
 .\" ippfind man page for CUPS.
 .\"
-.\" Copyright 2013-2014 by Apple Inc.
+.\" Copyright © 2013-2018 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 ippfind 1 "CUPS" "11 June 2014" "Apple Inc."
+.TH ippfind 1 "CUPS" "14 February 2018" "Apple Inc."
 .SH NAME
 ippfind \- find internet printing protocol printers
 .SH SYNOPSIS
@@ -84,6 +84,11 @@ The result is true if the URI is accessible, false otherwise.
 .B \-\-local
 True if the service is local to this computer.
 .TP 5
+\fB\-N \fIname\fR
+.TP 5
+\fB\-\-literal\-name \fIname\fR
+True if the service instance name matches the given name.
+.TP 5
 \fB\-n \fIregex\fR
 .TP 5
 \fB\-\-name \fIregex\fR
@@ -253,4 +258,4 @@ Similarly, to send a PostScript test page to every PostScript printer, run:
 .SH SEE ALSO
 .BR ipptool (1)
 .SH COPYRIGHT
-Copyright \[co] 2013-2015 by Apple Inc.
+Copyright \[co] 2013-2018 by Apple Inc.
index 2aab12f..3e63b5c 100644 (file)
@@ -1,8 +1,8 @@
 .\"
 .\" lpoptions man page for CUPS.
 .\"
-.\" Copyright 2007-2014 by Apple Inc.
-.\" Copyright 1997-2006 by Easy Software Products.
+.\" Copyright © 2007-2018 by Apple Inc.
+.\" Copyright © 1997-2006 by Easy Software Products.
 .\"
 .\" These coded instructions, statements, and computer programs are the
 .\" property of Apple Inc. and are protected by Federal copyright
@@ -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 lpoptions 1 "CUPS" "12 June 2014" "Apple Inc."
+.TH lpoptions 1 "CUPS" "10 April 2018" "Apple Inc."
 .SH NAME
 lpoptions \- display or set printer options and defaults
 .SH SYNOPSIS
@@ -18,9 +18,6 @@ lpoptions \- display or set printer options and defaults
 [
 .B \-E
 ] [
-.B \-U
-.I username
-] [
 \fB\-h \fIserver\fR[\fB:\fIport\fR]
 ]
 \fB\-d \fIdestination\fR[\fB/\fIinstance\fR]
@@ -32,9 +29,6 @@ lpoptions \- display or set printer options and defaults
 [
 .B \-E
 ] [
-.B \-U
-.I username
-] [
 \fB\-h \fIserver\fR[\fB:\fIport\fR]
 ] [
 \fB\-p \fIdestination\fR[\fB/\fIinstance\fR]
@@ -45,9 +39,6 @@ lpoptions \- display or set printer options and defaults
 [
 .B \-E
 ] [
-.B \-U
-.I username
-] [
 \fB\-h \fIserver\fR[\fB:\fIport\fR]
 ] [
 \fB\-p \fIdestination\fR[\fB/\fIinstance\fR]
@@ -59,9 +50,6 @@ lpoptions \- display or set printer options and defaults
 [
 .B \-E
 ] [
-.B \-U
-.I username
-] [
 \fB\-h \fIserver\fR[\fB:\fIport\fR]
 ]
 \fB\-x \fIdestination\fR[\fB/\fIinstance\fR]
@@ -86,9 +74,6 @@ Otherwise, the per-user defaults are managed in the \fI~/.cups/lpoptions\fR file
 .B \-E
 Enables encryption when communicating with the CUPS server.
 .TP 5
-\fB\-U \fIusername\fR
-Uses an alternate username.
-.TP 5
 \fB\-d \fIdestination\fR[\fB/\fIinstance\fR]
 Sets the user default printer to \fIdestination\fR.
 If \fIinstance\fR is supplied then that particular instance is used.
@@ -133,4 +118,4 @@ The \fBlpoptions\fR command is unique to CUPS.
 .BR lprm (1),
 CUPS Online Help (http://localhost:631/help)
 .SH COPYRIGHT
-Copyright \[co] 2007-2017 by Apple Inc.
+Copyright \[co] 2007-2018 by Apple Inc.
index 7b766f5..cbb0f52 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * "mailto" notifier for CUPS.
  *
- * Copyright 2007-2011 by Apple Inc.
- * Copyright 1997-2005 by Easy Software Products.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2005 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
  * property of Apple Inc. and are protected by Federal copyright
@@ -36,8 +36,7 @@ char  mailtoSendmail[1024];           /* Sendmail program to use */
  * Local functions...
  */
 
-void           email_message(const char *to, const char *subject,
-                             const char *text);
+void           email_message(const char *to, const char *subject, const char *text);
 int            load_configuration(void);
 cups_file_t    *pipe_sendmail(const char *to);
 void           print_attributes(ipp_t *ipp, int indent);
@@ -233,7 +232,9 @@ email_message(const char *to,               /* I - Recipient of message */
 
 
     if (strchr(mailtoSMTPServer, ':'))
+    {
       fp = cupsFileOpen(mailtoSMTPServer, "s");
+    }
     else
     {
       char     spec[1024];             /* Host:service spec */
@@ -252,6 +253,10 @@ email_message(const char *to,              /* I - Recipient of message */
 
     fprintf(stderr, "DEBUG: Connected to \"%s\"...\n", mailtoSMTPServer);
 
+    if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500)
+      goto smtp_error;
+    fprintf(stderr, "DEBUG: <<< %s\n", response);
+
     cupsFilePrintf(fp, "HELO %s\r\n",
                    httpGetHostname(NULL, hostbuf, sizeof(hostbuf)));
     fprintf(stderr, "DEBUG: >>> HELO %s\n", hostbuf);
index d582489..da84b48 100644 (file)
 
 Summary: CUPS
 Name: cups
-Version: 2.2.7
+Version: 2.2.8
 Release: 0
 Epoch: 1
 License: GPL
 Group: System Environment/Daemons
-Source: https://github.com/apple/cups/releases/download/v2.2.7/cups-2.2.7-source.tar.gz
+Source: https://github.com/apple/cups/releases/download/v2.2.8/cups-2.2.8-source.tar.gz
 Url: http://www.cups.org
 Packager: Anonymous <anonymous@example.com>
 Vendor: Example Corp
index 8b134b5..fa4e271 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Authorization routines for the CUPS scheduler.
  *
- * Copyright 2007-2016 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * This file contains Kerberos support code, copyright 2006 by
  * Jelmer Vernooij.
@@ -71,9 +71,6 @@ static int            check_authref(cupsd_client_t *con, const char *right);
 static int             compare_locations(cupsd_location_t *a,
                                          cupsd_location_t *b);
 static cupsd_authmask_t        *copy_authmask(cupsd_authmask_t *am, void *data);
-#if !HAVE_LIBPAM
-static char            *cups_crypt(const char *pw, const char *salt);
-#endif /* !HAVE_LIBPAM */
 static void            free_authmask(cupsd_authmask_t *am, void *data);
 #if HAVE_LIBPAM
 static int             pam_func(int, const struct pam_message **,
@@ -694,14 +691,14 @@ cupsdAuthorize(cupsd_client_t *con)       /* I - Client connection */
            * client...
            */
 
-           pass = cups_crypt(password, pw->pw_passwd);
+           pass = crypt(password, pw->pw_passwd);
 
            if (!pass || strcmp(pw->pw_passwd, pass))
            {
 #  ifdef HAVE_SHADOW_H
              if (spw)
              {
-               pass = cups_crypt(password, spw->sp_pwdp);
+               pass = crypt(password, spw->sp_pwdp);
 
                if (pass == NULL || strcmp(spw->sp_pwdp, pass))
                {
@@ -1995,129 +1992,6 @@ copy_authmask(cupsd_authmask_t *mask,   /* I - Existing auth mask */
 }
 
 
-#if !HAVE_LIBPAM
-/*
- * 'cups_crypt()' - Encrypt the password using the DES or MD5 algorithms,
- *                  as needed.
- */
-
-static char *                          /* O - Encrypted password */
-cups_crypt(const char *pw,             /* I - Password string */
-           const char *salt)           /* I - Salt (key) string */
-{
-  if (!strncmp(salt, "$1$", 3))
-  {
-   /*
-    * Use MD5 passwords without the benefit of PAM; this is for
-    * Slackware Linux, and the algorithm was taken from the
-    * old shadow-19990827/lib/md5crypt.c source code... :(
-    */
-
-    int                        i;              /* Looping var */
-    unsigned long      n;              /* Output number */
-    int                        pwlen;          /* Length of password string */
-    const char         *salt_end;      /* End of "salt" data for MD5 */
-    char               *ptr;           /* Pointer into result string */
-    _cups_md5_state_t  state;          /* Primary MD5 state info */
-    _cups_md5_state_t  state2;         /* Secondary MD5 state info */
-    unsigned char      digest[16];     /* MD5 digest result */
-    static char                result[120];    /* Final password string */
-
-
-   /*
-    * Get the salt data between dollar signs, e.g. $1$saltdata$md5.
-    * Get a maximum of 8 characters of salt data after $1$...
-    */
-
-    for (salt_end = salt + 3; *salt_end && (salt_end - salt) < 11; salt_end ++)
-      if (*salt_end == '$')
-        break;
-
-   /*
-    * Compute the MD5 sum we need...
-    */
-
-    pwlen = strlen(pw);
-
-    _cupsMD5Init(&state);
-    _cupsMD5Append(&state, (unsigned char *)pw, pwlen);
-    _cupsMD5Append(&state, (unsigned char *)salt, salt_end - salt);
-
-    _cupsMD5Init(&state2);
-    _cupsMD5Append(&state2, (unsigned char *)pw, pwlen);
-    _cupsMD5Append(&state2, (unsigned char *)salt + 3, salt_end - salt - 3);
-    _cupsMD5Append(&state2, (unsigned char *)pw, pwlen);
-    _cupsMD5Finish(&state2, digest);
-
-    for (i = pwlen; i > 0; i -= 16)
-      _cupsMD5Append(&state, digest, i > 16 ? 16 : i);
-
-    for (i = pwlen; i > 0; i >>= 1)
-      _cupsMD5Append(&state, (unsigned char *)((i & 1) ? "" : pw), 1);
-
-    _cupsMD5Finish(&state, digest);
-
-    for (i = 0; i < 1000; i ++)
-    {
-      _cupsMD5Init(&state);
-
-      if (i & 1)
-        _cupsMD5Append(&state, (unsigned char *)pw, pwlen);
-      else
-        _cupsMD5Append(&state, digest, 16);
-
-      if (i % 3)
-        _cupsMD5Append(&state, (unsigned char *)salt + 3, salt_end - salt - 3);
-
-      if (i % 7)
-        _cupsMD5Append(&state, (unsigned char *)pw, pwlen);
-
-      if (i & 1)
-        _cupsMD5Append(&state, digest, 16);
-      else
-        _cupsMD5Append(&state, (unsigned char *)pw, pwlen);
-
-      _cupsMD5Finish(&state, digest);
-    }
-
-   /*
-    * Copy the final sum to the result string and return...
-    */
-
-    memcpy(result, salt, (size_t)(salt_end - salt));
-    ptr = result + (salt_end - salt);
-    *ptr++ = '$';
-
-    for (i = 0; i < 5; i ++, ptr += 4)
-    {
-      n = ((((unsigned)digest[i] << 8) | (unsigned)digest[i + 6]) << 8);
-
-      if (i < 4)
-        n |= (unsigned)digest[i + 12];
-      else
-        n |= (unsigned)digest[5];
-
-      to64(ptr, n, 4);
-    }
-
-    to64(ptr, (unsigned)digest[11], 2);
-    ptr += 2;
-    *ptr = '\0';
-
-    return (result);
-  }
-  else
-  {
-   /*
-    * Use the standard crypt() function...
-    */
-
-    return (crypt(pw, salt));
-  }
-}
-#endif /* !HAVE_LIBPAM */
-
-
 /*
  * 'free_authmask()' - Free function for auth masks.
  */
index c36c1d2..0719700 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Client routines for the CUPS scheduler.
  *
- * Copyright 2007-2017 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * This file contains Kerberos support code, copyright 2006 by
  * Jelmer Vernooij.
@@ -818,6 +818,18 @@ cupsdReadClient(cupsd_client_t *con)       /* I - Client to read from */
 
   if (status == HTTP_STATUS_OK)
   {
+   /*
+    * Record whether the client is a web browser.  "Mozilla" was the original
+    * and it seems that every web browser in existence now uses that as the
+    * prefix with additional information identifying *which* browser.
+    *
+    * Chrome (at least) has problems with multiple WWW-Authenticate values in
+    * a single header, so we only report Basic or Negotiate to web browsers and
+    * leave the multiple choices to the native CUPS client...
+    */
+
+    con->is_browser = !strncmp(httpGetField(con->http, HTTP_FIELD_USER_AGENT), "Mozilla/", 8);
+
     if (httpGetField(con->http, HTTP_FIELD_ACCEPT_LANGUAGE)[0])
     {
      /*
@@ -2350,18 +2362,20 @@ cupsdSendHeader(
     auth_str[0] = '\0';
 
     if (auth_type == CUPSD_AUTH_BASIC)
+    {
       strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str));
+    }
     else if (auth_type == CUPSD_AUTH_NEGOTIATE)
     {
-#ifdef AF_LOCAL
+#if defined(SO_PEERCRED) && defined(AF_LOCAL)
       if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
-        strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str));
+       strlcpy(auth_str, "PeerCred", sizeof(auth_str));
       else
-#endif /* AF_LOCAL */
+#endif /* SO_PEERCRED && AF_LOCAL */
       strlcpy(auth_str, "Negotiate", sizeof(auth_str));
     }
 
-    if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE &&
+    if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE && !con->is_browser &&
         !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
     {
      /*
index b26d04c..beddab0 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Client definitions for the CUPS scheduler.
  *
- * Copyright 2007-2016 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
  * property of Apple Inc. and are protected by Federal copyright
@@ -30,6 +30,7 @@ struct cupsd_client_s
   struct timeval       start;          /* Request start time */
   http_state_t         operation;      /* Request operation */
   off_t                        bytes;          /* Bytes transferred for this request */
+  int                  is_browser;     /* Is the client a web browser? */
   int                  type;           /* AuthType for username */
   char                 username[HTTP_MAX_VALUE],
                                        /* Username from Authorization: line */
index 8c2694f..9c1be70 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Configuration routines for the CUPS scheduler.
  *
- * Copyright 2007-2017 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
  * property of Apple Inc. and are protected by Federal copyright
@@ -1481,13 +1481,25 @@ cupsdReadConfiguration(void)
     }
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: NumPolicies=%d",
-                  cupsArrayCount(Policies));
-  for (i = 0, p = (cupsd_policy_t *)cupsArrayFirst(Policies);
-       p;
-       i ++, p = (cupsd_policy_t *)cupsArrayNext(Policies))
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdReadConfiguration: Policies[%d]=\"%s\"", i, p->name);
+  if (LogLevel >= CUPSD_LOG_DEBUG2)
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: NumPolicies=%d",
+                   cupsArrayCount(Policies));
+    for (i = 0, p = (cupsd_policy_t *)cupsArrayFirst(Policies);
+        p;
+        i ++, p = (cupsd_policy_t *)cupsArrayNext(Policies))
+    {
+      int              j;              /* Looping var */
+      cupsd_location_t *loc;           /* Current location */
+
+      cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: Policies[%d]=\"%s\"", i, p->name);
+
+      for (j = 0, loc = (cupsd_location_t *)cupsArrayFirst(p->ops); loc; j ++, loc = (cupsd_location_t *)cupsArrayNext(p->ops))
+      {
+        cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration:     ops[%d]=%s", j, ippOpString(loc->op));
+      }
+    }
+  }
 
  /*
   * If we are doing a full reload or the server root has changed, flush
@@ -2916,13 +2928,10 @@ read_cupsd_conf(cups_file_t *fp)        /* I - File to read from */
                                        /* Line from file */
                        temp[HTTP_MAX_BUFFER],
                                        /* Temporary buffer for value */
-                       *value,         /* Pointer to value */
-                       *valueptr;      /* Pointer into value */
+                       *value;         /* Pointer to value */
   int                  valuelen;       /* Length of value */
   http_addrlist_t      *addrlist,      /* Address list */
                        *addr;          /* Current address */
-  cups_file_t          *incfile;       /* Include file */
-  char                 incname[1024];  /* Include filename */
 
 
  /*
@@ -2937,28 +2946,7 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
     * Decode the directive...
     */
 
-    if (!_cups_strcasecmp(line, "Include") && value)
-    {
-     /*
-      * Include filename
-      */
-
-      if (value[0] == '/')
-        strlcpy(incname, value, sizeof(incname));
-      else
-        snprintf(incname, sizeof(incname), "%s/%s", ServerRoot, value);
-
-      if ((incfile = cupsFileOpen(incname, "rb")) == NULL)
-        cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "Unable to include config file \"%s\" - %s",
-                       incname, strerror(errno));
-      else
-      {
-        read_cupsd_conf(incfile);
-       cupsFileClose(incfile);
-      }
-    }
-    else if (!_cups_strcasecmp(line, "<Location") && value)
+    if (!_cups_strcasecmp(line, "<Location") && value)
     {
      /*
       * <Location path>
@@ -3354,31 +3342,6 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
        cupsdLogMessage(CUPSD_LOG_WARN, "Unknown ServerTokens %s on line %d of %s.",
                         value, linenum, ConfigurationFile);
     }
-    else if (!_cups_strcasecmp(line, "PassEnv") && value)
-    {
-     /*
-      * PassEnv variable [... variable]
-      */
-
-      for (; *value;)
-      {
-        for (valuelen = 0; value[valuelen]; valuelen ++)
-         if (_cups_isspace(value[valuelen]) || value[valuelen] == ',')
-           break;
-
-        if (value[valuelen])
-        {
-         value[valuelen] = '\0';
-         valuelen ++;
-       }
-
-        cupsdSetEnv(value, NULL);
-
-        for (value += valuelen; *value; value ++)
-         if (!_cups_isspace(*value) || *value != ',')
-           break;
-      }
-    }
     else if (!_cups_strcasecmp(line, "ServerAlias") && value)
     {
      /*
@@ -3407,30 +3370,6 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
            break;
       }
     }
-    else if (!_cups_strcasecmp(line, "SetEnv") && value)
-    {
-     /*
-      * SetEnv variable value
-      */
-
-      for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++);
-
-      if (*valueptr)
-      {
-       /*
-        * Found a value...
-       */
-
-        while (isspace(*valueptr & 255))
-         *valueptr++ = '\0';
-
-        cupsdSetEnv(value, valueptr);
-      }
-      else
-        cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "Missing value for SetEnv directive on line %d of %s.",
-                       linenum, ConfigurationFile);
-    }
     else if (!_cups_strcasecmp(line, "AccessLog") ||
              !_cups_strcasecmp(line, "CacheDir") ||
              !_cups_strcasecmp(line, "ConfigFilePerm") ||
@@ -3444,6 +3383,7 @@ read_cupsd_conf(cups_file_t *fp)  /* I - File to read from */
              !_cups_strcasecmp(line, "LogFilePerm") ||
              !_cups_strcasecmp(line, "LPDConfigFile") ||
              !_cups_strcasecmp(line, "PageLog") ||
+             !_cups_strcasecmp(line, "PassEnv") ||
              !_cups_strcasecmp(line, "Printcap") ||
              !_cups_strcasecmp(line, "PrintcapFormat") ||
              !_cups_strcasecmp(line, "RemoteRoot") ||
@@ -3453,6 +3393,7 @@ read_cupsd_conf(cups_file_t *fp)  /* I - File to read from */
              !_cups_strcasecmp(line, "ServerKey") ||
              !_cups_strcasecmp(line, "ServerKeychain") ||
              !_cups_strcasecmp(line, "ServerRoot") ||
+             !_cups_strcasecmp(line, "SetEnv") ||
              !_cups_strcasecmp(line, "SMBConfigFile") ||
              !_cups_strcasecmp(line, "StateDir") ||
              !_cups_strcasecmp(line, "SystemGroup") ||
@@ -3482,10 +3423,49 @@ read_cupsd_conf(cups_file_t *fp)        /* I - File to read from */
 static int                             /* O - 1 on success, 0 on failure */
 read_cups_files_conf(cups_file_t *fp)  /* I - File to read from */
 {
-  int          linenum;                /* Current line number */
+  int          i,                      /* Looping var */
+               linenum;                /* Current line number */
   char         line[HTTP_MAX_BUFFER],  /* Line from file */
                *value;                 /* Value from line */
   struct group *group;                 /* Group */
+  static const char * const prohibited_env[] =
+  {                                    /* Prohibited environment variables */
+    "APPLE_LANGUAGE",
+    "AUTH_DOMAIN",
+    "AUTH_INFO_REQUIRED",
+    "AUTH_NEGOTIATE",
+    "AUTH_PASSWORD",
+    "AUTH_UID",
+    "AUTH_USERNAME",
+    "CHARSET",
+    "CLASS",
+    "CLASSIFICATION",
+    "CONTENT_TYPE",
+    "CUPS_CACHEDIR",
+    "CUPS_DATADIR",
+    "CUPS_DOCROOT",
+    "CUPS_FILETYPE",
+    "CUPS_FONTPATH",
+    "CUPS_MAX_MESSAGE",
+    "CUPS_REQUESTROOT",
+    "CUPS_SERVERBIN",
+    "CUPS_SERVERROOT",
+    "CUPS_STATEDIR",
+    "DEVICE_URI",
+    "FINAL_CONTENT_TYPE",
+    "HOME",
+    "LANG",
+    "PPD",
+    "PRINTER",
+    "PRINTER_INFO",
+    "PRINTER_LOCATION",
+    "PRINTER_STATE_REASONS",
+    "RIP_CACHE",
+    "SERVER_ADMIN",
+    "SOFTWARE",
+    "TMPDIR",
+    "USER"
+  };
 
 
  /*
@@ -3523,6 +3503,47 @@ read_cups_files_conf(cups_file_t *fp)    /* I - File to read from */
        }
       }
     }
+    else if (!_cups_strcasecmp(line, "PassEnv") && value)
+    {
+     /*
+      * PassEnv variable [... variable]
+      */
+
+      int valuelen;                    /* Length of variable name */
+
+      for (; *value;)
+      {
+        for (valuelen = 0; value[valuelen]; valuelen ++)
+         if (_cups_isspace(value[valuelen]) || value[valuelen] == ',')
+           break;
+
+        if (value[valuelen])
+        {
+         value[valuelen] = '\0';
+         valuelen ++;
+       }
+
+        for (i = 0; i < (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])); i ++)
+        {
+          if (!strcmp(value, prohibited_env[i]))
+          {
+           cupsdLogMessage(CUPSD_LOG_ERROR, "Environment variable \"%s\" cannot be passed through on line %d of %s.", value, linenum, CupsFilesFile);
+
+           if (FatalErrors & CUPSD_FATAL_CONFIG)
+             return (0);
+           else
+             break;
+          }
+       }
+
+        if (i >= (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])))
+          cupsdSetEnv(value, NULL);
+
+        for (value += valuelen; *value; value ++)
+         if (!_cups_isspace(*value) || *value != ',')
+           break;
+      }
+    }
     else if (!_cups_strcasecmp(line, "PrintcapFormat") && value)
     {
      /*
@@ -3568,6 +3589,46 @@ read_cups_files_conf(cups_file_t *fp)    /* I - File to read from */
           return (0);
       }
     }
+    else if (!_cups_strcasecmp(line, "SetEnv") && value)
+    {
+     /*
+      * SetEnv variable value
+      */
+
+      char *valueptr;                  /* Pointer to environment variable value */
+
+      for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++);
+
+      if (*valueptr)
+      {
+       /*
+        * Found a value...
+       */
+
+        while (isspace(*valueptr & 255))
+         *valueptr++ = '\0';
+
+        for (i = 0; i < (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])); i ++)
+        {
+          if (!strcmp(value, prohibited_env[i]))
+          {
+           cupsdLogMessage(CUPSD_LOG_ERROR, "Environment variable \"%s\" cannot be set  on line %d of %s.", value, linenum, CupsFilesFile);
+
+           if (FatalErrors & CUPSD_FATAL_CONFIG)
+             return (0);
+           else
+             break;
+          }
+       }
+
+        if (i >= (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])))
+         cupsdSetEnv(value, valueptr);
+      }
+      else
+        cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "Missing value for SetEnv directive on line %d of %s.",
+                       linenum, ConfigurationFile);
+    }
     else if (!_cups_strcasecmp(line, "SystemGroup") && value)
     {
      /*
@@ -3853,11 +3914,9 @@ read_policy(cups_file_t *fp,             /* I - Configuration file */
         if (num_ops < (int)(sizeof(ops) / sizeof(ops[0])))
        {
          if (!_cups_strcasecmp(value, "All"))
-           ops[num_ops] = IPP_ANY_OPERATION;
+           ops[num_ops ++] = IPP_ANY_OPERATION;
          else if ((ops[num_ops] = ippOpValue(value)) == IPP_BAD_OPERATION)
-           cupsdLogMessage(CUPSD_LOG_ERROR,
-                           "Bad IPP operation name \"%s\" on line %d of %s.",
-                           value, linenum, ConfigurationFile);
+           cupsdLogMessage(CUPSD_LOG_ERROR, "Bad IPP operation name \"%s\" on line %d of %s.", value, linenum, ConfigurationFile);
           else
            num_ops ++;
        }
index ad8f1f0..d1c6a89 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * IPP routines for the CUPS scheduler.
  *
- * Copyright 2007-2016 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * This file contains Kerberos support code, copyright 2006 by
  * Jelmer Vernooij.
@@ -150,6 +150,7 @@ cupsdProcessIPPRequest(
   ipp_attribute_t      *uri = NULL;    /* Printer or job URI attribute */
   ipp_attribute_t      *username;      /* requesting-user-name attr */
   int                  sub_id;         /* Subscription ID */
+  int                  valid = 1;      /* Valid request? */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdProcessIPPRequest(%p[%d]): operation_id=%04x(%s)", con, con->number, con->request->request.op.operation_id, ippOpString(con->request->request.op.operation_id));
@@ -183,34 +184,23 @@ cupsdProcessIPPRequest(
 
   con->response = ippNew();
 
-  con->response->request.status.version[0] =
-      con->request->request.op.version[0];
-  con->response->request.status.version[1] =
-      con->request->request.op.version[1];
-  con->response->request.status.request_id =
-      con->request->request.op.request_id;
+  con->response->request.status.version[0] = con->request->request.op.version[0];
+  con->response->request.status.version[1] = con->request->request.op.version[1];
+  con->response->request.status.request_id = con->request->request.op.request_id;
 
  /*
   * Then validate the request header and required attributes...
   */
 
-  if (con->request->request.any.version[0] != 1 &&
-      con->request->request.any.version[0] != 2)
+  if (con->request->request.any.version[0] != 1 && con->request->request.any.version[0] != 2)
   {
    /*
     * Return an error, since we only support IPP 1.x and 2.x.
     */
 
-    cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                  "%04X %s Bad request version number %d.%d",
-                 IPP_VERSION_NOT_SUPPORTED, con->http->hostname,
-                  con->request->request.any.version[0],
-                 con->request->request.any.version[1]);
+    cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Bad request version number %d.%d.", IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED, con->http->hostname, con->request->request.any.version[0], con->request->request.any.version[1]);
 
-    send_ipp_status(con, IPP_VERSION_NOT_SUPPORTED,
-                    _("Bad request version number %d.%d."),
-                   con->request->request.any.version[0],
-                   con->request->request.any.version[1]);
+    send_ipp_status(con, IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED, _("Bad request version number %d.%d."), con->request->request.any.version[0], con->request->request.any.version[1]);
   }
   else if (con->request->request.any.request_id < 1)
   {
@@ -218,21 +208,15 @@ cupsdProcessIPPRequest(
     * Return an error, since request IDs must be between 1 and 2^31-1
     */
 
-    cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                  "%04X %s Bad request ID %d",
-                 IPP_BAD_REQUEST, con->http->hostname,
-                  con->request->request.any.request_id);
+    cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Bad request ID %d.", IPP_STATUS_ERROR_BAD_REQUEST, con->http->hostname, con->request->request.any.request_id);
 
-    send_ipp_status(con, IPP_BAD_REQUEST, _("Bad request ID %d."),
-                   con->request->request.any.request_id);
+    send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Bad request ID %d."), con->request->request.any.request_id);
   }
   else if (!con->request->attrs)
   {
-    cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                  "%04X %s No attributes in request",
-                 IPP_BAD_REQUEST, con->http->hostname);
+    cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s No attributes in request.", IPP_STATUS_ERROR_BAD_REQUEST, con->http->hostname);
 
-    send_ipp_status(con, IPP_BAD_REQUEST, _("No attributes in request."));
+    send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("No attributes in request."));
   }
   else
   {
@@ -250,13 +234,9 @@ cupsdProcessIPPRequest(
        * Out of order; return an error...
        */
 
-       cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                      "%04X %s Attribute groups are out of order",
-                     IPP_BAD_REQUEST, con->http->hostname);
+       cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Attribute groups are out of order", IPP_STATUS_ERROR_BAD_REQUEST, con->http->hostname);
 
-       send_ipp_status(con, IPP_BAD_REQUEST,
-                       _("Attribute groups are out of order (%x < %x)."),
-                       attr->group_tag, group);
+       send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Attribute groups are out of order (%x < %x)."), attr->group_tag, group);
        break;
       }
       else
@@ -273,9 +253,7 @@ cupsdProcessIPPRequest(
       */
 
       attr = con->request->attrs;
-      if (attr && attr->name &&
-          !strcmp(attr->name, "attributes-charset") &&
-         (attr->value_tag & IPP_TAG_MASK) == IPP_TAG_CHARSET)
+      if (attr && attr->name && !strcmp(attr->name, "attributes-charset") && (attr->value_tag & IPP_TAG_MASK) == IPP_TAG_CHARSET)
        charset = attr;
       else
        charset = NULL;
@@ -283,9 +261,7 @@ cupsdProcessIPPRequest(
       if (attr)
         attr = attr->next;
 
-      if (attr && attr->name &&
-          !strcmp(attr->name, "attributes-natural-language") &&
-         (attr->value_tag & IPP_TAG_MASK) == IPP_TAG_LANGUAGE)
+      if (attr && attr->name && !strcmp(attr->name, "attributes-natural-language") && (attr->value_tag & IPP_TAG_MASK) == IPP_TAG_LANGUAGE)
       {
        language = attr;
 
@@ -303,11 +279,9 @@ cupsdProcessIPPRequest(
       else
        language = NULL;
 
-      if ((attr = ippFindAttribute(con->request, "printer-uri",
-                                   IPP_TAG_URI)) != NULL)
+      if ((attr = ippFindAttribute(con->request, "printer-uri", IPP_TAG_URI)) != NULL)
        uri = attr;
-      else if ((attr = ippFindAttribute(con->request, "job-uri",
-                                        IPP_TAG_URI)) != NULL)
+      else if ((attr = ippFindAttribute(con->request, "job-uri", IPP_TAG_URI)) != NULL)
        uri = attr;
       else if (con->request->request.op.operation_id == CUPS_GET_PPD)
         uri = ippFindAttribute(con->request, "ppd-name", IPP_TAG_NAME);
@@ -315,24 +289,16 @@ cupsdProcessIPPRequest(
        uri = NULL;
 
       if (charset)
-       ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
-                    "attributes-charset", NULL,
-                    charset->values[0].string.text);
+       ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, charset->values[0].string.text);
       else
-       ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
-                    "attributes-charset", NULL, "utf-8");
+       ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8");
 
       if (language)
-       ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
-                     "attributes-natural-language", NULL,
-                    language->values[0].string.text);
+       ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, language->values[0].string.text);
       else
-       ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
-                     "attributes-natural-language", NULL, DefaultLanguage);
+       ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, DefaultLanguage);
 
-      if (charset &&
-          _cups_strcasecmp(charset->values[0].string.text, "us-ascii") &&
-          _cups_strcasecmp(charset->values[0].string.text, "utf-8"))
+      if (charset && _cups_strcasecmp(charset->values[0].string.text, "us-ascii") && _cups_strcasecmp(charset->values[0].string.text, "utf-8"))
       {
        /*
         * Bad character set...
@@ -340,13 +306,8 @@ cupsdProcessIPPRequest(
 
         cupsdLogMessage(CUPSD_LOG_ERROR, "Unsupported character set \"%s\"",
                        charset->values[0].string.text);
-       cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                     "%04X %s Unsupported attributes-charset value \"%s\"",
-                     IPP_CHARSET, con->http->hostname,
-                     charset->values[0].string.text);
-       send_ipp_status(con, IPP_BAD_REQUEST,
-                       _("Unsupported character set \"%s\"."),
-                       charset->values[0].string.text);
+       cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Unsupported attributes-charset value \"%s\".", IPP_STATUS_ERROR_CHARSET, con->http->hostname, charset->values[0].string.text);
+       send_ipp_status(con, IPP_STATUS_ERROR_CHARSET, _("Unsupported character set \"%s\"."), charset->values[0].string.text);
       }
       else if (!charset || !language ||
               (!uri &&
@@ -364,33 +325,24 @@ cupsdProcessIPPRequest(
 
         if (!charset)
        {
-         cupsdLogMessage(CUPSD_LOG_ERROR,
-                         "Missing attributes-charset attribute");
+         cupsdLogMessage(CUPSD_LOG_ERROR, "Missing attributes-charset attribute.");
 
-         cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                       "%04X %s Missing attributes-charset attribute",
-                       IPP_BAD_REQUEST, con->http->hostname);
+         cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Missing attributes-charset attribute.", IPP_STATUS_ERROR_BAD_REQUEST, con->http->hostname);
         }
 
         if (!language)
        {
          cupsdLogMessage(CUPSD_LOG_ERROR,
-                         "Missing attributes-natural-language attribute");
+                         "Missing attributes-natural-language attribute.");
 
-         cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                       "%04X %s Missing attributes-natural-language attribute",
-                       IPP_BAD_REQUEST, con->http->hostname);
+         cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Missing attributes-natural-language attribute.", IPP_STATUS_ERROR_BAD_REQUEST, con->http->hostname);
         }
 
         if (!uri)
        {
-         cupsdLogMessage(CUPSD_LOG_ERROR,
-                         "Missing printer-uri, job-uri, or ppd-name "
-                         "attribute");
+         cupsdLogMessage(CUPSD_LOG_ERROR, "Missing printer-uri, job-uri, or ppd-name attribute.");
 
-         cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                       "%04X %s Missing printer-uri, job-uri, or ppd-name "
-                       "attribute", IPP_BAD_REQUEST, con->http->hostname);
+         cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Missing printer-uri, job-uri, or ppd-name attribute.", IPP_STATUS_ERROR_BAD_REQUEST, con->http->hostname);
         }
 
        cupsdLogMessage(CUPSD_LOG_DEBUG, "Request attributes follow...");
@@ -409,20 +361,55 @@ cupsdProcessIPPRequest(
       else
       {
        /*
-       * OK, all the checks pass so far; make sure requesting-user-name is
-       * not "root" from a remote host...
+       * OK, all the checks pass so far; validate "requesting-user-name"
+       * attribute value...
        */
 
-        if ((username = ippFindAttribute(con->request, "requesting-user-name",
-                                        IPP_TAG_NAME)) != NULL)
-       {
-        /*
-         * Check for root user...
-         */
-
-         if (!strcmp(username->values[0].string.text, "root") &&
-             _cups_strcasecmp(con->http->hostname, "localhost") &&
-             strcmp(con->username, "root"))
+        if ((username = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_ZERO)) != NULL)
+        {
+         /*
+          * Validate "requesting-user-name"...
+          */
+
+          if (username->group_tag != IPP_TAG_OPERATION && StrictConformance)
+          {
+           cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s \"requesting-user-name\" attribute in wrong group.", IPP_STATUS_ERROR_BAD_REQUEST, con->http->hostname);
+           send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("\"requesting-user-name\" attribute in wrong group."));
+           valid = 0;
+          }
+          else if (username->value_tag != IPP_TAG_NAME && username->value_tag != IPP_TAG_NAMELANG)
+          {
+           cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s \"requesting-user-name\" attribute with wrong syntax.", IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, con->http->hostname);
+           send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("\"requesting-user-name\" attribute with wrong syntax."));
+           if ((attr = ippCopyAttribute(con->response, username, 0)) != NULL)
+             attr->group_tag = IPP_TAG_UNSUPPORTED_GROUP;
+           valid = 0;
+          }
+          else if (!ippValidateAttribute(username))
+          {
+           cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s \"requesting-user-name\" attribute with bad value.", IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, con->http->hostname);
+
+            if (StrictConformance)
+            {
+             /*
+              * Throw an error...
+              */
+
+             send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("\"requesting-user-name\" attribute with wrong syntax."));
+              if ((attr = ippCopyAttribute(con->response, username, 0)) != NULL)
+                attr->group_tag = IPP_TAG_UNSUPPORTED_GROUP;
+             valid = 0;
+           }
+           else
+           {
+            /*
+             * Map bad "requesting-user-name" to 'anonymous'...
+             */
+
+              ippSetString(con->request, &username, 0, "anonymous");
+           }
+          }
+          else if (!strcmp(username->values[0].string.text, "root") && _cups_strcasecmp(con->http->hostname, "localhost") && strcmp(con->username, "root"))
          {
           /*
            * Remote unauthenticated user masquerading as local root...
@@ -432,215 +419,207 @@ cupsdProcessIPPRequest(
          }
        }
 
-        if ((attr = ippFindAttribute(con->request, "notify-subscription-id",
-                                    IPP_TAG_INTEGER)) != NULL)
+        if ((attr = ippFindAttribute(con->request, "notify-subscription-id", IPP_TAG_INTEGER)) != NULL)
          sub_id = attr->values[0].integer;
        else
          sub_id = 0;
 
-       /*
-        * Then try processing the operation...
-       */
-
-        if (uri)
-         cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s",
-                         ippOpString(con->request->request.op.operation_id),
-                         uri->values[0].string.text);
-        else
-         cupsdLogMessage(CUPSD_LOG_DEBUG, "%s",
-                         ippOpString(con->request->request.op.operation_id));
-
-       switch (con->request->request.op.operation_id)
-       {
-         case IPP_OP_PRINT_JOB :
-              print_job(con, uri);
-              break;
-
-         case IPP_OP_VALIDATE_JOB :
-              validate_job(con, uri);
-              break;
-
-         case IPP_OP_CREATE_JOB :
-              create_job(con, uri);
-              break;
-
-         case IPP_OP_SEND_DOCUMENT :
-              send_document(con, uri);
-              break;
-
-         case IPP_OP_CANCEL_JOB :
-              cancel_job(con, uri);
-              break;
-
-         case IPP_OP_GET_JOB_ATTRIBUTES :
-              get_job_attrs(con, uri);
-              break;
-
-         case IPP_OP_GET_JOBS :
-              get_jobs(con, uri);
-              break;
-
-         case IPP_OP_GET_PRINTER_ATTRIBUTES :
-              get_printer_attrs(con, uri);
-              break;
-
-         case IPP_OP_GET_PRINTER_SUPPORTED_VALUES :
-              get_printer_supported(con, uri);
-              break;
-
-         case IPP_OP_HOLD_JOB :
-              hold_job(con, uri);
-              break;
-
-         case IPP_OP_RELEASE_JOB :
-              release_job(con, uri);
-              break;
-
-         case IPP_OP_RESTART_JOB :
-              restart_job(con, uri);
-              break;
-
-         case IPP_OP_PAUSE_PRINTER :
-              stop_printer(con, uri);
-             break;
-
-         case IPP_OP_RESUME_PRINTER :
-              start_printer(con, uri);
-             break;
-
-         case IPP_OP_PURGE_JOBS :
-         case IPP_OP_CANCEL_JOBS :
-         case IPP_OP_CANCEL_MY_JOBS :
-              cancel_all_jobs(con, uri);
-              break;
-
-         case IPP_OP_SET_JOB_ATTRIBUTES :
-              set_job_attrs(con, uri);
-              break;
-
-         case IPP_OP_SET_PRINTER_ATTRIBUTES :
-              set_printer_attrs(con, uri);
-              break;
-
-         case IPP_OP_HOLD_NEW_JOBS :
-              hold_new_jobs(con, uri);
-              break;
-
-         case IPP_OP_RELEASE_HELD_NEW_JOBS :
-              release_held_new_jobs(con, uri);
-              break;
-
-         case IPP_OP_CLOSE_JOB :
-              close_job(con, uri);
-              break;
-
-         case IPP_OP_CUPS_GET_DEFAULT :
-              get_default(con);
-              break;
-
-         case IPP_OP_CUPS_GET_PRINTERS :
-              get_printers(con, 0);
-              break;
-
-         case IPP_OP_CUPS_GET_CLASSES :
-              get_printers(con, CUPS_PRINTER_CLASS);
-              break;
-
-         case IPP_OP_CUPS_ADD_MODIFY_PRINTER :
-              add_printer(con, uri);
-              break;
-
-         case IPP_OP_CUPS_DELETE_PRINTER :
-              delete_printer(con, uri);
-              break;
-
-         case IPP_OP_CUPS_ADD_MODIFY_CLASS :
-              add_class(con, uri);
-              break;
-
-         case IPP_OP_CUPS_DELETE_CLASS :
-              delete_printer(con, uri);
-              break;
+        if (valid)
+        {
+        /*
+         * Try processing the operation...
+         */
 
-         case IPP_OP_CUPS_ACCEPT_JOBS :
-         case IPP_OP_ENABLE_PRINTER :
-              accept_jobs(con, uri);
-              break;
+         if (uri)
+           cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s", ippOpString(con->request->request.op.operation_id), uri->values[0].string.text);
+         else
+           cupsdLogMessage(CUPSD_LOG_DEBUG, "%s", ippOpString(con->request->request.op.operation_id));
 
-         case IPP_OP_CUPS_REJECT_JOBS :
-         case IPP_OP_DISABLE_PRINTER :
-              reject_jobs(con, uri);
-              break;
+         switch (con->request->request.op.operation_id)
+         {
+           case IPP_OP_PRINT_JOB :
+               print_job(con, uri);
+               break;
+
+           case IPP_OP_VALIDATE_JOB :
+               validate_job(con, uri);
+               break;
+
+           case IPP_OP_CREATE_JOB :
+               create_job(con, uri);
+               break;
+
+           case IPP_OP_SEND_DOCUMENT :
+               send_document(con, uri);
+               break;
+
+           case IPP_OP_CANCEL_JOB :
+               cancel_job(con, uri);
+               break;
+
+           case IPP_OP_GET_JOB_ATTRIBUTES :
+               get_job_attrs(con, uri);
+               break;
+
+           case IPP_OP_GET_JOBS :
+               get_jobs(con, uri);
+               break;
+
+           case IPP_OP_GET_PRINTER_ATTRIBUTES :
+               get_printer_attrs(con, uri);
+               break;
+
+           case IPP_OP_GET_PRINTER_SUPPORTED_VALUES :
+               get_printer_supported(con, uri);
+               break;
+
+           case IPP_OP_HOLD_JOB :
+               hold_job(con, uri);
+               break;
+
+           case IPP_OP_RELEASE_JOB :
+               release_job(con, uri);
+               break;
+
+           case IPP_OP_RESTART_JOB :
+               restart_job(con, uri);
+               break;
+
+           case IPP_OP_PAUSE_PRINTER :
+               stop_printer(con, uri);
+               break;
+
+           case IPP_OP_RESUME_PRINTER :
+               start_printer(con, uri);
+               break;
+
+           case IPP_OP_PURGE_JOBS :
+           case IPP_OP_CANCEL_JOBS :
+           case IPP_OP_CANCEL_MY_JOBS :
+               cancel_all_jobs(con, uri);
+               break;
+
+           case IPP_OP_SET_JOB_ATTRIBUTES :
+               set_job_attrs(con, uri);
+               break;
+
+           case IPP_OP_SET_PRINTER_ATTRIBUTES :
+               set_printer_attrs(con, uri);
+               break;
+
+           case IPP_OP_HOLD_NEW_JOBS :
+               hold_new_jobs(con, uri);
+               break;
+
+           case IPP_OP_RELEASE_HELD_NEW_JOBS :
+               release_held_new_jobs(con, uri);
+               break;
+
+           case IPP_OP_CLOSE_JOB :
+               close_job(con, uri);
+               break;
+
+           case IPP_OP_CUPS_GET_DEFAULT :
+               get_default(con);
+               break;
+
+           case IPP_OP_CUPS_GET_PRINTERS :
+               get_printers(con, 0);
+               break;
+
+           case IPP_OP_CUPS_GET_CLASSES :
+               get_printers(con, CUPS_PRINTER_CLASS);
+               break;
+
+           case IPP_OP_CUPS_ADD_MODIFY_PRINTER :
+               add_printer(con, uri);
+               break;
+
+           case IPP_OP_CUPS_DELETE_PRINTER :
+               delete_printer(con, uri);
+               break;
+
+           case IPP_OP_CUPS_ADD_MODIFY_CLASS :
+               add_class(con, uri);
+               break;
+
+           case IPP_OP_CUPS_DELETE_CLASS :
+               delete_printer(con, uri);
+               break;
+
+           case IPP_OP_CUPS_ACCEPT_JOBS :
+           case IPP_OP_ENABLE_PRINTER :
+               accept_jobs(con, uri);
+               break;
+
+           case IPP_OP_CUPS_REJECT_JOBS :
+           case IPP_OP_DISABLE_PRINTER :
+               reject_jobs(con, uri);
+               break;
 
-         case IPP_OP_CUPS_SET_DEFAULT :
-              set_default(con, uri);
-              break;
+           case IPP_OP_CUPS_SET_DEFAULT :
+               set_default(con, uri);
+               break;
 
-         case IPP_OP_CUPS_GET_DEVICES :
-              get_devices(con);
-              break;
+           case IPP_OP_CUPS_GET_DEVICES :
+               get_devices(con);
+               break;
 
-          case IPP_OP_CUPS_GET_DOCUMENT :
-             get_document(con, uri);
-             break;
+           case IPP_OP_CUPS_GET_DOCUMENT :
+               get_document(con, uri);
+               break;
 
-         case IPP_OP_CUPS_GET_PPD :
-              get_ppd(con, uri);
-              break;
+           case IPP_OP_CUPS_GET_PPD :
+               get_ppd(con, uri);
+               break;
 
-         case IPP_OP_CUPS_GET_PPDS :
-              get_ppds(con);
-              break;
+           case IPP_OP_CUPS_GET_PPDS :
+               get_ppds(con);
+               break;
 
-         case IPP_OP_CUPS_MOVE_JOB :
-              move_job(con, uri);
-              break;
+           case IPP_OP_CUPS_MOVE_JOB :
+               move_job(con, uri);
+               break;
 
-         case IPP_OP_CUPS_AUTHENTICATE_JOB :
-              authenticate_job(con, uri);
-              break;
+           case IPP_OP_CUPS_AUTHENTICATE_JOB :
+               authenticate_job(con, uri);
+               break;
 
-          case IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS :
-         case IPP_OP_CREATE_JOB_SUBSCRIPTIONS :
-             create_subscriptions(con, uri);
-             break;
+           case IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS :
+           case IPP_OP_CREATE_JOB_SUBSCRIPTIONS :
+               create_subscriptions(con, uri);
+               break;
+
+           case IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES :
+               get_subscription_attrs(con, sub_id);
+               break;
+
+           case IPP_OP_GET_SUBSCRIPTIONS :
+               get_subscriptions(con, uri);
+               break;
 
-          case IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES :
-             get_subscription_attrs(con, sub_id);
-             break;
+           case IPP_OP_RENEW_SUBSCRIPTION :
+               renew_subscription(con, sub_id);
+               break;
 
-         case IPP_OP_GET_SUBSCRIPTIONS :
-             get_subscriptions(con, uri);
-             break;
+           case IPP_OP_CANCEL_SUBSCRIPTION :
+               cancel_subscription(con, sub_id);
+               break;
 
-         case IPP_OP_RENEW_SUBSCRIPTION :
-             renew_subscription(con, sub_id);
-             break;
+           case IPP_OP_GET_NOTIFICATIONS :
+               get_notifications(con);
+               break;
 
-         case IPP_OP_CANCEL_SUBSCRIPTION :
-             cancel_subscription(con, sub_id);
-             break;
+           case IPP_OP_CUPS_CREATE_LOCAL_PRINTER :
+               create_local_printer(con);
+               break;
 
-          case IPP_OP_GET_NOTIFICATIONS :
-             get_notifications(con);
-             break;
+           default :
+               cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Operation %04X (%s) not supported.", IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED, con->http->hostname, con->request->request.op.operation_id, ippOpString(con->request->request.op.operation_id));
 
-         case IPP_OP_CUPS_CREATE_LOCAL_PRINTER :
-             create_local_printer(con);
-             break;
-
-         default :
-             cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL,
-                           "%04X %s Operation %04X (%s) not supported",
-                           IPP_OPERATION_NOT_SUPPORTED, con->http->hostname,
-                           con->request->request.op.operation_id,
-                           ippOpString(con->request->request.op.operation_id));
-
-              send_ipp_status(con, IPP_OPERATION_NOT_SUPPORTED,
-                             _("%s not supported."),
-                             ippOpString(
-                                 con->request->request.op.operation_id));
-             break;
+               send_ipp_status(con, IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED, _("%s not supported."), ippOpString(con->request->request.op.operation_id));
+               break;
+         }
        }
       }
     }
@@ -652,16 +631,7 @@ cupsdProcessIPPRequest(
     * Sending data from the scheduler...
     */
 
-    cupsdLogMessage(con->response->request.status.status_code
-                        >= IPP_BAD_REQUEST &&
-                    con->response->request.status.status_code
-                       != IPP_NOT_FOUND ? CUPSD_LOG_ERROR : CUPSD_LOG_DEBUG,
-                    "[Client %d] Returning IPP %s for %s (%s) from %s",
-                   con->number,
-                   ippErrorString(con->response->request.status.status_code),
-                   ippOpString(con->request->request.op.operation_id),
-                   uri ? uri->values[0].string.text : "no URI",
-                   con->http->hostname);
+    cupsdLogClient(con, con->response->request.status.status_code >= IPP_STATUS_ERROR_BAD_REQUEST && con->response->request.status.status_code != IPP_STATUS_ERROR_NOT_FOUND ? CUPSD_LOG_ERROR : CUPSD_LOG_DEBUG, "Returning IPP %s for %s (%s) from %s.",  ippErrorString(con->response->request.status.status_code), ippOpString(con->request->request.op.operation_id), uri ? uri->values[0].string.text : "no URI", con->http->hostname);
 
     httpClearFields(con->http);
 
@@ -676,10 +646,7 @@ cupsdProcessIPPRequest(
 
     if (con->http->version == HTTP_1_1)
     {
-      cupsdLogMessage(CUPSD_LOG_DEBUG,
-                     "[Client %d] Transfer-Encoding: chunked",
-                     con->number);
-
+      cupsdLogClient(con, CUPSD_LOG_DEBUG, "Transfer-Encoding: chunked");
       cupsdSetLength(con->http, 0);
     }
     else
@@ -698,9 +665,7 @@ cupsdProcessIPPRequest(
          length += (size_t)fileinfo.st_size;
       }
 
-      cupsdLogMessage(CUPSD_LOG_DEBUG,
-                     "[Client %d] Content-Length: " CUPS_LLFMT,
-                     con->number, CUPS_LLCAST length);
+      cupsdLogClient(con, CUPSD_LOG_DEBUG, "Content-Length: " CUPS_LLFMT, CUPS_LLCAST length);
       httpSetLength(con->http, length);
     }
 
@@ -710,8 +675,7 @@ cupsdProcessIPPRequest(
       * Tell the caller the response header was sent successfully...
       */
 
-      cupsdAddSelect(httpGetFd(con->http), (cupsd_selfunc_t)cupsdReadClient,
-                    (cupsd_selfunc_t)cupsdWriteClient, con);
+      cupsdAddSelect(httpGetFd(con->http), (cupsd_selfunc_t)cupsdReadClient, (cupsd_selfunc_t)cupsdWriteClient, con);
 
       return (1);
     }
@@ -1586,27 +1550,34 @@ add_job(cupsd_client_t  *con,           /* I - Client connection */
                     _("Bad job-name value: Wrong type or count."));
     if ((attr = ippCopyAttribute(con->response, attr, 0)) != NULL)
       attr->group_tag = IPP_TAG_UNSUPPORTED_GROUP;
-    return (NULL);
+
+    if (StrictConformance)
+      return (NULL);
+
+    /* Don't use invalid attribute */
+    ippDeleteAttribute(con->request, attr);
+
+    ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, "Untitled");
   }
   else if (!ippValidateAttribute(attr))
   {
     send_ipp_status(con, IPP_ATTRIBUTES, _("Bad job-name value: %s"),
                     cupsLastErrorString());
+
     if ((attr = ippCopyAttribute(con->response, attr, 0)) != NULL)
       attr->group_tag = IPP_TAG_UNSUPPORTED_GROUP;
-    return (NULL);
-  }
 
-  attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME);
+    if (StrictConformance)
+      return (NULL);
 
-  if (attr && !ippValidateAttribute(attr))
-  {
-    send_ipp_status(con, IPP_ATTRIBUTES, _("Bad requesting-user-name value: %s"), cupsLastErrorString());
-    if ((attr = ippCopyAttribute(con->response, attr, 0)) != NULL)
-      attr->group_tag = IPP_TAG_UNSUPPORTED_GROUP;
-    return (NULL);
+    /* Don't use invalid attribute */
+    ippDeleteAttribute(con->request, attr);
+
+    ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, "Untitled");
   }
 
+  attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME);
+
   if ((job = cupsdAddJob(priority, printer->name)) == NULL)
   {
     send_ipp_status(con, IPP_INTERNAL_ERROR,
@@ -2062,7 +2033,7 @@ add_job_subscriptions(
 
         snprintf(notifier, sizeof(notifier), "%s/notifier/%s", ServerBin,
                 scheme);
-        if (access(notifier, X_OK))
+        if (access(notifier, X_OK) || !strcmp(scheme, ".") || !strcmp(scheme, ".."))
        {
           send_ipp_status(con, IPP_NOT_POSSIBLE,
                          _("notify-recipient-uri URI \"%s\" uses unknown "
@@ -5317,6 +5288,7 @@ create_local_bg_thread(
   ipp_t                *request,               /* Request to printer */
                *response;              /* Response from printer */
   ipp_attribute_t *attr;               /* Attribute in response */
+  ipp_status_t status;                 /* Status code */
 
 
  /*
@@ -5349,12 +5321,35 @@ create_local_bg_thread(
   cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: Connected to %s:%d, sending Get-Printer-Attributes request...", printer->name, host, port);
 
   request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+  ippSetVersion(request, 2, 0);
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer->device_uri);
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "all");
 
   response = cupsDoRequest(http, request, resource);
+  status   = cupsLastError();
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: Get-Printer-Attributes returned %s (%s)", printer->name, ippErrorString(cupsLastError()), cupsLastErrorString());
+
+  if (status == IPP_STATUS_ERROR_BAD_REQUEST || status == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+  {
+   /*
+    * Try request using IPP/1.1, in case we are talking to an old CUPS server or
+    * printer...
+    */
+
+    ippDelete(response);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: Get-Printer-Attributes returned %s", printer->name, ippErrorString(cupsLastError()));
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: Re-sending Get-Printer-Attributes request using IPP/1.1...", printer->name);
+
+    request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+    ippSetVersion(request, 1, 1);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer->device_uri);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "all");
+
+    response = cupsDoRequest(http, request, resource);
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: IPP/1.1 Get-Printer-Attributes returned %s (%s)", printer->name, ippErrorString(cupsLastError()), cupsLastErrorString());
+  }
 
   // TODO: Grab printer icon file...
   httpClose(http);
@@ -5365,6 +5360,8 @@ create_local_bg_thread(
 
   if (_ppdCreateFromIPP(fromppd, sizeof(fromppd), response))
   {
+    _cupsRWLockWrite(&printer->lock);
+
     if ((!printer->info || !*(printer->info)) && (attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL)
       cupsdSetString(&printer->info, ippGetString(attr, 0, NULL));
 
@@ -5374,6 +5371,8 @@ create_local_bg_thread(
     if ((!printer->geo_location || !*(printer->geo_location)) && (attr = ippFindAttribute(response, "printer-geo-location", IPP_TAG_URI)) != NULL)
       cupsdSetString(&printer->geo_location, ippGetString(attr, 0, NULL));
 
+    _cupsRWUnlock(&printer->lock);
+
     if ((from = cupsFileOpen(fromppd, "r")) == NULL)
     {
       cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to read generated PPD: %s", printer->name, strerror(errno));
@@ -5874,7 +5873,26 @@ create_subscriptions(
     }
 
     if (recipient)
+    {
       cupsdLogMessage(CUPSD_LOG_DEBUG, "recipient=\"%s\"", recipient);
+
+
+      if (!strncmp(recipient, "mailto:", 7) && user_data)
+      {
+        char   temp[64];               /* Temporary string */
+
+       memcpy(temp, user_data->values[0].unknown.data, user_data->values[0].unknown.length);
+       temp[user_data->values[0].unknown.length] = '\0';
+
+       if (httpSeparateURI(HTTP_URI_CODING_ALL, temp, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_OK)
+       {
+         send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad notify-user-data \"%s\"."), temp);
+         ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES);
+         return;
+       }
+      }
+    }
+
     if (pullmethod)
       cupsdLogMessage(CUPSD_LOG_DEBUG, "pullmethod=\"%s\"", pullmethod);
     cupsdLogMessage(CUPSD_LOG_DEBUG, "notify-lease-duration=%d", lease);
@@ -7970,13 +7988,16 @@ hold_job(cupsd_client_t  *con,          /* I - Client connection */
   * Hold the job and return...
   */
 
-  if ((attr = ippFindAttribute(con->request, "job-hold-until",
-                              IPP_TAG_KEYWORD)) == NULL)
-    attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_NAME);
-
-  if (attr)
+  if ((attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_ZERO)) != NULL)
   {
-    when = attr->values[0].string.text;
+    if ((ippGetValueTag(attr) != IPP_TAG_KEYWORD && ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG) || ippGetCount(attr) != 1 || !ippValidateAttribute(attr))
+    {
+      send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Unsupported 'job-hold-until' value."));
+      ippCopyAttribute(con->response, attr, 0);
+      return;
+    }
+
+    when = ippGetString(attr, 0, NULL);
 
     cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, cupsdFindDest(job->dest), job,
                  "Job job-hold-until value changed by user.");
@@ -10340,7 +10361,39 @@ set_job_attrs(cupsd_client_t  *con,    /* I - Client connection */
       continue;
     }
 
-    if (!strcmp(attr->name, "job-priority"))
+    if (!ippValidateAttribute(attr))
+    {
+      send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Bad '%s' value."), attr->name);
+      ippCopyAttribute(con->response, attr, 0);
+      return;
+    }
+
+    if (!strcmp(attr->name, "job-hold-until"))
+    {
+      const char *when = ippGetString(attr, 0, NULL);
+                                       /* job-hold-until value */
+
+      if ((ippGetValueTag(attr) != IPP_TAG_KEYWORD && ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG) || ippGetCount(attr) != 1)
+      {
+       send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Unsupported 'job-hold-until' value."));
+       ippCopyAttribute(con->response, attr, 0);
+       return;
+      }
+
+      cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-hold-until to %s", when);
+      cupsdSetJobHoldUntil(job, when, 0);
+
+      if (!strcmp(when, "no-hold"))
+      {
+       cupsdReleaseJob(job);
+       check_jobs = 1;
+      }
+      else
+       cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT, "Job held by \"%s\".", username);
+
+      event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE;
+    }
+    else if (!strcmp(attr->name, "job-priority"))
     {
      /*
       * Change the job priority...
@@ -10460,28 +10513,6 @@ set_job_attrs(cupsd_client_t  *con,    /* I - Client connection */
       */
 
       ippCopyAttribute(job->attrs, attr, 0);
-
-     /*
-      * See if the job-name or job-hold-until is being changed.
-      */
-
-      if (!strcmp(attr->name, "job-hold-until"))
-      {
-        cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-hold-until to %s",
-                   attr->values[0].string.text);
-        cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0);
-
-       if (!strcmp(attr->values[0].string.text, "no-hold"))
-       {
-         cupsdReleaseJob(job);
-          check_jobs = 1;
-       }
-       else
-         cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT,
-                          "Job held by \"%s\".", username);
-
-        event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE;
-      }
     }
     else if (attr->value_tag == IPP_TAG_DELETEATTR)
     {
@@ -11300,80 +11331,34 @@ validate_job(cupsd_client_t  *con,    /* I - Client connection */
   }
 
  /*
+  * Is the job-hold-until value valid?
+  */
+
+  if ((attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_ZERO)) != NULL && ((ippGetValueTag(attr) != IPP_TAG_KEYWORD && ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG) || ippGetCount(attr) != 1 || !ippValidateAttribute(attr)))
+  {
+    send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Unsupported 'job-hold-until' value."));
+    ippCopyAttribute(con->response, attr, 0);
+    return;
+  }
+
+ /*
   * Is the job-name valid?
   */
 
   if ((name = ippFindAttribute(con->request, "job-name", IPP_TAG_ZERO)) != NULL)
   {
-    int bad_name = 0;                  /* Is the job-name value bad? */
-
     if ((name->value_tag != IPP_TAG_NAME && name->value_tag != IPP_TAG_NAMELANG) ||
-        name->num_values != 1)
-    {
-      bad_name = 1;
-    }
-    else
-    {
-     /*
-      * Validate that job-name conforms to RFC 5198 (Network Unicode) and
-      * IPP Everywhere requirements for "name" values...
-      */
-
-      const unsigned char *nameptr;    /* Pointer into "job-name" attribute */
-
-      for (nameptr = (unsigned char *)name->values[0].string.text;
-           *nameptr;
-           nameptr ++)
-      {
-        if (*nameptr < ' ' && *nameptr != '\t')
-          break;
-        else if (*nameptr == 0x7f)
-          break;
-        else if ((*nameptr & 0xe0) == 0xc0)
-        {
-          if ((nameptr[1] & 0xc0) != 0x80)
-            break;
-
-          nameptr ++;
-        }
-        else if ((*nameptr & 0xf0) == 0xe0)
-        {
-          if ((nameptr[1] & 0xc0) != 0x80 ||
-              (nameptr[2] & 0xc0) != 0x80)
-           break;
-
-         nameptr += 2;
-       }
-        else if ((*nameptr & 0xf8) == 0xf0)
-        {
-          if ((nameptr[1] & 0xc0) != 0x80 ||
-             (nameptr[2] & 0xc0) != 0x80 ||
-             (nameptr[3] & 0xc0) != 0x80)
-           break;
-
-         nameptr += 3;
-       }
-        else if (*nameptr & 0x80)
-          break;
-      }
-
-      if (*nameptr)
-        bad_name = 1;
-    }
-
-    if (bad_name)
+        name->num_values != 1 || !ippValidateAttribute(name))
     {
       if (StrictConformance)
       {
-       send_ipp_status(con, IPP_ATTRIBUTES,
-                       _("Unsupported 'job-name' value."));
+       send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Unsupported 'job-name' value."));
        ippCopyAttribute(con->response, name, 0);
        return;
       }
       else
       {
-        cupsdLogMessage(CUPSD_LOG_WARN,
-                        "Unsupported 'job-name' value, deleting from request.");
+        cupsdLogMessage(CUPSD_LOG_WARN, "Unsupported 'job-name' value, deleting from request.");
         ippDeleteAttribute(con->request, name);
       }
     }
index 86e75e6..ed8267d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Job management routines for the CUPS scheduler.
  *
- * Copyright 2007-2017 by Apple Inc.
+ * Copyright 2007-2018 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -4774,6 +4774,18 @@ start_job(cupsd_job_t     *job,          /* I - Job ID */
   job->profile  = cupsdCreateProfile(job->id, 0);
   job->bprofile = cupsdCreateProfile(job->id, 1);
 
+#ifdef HAVE_SANDBOX_H
+  if ((!job->profile || !job->bprofile) && UseSandboxing && Sandboxing != CUPSD_SANDBOXING_OFF)
+  {
+   /*
+    * Failure to create the sandbox profile means something really bad has
+    * happened and we need to shutdown immediately.
+    */
+
+    return;
+  }
+#endif /* HAVE_SANDBOX_H */
+
  /*
   * Create the status pipes and buffer...
   */
index 50faa39..f2afa11 100644 (file)
@@ -5,7 +5,7 @@ Documentation=man:cupsd(8)
 [Service]
 ExecStart=@sbindir@/cupsd -l
 Type=simple
-Restart=always
+Restart=on-failure
 
 [Install]
 Also=org.cups.cupsd.socket org.cups.cupsd.path
index 5c01b4b..a09d498 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Process management routines for the CUPS scheduler.
  *
- * Copyright 2007-2017 by Apple Inc.
+ * Copyright 2007-2018 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -102,9 +102,13 @@ cupsdCreateProfile(int job_id,             /* I - Job ID or 0 for none */
 
   if ((fp = cupsTempFile2(profile, sizeof(profile))) == NULL)
   {
+   /*
+    * This should never happen, and is fatal when sandboxing is enabled.
+    */
+
     cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d, allow_networking=%d) = NULL", job_id, allow_networking);
-    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create security profile: %s",
-                    strerror(errno));
+    cupsdLogMessage(CUPSD_LOG_EMERG, "Unable to create security profile: %s", strerror(errno));
+    kill(getpid(), SIGTERM);
     return (NULL);
   }
 
@@ -201,10 +205,8 @@ cupsdCreateProfile(int job_id,             /* I - Job ID or 0 for none */
                 " #\"^%s/\""           /* TempDir/... */
                 " #\"^%s$\""           /* CacheDir */
                 " #\"^%s/\""           /* CacheDir/... */
-                " #\"^%s$\""           /* StateDir */
-                " #\"^%s/\""           /* StateDir/... */
                 "))\n",
-                temp, temp, cache, cache, state, state);
+                temp, temp, cache, cache);
   /* Read common folders */
   cupsFilePrintf(fp,
                  "(allow file-read-data file-read-metadata\n"
@@ -246,8 +248,10 @@ cupsdCreateProfile(int job_id,             /* I - Job ID or 0 for none */
                 " #\"^%s/\""           /* ServerBin/... */
                 " #\"^%s$\""           /* ServerRoot */
                 " #\"^%s/\""           /* ServerRoot/... */
+                " #\"^%s$\""           /* StateDir */
+                " #\"^%s/\""           /* StateDir/... */
                 "))\n",
-                request, request, bin, bin, root, root);
+                request, request, bin, bin, root, root, state, state);
   if (Sandboxing == CUPSD_SANDBOXING_RELAXED)
   {
     /* Limited write access to /Library/Printers/... */
index d28cd4a..63fcf90 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Server start/stop routines for the CUPS scheduler.
  *
- * Copyright 2007-2017 by Apple Inc.
+ * Copyright 2007-2018 by Apple Inc.
  * Copyright 1997-2006 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -38,16 +38,28 @@ void
 cupsdStartServer(void)
 {
  /*
-  * Start color management (as needed)...
+  * Create the default security profile...
   */
 
-  cupsdStartColor();
+  DefaultProfile = cupsdCreateProfile(0, 1);
+
+#ifdef HAVE_SANDBOX_H
+  if (!DefaultProfile && UseSandboxing && Sandboxing != CUPSD_SANDBOXING_OFF)
+  {
+   /*
+    * Failure to create the sandbox profile means something really bad has
+    * happened and we need to shutdown immediately.
+    */
+
+    return;
+  }
+#endif /* HAVE_SANDBOX_H */
 
  /*
-  * Create the default security profile...
+  * Start color management (as needed)...
   */
 
-  DefaultProfile = cupsdCreateProfile(0, 1);
+  cupsdStartColor();
 
  /*
   * Startup all the networking stuff...
index 71b6014..59b5092 100644 (file)
@@ -8,7 +8,7 @@
 <TR>
 <TH CLASS="label">Nom :</TH>
 <TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
-<SMALL>(Peux contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
+<SMALL>(Peut contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
 </TR>
 <TR>
 <TH CLASS="label">Description :</TH>
index 592de84..2d7c2d7 100644 (file)
@@ -14,7 +14,7 @@
 <TR>
 <TH CLASS="label">Nom \:</TH>
 <TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127" VALUE="{?template_name}"><BR>
-<SMALL>(Peux contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
+<SMALL>(Peut contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
 </TR>
 <TR>
 <TH CLASS="label">Description :</TH>
index a4e771c..1e154f1 100644 (file)
@@ -28,7 +28,7 @@
 <TR>
 <TH CLASS="label">Partage :</TH>
 <TD><INPUT TYPE="HIDDEN" NAME="PRINTER_IS_SHARED" VALUE="{?printer_is_shared}">
-{?printer_is_shared=?Ne pas:{?printer_is_shared=0?Do Not:}} partager cette imprimante</TD>
+{?printer_is_shared=?Ne pas p:{?printer_is_shared=0?Ne pas p:P}}artager cette imprimante</TD>
 </TR>
 <TR>
 <TH CLASS="label">Marque :</TH>
@@ -38,7 +38,7 @@
 <TH CLASS="label">Modèle :</TH>
 <TD>
 <SELECT NAME="PPD_NAME" SIZE="10">
-{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Pilote courant - {current_make_and_model}</OPTION>:}
+{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Pilote actuel - {current_make_and_model}</OPTION>:}
 {[ppd_name]<OPTION VALUE="{ppd_name}" {op=modify-printer?:{?current_make_and_model={ppd_make_and_model}?SELECTED:}}>{ppd_make_and_model} ({ppd_natural_language})
 }</SELECT>
 </TD>
index c43c5e4..1efe5f7 100644 (file)
@@ -27,7 +27,7 @@
     socket://hostname:9100
 </PRE>
 
-<P>Voir <A HREF="/help/network.html" TARGET="_blank">"Imprimantes réseaux"</A> pour construire l'URI à employée avec votre imprimante.</P>
+<P>Voir <A HREF="/help/network.html" TARGET="_blank">"Imprimantes réseaux"</A> pour construire l'URI à employer avec votre imprimante.</P>
 
 </TD>
 </TR>
index 6248579..d48c05d 100644 (file)
@@ -1,7 +1,7 @@
 <H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
-({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arr&ecirc;t&eacute;}},
+({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arr&ecirc;t&eacute;e}},
 {printer_is_accepting_jobs=0?rejette les t&acirc;ches:accepte les t&acirc;ches},
-{server_is_sharing_printers=0?Non:{printer_is_shared=0?Non:}} partag&eacute;e{default_name={printer_name}?, imprimante par d&eacute;faut:})</H2>
+{server_is_sharing_printers=0?Non p:{printer_is_shared=0?Non p:P}}artag&eacute;e{default_name={printer_name}?, imprimante par d&eacute;faut:})</H2>
 
 <FORM METHOD="POST" ACTION="{printer_uri_supported}" NAME="maintenance">
 <INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}">
@@ -13,7 +13,7 @@
 <OPTION VALUE="move-jobs">Transf&eacute;rer toutes les t&acirc;ches</OPTION>
 <OPTION VALUE="purge-jobs">Annuler toutes les t&acirc;ches</OPTION>
 </SELECT>
-<INPUT TYPE="SUBMIT" VALUE="Go" STYLE="display: none;">
+<INPUT TYPE="SUBMIT" VALUE="Valider" STYLE="display: none;">
 </FORM>
 
 <FORM METHOD="POST" ACTION="{admin_uri}" NAME="administration">
@@ -28,7 +28,7 @@
 <OPTION VALUE="set-as-default">D&eacute;finir par d&eacute;faut</OPTION>
 <OPTION VALUE="set-allowed-users">D&eacute;finir les autorisations</OPTION>
 </SELECT>
-<INPUT TYPE="SUBMIT" VALUE="Go" STYLE="display: none;">
+<INPUT TYPE="SUBMIT" VALUE="Valider" STYLE="display: none;">
 </FORM>
 
 <TABLE SUMMARY="{printer_name}">
index 290b18e..0c5fe8c 100644 (file)
@@ -1 +1 @@
-<P ALIGN="CENTER">{total=0?Pas de classes:Affichage de {#printer_name} sur {total} classe{total=1?:es}}.</P>
+<P ALIGN="CENTER">{total=0?Pas de classes:Affichage de {#printer_name} sur {total} classe{total=1?:s}}.</P>
index 07baad2..b3432ac 100644 (file)
@@ -5,7 +5,7 @@
 </THEAD>
 <TBODY>
 {[printer_name]
-<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{?member_uris=?Aucun:{member_uris}}</TD><TD>{printer_state=3?Inoccup&eacute;:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
+<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{?member_uris=?Aucun:{member_uris}}</TD><TD>{printer_state=3?Inoccup&eacute;e:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
 }
 </TBODY>
 </TABLE></DIV>}
index 86343e7..696c70d 100644 (file)
@@ -1,8 +1,8 @@
 <FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
 {TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
 
-<P ALIGN="CENTER"><B>Search in
-{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}:</B> <INPUT
+<P ALIGN="CENTER"><B>Rechercher dans
+{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:Tous les documents}}:</B> <INPUT
 TYPE="SEARCH" NAME="QUERY" VALUE="{?QUERY}" SIZE="40" PLACEHOLDER=""
 AUTOSAVE="org.cups.help" RESULTS="20">
 <INPUT TYPE="SUBMIT" NAME="SEARCH" VALUE="Search">
@@ -14,9 +14,9 @@ AUTOSAVE="org.cups.help" RESULTS="20">
 <DIV CLASS="sidebar"><TABLE CLASS="inset" SUMMARY="Contents">
 <TR><TD>
 
-<H3 CLASS="title">Online Help Documents</H3>
+<H3 CLASS="title">Documentation en ligne</H3>
 
-<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">All Documents</A></P>
+<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">Tous les documents</A></P>
 <HR>
 
 {[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
@@ -24,18 +24,18 @@ AUTOSAVE="org.cups.help" RESULTS="20">
 </TD></TR>
 </TABLE></DIV>
 
-{QUERY?<P>Search Results in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}\:</P>
+{QUERY?<P>Résultats de la recherche dans {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:Tous les documents}}\:</P>
 {QTEXT?<UL>
 {[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
 {QTEXT?</UL>:}
-:<P>No matches found.</P>}
+:<P>Aucun résultat.</P>}
 <HR NOSHADE>:}
-{HELPTITLE?<FORM ACTION="/help/{?HELPFILE}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="PRINTABLE" VALUE="YES"><INPUT TYPE="SUBMIT" VALUE="View Printable Version"></FORM>:
+{HELPTITLE?<FORM ACTION="/help/{?HELPFILE}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="PRINTABLE" VALUE="YES"><INPUT TYPE="SUBMIT" VALUE="Voir la version imprimable"></FORM>:
 
-<H1>Online Help</H1>
+<H1>Aide en ligne</H1>
 
-<P>This is the CUPS online help interface. Enter search words above or click on any of the documentation links to display online help information.</P>
+<P>Ceci est l'interface d'aide en ligne de CUPS. Entrez vos termes de recherch ci-dessus ou cliquez sur un des liens vers la documentation pour voir les informations d'aide en ligne.</P>
 
-<P>If you are new to CUPS, read the "<a href="/help/overview.html">Overview of CUPS</a>" page.</P>
+<P>Si vous êtes un nouvel utilisateur de CUPS, lisez la page "<a href="/help/overview.html">Aperçu de CUPS</a>".</P>
 
-<P>The <A HREF="http://www.cups.org/">CUPS home page</A> also provides many resources including user discussion forums, answers to frequently-asked questions, and a form for submitting bug reports and feature requests.</P>}
+<P>La <A HREF="http://www.cups.org/">page d'accueil CUPS</A> procure aussi beaucoup de ressources dont des forums, des FAQ, et un formulaire pour les rapports de bugs et les demandes de fonctionnalités.</P>}
index 090dd4b..27d0722 100644 (file)
@@ -1,4 +1,4 @@
 <H2 CLASS="title">{job_id?Transf&eacute;rer la t&acirc;che {job_id}:Transf&eacute;rer toutes les t&acirc;ches}</H2>
 
-<P>{job_id?<A HREF="/jobs/{job_id}">Job {job_id}</A>:Toutes les t&acirc;ches} transf&eacute;r&eacute;e(s) vers
+<P>{job_id?<A HREF="/jobs/{job_id}">T&acirc;che {job_id}</A>:Toutes les t&acirc;ches} transf&eacute;r&eacute;e(s) vers
 <A HREF="/{is_class?classes:printers}/{job_printer_name}">{job_printer_name}</A>.</P>
index 1880a9f..d10e68b 100644 (file)
@@ -8,12 +8,12 @@
 <TR VALIGN="TOP">
 <TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id}{?phone? ({phone}):}&nbsp;</TD>
 <TD>{?job_name=?Inconnu:{job_name}}&nbsp;</TD>
-<TD>{?job_originating_user_name=?Withheld:{job_originating_user_name}}&nbsp;</TD>
+<TD>{?job_originating_user_name=?Caché:{job_originating_user_name}}&nbsp;</TD>
 <TD>{job_k_octets}k&nbsp;</TD>
 <TD>{job_impressions_completed=0?Inconnu:{?job_impressions_completed}}&nbsp;</TD>
-<TD>{job_state=3?en attente depuis<BR>{?time_at_creation=?Unknown:{time_at_creation}}:{job_state=4?retenu depuis le<BR>{?time_at_creation=?Unknown:{time_at_creation}}:
-{job_state=5?en cours d'impression depuis<BR>{?time_at_processing=?Unknown:{time_at_processing}}:{job_state=6?arr&ecirc;t&eacute;:
-{job_state=7?annul&eacute; depuis<BR>{?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?annul&eacute;:termin&eacute; depuis<BR>{?time_at_completed=?Unknown:{time_at_completed}}}}}}}}&nbsp;{job_printer_state_message?<BR>
+<TD>{job_state=3?en attente depuis<BR>{?time_at_creation=?Inconnu:{time_at_creation}}:{job_state=4?retenu depuis le<BR>{?time_at_creation=?Inconnu:{time_at_creation}}:
+{job_state=5?en cours d'impression depuis<BR>{?time_at_processing=?Inconnu:{time_at_processing}}:{job_state=6?arr&ecirc;t&eacute;:
+{job_state=7?annul&eacute; depuis<BR>{?time_at_completed=?Inconnu:{time_at_completed}}:{job_state=8?annul&eacute;:termin&eacute; depuis<BR>{?time_at_completed=?Inconnu:{time_at_completed}}}}}}}}&nbsp;{job_printer_state_message?<BR>
 <EM>"{job_printer_state_message}"</EM>:}</TD>
 <TD>
 {job_preserved>0?{job_state>5?
index d8793b0..dc1ea6f 100644 (file)
@@ -1,8 +1,8 @@
-<H2 CLASS="title">D&eacute;finir {is_class?la classe:l'imprimante} {printer_name} comme imprimante par d&eacute;faut</H2>
+<H2 CLASS="title">D&eacute;finir {is_class?la classe:l'imprimante} {printer_name} comme {is_class?classe:imprimante} par d&eacute;faut</H2>
 
 <P>{is_class?La classe:L'imprimante} <A
 HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
-a &eacute;t&eacute; d&eacute;finie comme imprimante par d&eacute;faut du serveur.</P>
+a &eacute;t&eacute; d&eacute;finie comme {is_class?classe:imprimante} par d&eacute;faut du serveur.</P>
 
 <BLOCKQUOTE><B>Note:</B> Tout param&egrave;tre utilisateur d&eacute;fini via la commande <TT>lpoptions</TT> sera prioritaire sur le param&egrave;tre d&eacute;fini i&ccedil;i.
 </BLOCKQUOTE>
index 5b4ad07..50acad4 100644 (file)
@@ -1,6 +1,6 @@
 <H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
 ({printer_state=3?Inoccupée :{printer_state=4?En cours d'impression:En pause}},
-{printer_is_accepting_jobs=0?Rejette les tâches:accepte les tâches},
+{printer_is_accepting_jobs=0?Rejette les tâches:Accepte les tâches},
 {server_is_sharing_printers=0?non:{printer_is_shared=0?non:}} partagée{default_name={printer_name}?, imprimante par défaut :})</H2>
 
 <FORM METHOD="POST" ACTION="{printer_uri_supported}" NAME="maintenance">
index 9e23db6..ee1ac0d 100644 (file)
@@ -159,7 +159,7 @@ INCLUDE "ipp-2.0.test"
        EXPECT pwg-raster-document-resolution-supported WITH-VALUE 150dpi DEFINE-MATCH HAVE_150DPI
        EXPECT pwg-raster-document-resolution-supported WITH-VALUE 180dpi DEFINE-MATCH HAVE_180DPI
        EXPECT pwg-raster-document-resolution-supported WITH-VALUE 300dpi DEFINE-MATCH HAVE_300DPI
-       EXPECT pwg-raster-document-resolution-supported WITH-VALUE 3600dpi DEFINE-MATCH HAVE_360DPI
+       EXPECT pwg-raster-document-resolution-supported WITH-VALUE 360dpi DEFINE-MATCH HAVE_360DPI
        EXPECT pwg-raster-document-resolution-supported WITH-VALUE 600dpi DEFINE-MATCH HAVE_600DPI
        EXPECT pwg-raster-document-resolution-supported WITH-VALUE 720dpi DEFINE-MATCH HAVE_720DPI
 
index e96f68d..2c93873 100644 (file)
@@ -69,6 +69,7 @@ typedef enum ippfind_op_e             /* Operations for expressions */
   IPPFIND_OP_IS_REMOTE,                        /* Is a remote service */
   IPPFIND_OP_DOMAIN_REGEX,             /* Domain matches regular expression */
   IPPFIND_OP_NAME_REGEX,               /* Name matches regular expression */
+  IPPFIND_OP_NAME_LITERAL,             /* Name matches literal string */
   IPPFIND_OP_HOST_REGEX,               /* Hostname matches regular expression */
   IPPFIND_OP_PORT_RANGE,               /* Port matches range */
   IPPFIND_OP_PATH_REGEX,               /* Path matches regular expression */
@@ -93,7 +94,7 @@ typedef struct ippfind_expr_s         /* Expression */
                *child;                 /* Child expressions */
   ippfind_op_t op;                     /* Operation code (see above) */
   int          invert;                 /* Invert the result */
-  char         *key;                   /* TXT record key */
+  char         *name;                  /* TXT record key or literal name */
   regex_t      re;                     /* Regular expression for matching */
   int          range[2];               /* Port number range */
   int          num_args;               /* Number of arguments for exec */
@@ -274,6 +275,7 @@ main(int  argc,                             /* I - Number of command-line args */
     "IS_REMOTE",
     "DOMAIN_REGEX",
     "NAME_REGEX",
+    "NAME_LITERAL",
     "HOST_REGEX",
     "PORT_RANGE",
     "PATH_REGEX",
@@ -419,6 +421,18 @@ main(int  argc,                            /* I - Number of command-line args */
                                NULL)) == NULL)
             return (IPPFIND_EXIT_MEMORY);
         }
+        else if (!strcmp(argv[i], "--literal-name"))
+        {
+          i ++;
+          if (i >= argc)
+          {
+            _cupsLangPrintf(stderr, _("ippfind: Missing name after %s."), "--literal-name");
+            show_usage();
+          }
+
+          if ((temp = new_expr(IPPFIND_OP_NAME_LITERAL, invert, argv[i], NULL, NULL)) == NULL)
+            return (IPPFIND_EXIT_MEMORY);
+        }
         else if (!strcmp(argv[i], "--name"))
         {
           i ++;
@@ -724,6 +738,18 @@ main(int  argc,                            /* I - Number of command-line args */
                 address_family = AF_INET6;
                 break;
 
+            case 'N' : /* Literal name */
+               i ++;
+               if (i >= argc)
+               {
+                 _cupsLangPrintf(stderr, _("ippfind: Missing name after %s."), "-N");
+                 show_usage();
+               }
+
+               if ((temp = new_expr(IPPFIND_OP_NAME_LITERAL, invert, argv[i], NULL, NULL)) == NULL)
+                 return (IPPFIND_EXIT_MEMORY);
+               break;
+
             case 'P' :
                i ++;
                if (i >= argc)
@@ -1173,27 +1199,51 @@ main(int  argc,                         /* I - Number of command-line args */
                        *domain;        /* Domain, if any */
 
     strlcpy(buf, search, sizeof(buf));
-    if (buf[0] == '_')
+
+    if (!strncmp(buf, "_http._", 7) || !strncmp(buf, "_https._", 8) || !strncmp(buf, "_ipp._", 6) || !strncmp(buf, "_ipps._", 7))
     {
       regtype = buf;
     }
     else if ((regtype = strstr(buf, "._")) != NULL)
     {
-      name = buf;
-      *regtype++ = '\0';
+      if (strcmp(regtype, "._tcp"))
+      {
+       /*
+        * "something._protocol._tcp" -> search for something with the given
+        * protocol...
+        */
+
+       name = buf;
+       *regtype++ = '\0';
+      }
+      else
+      {
+       /*
+        * "_protocol._tcp" -> search for everything with the given protocol...
+        */
+
+        /* name = NULL; */
+        regtype = buf;
+      }
     }
     else
     {
+     /*
+      * "something" -> search for something with IPP protocol...
+      */
+
       name    = buf;
       regtype = "_ipp._tcp";
     }
 
     for (domain = regtype; *domain; domain ++)
+    {
       if (*domain == '.' && domain[1] != '_')
       {
-        *domain++ = '\0';
-        break;
+       *domain++ = '\0';
+       break;
       }
+    }
 
     if (!*domain)
       domain = NULL;
@@ -1209,6 +1259,9 @@ main(int  argc,                           /* I - Number of command-line args */
 
       service = get_service(services, name, regtype, domain);
 
+      if (getenv("IPPFIND_DEBUG"))
+        fprintf(stderr, "Resolving name=\"%s\", regtype=\"%s\", domain=\"%s\"\n", name, regtype, domain);
+
 #ifdef HAVE_DNSSD
       service->ref = dnssd_ref;
       err          = DNSServiceResolve(&(service->ref),
@@ -1234,6 +1287,9 @@ main(int  argc,                           /* I - Number of command-line args */
       * Browse for services of the given type...
       */
 
+      if (getenv("IPPFIND_DEBUG"))
+        fprintf(stderr, "Browsing for regtype=\"%s\", domain=\"%s\"\n", regtype, domain);
+
 #ifdef HAVE_DNSSD
       DNSServiceRef    ref;            /* Browse reference */
 
@@ -1264,14 +1320,6 @@ main(int  argc,                          /* I - Number of command-line args */
       _cupsLangPrintf(stderr, _("ippfind: Unable to browse or resolve: %s"),
                       dnssd_error_string(err));
 
-      if (name)
-        printf("name=\"%s\"\n", name);
-
-      printf("regtype=\"%s\"\n", regtype);
-
-      if (domain)
-        printf("domain=\"%s\"\n", domain);
-
       return (IPPFIND_EXIT_BONJOUR);
     }
   }
@@ -1784,6 +1832,9 @@ eval_expr(ippfind_srv_t  *service,        /* I - Service */
       case IPPFIND_OP_NAME_REGEX :
           result = !regexec(&(expression->re), service->name, 0, NULL, 0);
           break;
+      case IPPFIND_OP_NAME_LITERAL :
+          result = !_cups_strcasecmp(expression->name, service->name);
+          break;
       case IPPFIND_OP_HOST_REGEX :
           result = !regexec(&(expression->re), service->host, 0, NULL, 0);
           break;
@@ -1795,11 +1846,11 @@ eval_expr(ippfind_srv_t  *service,      /* I - Service */
           result = !regexec(&(expression->re), service->resource, 0, NULL, 0);
           break;
       case IPPFIND_OP_TXT_EXISTS :
-          result = cupsGetOption(expression->key, service->num_txt,
+          result = cupsGetOption(expression->name, service->num_txt,
                                 service->txt) != NULL;
           break;
       case IPPFIND_OP_TXT_REGEX :
-          val = cupsGetOption(expression->key, service->num_txt,
+          val = cupsGetOption(expression->name, service->num_txt,
                              service->txt);
          if (val)
            result = !regexec(&(expression->re), val, 0, NULL, 0);
@@ -2427,8 +2478,8 @@ new_expr(ippfind_op_t op,         /* I - Operation */
   temp->op = op;
   temp->invert = invert;
 
-  if (op == IPPFIND_OP_TXT_EXISTS || op == IPPFIND_OP_TXT_REGEX)
-    temp->key = (char *)value;
+  if (op == IPPFIND_OP_TXT_EXISTS || op == IPPFIND_OP_TXT_REGEX || op == IPPFIND_OP_NAME_LITERAL)
+    temp->name = (char *)value;
   else if (op == IPPFIND_OP_PORT_RANGE)
   {
    /*
index 658927a..9c57ca2 100644 (file)
@@ -3044,7 +3044,7 @@ do_tests(cups_file_t  *outfile,           /* I - Output file */
 
           if (attrptr->name)
           {
-            if (cupsArrayFind(a, attrptr->name))
+            if (cupsArrayFind(a, attrptr->name) && Output < _CUPS_OUTPUT_LIST)
               add_stringf(errors, "Duplicate \"%s\" attribute in %s group",
                          attrptr->name, ippTagString(group));
 
index 1063be4..056e8e5 100755 (executable)
@@ -492,11 +492,6 @@ StrictConformance Yes
 Browsing Off
 Listen localhost:$port
 Listen $BASE/sock
-PassEnv DYLD_LIBRARY_PATH
-PassEnv LD_LIBRARY_PATH
-PassEnv LD_PRELOAD
-PassEnv LOCALEDIR
-PassEnv SHLIB_PATH
 MaxSubscriptions 3
 MaxLogSize 0
 AccessLogLevel actions
@@ -532,6 +527,12 @@ TempDir $BASE/spool/temp
 AccessLog $BASE/log/access_log
 ErrorLog $BASE/log/error_log
 PageLog $BASE/log/page_log
+
+PassEnv DYLD_LIBRARY_PATH
+PassEnv LD_LIBRARY_PATH
+PassEnv LD_PRELOAD
+PassEnv LOCALEDIR
+PassEnv SHLIB_PATH
 EOF
 
 if test $ssltype != 0 -a `uname` = Darwin; then
index 3507703..8e06946 100644 (file)
@@ -94,8 +94,8 @@ typedef unsigned long useconds_t;
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.2.7"
-#define CUPS_MINIMAL "CUPS/2.2.7"
+#define CUPS_SVERSION "CUPS v2.2.8"
+#define CUPS_MINIMAL "CUPS/2.2.8"
 
 
 /*
index c9acd93..3843378 100644 (file)
@@ -22,8 +22,8 @@
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.2.7"
-#define CUPS_MINIMAL "CUPS/2.2.7"
+#define CUPS_SVERSION "CUPS v2.2.8"
+#define CUPS_MINIMAL "CUPS/2.2.8"
 
 
 /*