summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2020-01-20 14:35:37 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2020-01-20 14:35:37 +0900
commitfee1878d4e1018e70e29327f6e0616a81dd2e960 (patch)
tree8be463f44dd53ee94b805561cfe36cbd56091934
parentb721973fc2c04d3d610851033c52e3c94401e2de (diff)
downloadcups-fee1878d4e1018e70e29327f6e0616a81dd2e960.tar.gz
cups-fee1878d4e1018e70e29327f6e0616a81dd2e960.tar.bz2
cups-fee1878d4e1018e70e29327f6e0616a81dd2e960.zip
Imported Upstream version 2.2.8upstream/2.2.8
-rw-r--r--CHANGES.md35
-rw-r--r--INSTALL.md2
-rw-r--r--README.md2
-rw-r--r--backend/ipp.c6
-rw-r--r--backend/org.cups.usb-quirks3
-rwxr-xr-xconfigure20
-rw-r--r--configure.ac2
-rw-r--r--cups/auth.c10
-rw-r--r--cups/cups.h4
-rw-r--r--cups/http-support.c4
-rw-r--r--cups/ipp.c61
-rw-r--r--cups/testhttp.c13
-rw-r--r--cups/tls-darwin.c2
-rw-r--r--cups/util.c56
-rw-r--r--doc/help/cupspm.epubbin219707 -> 219708 bytes
-rw-r--r--doc/help/man-cupsd.conf.html6
-rw-r--r--doc/help/man-ippfind.html5
-rw-r--r--doc/help/man-lpoptions.html16
-rw-r--r--doc/help/options.html19
-rw-r--r--doc/help/sharing.html2
-rw-r--r--doc/help/spec-command.html4
-rw-r--r--doc/help/spec-ppd.html27
-rw-r--r--filter/pstops.c6
-rw-r--r--filter/spec-ppd.shtml27
-rw-r--r--locale/cups.pot632
-rw-r--r--locale/cups.strings10
-rw-r--r--locale/cups_ca.po42
-rw-r--r--locale/cups_cs.po42
-rw-r--r--locale/cups_de.po42
-rw-r--r--locale/cups_es.po46
-rw-r--r--locale/cups_fr.po42
-rw-r--r--locale/cups_it.po42
-rw-r--r--locale/cups_ja.po42
-rw-r--r--locale/cups_pt_BR.po42
-rw-r--r--locale/cups_ru.po42
-rw-r--r--locale/cups_zh_CN.po42
-rw-r--r--man/cups-files.conf.man.in10
-rw-r--r--man/cupsd.conf.man.in22
-rw-r--r--man/ippfind.man11
-rw-r--r--man/lpoptions.man.in23
-rw-r--r--notifier/mailto.c13
-rw-r--r--packaging/cups.spec4
-rw-r--r--scheduler/auth.c134
-rw-r--r--scheduler/client.c26
-rw-r--r--scheduler/client.h5
-rw-r--r--scheduler/conf.c237
-rw-r--r--scheduler/ipp.c787
-rw-r--r--scheduler/job.c14
-rw-r--r--scheduler/org.cups.cupsd.service.in2
-rw-r--r--scheduler/process.c18
-rw-r--r--scheduler/server.c22
-rw-r--r--templates/fr/add-class.tmpl2
-rw-r--r--templates/fr/add-printer.tmpl2
-rw-r--r--templates/fr/choose-model.tmpl4
-rw-r--r--templates/fr/choose-uri.tmpl2
-rw-r--r--templates/fr/class.tmpl8
-rw-r--r--templates/fr/classes-header.tmpl2
-rw-r--r--templates/fr/classes.tmpl2
-rw-r--r--templates/fr/help-header.tmpl22
-rw-r--r--templates/fr/job-moved.tmpl2
-rw-r--r--templates/fr/jobs.tmpl8
-rw-r--r--templates/fr/printer-default.tmpl4
-rw-r--r--templates/fr/printer.tmpl2
-rw-r--r--test/ipp-everywhere.test2
-rw-r--r--test/ippfind.c87
-rw-r--r--test/ipptool.c2
-rwxr-xr-xtest/run-stp-tests.sh11
-rw-r--r--vcnet/config.h4
-rw-r--r--xcode/config.h4
69 files changed, 1639 insertions, 1257 deletions
diff --git a/CHANGES.md b/CHANGES.md
index f568f35..7220dc9 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -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
----------------------
diff --git a/INSTALL.md b/INSTALL.md
index 0b7a847..9b534b1 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -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
diff --git a/README.md b/README.md
index cf204df..ff8e1b5 100644
--- 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...
diff --git a/backend/ipp.c b/backend/ipp.c
index 44ce8d2..61e706e 100644
--- a/backend/ipp.c
+++ b/backend/ipp.c
@@ -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 ++;
diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks
index f0ba5c2..1f1feff 100644
--- a/backend/org.cups.usb-quirks
+++ b/backend/org.cups.usb-quirks
@@ -281,3 +281,6 @@
# Lexmark Optra E310 (Issue #5259)
0x043d 0x000c no-reattach
+
+# HP LaserJet P1102 (Issue #5310)
+0x03F0 0x002A no-reattach
diff --git a/configure b/configure
index 21eca26..9134476 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for CUPS 2.2.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\\"
diff --git a/configure.ac b/configure.ac
index ed26daa..438e56c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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)
diff --git a/cups/auth.c b/cups/auth.c
index 4c38c9b..740b079 100644
--- a/cups/auth.c
+++ b/cups/auth.c
@@ -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;
diff --git a/cups/cups.h b/cups/cups.h
index 3f8d91e..92826d7 100644
--- a/cups/cups.h
+++ b/cups/cups.h
@@ -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
diff --git a/cups/http-support.c b/cups/http-support.c
index cbee9ab..76c1272 100644
--- a/cups/http-support.c
+++ b/cups/http-support.c
@@ -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);
diff --git a/cups/ipp.c b/cups/ipp.c
index 0adc3ef..b33a3bc 100644
--- a/cups/ipp.c
+++ b/cups/ipp.c
@@ -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);
}
diff --git a/cups/testhttp.c b/cups/testhttp.c
index 376d71f..fa8356c 100644
--- a/cups/testhttp.c
+++ b/cups/testhttp.c
@@ -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 },
diff --git a/cups/tls-darwin.c b/cups/tls-darwin.c
index 80cd660..9aa316b 100644
--- a/cups/tls-darwin.c
+++ b/cups/tls-darwin.c
@@ -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);
diff --git a/cups/util.c b/cups/util.c
index 2f5ebdf..e800449 100644
--- a/cups/util.c
+++ b/cups/util.c
@@ -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
@@ -28,19 +28,6 @@
/*
- * 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);
-}
diff --git a/doc/help/cupspm.epub b/doc/help/cupspm.epub
index cbffada..a73e5f6 100644
--- a/doc/help/cupspm.epub
+++ b/doc/help/cupspm.epub
Binary files differ
diff --git a/doc/help/man-cupsd.conf.html b/doc/help/man-cupsd.conf.html
index fe4902d..9438953 100644
--- a/doc/help/man-cupsd.conf.html
+++ b/doc/help/man-cupsd.conf.html
@@ -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>
diff --git a/doc/help/man-ippfind.html b/doc/help/man-ippfind.html
index 41445fe..2e2ebb1 100644
--- a/doc/help/man-ippfind.html
+++ b/doc/help/man-ippfind.html
@@ -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>
diff --git a/doc/help/man-lpoptions.html b/doc/help/man-lpoptions.html
index e4eaf71..e8213c4 100644
--- a/doc/help/man-lpoptions.html
+++ b/doc/help/man-lpoptions.html
@@ -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>
diff --git a/doc/help/options.html b/doc/help/options.html
index 044cdb6..9d612fc 100644
--- a/doc/help/options.html
+++ b/doc/help/options.html
@@ -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>
diff --git a/doc/help/sharing.html b/doc/help/sharing.html
index 9763da7..a46f393 100644
--- a/doc/help/sharing.html
+++ b/doc/help/sharing.html
@@ -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.
diff --git a/doc/help/spec-command.html b/doc/help/spec-command.html
index ac33ce4..4bda6ae 100644
--- a/doc/help/spec-command.html
+++ b/doc/help/spec-command.html
@@ -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
diff --git a/doc/help/spec-ppd.html b/doc/help/spec-ppd.html
index 06f5769..1c43640 100644
--- a/doc/help/spec-ppd.html
+++ b/doc/help/spec-ppd.html
@@ -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>
diff --git a/filter/pstops.c b/filter/pstops.c
index 072356e..65a9db9 100644
--- a/filter/pstops.c
+++ b/filter/pstops.c
@@ -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;
diff --git a/filter/spec-ppd.shtml b/filter/spec-ppd.shtml
index 3b75430..53494ad 100644
--- a/filter/spec-ppd.shtml
+++ b/filter/spec-ppd.shtml
@@ -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>
diff --git a/locale/cups.pot b/locale/cups.pot
index f14d536..9bfe18c 100644
--- a/locale/cups.pot
+++ b/locale/cups.pot
@@ -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 ""
diff --git a/locale/cups.strings b/locale/cups.strings
index 0ba8344..952b10e 100644
--- a/locale/cups.strings
+++ b/locale/cups.strings
@@ -328,6 +328,7 @@
"\"%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).";
@@ -337,9 +338,12 @@
"\"%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 ″";
@@ -721,6 +725,7 @@
"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";
@@ -749,6 +754,7 @@
"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.";
@@ -758,7 +764,6 @@
"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";
@@ -1046,6 +1051,7 @@
"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.";
@@ -1656,6 +1662,7 @@
"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”.";
@@ -1748,6 +1755,7 @@
"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.";
diff --git a/locale/cups_ca.po b/locale/cups_ca.po
index 1627451..30c3d23 100644
--- a/locale/cups_ca.po
+++ b/locale/cups_ca.po
@@ -32,7 +32,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.4.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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 ""
diff --git a/locale/cups_cs.po b/locale/cups_cs.po
index fe2ebe9..feec1cb 100644
--- a/locale/cups_cs.po
+++ b/locale/cups_cs.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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 ""
diff --git a/locale/cups_de.po b/locale/cups_de.po
index bf834cc..69b8430 100644
--- a/locale/cups_de.po
+++ b/locale/cups_de.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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 ""
diff --git a/locale/cups_es.po b/locale/cups_es.po
index 63eacfb..3566a66 100644
--- a/locale/cups_es.po
+++ b/locale/cups_es.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.2\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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."
diff --git a/locale/cups_fr.po b/locale/cups_fr.po
index 341551b..ea3d554 100644
--- a/locale/cups_fr.po
+++ b/locale/cups_fr.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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 ""
diff --git a/locale/cups_it.po b/locale/cups_it.po
index 3acab47..1d5ee1d 100644
--- a/locale/cups_it.po
+++ b/locale/cups_it.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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."
diff --git a/locale/cups_ja.po b/locale/cups_ja.po
index a07da5f..7949b4a 100644
--- a/locale/cups_ja.po
+++ b/locale/cups_ja.po
@@ -28,7 +28,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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: 開きカッコが足りません。"
diff --git a/locale/cups_pt_BR.po b/locale/cups_pt_BR.po
index 89d1a34..136728a 100644
--- a/locale/cups_pt_BR.po
+++ b/locale/cups_pt_BR.po
@@ -40,7 +40,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.1.2\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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."
diff --git a/locale/cups_ru.po b/locale/cups_ru.po
index c801f06..0bad416 100644
--- a/locale/cups_ru.po
+++ b/locale/cups_ru.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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: Отсутствует открывающая скобка."
diff --git a/locale/cups_zh_CN.po b/locale/cups_zh_CN.po
index ae34e8a..454ab10 100644
--- a/locale/cups_zh_CN.po
+++ b/locale/cups_zh_CN.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2018-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:缺少左括号。"
diff --git a/man/cups-files.conf.man.in b/man/cups-files.conf.man.in
index 2ed4686..6ac4e72 100644
--- a/man/cups-files.conf.man.in
+++ b/man/cups-files.conf.man.in
@@ -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
diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in
index ab89e15..15a5fa9 100644
--- a/man/cupsd.conf.man.in
+++ b/man/cupsd.conf.man.in
@@ -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.
diff --git a/man/ippfind.man b/man/ippfind.man
index 219c47d..253e057 100644
--- a/man/ippfind.man
+++ b/man/ippfind.man
@@ -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.
diff --git a/man/lpoptions.man.in b/man/lpoptions.man.in
index 2aab12f..3e63b5c 100644
--- a/man/lpoptions.man.in
+++ b/man/lpoptions.man.in
@@ -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.
diff --git a/notifier/mailto.c b/notifier/mailto.c
index 7b766f5..cbb0f52 100644
--- a/notifier/mailto.c
+++ b/notifier/mailto.c
@@ -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);
diff --git a/packaging/cups.spec b/packaging/cups.spec
index d582489..da84b48 100644
--- a/packaging/cups.spec
+++ b/packaging/cups.spec
@@ -43,12 +43,12 @@
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
diff --git a/scheduler/auth.c b/scheduler/auth.c
index 8b134b5..fa4e271 100644
--- a/scheduler/auth.c
+++ b/scheduler/auth.c
@@ -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.
*/
diff --git a/scheduler/client.c b/scheduler/client.c
index c36c1d2..0719700 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -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"))
{
/*
diff --git a/scheduler/client.h b/scheduler/client.h
index b26d04c..beddab0 100644
--- a/scheduler/client.h
+++ b/scheduler/client.h
@@ -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 */
diff --git a/scheduler/conf.c b/scheduler/conf.c
index 8c2694f..9c1be70 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -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 ++;
}
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index ad8f1f0..d1c6a89 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -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);
}
}
diff --git a/scheduler/job.c b/scheduler/job.c
index 86e75e6..ed8267d 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -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...
*/
diff --git a/scheduler/org.cups.cupsd.service.in b/scheduler/org.cups.cupsd.service.in
index 50faa39..f2afa11 100644
--- a/scheduler/org.cups.cupsd.service.in
+++ b/scheduler/org.cups.cupsd.service.in
@@ -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
diff --git a/scheduler/process.c b/scheduler/process.c
index 5c01b4b..a09d498 100644
--- a/scheduler/process.c
+++ b/scheduler/process.c
@@ -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/... */
diff --git a/scheduler/server.c b/scheduler/server.c
index d28cd4a..63fcf90 100644
--- a/scheduler/server.c
+++ b/scheduler/server.c
@@ -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...
diff --git a/templates/fr/add-class.tmpl b/templates/fr/add-class.tmpl
index 71b6014..59b5092 100644
--- a/templates/fr/add-class.tmpl
+++ b/templates/fr/add-class.tmpl
@@ -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>
diff --git a/templates/fr/add-printer.tmpl b/templates/fr/add-printer.tmpl
index 592de84..2d7c2d7 100644
--- a/templates/fr/add-printer.tmpl
+++ b/templates/fr/add-printer.tmpl
@@ -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>
diff --git a/templates/fr/choose-model.tmpl b/templates/fr/choose-model.tmpl
index a4e771c..1e154f1 100644
--- a/templates/fr/choose-model.tmpl
+++ b/templates/fr/choose-model.tmpl
@@ -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>
diff --git a/templates/fr/choose-uri.tmpl b/templates/fr/choose-uri.tmpl
index c43c5e4..1efe5f7 100644
--- a/templates/fr/choose-uri.tmpl
+++ b/templates/fr/choose-uri.tmpl
@@ -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>
diff --git a/templates/fr/class.tmpl b/templates/fr/class.tmpl
index 6248579..d48c05d 100644
--- a/templates/fr/class.tmpl
+++ b/templates/fr/class.tmpl
@@ -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}">
diff --git a/templates/fr/classes-header.tmpl b/templates/fr/classes-header.tmpl
index 290b18e..0c5fe8c 100644
--- a/templates/fr/classes-header.tmpl
+++ b/templates/fr/classes-header.tmpl
@@ -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>
diff --git a/templates/fr/classes.tmpl b/templates/fr/classes.tmpl
index 07baad2..b3432ac 100644
--- a/templates/fr/classes.tmpl
+++ b/templates/fr/classes.tmpl
@@ -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>}
diff --git a/templates/fr/help-header.tmpl b/templates/fr/help-header.tmpl
index 86343e7..696c70d 100644
--- a/templates/fr/help-header.tmpl
+++ b/templates/fr/help-header.tmpl
@@ -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>}
diff --git a/templates/fr/job-moved.tmpl b/templates/fr/job-moved.tmpl
index 090dd4b..27d0722 100644
--- a/templates/fr/job-moved.tmpl
+++ b/templates/fr/job-moved.tmpl
@@ -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>
diff --git a/templates/fr/jobs.tmpl b/templates/fr/jobs.tmpl
index 1880a9f..d10e68b 100644
--- a/templates/fr/jobs.tmpl
+++ b/templates/fr/jobs.tmpl
@@ -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?
diff --git a/templates/fr/printer-default.tmpl b/templates/fr/printer-default.tmpl
index d8793b0..dc1ea6f 100644
--- a/templates/fr/printer-default.tmpl
+++ b/templates/fr/printer-default.tmpl
@@ -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>
diff --git a/templates/fr/printer.tmpl b/templates/fr/printer.tmpl
index 5b4ad07..50acad4 100644
--- a/templates/fr/printer.tmpl
+++ b/templates/fr/printer.tmpl
@@ -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">
diff --git a/test/ipp-everywhere.test b/test/ipp-everywhere.test
index 9e23db6..ee1ac0d 100644
--- a/test/ipp-everywhere.test
+++ b/test/ipp-everywhere.test
@@ -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
diff --git a/test/ippfind.c b/test/ippfind.c
index e96f68d..2c93873 100644
--- a/test/ippfind.c
+++ b/test/ippfind.c
@@ -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)
{
/*
diff --git a/test/ipptool.c b/test/ipptool.c
index 658927a..9c57ca2 100644
--- a/test/ipptool.c
+++ b/test/ipptool.c
@@ -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));
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
index 1063be4..056e8e5 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
@@ -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
diff --git a/vcnet/config.h b/vcnet/config.h
index 3507703..8e06946 100644
--- a/vcnet/config.h
+++ b/vcnet/config.h
@@ -94,8 +94,8 @@ typedef unsigned long useconds_t;
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.2.7"
-#define CUPS_MINIMAL "CUPS/2.2.7"
+#define CUPS_SVERSION "CUPS v2.2.8"
+#define CUPS_MINIMAL "CUPS/2.2.8"
/*
diff --git a/xcode/config.h b/xcode/config.h
index c9acd93..3843378 100644
--- a/xcode/config.h
+++ b/xcode/config.h
@@ -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"
/*