-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
----------------------
-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
-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...
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();
_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 ++;
# Lexmark Optra E310 (Issue #5259)
0x043d 0x000c no-reattach
+
+# HP LaserJet P1102 (Issue #5310)
+0x03F0 0x002A no-reattach
#! /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>.
#
# 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/'
# 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]...
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
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.
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 $@
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"
# 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
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\\"
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)
/*
* 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.
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);
* 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...
* 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;
* 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
/*
* 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
*ptr = '\0';
- if (*uri != ':')
+ if (*uri != ':' || *scheme == '.' || !*scheme)
{
*scheme = '\0';
return (HTTP_URI_STATUS_BAD_SCHEME);
/*
* 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
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)
{
/*
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"
- };
/*
}
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);
}
}
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);
}
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);
}
/*
* 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
{ 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",
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 },
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 },
DEBUG_printf(("4http_cdsa_copy_server: Returning %p.", (void *)certificates));
return (certificates);
+
#else
+ (void)common_name;
if (!tls_selfsigned)
return (NULL);
/*
* Printing utilities for CUPS.
*
- * Copyright 2007-2017 by Apple Inc.
- * Copyright 1997-2006 by Easy Software Products.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
/*
- * Enumeration data and callback...
- */
-
-typedef struct _cups_createdata_s
-{
- const char *name; /* Destination name */
- cups_dest_t *dest; /* Matching destination */
-} _cups_createdata_t;
-
-static int cups_create_cb(_cups_createdata_t *data, unsigned flags, cups_dest_t *dest);
-
-
-/*
* 'cupsCancelJob()' - Cancel a print job on the default server.
*
* Pass @code CUPS_JOBID_ALL@ to cancel all jobs or @code CUPS_JOBID_CURRENT@
{
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 */
* 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);
*/
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...
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);
-}
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>
<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 © 2007-2017 by Apple Inc.
+Copyright © 2007-2018 by Apple Inc.
</body>
</html>
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.
<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 © 2013-2015 by Apple Inc.
+Copyright © 2013-2018 by Apple Inc.
</body>
</html>
[
<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>]
[
<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>]
[
<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>]
[
<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>]
<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.
<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 © 2007-2017 by Apple Inc.
+Copyright © 2007-2018 by Apple Inc.
</body>
</html>
<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>
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.
<!--
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
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
<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>
<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>
<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>
/*
* 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
bufptr = buffer;
bufend = buffer + bufsize - 1;
- while (bufptr < bufend)
+ while (*start && bufptr < bufend)
{
if (isspace(*start & 255) && !level)
break;
<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>
<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>
<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>
#, 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"
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 ""
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 ""
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 ""
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 ""
" 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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid " -h Validate HTTP response headers."
msgstr ""
-#: test/ippfind.c:2764
+#: test/ippfind.c:2815
msgid " -h regex Match hostname to regular expression."
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 ""
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 ""
msgid " -o name=value Set option(s)."
msgstr ""
-#: test/ippfind.c:2767
+#: test/ippfind.c:2818
msgid " -p Print URI if true."
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 ""
msgid " -q Run silently."
msgstr ""
-#: test/ippfind.c:2769
+#: test/ippfind.c:2820
msgid " -r True if service is remote."
msgstr ""
msgid " -r Use 'relaxed' open mode."
msgstr ""
-#: test/ippfind.c:2770
+#: test/ippfind.c:2821
msgid " -s Print service name if true."
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 ""
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 ""
msgid " -vv Be very verbose."
msgstr ""
-#: test/ippfind.c:2773
+#: test/ippfind.c:2824
msgid ""
" -x utility [argument ...] ;\n"
" Execute program if true."
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 ""
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 ""
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"
msgid "%s accepting requests since %s"
msgstr ""
-#: scheduler/ipp.c:10336
+#: scheduler/ipp.c:10357
#, c-format
msgid "%s cannot be changed."
msgstr ""
msgid "%s not accepting requests since %s -"
msgstr ""
-#: scheduler/ipp.c:640
+#: scheduler/ipp.c:620
#, c-format
msgid "%s not supported."
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "Bad PPD cache file."
msgstr ""
-#: scheduler/ipp.c:2702
+#: scheduler/ipp.c:2673
msgid "Bad PPD file."
msgstr ""
msgid "Bad arguments to function"
msgstr ""
-#: scheduler/ipp.c:1418
+#: scheduler/ipp.c:1382
#, c-format
msgid "Bad copies value %d."
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "Clean Print Heads"
msgstr ""
-#: scheduler/ipp.c:3957
+#: scheduler/ipp.c:3928
msgid "Close-Job doesn't support the job-uri attribute."
msgstr ""
msgid "DeskJet Series"
msgstr ""
-#: scheduler/ipp.c:1347
+#: scheduler/ipp.c:1311
#, c-format
msgid "Destination \"%s\" is not accepting jobs."
msgstr ""
msgid "Disc"
msgstr ""
-#: scheduler/ipp.c:6325
+#: scheduler/ipp.c:6343
#, c-format
msgid "Document #%d does not exist in job #%d."
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 ""
msgid "Envelope You4 Long Edge"
msgstr ""
-#: test/ippfind.c:2815
+#: test/ippfind.c:2866
msgid "Environment Variables:"
msgstr ""
msgid "Export Printers to Samba"
msgstr ""
-#: test/ippfind.c:2761
+#: test/ippfind.c:2812
msgid "Expressions:"
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "Job Stopped"
msgstr ""
-#: scheduler/ipp.c:10359
+#: scheduler/ipp.c:10412
msgid "Job is completed and cannot be changed."
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 ""
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 ""
msgid "Load paper."
msgstr ""
-#: scheduler/ipp.c:5545
+#: scheduler/ipp.c:5544
msgid "Local printer created."
msgstr ""
msgid "Missing asterisk in column 1"
msgstr ""
-#: scheduler/ipp.c:6317
+#: scheduler/ipp.c:6335
msgid "Missing document-number attribute."
msgstr ""
msgid "Missing form variable"
msgstr ""
-#: scheduler/ipp.c:9703
+#: scheduler/ipp.c:9724
msgid "Missing last-document attribute in request."
msgstr ""
msgid "Missing media-size in media-col."
msgstr ""
-#: scheduler/ipp.c:6918
+#: scheduler/ipp.c:6936
msgid "Missing notify-subscription-ids attribute."
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 ""
" device-id = %s"
msgstr ""
-#: test/ippfind.c:2792
+#: test/ippfind.c:2843
msgid "Modifiers:"
msgstr ""
msgid "Name OID uses indefinite length"
msgstr ""
-#: scheduler/ipp.c:1102
+#: scheduler/ipp.c:1066
msgid "Nested classes are not allowed."
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 ""
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 ""
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 ""
msgid "No printer-uri found for class"
msgstr ""
-#: scheduler/ipp.c:6524
+#: scheduler/ipp.c:6542
msgid "No printer-uri in request."
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 ""
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 ""
msgid "Online Help"
msgstr ""
-#: scheduler/ipp.c:5441
+#: scheduler/ipp.c:5440
msgid "Only local users can create a local printer."
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:"
msgid "Print job was not accepted."
msgstr ""
-#: scheduler/ipp.c:5507
+#: scheduler/ipp.c:5506
#, c-format
msgid "Printer \"%s\" already exists."
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "Unable to add printer"
msgstr ""
-#: scheduler/ipp.c:1223
+#: scheduler/ipp.c:1187
msgid "Unable to allocate memory for file types."
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 ""
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 ""
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 ""
msgid "Unable to find server credentials."
msgstr ""
-#: backend/ipp.c:3336
+#: backend/ipp.c:3338
msgid "Unable to get backend exit status."
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 ""
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 ""
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 ""
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 ""
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 ""
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"
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 ""
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 ""
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 ""
msgid "ipptool: Unknown option \"-%c\"."
msgstr ""
-#: scheduler/ipp.c:8100
+#: scheduler/ipp.c:8121
msgid "job-printer-uri attribute missing."
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 ""
"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad characters (RFC 8011 section 5.1.10).";
"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad length %d (RFC 8011 section 5.1.10).";
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.3).";
+"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)." = "“%s”: Bad name value “%s” - bad control character (PWG 5100.14 section 8.1).";
"\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad length %d (RFC 8011 section 5.1.3).";
"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad characters (RFC 8011 section 5.1.9).";
"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad length %d (RFC 8011 section 5.1.9).";
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16).";
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16).";
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.2).";
+"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)." = "“%s”: Bad text value “%s” - bad control character (PWG 5100.14 section 8.3).";
"\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad length %d (RFC 8011 section 5.1.2).";
"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad characters (RFC 8011 section 5.1.7).";
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad length %d (RFC 8011 section 5.1.7).";
+"\"requesting-user-name\" attribute in wrong group." = "“requesting-user-name” attribute in wrong group.";
+"\"requesting-user-name\" attribute with wrong syntax." = "“requesting-user-name” attribute with wrong syntax.";
"%-7s %-7.7s %-7d %-31.31s %.0f bytes" = "%-7s %-7.7s %-7d %-31.31s %.0f bytes";
"%d x %d mm" = "%d x %d mm";
"%g x %g \"" = "%g x %g ″";
"B8" = "B8";
"B9" = "B9";
"Back Print Film" = "Back Print Film";
+"Bad '%s' value." = "Bad ‘%s’ value.";
"Bad 'document-format' value \"%s\"." = "Bad ‘document-format’ value “%s”.";
"Bad NULL dests pointer" = "Bad NULL dests pointer";
"Bad OpenGroup" = "Bad OpenGroup";
"Bad job-uri \"%s\"." = "Bad job-uri “%s”.";
"Bad notify-pull-method \"%s\"." = "Bad notify-pull-method “%s”.";
"Bad notify-recipient-uri \"%s\"." = "Bad notify-recipient-uri “%s”.";
+"Bad notify-user-data \"%s\"." = "Bad notify-user-data “%s”.";
"Bad number-up value %d." = "Bad number-up value %d.";
"Bad option + choice on line %d." = "Bad option + choice on line %d.";
"Bad page-ranges values %d-%d." = "Bad page-ranges values %d-%d.";
"Bad printer-uri." = "Bad printer-uri.";
"Bad request ID %d." = "Bad request ID %d.";
"Bad request version number %d.%d." = "Bad request version number %d.%d.";
-"Bad requesting-user-name value: %s" = "Bad requesting-user-name value: %s";
"Bad resource in URI" = "Bad resource in URI";
"Bad scheme in URI" = "Bad scheme in URI";
"Bad subscription ID" = "Bad subscription ID";
"Internet Postage 2-Part" = "Internet Postage 2-Part";
"Internet Postage 3-Part" = "Internet Postage 3-Part";
"Internet Printing Protocol" = "Internet Printing Protocol";
+"Invalid group tag." = "Invalid group tag.";
"Invalid media name arguments." = "Invalid media name arguments.";
"Invalid media size." = "Invalid media size.";
"Invalid ppd-name value." = "Invalid ppd-name value.";
"Unknown version option value: \"%s\"." = "Unknown version option value: “%s”.";
"Unsupported 'compression' value \"%s\"." = "Unsupported ‘compression’ value “%s”.";
"Unsupported 'document-format' value \"%s\"." = "Unsupported ‘document-format’ value “%s”.";
+"Unsupported 'job-hold-until' value." = "Unsupported ‘job-hold-until’ value.";
"Unsupported 'job-name' value." = "Unsupported ‘job-name’ value.";
"Unsupported character set \"%s\"." = "Unsupported character set “%s”.";
"Unsupported compression \"%s\"." = "Unsupported compression “%s”.";
"ippfind: Missing expression before \"--and\"." = "ippfind: Missing expression before “--and”.";
"ippfind: Missing expression before \"--or\"." = "ippfind: Missing expression before “--or”.";
"ippfind: Missing key name after %s." = "ippfind: Missing key name after %s.";
+"ippfind: Missing name after %s." = "ippfind: Missing name after %s.";
"ippfind: Missing open parenthesis." = "ippfind: Missing open parenthesis.";
"ippfind: Missing program after %s." = "ippfind: Missing program after %s.";
"ippfind: Missing regular expression after %s." = "ippfind: Missing regular expression after %s.";
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"
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 ""
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 ""
"\"%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"
msgstr ""
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
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."
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 ""
msgid "Internet Printing Protocol"
msgstr "Protocol d'impressió per Internet"
+msgid "Invalid group tag."
+msgstr ""
+
msgid "Invalid media name arguments."
msgstr ""
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
msgid "Unsupported 'job-name' value."
msgstr ""
msgid "ippfind: Missing key name after %s."
msgstr ""
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
msgid "ippfind: Missing open parenthesis."
msgstr ""
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"
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 ""
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 ""
"\"%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 ""
msgstr ""
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
msgstr ""
#, c-format
+msgid "Bad notify-user-data \"%s\"."
+msgstr ""
+
+#, c-format
msgid "Bad number-up value %d."
msgstr "Chybná hodnota %d."
msgid "Bad request version number %d.%d."
msgstr ""
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
msgid "Bad resource in URI"
msgstr ""
msgid "Internet Printing Protocol"
msgstr "Internetový tiskový protokol"
+msgid "Invalid group tag."
+msgstr ""
+
msgid "Invalid media name arguments."
msgstr ""
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
msgid "Unsupported 'job-name' value."
msgstr ""
msgid "ippfind: Missing key name after %s."
msgstr ""
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
msgid "ippfind: Missing open parenthesis."
msgstr ""
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"
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 ""
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 ""
"\"%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 ""
msgstr ""
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "Fehlerhafter 'document-format' Wert \"%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."
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"
msgid "Internet Printing Protocol"
msgstr "Internet Printing Protocol"
+msgid "Invalid group tag."
+msgstr ""
+
msgid "Invalid media name arguments."
msgstr "Ungültige Argumente des Mediennamens."
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."
msgid "ippfind: Missing key name after %s."
msgstr ""
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
msgid "ippfind: Missing open parenthesis."
msgstr ""
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"
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 ""
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 ""
"\"%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"
msgstr ""
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "Valor 'document-format' \"%s\" incorrecto."
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."
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"
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."
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."
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"
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."
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"
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 ""
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 ""
"\"%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"
msgstr ""
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
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."
msgid "Bad request version number %d.%d."
msgstr ""
-#, c-format
-msgid "Bad requesting-user-name value: %s"
-msgstr ""
-
msgid "Bad resource in URI"
msgstr ""
msgid "Internet Printing Protocol"
msgstr "Internet Printing Protocol"
+msgid "Invalid group tag."
+msgstr ""
+
msgid "Invalid media name arguments."
msgstr ""
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
+msgid "Unsupported 'job-hold-until' value."
+msgstr ""
+
msgid "Unsupported 'job-name' value."
msgstr ""
msgid "ippfind: Missing key name after %s."
msgstr ""
+#, c-format
+msgid "ippfind: Missing name after %s."
+msgstr ""
+
msgid "ippfind: Missing open parenthesis."
msgstr ""
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"
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 ""
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 ""
"\"%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"
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\"."
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."
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 ""
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."
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."
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."
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"
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 ""
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 ""
"\"%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 バイト"
msgstr ""
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "誤った 'document-format' の値です \"%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 値です。"
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 のリソースが不正"
msgid "Internet Printing Protocol"
msgstr "インターネット印刷プロトコル"
+msgid "Invalid group tag."
+msgstr ""
+
msgid "Invalid media name arguments."
msgstr "無効なメディア名引数です。"
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' の値です。"
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: 開きカッコが足りません。"
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"
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 ""
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 ""
"\"%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"
msgstr ""
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "Valor de \"document-format\" inválido \"%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."
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"
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."
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\"."
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."
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"
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 ""
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 ""
"\"%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 байт"
msgstr ""
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
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."
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 ""
msgid "Internet Printing Protocol"
msgstr "Протокол интернет-печати"
+msgid "Invalid group tag."
+msgstr ""
+
msgid "Invalid media name arguments."
msgstr "Неверные аргументы имени бумаги."
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'."
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: Отсутствует открывающая скобка."
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"
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 ""
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 ""
"\"%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 字节"
msgstr "印片用胶片"
#, c-format
+msgid "Bad '%s' value."
+msgstr ""
+
+#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "无效的“document-format”值“%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。"
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 中的资源无效"
msgid "Internet Printing Protocol"
msgstr "互联网打印协议"
+msgid "Invalid group tag."
+msgstr ""
+
msgid "Invalid media name arguments."
msgstr "无效的媒体名称参数。"
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”值。"
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:缺少左括号。"
.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
\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
.\"
.\" 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
.\" 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
\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
\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
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
.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.
.\"
.\" 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
.\" 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
.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
.SH SEE ALSO
.BR ipptool (1)
.SH COPYRIGHT
-Copyright \[co] 2013-2015 by Apple Inc.
+Copyright \[co] 2013-2018 by Apple Inc.
.\"
.\" 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
.\" 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
[
.B \-E
] [
-.B \-U
-.I username
-] [
\fB\-h \fIserver\fR[\fB:\fIport\fR]
]
\fB\-d \fIdestination\fR[\fB/\fIinstance\fR]
[
.B \-E
] [
-.B \-U
-.I username
-] [
\fB\-h \fIserver\fR[\fB:\fIport\fR]
] [
\fB\-p \fIdestination\fR[\fB/\fIinstance\fR]
[
.B \-E
] [
-.B \-U
-.I username
-] [
\fB\-h \fIserver\fR[\fB:\fIport\fR]
] [
\fB\-p \fIdestination\fR[\fB/\fIinstance\fR]
[
.B \-E
] [
-.B \-U
-.I username
-] [
\fB\-h \fIserver\fR[\fB:\fIport\fR]
]
\fB\-x \fIdestination\fR[\fB/\fIinstance\fR]
.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.
.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.
/*
* "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
* 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);
if (strchr(mailtoSMTPServer, ':'))
+ {
fp = cupsFileOpen(mailtoSMTPServer, "s");
+ }
else
{
char spec[1024]; /* Host:service spec */
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);
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
/*
* 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.
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 **,
* 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))
{
}
-#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.
*/
/*
* 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.
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])
{
/*
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"))
{
/*
/*
* 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
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 */
/*
* 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
}
}
- 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
/* 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 */
/*
* 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>
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)
{
/*
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") ||
!_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") ||
!_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") ||
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"
+ };
/*
}
}
}
+ 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)
{
/*
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)
{
/*
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 ++;
}
/*
* 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.
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));
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)
{
* 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
{
* 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
*/
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;
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;
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);
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...
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 &&
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...");
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...
}
}
- 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;
+ }
}
}
}
* 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);
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
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);
}
* 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);
}
_("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,
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 "
ipp_t *request, /* Request to printer */
*response; /* Response from printer */
ipp_attribute_t *attr; /* Attribute in response */
+ ipp_status_t status; /* Status code */
/*
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);
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));
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));
}
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);
* 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.");
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...
*/
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)
{
}
/*
+ * 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);
}
}
/*
* 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
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...
*/
[Service]
ExecStart=@sbindir@/cupsd -l
Type=simple
-Restart=always
+Restart=on-failure
[Install]
Also=org.cups.cupsd.socket org.cups.cupsd.path
/*
* 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
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);
}
" #\"^%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"
" #\"^%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/... */
/*
* 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
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...
<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ère sauf "/", "#", et espace)</SMALL></TD>
+<SMALL>(Peut contenir n'importe quel caractère sauf "/", "#", et espace)</SMALL></TD>
</TR>
<TR>
<TH CLASS="label">Description :</TH>
<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ère sauf "/", "#", et espace)</SMALL></TD>
+<SMALL>(Peut contenir n'importe quel caractère sauf "/", "#", et espace)</SMALL></TD>
</TR>
<TR>
<TH CLASS="label">Description :</TH>
<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>
<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>
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>
<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
-({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arrêté}},
+({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arrêtée}},
{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>
+{server_is_sharing_printers=0?Non p:{printer_is_shared=0?Non p:P}}artagée{default_name={printer_name}?, imprimante par défaut:})</H2>
<FORM METHOD="POST" ACTION="{printer_uri_supported}" NAME="maintenance">
<INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}">
<OPTION VALUE="move-jobs">Transférer toutes les tâches</OPTION>
<OPTION VALUE="purge-jobs">Annuler toutes les tâ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">
<OPTION VALUE="set-as-default">Définir par défaut</OPTION>
<OPTION VALUE="set-allowed-users">Dé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}">
-<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>
</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é:{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ée:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
}
</TBODY>
</TABLE></DIV>}
<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">
<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>
</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>}
<H2 CLASS="title">{job_id?Transférer la tâche {job_id}:Transférer toutes les tâches}</H2>
-<P>{job_id?<A HREF="/jobs/{job_id}">Job {job_id}</A>:Toutes les tâches} transférée(s) vers
+<P>{job_id?<A HREF="/jobs/{job_id}">Tâche {job_id}</A>:Toutes les tâches} transférée(s) vers
<A HREF="/{is_class?classes:printers}/{job_printer_name}">{job_printer_name}</A>.</P>
<TR VALIGN="TOP">
<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id}{?phone? ({phone}):} </TD>
<TD>{?job_name=?Inconnu:{job_name}} </TD>
-<TD>{?job_originating_user_name=?Withheld:{job_originating_user_name}} </TD>
+<TD>{?job_originating_user_name=?Caché:{job_originating_user_name}} </TD>
<TD>{job_k_octets}k </TD>
<TD>{job_impressions_completed=0?Inconnu:{?job_impressions_completed}} </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êté:
-{job_state=7?annulé depuis<BR>{?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?annulé:terminé depuis<BR>{?time_at_completed=?Unknown:{time_at_completed}}}}}}}} {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êté:
+{job_state=7?annulé depuis<BR>{?time_at_completed=?Inconnu:{time_at_completed}}:{job_state=8?annulé:terminé depuis<BR>{?time_at_completed=?Inconnu:{time_at_completed}}}}}}}} {job_printer_state_message?<BR>
<EM>"{job_printer_state_message}"</EM>:}</TD>
<TD>
{job_preserved>0?{job_state>5?
-<H2 CLASS="title">Définir {is_class?la classe:l'imprimante} {printer_name} comme imprimante par défaut</H2>
+<H2 CLASS="title">Définir {is_class?la classe:l'imprimante} {printer_name} comme {is_class?classe:imprimante} par défaut</H2>
<P>{is_class?La classe:L'imprimante} <A
HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
-a été définie comme imprimante par défaut du serveur.</P>
+a été définie comme {is_class?classe:imprimante} par défaut du serveur.</P>
<BLOCKQUOTE><B>Note:</B> Tout paramètre utilisateur défini via la commande <TT>lpoptions</TT> sera prioritaire sur le paramètre défini içi.
</BLOCKQUOTE>
<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">
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
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 */
*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 */
"IS_REMOTE",
"DOMAIN_REGEX",
"NAME_REGEX",
+ "NAME_LITERAL",
"HOST_REGEX",
"PORT_RANGE",
"PATH_REGEX",
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 ++;
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)
*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;
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),
* 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 */
_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);
}
}
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;
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);
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)
{
/*
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));
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
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
* 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"
/*
* 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"
/*