-CHANGES.txt - 2.2.0 - 2016-09-13
+CHANGES.txt - 2.2.1 - 2016-10-03
--------------------------------
+CHANGES IN CUPS V2.2.1
+
+ - Added "CreateSelfSignedCerts" directive for cups-files.conf to
+ control whether the scheduler automatically creates its own
+ self-signed X.509 certificates for TLS connections (Issue #4876)
+ - http*Connect did not handle partial failures (Issue #4870)
+ - Addressed some build warnings on Linux (Issue #4881)
+ - cupsHashData did not use the correct hashing algorithm
+ (<rdar://problem/28209220>)
+ - Updated man pages (PR #4885)
+ - Updated localizations (PR #4877, PR #4886)
+
+
CHANGES IN CUPS V2.2.0
- Normalized the TLS certificate validation code and added additional
Petter Reinholdtsen - HP-UX compiler stuff.
Juan Pablo González Riopedre - Spanish localization.
Giovanni Scafora - Italian localization.
+ Joachim Schwender - German localization.
Opher Shachar - Hebrew localization.
Stuart Stevens - HP JetDirect IPP information.
Andrea Suatoni - IRIX desktop integration and testing.
-INSTALL - CUPS v2.2.0 - 2016-09-13
+INSTALL - CUPS v2.2.1 - 2016-10-03
----------------------------------
This file describes how to compile and install CUPS from source code. For more
-README - CUPS v2.2.0 - 2016-09-13
+README - CUPS v2.2.1 - 2016-10-03
---------------------------------
Looking for compile instructions? Read the file "INSTALL.txt" instead...
*device_id = '\0';
# ifdef __linux
- if (ioctl(fd, LPIOC_GET_DEVICE_ID(device_id_size), device_id))
+ if (ioctl(fd, LPIOC_GET_DEVICE_ID((unsigned)device_id_size), device_id))
{
/*
* Linux has to implement things differently for every device it seems.
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for CUPS 2.2.0.
+# Generated by GNU Autoconf 2.68 for CUPS 2.2.1.
#
# Report bugs to <https://github.com/apple/cups/issues>.
#
# Identity of this package.
PACKAGE_NAME='CUPS'
PACKAGE_TARNAME='cups'
-PACKAGE_VERSION='2.2.0'
-PACKAGE_STRING='CUPS 2.2.0'
+PACKAGE_VERSION='2.2.1'
+PACKAGE_STRING='CUPS 2.2.1'
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.0 to adapt to many kinds of systems.
+\`configure' configures CUPS 2.2.1 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.0:";;
+ short | recursive ) echo "Configuration of CUPS 2.2.1:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-CUPS configure 2.2.0
+CUPS configure 2.2.1
generated by GNU Autoconf 2.68
Copyright (C) 2010 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.0, which was
+It was created by CUPS $as_me 2.2.1, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
ac_config_headers="$ac_config_headers config.h"
-CUPS_VERSION="2.2.0"
+CUPS_VERSION="2.2.1"
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.0, which was
+This file was extended by CUPS $as_me 2.2.1, which was
generated by GNU Autoconf 2.68. 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.0
+CUPS config.status 2.2.1
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
AC_PREREQ(2.60)
dnl Package name and version...
-AC_INIT([CUPS], [2.2.0], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
+AC_INIT([CUPS], [2.2.1], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
sinclude(config-scripts/cups-opsys.m4)
sinclude(config-scripts/cups-common.m4)
* Constants...
*/
-# define CUPS_VERSION 2.0200
+# define CUPS_VERSION 2.0201
# define CUPS_VERSION_MAJOR 2
# define CUPS_VERSION_MINOR 2
-# define CUPS_VERSION_PATCH 0
+# define CUPS_VERSION_PATCH 1
# define CUPS_BC_FD 3
/* Back-channel file descriptor for
/*
* Hashing function for CUPS.
*
- * Copyright 2015 by Apple Inc.
+ * Copyright 2015-2016 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
}
#ifdef __APPLE__
- if (strcmp(algorithm, "sha"))
+ if (!strcmp(algorithm, "sha"))
{
/*
* SHA-1...
return (CC_SHA1_DIGEST_LENGTH);
}
- else if (strcmp(algorithm, "sha2-224"))
+ else if (!strcmp(algorithm, "sha2-224"))
{
CC_SHA256_CTX ctx; /* SHA-224 context */
return (CC_SHA224_DIGEST_LENGTH);
}
- else if (strcmp(algorithm, "sha2-256"))
+ else if (!strcmp(algorithm, "sha2-256"))
{
CC_SHA256_CTX ctx; /* SHA-256 context */
return (CC_SHA256_DIGEST_LENGTH);
}
- else if (strcmp(algorithm, "sha2-384"))
+ else if (!strcmp(algorithm, "sha2-384"))
{
CC_SHA512_CTX ctx; /* SHA-384 context */
return (CC_SHA384_DIGEST_LENGTH);
}
- else if (strcmp(algorithm, "sha2-512"))
+ else if (!strcmp(algorithm, "sha2-512"))
{
CC_SHA512_CTX ctx; /* SHA-512 context */
return (CC_SHA512_DIGEST_LENGTH);
}
- else if (strcmp(algorithm, "sha2-512_224"))
+ else if (!strcmp(algorithm, "sha2-512_224"))
{
CC_SHA512_CTX ctx; /* SHA-512 context */
unsigned char temp[CC_SHA512_DIGEST_LENGTH];
return (CC_SHA224_DIGEST_LENGTH);
}
- else if (strcmp(algorithm, "sha2-512_256"))
+ else if (!strcmp(algorithm, "sha2-512_256"))
{
CC_SHA512_CTX ctx; /* SHA-512 context */
unsigned char temp[CC_SHA512_DIGEST_LENGTH];
unsigned char temp[64]; /* Temporary hash buffer */
size_t tempsize = 0; /* Truncate to this size? */
- if (strcmp(algorithm, "sha"))
+ if (!strcmp(algorithm, "sha"))
alg = GNUTLS_DIG_SHA1;
- else if (strcmp(algorithm, "sha2-224"))
+ else if (!strcmp(algorithm, "sha2-224"))
alg = GNUTLS_DIG_SHA224;
- else if (strcmp(algorithm, "sha2-256"))
+ else if (!strcmp(algorithm, "sha2-256"))
alg = GNUTLS_DIG_SHA256;
- else if (strcmp(algorithm, "sha2-384"))
+ else if (!strcmp(algorithm, "sha2-384"))
alg = GNUTLS_DIG_SHA384;
- else if (strcmp(algorithm, "sha2-512"))
+ else if (!strcmp(algorithm, "sha2-512"))
alg = GNUTLS_DIG_SHA512;
- else if (strcmp(algorithm, "sha2-512_224"))
+ else if (!strcmp(algorithm, "sha2-512_224"))
{
alg = GNUTLS_DIG_SHA512;
tempsize = 28;
}
- else if (strcmp(algorithm, "sha2-512_256"))
+ else if (!strcmp(algorithm, "sha2-512_256"))
{
alg = GNUTLS_DIG_SHA512;
tempsize = 32;
if (result > 0)
{
+ http_addrlist_t *connaddr = NULL; /* Connected address, if any */
+
for (i = 0; i < nfds; i ++)
{
# ifdef HAVE_POLL
# endif /* HAVE_POLL */
{
*sock = fds[i];
- addrlist = addrs[i];
+ connaddr = addrs[i];
# ifdef DEBUG
len = sizeof(peer);
DEBUG_printf(("1httpAddrConnect2: Connected to %s:%d...", httpAddrString(&peer, temp, sizeof(temp)), httpAddrPort(&peer)));
# endif /* DEBUG */
}
- else
+# ifdef HAVE_POLL
+ else if (pfds[i].revents & (POLLERR | POLLHUP))
+# else
+ else if (FD_ISSET(fds[i], &error))
+# endif /* HAVE_POLL */
+ {
+ /*
+ * Error on socket, remove from the "pool"...
+ */
+
httpAddrClose(NULL, fds[i]);
+ nfds --;
+ if (i < nfds)
+ {
+ memmove(fds + i, fds + i + 1, (size_t)(nfds - i) * (sizeof(fds[0])));
+ memmove(addrs + i, addrs + i + 1, (size_t)(nfds - i) * (sizeof(addrs[0])));
+ }
+ i --;
+ }
}
- return (addrlist);
+ if (connaddr)
+ return (connaddr);
}
#endif /* O_NONBLOCK */
if (hostname[0])
{
/*
- * First look for CA certs...
+ * First look in the CUPS keystore...
*/
- snprintf(crtfile, sizeof(crtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostname);
- snprintf(keyfile, sizeof(keyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostname);
-
- if ((access(crtfile, R_OK) || access(keyfile, R_OK)) && (hostptr = strchr(hostname, '.')) != NULL)
- {
- /*
- * Try just domain name...
- */
-
- hostptr ++;
- if (strchr(hostptr, '.'))
- {
- snprintf(crtfile, sizeof(crtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostptr);
- snprintf(keyfile, sizeof(keyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostptr);
- }
- }
+ http_gnutls_make_path(crtfile, sizeof(crtfile), tls_keypath, hostname, "crt");
+ http_gnutls_make_path(keyfile, sizeof(keyfile), tls_keypath, hostname, "key");
if (access(crtfile, R_OK) || access(keyfile, R_OK))
{
/*
- * Then look in the CUPS keystore...
- */
-
- http_gnutls_make_path(crtfile, sizeof(crtfile), tls_keypath, hostname, "crt");
- http_gnutls_make_path(keyfile, sizeof(keyfile), tls_keypath, hostname, "key");
+ * No CUPS-managed certs, look for CA certs...
+ */
+
+ char cacrtfile[1024], cakeyfile[1024]; /* CA cert files */
+
+ snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostname);
+ snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostname);
+
+ if ((access(cacrtfile, R_OK) || access(cakeyfile, R_OK)) && (hostptr = strchr(hostname, '.')) != NULL)
+ {
+ /*
+ * Try just domain name...
+ */
+
+ hostptr ++;
+ if (strchr(hostptr, '.'))
+ {
+ snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostptr);
+ snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostptr);
+ }
+ }
+
+ if (!access(cacrtfile, R_OK) && !access(cakeyfile, R_OK))
+ {
+ /*
+ * Use the CA certs...
+ */
+
+ strlcpy(crtfile, cacrtfile, sizeof(crtfile));
+ strlcpy(keyfile, cakeyfile, sizeof(keyfile));
+ }
}
have_creds = !access(crtfile, R_OK) && !access(keyfile, R_OK);
else if (tls_common_name)
{
/*
- * First look for CA certs...
+ * First look in the CUPS keystore...
*/
- snprintf(crtfile, sizeof(crtfile), "/etc/letsencrypt/live/%s/fullchain.pem", tls_common_name);
- snprintf(keyfile, sizeof(keyfile), "/etc/letsencrypt/live/%s/privkey.pem", tls_common_name);
-
- if ((access(crtfile, R_OK) || access(keyfile, R_OK)) && (hostptr = strchr(tls_common_name, '.')) != NULL)
- {
- /*
- * Try just domain name...
- */
-
- hostptr ++;
- if (strchr(hostptr, '.'))
- {
- snprintf(crtfile, sizeof(crtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostptr);
- snprintf(keyfile, sizeof(keyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostptr);
- }
- }
+ http_gnutls_make_path(crtfile, sizeof(crtfile), tls_keypath, tls_common_name, "crt");
+ http_gnutls_make_path(keyfile, sizeof(keyfile), tls_keypath, tls_common_name, "key");
if (access(crtfile, R_OK) || access(keyfile, R_OK))
{
/*
- * Then look in the CUPS keystore...
- */
-
- http_gnutls_make_path(crtfile, sizeof(crtfile), tls_keypath, tls_common_name, "crt");
- http_gnutls_make_path(keyfile, sizeof(keyfile), tls_keypath, tls_common_name, "key");
+ * No CUPS-managed certs, look for CA certs...
+ */
+
+ char cacrtfile[1024], cakeyfile[1024]; /* CA cert files */
+
+ snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", tls_common_name);
+ snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", tls_common_name);
+
+ if ((access(cacrtfile, R_OK) || access(cakeyfile, R_OK)) && (hostptr = strchr(tls_common_name, '.')) != NULL)
+ {
+ /*
+ * Try just domain name...
+ */
+
+ hostptr ++;
+ if (strchr(hostptr, '.'))
+ {
+ snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostptr);
+ snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostptr);
+ }
+ }
+
+ if (!access(cacrtfile, R_OK) && !access(cakeyfile, R_OK))
+ {
+ /*
+ * Use the CA certs...
+ */
+
+ strlcpy(crtfile, cacrtfile, sizeof(crtfile));
+ strlcpy(keyfile, cakeyfile, sizeof(keyfile));
+ }
}
have_creds = !access(crtfile, R_OK) && !access(keyfile, R_OK);
help/api-ppd.html \
help/api-raster.html \
help/cgi.html \
+ help/encryption.html \
help/glossary.html \
help/kerberos.html \
help/license.html \
--- /dev/null
+<!doctype html>
+<html>
+<!-- SECTION: Getting Started -->
+ <head>
+ <title>Managing Encryption</title>
+ <link rel="STYLESHEET" type="text/css" href="../cups-printable.css">
+ </head>
+ <body>
+ <h1 class="title">Managing Encryption</h1>
+ <p>CUPS supports TLS encryption in two ways:</p>
+ <ol>
+ <li>Using HTTPS (always on) as soon as a connection is established, and</li>
+ <li>Using HTTP Upgrade to TLS (opportunistic) after the connection is established.</li>
+ </ol>
+ <p>CUPS supports self-signed, CA-signed, and enterprise certificates, with configurable certificate validation, cipher suite, and SSL/TLS version policies.</p>
+ <p>Out of the box, CUPS uses a Trust On First Use ("TOFU") certificate validation policy like the popular Secure Shell (ssh) software, requires TLS/1.0 or higher, only allows secure cipher suites, and automatically creates a "self-signed" certificate and private key for the scheduler so that remote administration operations and printer sharing are encrypted by default.</p>
+
+ <h2>Configuring Client TLS Policies</h2>
+ <p>The <a href="man-client.conf.html"><var>client.conf</var></a> file controls the client TLS policies. The default policy is:</p>
+ <pre class="command">
+AllowAnyRoot Yes
+AllowExpiredCerts No
+Encryption IfRequested
+SSLOptions None
+TrustOnFirstUse Yes
+ValidateCerts No
+</pre>
+ <p>A client can be configured to only communicate with trusted TLS/1.1+ servers and printers by copying the corresponding certificates to the client (<a href="#PLATFORM">see below</a>) and using the following policy in the <var>client.conf</var> file or macOS<sup>®</sup> printing preferences:</p>
+ <pre class="command">
+AllowAnyRoot No
+AllowExpiredCerts No
+Encryption Required
+SSLOptions DenyTLS1.0
+TrustOnFirstUse No
+ValidateCerts Yes
+</pre>
+ <p>Similarly, if a client needs to support an older server that only supports SSL/3.0 and RC4 cipher suites you can use the following policy option:</p>
+ <pre class="command">
+SSLOptions AllowRC4 AllowSSL3
+</pre>
+
+ <h2>Configuring Server TLS Policies</h2>
+ <p>Two directives in the <a href="man-cups-files.conf.html"><var>cups-files.conf</var></a> file control the server (scheduler) TLS policies - <a href="man-cups-files.conf.html#CreateSelfSignedCerts"><code>CreateSelfSignedCerts</code></a> and <a href="man-cups-files.conf.html#ServerKeychain"><code>ServerKeychain</code></a>. The default policy creates self-signed certificates as needed.</p>
+ <p>The <a href="man-cupsd.conf.html#DefaultEncryption"><code>DefaultEncryption</code></a> and <a href="man-cupsd.conf.html#Encryption"><code>Encryption</code></a> directives in the <a href="man-cupsd.conf.html"><var>cupsd.conf</var></a> file control whether encryption is used. The default configuration requires encryption for remote access whenever authentication is required.</p>
+
+ <h2><a name="PLATFORM">Platform Differences</a></h2>
+ <h3>macOS<sup>®</sup></h3>
+ <p>On macOS, client configuration settings for ordinary users are stored in the <var>~/Library/Preferences/org.cups.PrintingPrefs.plist</var> file. System-wide and user certificates are stored in the system and login keychains, with private CUPS keychains being used for self-signed and CUPS-managed certificates.</p>
+ <h3>Windows<sup>®</sup></h3>
+ <p>On Windows, client configuration settings are controlled by the SSL/TLS Group Policy settings and certificate stores.</p>
+ <h3>Other Platforms</h3>
+ <p>Other platforms only use the <var>client.conf</var> file and PEM-encoded certificates (<i>hostname</i>.crt) and private keys (<i>hostname</i>.key) in the <var>/etc/cups/ssl</var> and <var>~/.cups/ssl</var> directories. If present, the <var>/etc/cups/ssl/site.crt</var> file defines a site-wide CA certificate that is used to validate server and printer certificates. Certificates for known servers and printers are stored by CUPS in the corresponding <var>ssl</var> directory so they can be validated for subsequent connections.</p>
+ <p>CUPS also supports certificates created and managed by the popular <a href="https://letsencrypt.org/">Let's Encrypt</a> certificate service, which are stored in the <var>/etc/letsencrypt/live</var> directory.</p>
+ </body>
+</html>
(setenv CUPS_DEBUG_LEVEL 2; /usr/lib/cups/backend/snmp) |& tee snmp.log
</PRE>
-<P>On MacmacOS you'll find the SNMP backend in /usr/libexec/cups/backend instead:</P>
+<P>On macOS you'll find the SNMP backend in /usr/libexec/cups/backend instead:</P>
<PRE CLASS="command">
CUPS_DEBUG_LEVEL=2 /usr/libexec/cups/backend/snmp 2>&1 | tee snmp.log
<P><B>Recommendation:</B> Enable encryption to hide the
username and password information - this is the default on
- MacmacOS and systems with GNU TLS or OpenSSL installed.</P></LI>
+ macOS and systems with GNU TLS installed.</P></LI>
<LI>Local certificate authentication passes 128-bit
"certificates" that identify an authenticated user.
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
"POT-Creation-Date: 2016-08-30 16:00-0400\n"
-"PO-Revision-Date: 2016-04-22 12:25+0100\n"
+"PO-Revision-Date: 2016-09-17 18:45+0200\n"
"Last-Translator: Joachim Schwender <joachim.schwender@web.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: German\n"
#, c-format
msgid "\t%s"
-msgstr ""
+msgstr "\t%s"
msgid "\tAfter fault: continue"
msgstr "\tNach einem Fehler: fortfahren"
msgstr " Ignoriere bestimmte Warnungen."
msgid " Issue warnings instead of errors."
-msgstr " Gebe Warnungen anstelle fon Fehlern aus."
+msgstr " Gebe Warnungen anstelle von Fehlern aus."
msgid " REF: Page 15, section 3.1."
msgstr " REF: Seite 15, Kap. 3.1."
#, c-format
msgid " %s Bad cupsUIConstraints %s: \"%s\""
-msgstr ""
+msgstr " %s Ungültiger Wert für cupsUIConstraints %s: \"%s\""
#, c-format
msgid " %s Bad language \"%s\"."
#, c-format
msgid " %s Missing \"%s\" translation string for option %s, choice %s."
-msgstr ""
+msgstr " %s Fehlende \"%s\" Übersetzung für Option %s, Auswahl %s."
#, c-format
msgid " %s Missing \"%s\" translation string for option %s."
-msgstr ""
+msgstr " %s Fehlende \"%s\" Übersetzung für Option %s."
#, c-format
msgid " %s Missing %s file \"%s\"."
#, c-format
msgid " %s cupsUIResolver %s causes a loop."
-msgstr ""
+msgstr " %s cupsUIResolver %s verursacht eine Schleife."
#, c-format
msgid ""
msgstr ""
msgid " -h Show program usage"
-msgstr ""
+msgstr " -h Zeige Verwendungshinweis"
#, c-format
msgid ""
msgstr ""
msgid " Warning: file contains binary data."
-msgstr ""
+msgstr " Warnung: Datei enthält Binärdaten."
#, c-format
msgid " Warning: no %%EndComments comment in file."
msgstr ""
msgid " ! expression Unary NOT of expression."
-msgstr ""
+msgstr " ! Ausdruck Unäre Negation des Ausdrucks."
msgid " ( expressions ) Group expressions."
-msgstr ""
+msgstr " ( Ausdruck ) Gruppierung von Ausdrücken."
msgid " --[no-]debug-logging Turn debug logging on/off."
msgstr " --[no-]debug-logging Ein-/Abschalten von Fehlersuche-Protokoll."
msgid " --domain regex Match domain to regular expression."
msgstr ""
-" --domain regex Prüfe die Domäne aud Übereinstimmung mit regulärem "
+" --domain regex Prüfe die Domäne auf Übereinstimmung mit regulärem "
"Ausdruck"
msgid ""
"Regulärem Audruck"
msgid " --lf End lines with LF (UNIX/Linux/macOS)."
-msgstr ""
+msgstr " --lf Zeilenenden mit LF (UNIX/Linux/macOS)."
msgid " --list-filters List filters that will be used."
msgstr " --list-filters Liste die Filter auf die benutzt werden."
msgstr " -6 Verbinde unter Verwendung von IPv6."
msgid " -C Send requests using chunking (default)."
-msgstr ""
+msgstr " -C Sende Anfragen mit Blockbildung (Voreinstellung)."
msgid " -D Remove the input file when finished."
msgstr " -D Lösche die Eingabe nach Beenden."
msgstr ""
msgid " -L Send requests using content-length."
-msgstr ""
+msgstr " -L Send Anfragen unter Benutzung der Content-length Headers."
msgid ""
" -P filename.plist Produce XML plist to a file and test report to "
msgid " -R root-directory Set alternate root."
msgstr ""
-" -R root-Verz. Legt ein alternatives Wurzelverzeichnis fest."
+" -R Wurzelverz. Legt ein alternatives Wurzelverzeichnis fest."
msgid " -S Test with SSL encryption."
msgstr " -S Teste mit SSL Verschlüsselung."
msgstr " -c cups.conf Setze die zu benutzende Datei cups.conf"
msgid " -d name=value Set named variable to value."
-msgstr ""
+msgstr " -d Name=Wert Ordnet der Variablen »Name« den Wert zu."
msgid " -d output-dir Specify the output directory."
msgstr " -d AusgabeVerz. Angabe des Ausgabeverzeichnisses."
msgstr " -h server[:port] Spezifiziere die Server-Adresse."
msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
-msgstr ""
+msgstr " -i mime/type Legt den MIME-typ der Eingabe fest (sonst selbsterkennend)."
msgid ""
" -i seconds Repeat the last file with the given time interval."
msgstr ""
+" -i Sekunden Wiederhole die letzte Datei im gegebenen Intervall."
msgid ""
" -j job-id[,N] Filter file N from the specified job (default is "
msgid ""
" -m mime/type Set output MIME type (otherwise application/pdf)."
msgstr ""
+" -m mime/type Legt den MIME-typ der Ausgabe fest (sonst application/pdf)."
msgid " -n copies Set number of copies."
msgstr " -n copies Lege die Anzahl der Kopien fest."
msgid ""
" -n count Repeat the last file the given number of times."
msgstr ""
+" -n Anzahl Wiederhole die letzte Datei »Anzahl« male."
msgid " -n regex Match service name to regular expression."
-msgstr ""
+msgstr " -n regex Prüfe den Dienstnamen gegen den regulären Ausdruck »regex«."
msgid ""
" -o filename.drv Set driver information file (otherwise ppdi.drv)."
"drv)."
msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)."
-msgstr ""
+msgstr " -o Dateiname.ppd[.gz] Legt den Dateinamen der Ausgabe fest (sonst stdout)."
msgid " -o name=value Set option(s)."
msgstr " -o Name=Wert Legt Optionen fest."
msgstr "2 inch/s"
msgid "2-Hole Punch (Landscape)"
-msgstr ""
+msgstr "2-fach Lochung (Querformat)"
msgid "2-Hole Punch (Portrait)"
-msgstr ""
+msgstr "2-fach Lochung (Hochformat)"
msgid "2-Hole Punch (Reverse Landscape)"
-msgstr ""
+msgstr "2-fach Lochung (gedrehtes Querformat)"
msgid "2-Hole Punch (Reverse Portrait)"
-msgstr ""
+msgstr "2-fach Lochung (gedrehtes Hochformat)"
msgid "2-Sided Printing"
msgstr "Doppelseitig drucken"
msgstr "3×5"
msgid "3-Hole Punch (Landscape)"
-msgstr ""
+msgstr "3-fach Lochung (Querformat)"
msgid "3-Hole Punch (Portrait)"
-msgstr ""
+msgstr "3-Fach Lochung (Hochformat)"
msgid "3-Hole Punch (Reverse Landscape)"
-msgstr ""
+msgstr "3-fach Lochung (gedrehtes Querformat)"
msgid "3-Hole Punch (Reverse Portrait)"
-msgstr ""
+msgstr "2-fach Lochung (gedrehtes Hochformat)"
msgid "3.00x1.00\""
msgstr "3,00×1,00inch"
msgstr "4 inch/s"
msgid "4-Hole Punch (Landscape)"
-msgstr ""
+msgstr "4-fach Lochung (Querformat)"
msgid "4-Hole Punch (Portrait)"
-msgstr ""
+msgstr "4-fach Lochung (Hochformat)"
msgid "4-Hole Punch (Reverse Landscape)"
-msgstr ""
+msgstr "4-fach Lochung (gedrehtes Querformat)"
msgid "4-Hole Punch (Reverse Portrait)"
-msgstr ""
+msgstr "4-fach Lochung (gedrehtes Hochformat)"
msgid "4.00x1.00\""
msgstr "4,00×1,00 inch"
msgstr "Ungültige PPD Cache Datei."
msgid "Bad PPD file."
-msgstr ""
+msgstr "Ungültige PPD Datei"
msgid "Bad Request"
msgstr "Ungültige Anfrage"
msgstr ""
msgid "Coated Envelope"
-msgstr ""
+msgstr "Beschichteter Umschlag"
msgid "Coated Paper"
-msgstr ""
+msgstr "Beschichtetes Papier"
msgid "Color"
msgstr "Farbe"
msgstr ""
msgid "Credentials have expired."
-msgstr ""
+msgstr "Berechtigung ist abgelaufen"
msgid "Custom"
msgstr "Eigene"
msgstr "Abschneider"
msgid "DVD"
-msgstr ""
+msgstr "DVD"
msgid "Dark"
msgstr "Dunkel"
msgstr ""
msgid "Draft"
-msgstr ""
+msgstr "Entwurf"
msgid "Dry Film"
msgstr ""
"Kerberos-Ticket haben."
msgid "Envelope"
-msgstr ""
+msgstr "Umschlag"
msgid "Envelope #10"
-msgstr ""
+msgstr "US Umschlag 10"
msgid "Envelope #11"
msgstr "US Umschlag 11"
msgstr ""
msgid "Envelope DL"
-msgstr ""
+msgstr "Umschlag DL"
msgid "Envelope Feed"
msgstr "Umschlagzuführung"
msgstr ""
msgid "Envelope Italian"
-msgstr ""
+msgstr "Umschlag italienisch"
msgid "Envelope Kaku2"
msgstr ""
msgstr ""
msgid "Environment Variables:"
-msgstr ""
+msgstr "Umgebungsvariablen:"
msgid "Epson"
msgstr "Epson"
msgstr "Ausdrücke:"
msgid "FAIL"
-msgstr ""
+msgstr "FEHLER"
msgid "Fabric"
msgstr ""
msgstr "Dateirechte \"%s\" OK (0%o/uid=%d/gid=%d)."
msgid "File Folder"
-msgstr ""
+msgstr "Dateiverzeichnis"
#, c-format
msgid ""
msgstr ""
msgid "Film"
-msgstr ""
+msgstr "Film"
msgid "Fine Envelope"
msgstr ""
msgstr "Seite %d fertiggestellt."
msgid "Finishing"
-msgstr ""
+msgstr "Endverarbeitung"
msgid "Flexo Base"
msgstr ""
msgstr "Glanzpapier"
msgid "Glossy Photo Paper"
-msgstr ""
+msgstr "Fotoglanzpapier"
msgid "Got a printer-uri attribute but no job-id."
msgstr "Drucker-URI Attribut empfangen aber keine Auftrags-ID."
msgstr "Hängeordner"
msgid "Hash buffer too small."
-msgstr ""
+msgstr "Hash Puffer zu klein."
msgid "Heavyweight Envelope"
-msgstr ""
+msgstr "Schwerer Umschlag"
msgid "Heavyweight Paper"
-msgstr ""
+msgstr "Schweres Papier"
msgid "Help file not in index."
msgstr "Hilfedatei nicht im Index."
msgid "High"
-msgstr ""
+msgstr "Hoch"
msgid "High Gloss Fabric"
msgstr ""
msgid "High Gloss Labels"
-msgstr ""
+msgstr "Hochglanzetiketten"
msgid "High Gloss Optical Disc"
msgstr ""
msgid "High Gloss Photo Paper"
-msgstr ""
+msgstr "Hochglanzfotopapier"
msgid "IPP 1setOf attribute with incompatible value tags."
msgstr "IPP 1setOf Attribut mit inkompatiblen Werte-Markierung."
msgstr ""
msgid "IPP date value not 11 bytes."
-msgstr ""
+msgstr "IPP-Datenwert nicht 11 Bytes."
msgid "IPP endCollection value not 0 bytes."
msgstr ""
msgstr "IPP Integer-Wert nicht 4 Bytes."
msgid "IPP language length overflows value."
-msgstr ""
+msgstr "IPP Sprachlänge übersteigt Wert."
msgid "IPP language length too large."
-msgstr ""
+msgstr "IPP-Sprachlänge zu groß."
msgid "IPP member name is not empty."
msgstr ""
msgstr ""
msgid "IPP name larger than 32767 bytes."
-msgstr ""
+msgstr "IPP Name länger als 32767 Byte"
msgid "IPP nameWithLanguage value less than minimum 4 bytes."
msgstr ""
msgstr ""
msgid "IPP value larger than 32767 bytes."
-msgstr "IPP Wert länger als 32767 byte"
+msgstr "IPP-Wert länger als 32767 Bytes."
msgid "ISOLatin1"
-msgstr "UTF-8"
+msgstr "ISOLatin1"
msgid "Illegal control character"
msgstr "Ungültiges Steuerungszeichen"
msgstr ""
msgid "Inkjet Envelope"
-msgstr ""
+msgstr "Tintenstrahl-Umschäge"
msgid "Inkjet Labels"
-msgstr ""
+msgstr "Tintenstrahl-Etiketten"
msgid "Installable Options"
msgstr "Installationsoptionen"
msgstr "Ungültige Mediengrösse."
msgid "Invalid ppd-name value."
-msgstr ""
+msgstr "Ungültgier Wert ppd-name"
#, c-format
msgid "Invalid printer command \"%s\"."
msgstr "Etikettendrucker"
msgid "Label Top"
-msgstr "Etikett (oben)"
+msgstr "Etikett oben"
msgid "Labels"
-msgstr ""
+msgstr "Etiketten"
msgid "Laminate"
-msgstr ""
+msgstr "Laminieren"
msgid "Laminating Foil"
-msgstr ""
+msgstr "Laminierfolie"
#, c-format
msgid "Language \"%s\" not supported."
msgstr "Sprache \"%s\" nicht unterstützt."
msgid "Large Address"
-msgstr "Adresse gross"
+msgstr "Große Adresse"
msgid "Large Capacity"
-msgstr ""
+msgstr "Hohe Kapazität"
msgid "LaserJet Series PCL 4/5"
msgstr "LaserJet Serie PCL 4/5"
msgid "Left"
-msgstr ""
+msgstr "Links"
msgid "Left Gate Fold"
msgstr ""
msgstr ""
msgid "Letter Oversize"
-msgstr "Letter Übergrösse"
+msgstr "Letter Übergröße"
msgid "Letter Oversize Long Edge"
msgstr ""
msgid "Letterhead"
-msgstr ""
+msgstr "Briefkopf"
msgid "Light"
msgstr "Leicht"
msgstr "Lade Papier."
msgid "Local printer created."
-msgstr ""
+msgstr "Lokalen Drucker erzeugt."
msgid "Long-Edge (Portrait)"
msgstr "Lange Kante (Hochformat)"
#, c-format
msgid "Missing required attribute \"%s\"."
-msgstr ""
+msgstr "Erforderliches Attribut \"%s\" fehlt."
msgid "Missing required attributes."
-msgstr ""
+msgstr "Erforderliche Attribute fehlen."
msgid "Missing resource in URI"
msgstr "Fehlende Resource in URI"
msgstr ""
msgid "Multipurpose"
-msgstr ""
+msgstr "Mehrzweck"
msgid "NULL PPD file pointer"
msgstr "NULL PPD File Pointer"
msgstr "Kein Inhalt"
msgid "No Finishing"
-msgstr ""
+msgstr "Keine Endverarbeitung"
msgid "No PPD name"
msgstr "Kein PPD Name"
msgstr "Online-Hilfe"
msgid "Only local users can create a local printer."
-msgstr ""
+msgstr "Nur lokale Benutzer können lokale Drucker erzeugen."
#, c-format
msgid "Open of %s failed: %s"
msgstr "Nutzungsrichtlinien"
msgid "Optical Disc"
-msgstr ""
+msgstr "Optische Disk"
#, c-format
msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
msgstr "Paket beginnt nicht mit SEQUENCE"
msgid "Paper"
-msgstr ""
+msgstr "Papier"
msgid "Paper jam."
msgstr "Papierstau."
msgstr "Aufkleber"
msgid "Permanent Labels"
-msgstr ""
+msgstr "Permanentetiketten"
msgid "Photo"
msgstr "Foto"
msgid "Photo Film"
-msgstr ""
+msgstr "Fotofilm"
msgid "Photo Labels"
msgstr "Foto-Etiketten"
msgid "Photo Paper"
-msgstr ""
+msgstr "Fotopapier"
msgid "Photographic Archival"
msgstr ""
msgid "Plain Envelope"
-msgstr ""
+msgstr "Standardumschläge"
msgid "Plain Paper"
msgstr "Standardpapier"
msgid "Plastic"
-msgstr ""
+msgstr "Kunststoff"
msgid "Plastic Archival"
msgstr ""
msgstr "Richtlinien "
msgid "Polyester"
-msgstr ""
+msgstr "Polyester"
msgid "Port Monitor"
msgstr "Port-Monitor"
msgstr "Vorbereitung zum Druck."
msgid "Preprinted Envelope"
-msgstr ""
+msgstr "Vorbedruckte Umschläge"
msgid "Preprinted Paper"
-msgstr ""
+msgstr "Vorbedrucktes Papier"
msgid "Print Density"
msgstr "Druckdichte"
msgstr "Druckmodus"
msgid "Print Quality"
-msgstr ""
+msgstr "Druckqualität"
msgid "Print Rate"
msgstr "Druckrate"
#, c-format
msgid "Printer \"%s\" already exists."
-msgstr ""
+msgstr "Drucker \"%s\" existiert bereits."
msgid "Printer Added"
msgstr "Drucker hinzugefügt"
msgstr "Drucke Seite %d, %u%% fertig."
msgid "Punch"
-msgstr ""
+msgstr "Locher"
msgid "Punched Paper"
-msgstr ""
+msgstr "Gelochtes Papier"
msgid "Quarto"
msgstr "US Quarto"
msgstr "Zurückdrehen"
msgid "Right"
-msgstr ""
+msgstr "Rechts"
msgid "Right Gate Fold"
msgstr ""
msgid "Roll"
-msgstr ""
+msgstr "Rolle"
msgid "Roll 1"
-msgstr ""
+msgstr "Rolle 1"
msgid "Roll 10"
-msgstr ""
+msgstr "Rolle 10"
msgid "Roll 2"
-msgstr ""
+msgstr "Rolle 2"
msgid "Roll 3"
-msgstr ""
+msgstr "Rolle 3"
msgid "Roll 4"
-msgstr ""
+msgstr "Rolle 4"
msgid "Roll 5"
-msgstr ""
+msgstr "Rolle 5"
msgid "Roll 6"
-msgstr ""
+msgstr "Rolle 6"
msgid "Roll 7"
-msgstr ""
+msgstr "Rolle 7"
msgid "Roll 8"
-msgstr ""
+msgstr "Rolle 8"
msgid "Roll 9"
-msgstr ""
+msgstr "Rolle 9"
#, c-format
msgid "Running command: %s %s -N -A %s -c '%s'"
msgstr ""
msgid "Satin Labels"
-msgstr ""
+msgstr "Satinetiketten"
msgid "Satin Optical Disc"
msgstr ""
msgstr ""
msgid "Security Labels"
-msgstr ""
+msgstr "Sicherheitsetiketten"
msgid "See Other"
msgstr "Siehe auch"
msgstr ""
msgid "Self Adhesive"
-msgstr ""
+msgstr "Selbstklebend"
msgid "Self Adhesive Film"
-msgstr ""
+msgstr "Selbstklebender Film"
msgid "Self-signed credentials are blocked."
msgstr ""
msgstr ""
msgid "Single Punch (Landscape)"
-msgstr ""
+msgstr "Einfachlochung (Querformat)"
msgid "Single Punch (Portrait)"
-msgstr ""
+msgstr "Einfachlochung (Hochformat)"
msgid "Single Punch (Reverse Landscape)"
-msgstr ""
+msgstr "Einfachlochung (gedrehtes Querformat)"
msgid "Single Punch (Reverse Portrait)"
-msgstr ""
+msgstr "Einfachlochung (gedrehtes Hochformat)"
msgid "Single Staple (Landscape)"
-msgstr ""
+msgstr "Einfachheftung (Querformat)"
msgid "Single Staple (Portrait)"
-msgstr ""
+msgstr "Einfachheftung (Hochformat)"
msgid "Single Staple (Reverse Landscape)"
msgstr ""
msgstr "Standard"
msgid "Staple"
-msgstr ""
+msgstr "Heftung"
msgid "Staple Edge"
-msgstr ""
+msgstr "Randheftung"
msgid "Staple Edge (Landscape)"
-msgstr ""
+msgstr "Randheftung (Querformat)"
msgid "Staple Edge (Portrait)"
-msgstr ""
+msgstr "Randheftung (Hochformat)"
msgid "Staple Edge (Reverse Landscape)"
-msgstr ""
+msgstr "Randheftung (gedrehtes Querformat)"
msgid "Staple Edge (Reverse Portrait)"
-msgstr ""
+msgstr "Randheftung (gedrehtes Hochformat)"
#. TRANSLATORS: Banner/cover sheet before the print job.
msgid "Starting Banner"
msgstr "Super B/A3"
msgid "Switching Protocols"
-msgstr "Protokoll wechseln"
+msgstr "Protokolle wechseln"
msgid "Tab Stock"
msgstr ""
"mehr."
msgid "The printer did not respond."
-msgstr "Der Drucker hat nicht geantwortet"
+msgstr "Der Drucker hat nicht geantwortet."
msgid "The printer is in use."
-msgstr "Der Drucker ist beschäftigt"
+msgstr "Der Drucker ist beschäftigt."
msgid "The printer is low on ink."
-msgstr "Der Drucker hat niedrigen Tintenstand"
+msgstr "Der Drucker hat niedrigen Tintenstand."
msgid "The printer is low on toner."
-msgstr "Der Drucker hat niedrigen Tonerstand"
+msgstr "Der Drucker hat niedrigen Tonerstand."
msgid "The printer is not connected."
-msgstr "Der Drucker ist nicht verbunden"
+msgstr "Der Drucker ist nicht verbunden."
msgid "The printer is not responding."
-msgstr "Der Drucker antwortet nicht"
+msgstr "Der Drucker antwortet nicht."
msgid "The printer is now connected."
-msgstr "Der Drucker ist jetzt verbunden"
+msgstr "Der Drucker ist jetzt verbunden."
msgid "The printer is now online."
-msgstr "Der Drucker ist jetzt online"
+msgstr "Der Drucker ist jetzt online."
msgid "The printer is offline."
-msgstr "Der Drucker ist offline"
+msgstr "Der Drucker ist offline."
msgid "The printer is unreachable at this time."
-msgstr "Der Drucker ist derzeit nicht erreichbar"
+msgstr "Der Drucker ist derzeit nicht erreichbar."
msgid "The printer may be out of ink."
-msgstr "Der Drucker hat mochlicherweise keine Tinte mehr"
+msgstr "Der Drucker hat mochlicherweise keine Tinte mehr."
msgid "The printer may be out of toner."
msgstr "Der Drucker könnte zu wenig Toner haben."
msgstr "Die Druckerabdeckung ist offen."
msgid "The printer's door is open."
-msgstr "Die Klappe des Druckers ist offen"
+msgstr "Die Klappe des Druckers ist offen."
msgid "The printer's interlock is open."
msgstr "Die Sicherheitsverriegelung des Druckers ist offen."
msgid "The printer's waste bin is almost full."
-msgstr "Der Resttonerbehälter des Druckers ist fast voll"
+msgstr "Der Resttonerbehälter des Druckers ist fast voll."
msgid "The printer's waste bin is full."
-msgstr "Der Resttonerbehälter des Druckers ist voll"
+msgstr "Der Resttonerbehälter des Druckers ist voll."
#, c-format
msgid "The printer-uri \"%s\" contains invalid characters."
msgstr "Zu viele printer-state-reasons Werte (%d > %d)."
msgid "Top"
-msgstr ""
+msgstr "Oben"
msgid "Tractor"
msgstr ""
msgstr "Fach 1"
msgid "Tray 10"
-msgstr ""
+msgstr "Fach 10"
msgid "Tray 11"
-msgstr ""
+msgstr "Fach 11"
msgid "Tray 12"
-msgstr ""
+msgstr "Fach 12"
msgid "Tray 13"
-msgstr ""
+msgstr "Fach 13"
msgid "Tray 14"
-msgstr ""
+msgstr "Fach 14"
msgid "Tray 15"
-msgstr ""
+msgstr "Fach 15"
msgid "Tray 16"
-msgstr ""
+msgstr "Fach 16"
msgid "Tray 17"
-msgstr ""
+msgstr "Fach 17"
msgid "Tray 18"
-msgstr ""
+msgstr "Fach 18"
msgid "Tray 19"
-msgstr ""
+msgstr "Fach 19"
msgid "Tray 2"
msgstr "Fach 2"
msgid "Tray 20"
-msgstr ""
+msgstr "Fach 20"
msgid "Tray 3"
msgstr "Fach 3"
msgstr "Fach 4"
msgid "Tray 5"
-msgstr ""
+msgstr "Fach 5"
msgid "Tray 6"
-msgstr ""
+msgstr "Fach 6"
msgid "Tray 7"
-msgstr ""
+msgstr "Fach 7"
msgid "Tray 8"
-msgstr ""
+msgstr "Fach 8"
msgid "Tray 9"
-msgstr ""
+msgstr "Fach 9"
msgid "Triple Staple (Landscape)"
-msgstr ""
+msgstr "Dreifachheftung (Querformat)"
msgid "Triple Staple (Portrait)"
-msgstr ""
+msgstr "Dreifachheftung (Hochformat)"
msgid "Triple Staple (Reverse Landscape)"
-msgstr ""
+msgstr "Dreifachheftung (gedrehtes Querformat)"
msgid "Triple Staple (Reverse Portrait)"
-msgstr ""
+msgstr "Dreifachheftung (gedrehtes Hochformat)"
msgid "Triple Wall Cardboard"
msgstr ""
#, c-format
msgid "Unable to copy CUPS printer driver files (%d)."
-msgstr ""
+msgstr "Die CUPS Druckertreiberdateien (%d) können nicht kopiert werden."
#, c-format
msgid "Unable to copy PPD file - %s"
msgstr "Drucker-URI kann nicht erzeugt werden"
msgid "Unable to create printer."
-msgstr ""
+msgstr "Drucker kann nicht erzeugt werden."
msgid "Unable to create server credentials."
msgstr "Die Server-Anmeldedaten können nicht erzeugt werden."
msgid "Unable to create temporary file"
-msgstr "Temporäre Datei konntenicht erstellt werden :"
+msgstr "Temporäre Datei konntenicht erstellt werden"
msgid "Unable to delete class"
-msgstr "Die Klasse konnte nicht gelöscht werden :"
+msgstr "Die Klasse konnte nicht gelöscht werden"
msgid "Unable to delete printer"
-msgstr "Der Drucker konnte nicht gelöscht werden :"
+msgstr "Der Drucker konnte nicht gelöscht werden"
msgid "Unable to do maintenance command"
-msgstr "Wartungsbefehl konnte nicht ausgeführt werden :"
+msgstr "Wartungsbefehl konnte nicht ausgeführt werden"
msgid "Unable to edit cupsd.conf files larger than 1MB"
msgstr "cupsd.conf Dateien grösser als 1MB können nicht bearbeitet werden"
msgstr "Die Testseite kann nicht gedruckt werden"
msgid "Unable to read print data."
-msgstr ""
+msgstr "Druckdaten können nicht gelesen werden."
msgid "Unable to rename job document file."
-msgstr ""
+msgstr "Auftragsdatei kann nicht umbenannt werden."
msgid "Unable to resolve printer-uri."
msgstr "Drucker-URI kann nicht aufgelöst werden."
msgstr "Unbekanntes Formatzeichen: »%c«."
msgid "Unknown hash algorithm."
-msgstr ""
+msgstr "Unbekannter Hashalgorithmus."
msgid "Unknown media size name."
msgstr "Unbekannter Name der Mediengrösse."
msgstr "Unbekannte Anfrageversion"
msgid "Unknown scheme in URI"
-msgstr ""
+msgstr "Unbekanntes Schema in URI"
msgid "Unknown service name."
msgstr "Unbekannter Dienstname."
#, c-format
msgid "Unsupported number-up value %d, using number-up=1."
-msgstr ""
+msgstr "Nicht unterstützter number-up Wert %d, verwende number-up=1."
#, c-format
msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
-msgstr ""
+msgstr "Nicht unterstützter number-up-layout Wert %d, verwende number-up-layout=lrtb."
#, c-format
msgid "Unsupported page-border value %s, using page-border=none."
msgstr "Verwendung: %s Auftrags-ID Benutzer Titel Kopien Optionen [Datei]"
msgid "Usage: cupsaddsmb [options] printer1 ... printerN"
-msgstr ""
+msgstr "Verwendung: cupsaddsmb [Optionen] Drucker1 ... DruckerN"
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
-msgstr ""
+msgstr "Verwendung: cupsctl [Optionen] [Parameter=Wert ... ParameterN=WertN]"
msgid "Usage: cupsd [options]"
msgstr "Verwendung: cupsd [Optionen]"
msgstr ""
msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
-msgstr ""
+msgstr "Verwendung: ipptool [Optionen] URI Dateiname [ ... DateinameN ]"
msgid "Usage: lpmove job/src dest"
msgstr "Verwendung: lpmove Auftragsquelle Auftragsziel"
msgstr ""
msgid "Windowed Envelope"
-msgstr ""
+msgstr "Fensterumschlag"
msgid "Yes"
msgstr "Ja"
"cupsd: Start auf Anforderung nicht einkompiliert, starte im normalen Modus."
msgid "cupsd: Relative cups-files.conf filename not allowed."
-msgstr ""
+msgstr "cupsd: Relativer Dateiname für cups-files.conf nicht zulässig."
msgid "cupsd: Unable to get current directory."
-msgstr ""
+msgstr "cupsd: Aktuelles Verzeichnis kann nicht ermittelt werden."
msgid "cupsd: Unable to get path to cups-files.conf file."
-msgstr ""
+msgstr "cupsd: Pfad zur Datei cups-files.conf kann nicht ermittelt werden."
#, c-format
msgid "cupsd: Unknown argument \"%s\" - aborting."
-msgstr ""
+msgstr "cupsd: Unbekanntes Argument \"%s\" - Abbruch."
#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting."
-msgstr ""
+msgstr "cupsd: Unbekannte Option \"%s\" - Abbruch."
#, c-format
msgid "cupsfilter: Invalid document number %d."
msgstr ""
msgid "job-printer-uri attribute missing."
-msgstr ""
+msgstr "job-printer-uri Attribut fehlt."
msgid "lpadmin: Class name can only contain printable characters."
msgstr "lpadmin: Klassenname darf nur druckbare Zeichen enthalten."
#, c-format
msgid "lpadmin: Expected PPD after \"-%c\" option."
-msgstr ""
+msgstr "lpadmin: Nach der \"-%c\" Option PPD erwartet."
msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
msgstr ""
msgstr "lpadmin: Kann nicht mit dem Server %s verbinden."
msgid "lpadmin: Unable to create temporary file"
-msgstr ""
+msgstr "lpadmin: Temporäre Datei kann nicht angelegt werden"
msgid ""
"lpadmin: Unable to delete option:\n"
msgstr "lpadmin: Unbekannte Option »%c«."
msgid "lpadmin: Warning - content type list ignored."
-msgstr ""
+msgstr "lpadmin: Warnung - Inhaltstypliste ignoriert."
msgid "lpc> "
msgstr "lpc> "
msgstr ""
msgid "lpinfo: Expected language after \"--language\"."
-msgstr ""
+msgstr "lpinfo: Sprache nach \"--language\" erwartet."
msgid "lpinfo: Expected make and model after \"--make-and-model\"."
msgstr ""
#, c-format
msgid "lpoptions: Unable to get PPD file for %s: %s"
-msgstr "lpoptions: Keine PPD Datei für %s: %s verfügbar"
+msgstr "lpoptions: Keine PPD-Datei für %s: %s verfügbar"
#, c-format
msgid "lpoptions: Unable to open PPD file for %s."
-msgstr "lpoptions: Keine PPD Datei für %s verfügbar."
+msgstr "lpoptions: Keine PPD-Datei für %s verfügbar."
msgid "lpoptions: Unknown printer or class."
msgstr "lpoptions: Unbekannter Drucker oder Klasse."
#, c-format
msgid "ppdc: Writing PPD files to directory \"%s\"."
-msgstr ""
+msgstr "ppdc: Schreibe PPD-Dateien in Verzeichnis \"%s\"."
#, c-format
msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s."
#, c-format
msgid "ppdmerge: Ignoring PPD file %s."
-msgstr ""
+msgstr "ppdmerge: PPD-Datei %s wird ignoriert."
#, c-format
msgid "ppdmerge: Unable to backup %s to %s - %s"
#, c-format
msgid "printer %s is idle. enabled since %s"
-msgstr "Drucker %s ist im Leerlauf. Aktiviert seit %s"
+msgstr "Drucker %s ist im Leerlauf. Aktiviert seit %s"
#, c-format
msgid "printer %s now printing %s-%d. enabled since %s"
#, c-format
msgid "printer %s/%s is idle. enabled since %s"
-msgstr "Drucker %s/%s ist im Leerlauf. Aktiviert seit %s"
+msgstr "Drucker %s/%s ist im Leerlauf. Aktiviert seit %s"
#, c-format
msgid "printer %s/%s now printing %s-%d. enabled since %s"
Backends are responsible for reading side-channel requests using the
.BR cupsSideChannelRead ()
function and responding with the
-.BR cupsSideChannelWrite()
+.BR cupsSideChannelWrite ()
function. The
.B CUPS_SC_FD
constant defines the file descriptor that should be monitored for incoming requests.
.SH FILES
.I /etc/cups/cups-files.conf
.SH NOTES
-CUPS backends are not generally design to be run directly by the user. Aside from the device URI issue (
+CUPS backends are not generally designed to be run directly by the user. Aside from the device URI issue (
.I argv[0]
and
.B DEVICE_URI
.TP 5
\fBServerName \fI/domain/socket\fR
Specifies the address and optionally the port to use when connecting to the server.
-\fBNote: This directive it not supported on macOS 10.7 or later.\fR
+\fBNote: This directive is not supported on macOS 10.7 or later.\fR
.TP 5
\fBServerName \fIhostname-or-ip-address\fR[\fI:port\fR]\fB/version=1.1\fR
Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier.
.\" 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 cups-files.conf 5 "CUPS" "20 June 2016" "Apple Inc."
+.TH cups-files.conf 5 "CUPS" "19 September 2016" "Apple Inc."
.SH NAME
cups\-files.conf \- file and directory configuration file for cups
.SH DESCRIPTION
\fBNote:\fR The permissions for the \fIprinters.conf\fR file are currently masked to only allow access from the scheduler user (typically root).
This is done because printer device URIs sometimes contain sensitive authentication information that should not be generally known on the system.
There is no way to disable this security feature.
+.\"#CreateSelfSignedCerts
+.TP 5
+\fBCreateSelfSignedCerts yes\fR
+.TP 5
+\fBCreateSelfSignedCerts no\fR
+Specifies whether the scheduler automatically creates self-signed certificates for client connections using TLS.
+The default is yes.
.\"#DataDir
.TP 5
\fBDataDir \fIpath\fR
.BR launchd (8),
.BR systemd (8),
and
-.BR xinetd(8).
+.BR xinetd (8).
Simply enable the
.B cups-lpd
service using the corresponding control program.
.\"#LimitIPP
.TP 5
\fB<Limit \fIoperation \fR...\fB> \fR... \fB</Limit>\fR
-Specifies the IPP operations that are being limited inside a Policy section. IPP operation names are listed below in the section "IPP OPERATIONS".
+Specifies the IPP operations that are being limited inside a Policy section. IPP operation names are listed below in the section "IPP OPERATION NAMES".
.\"#Limit
.TP 5
\fB<Limit \fImethod \fR...\fB> \fR... \fB</Limit>\fR
.\"#LimitExcept
.TP 5
\fB<LimitExcept \fImethod \fR...\fB> \fR... \fB</LimitExcept>\fR
-Specifies the HTTP methods that are being limited inside a Location section. HTTP method names are listed below in the section "HTTP METHODS".
+Specifies the HTTP methods that are being limited inside a Location section. HTTP method names are listed below in the section "HTTP METHOD NAMES".
.\"#LimitRequestBody
.TP 5
\fBLimitRequestBody \fIsize\fR
The path for all jobs (hold-job, release-job, etc.)
.TP 5
/jobs/id
-The path for the specified job.
+The path for the specified job
.TP 5
/printers
The path for all printers
d 0755 root sys $DOCDIR/help -
f 0444 root sys $DOCDIR/help/accounting.html doc/help/accounting.html
f 0444 root sys $DOCDIR/help/cgi.html doc/help/cgi.html
+f 0444 root sys $DOCDIR/help/encryption.html doc/help/encryption.html
f 0444 root sys $DOCDIR/help/glossary.html doc/help/glossary.html
f 0444 root sys $DOCDIR/help/kerberos.html doc/help/kerberos.html
f 0444 root sys $DOCDIR/help/license.html doc/help/license.html
Summary: CUPS
Name: cups
-Version: 2.2.0
+Version: 2.2.1
Release: 0
Epoch: 1
License: GPL
Group: System Environment/Daemons
-Source: https://github.com/apple/cups/releases/download/release-2.2.0/cups-2.2.0-source.tar.gz
+Source: https://github.com/apple/cups/releases/download/release-2.2.1/cups-2.2.1-source.tar.gz
Url: http://www.cups.org
Packager: Anonymous <anonymous@foo.com>
Vendor: Apple Inc.
%dir /usr/share/doc/cups/help
/usr/share/doc/cups/help/accounting.html
/usr/share/doc/cups/help/cgi.html
+/usr/share/doc/cups/help/encryption.html
/usr/share/doc/cups/help/glossary.html
/usr/share/doc/cups/help/kerberos.html
/usr/share/doc/cups/help/license.html
%dir /usr/share/doc/cups/help
/usr/share/doc/cups/help/accounting.html
/usr/share/doc/cups/help/cgi.html
+/usr/share/doc/cups/help/encryption.html
/usr/share/doc/cups/help/glossary.html
/usr/share/doc/cups/help/kerberos.html
/usr/share/doc/cups/help/license.html
#ifdef HAVE_GETGROUPLIST
if (user)
{
- int ngroups, /* Number of groups */
- groups[2048]; /* Groups that user belongs to */
+ int ngroups; /* Number of groups */
+# ifdef __APPLE__
+ int groups[2048]; /* Groups that user belongs to */
+# else
+ gid_t groups[2048]; /* Groups that user belongs to */
+# endif /* __APPLE__ */
ngroups = (int)(sizeof(groups) / sizeof(groups[0]));
+# ifdef __APPLE__
getgrouplist(username, (int)user->pw_gid, groups, &ngroups);
+# else
+ getgrouplist(username, user->pw_gid, groups, &ngroups);
+#endif /* __APPLE__ */
for (i = 0; i < ngroups; i ++)
- if ((int)group->gr_gid == groups[i])
+ if (group->gr_gid == groups[i])
return (1);
}
#endif /* HAVE_GETGROUPLIST */
{ "AccessLog", &AccessLog, CUPSD_VARTYPE_STRING },
{ "CacheDir", &CacheDir, CUPSD_VARTYPE_STRING },
{ "ConfigFilePerm", &ConfigFilePerm, CUPSD_VARTYPE_PERM },
+#ifdef HAVE_SSL
+ { "CreateSelfSignedCerts", &CreateSelfSignedCerts, CUPSD_VARTYPE_BOOLEAN },
+#endif /* HAVE_SSL */
{ "DataDir", &DataDir, CUPSD_VARTYPE_STRING },
{ "DocumentRoot", &DocumentRoot, CUPSD_VARTYPE_STRING },
{ "ErrorLog", &ErrorLog, CUPSD_VARTYPE_STRING },
FatalErrors = parse_fatal_errors(CUPS_DEFAULT_FATAL_ERRORS);
default_auth_type = CUPSD_AUTH_BASIC;
#ifdef HAVE_SSL
+ CreateSelfSignedCerts = TRUE;
DefaultEncryption = HTTP_ENCRYPT_REQUIRED;
#endif /* HAVE_SSL */
DirtyCleanInterval = DEFAULT_KEEPALIVE;
cupsdSetStringf(&ServerKeychain, "%s/%s", ServerRoot, ServerKeychain);
cupsdLogMessage(CUPSD_LOG_DEBUG, "Using keychain \"%s\" for server name \"%s\".", ServerKeychain, ServerName);
- cupsSetServerCredentials(ServerKeychain, ServerName, 1);
+ if (!CreateSelfSignedCerts)
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Self-signed TLS certificate generation is disabled.");
+ cupsSetServerCredentials(ServerKeychain, ServerName, CreateSelfSignedCerts);
#endif /* HAVE_SSL */
/*
/* Array of MIME types */
#ifdef HAVE_SSL
+VAR int CreateSelfSignedCerts VALUE(TRUE);
+ /* Automatically create self-signed certs? */
VAR char *ServerKeychain VALUE(NULL);
/* Keychain holding cert + key */
#endif /* HAVE_SSL */
echo ""
echo "Now you can choose whether to create a SSL/TLS encryption key and"
-echo "certificate for testing; these tests currently require the OpenSSL"
-echo "tools:"
+echo "certificate for testing:"
echo ""
echo "0 - Do not do SSL/TLS encryption tests"
echo "1 - Test but do not require encryption"