Comparar commits
69 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 4ebeb20c50 | |||
| 26e33331ce | |||
| 2e913c4b4e | |||
| b764f49b0c | |||
| 6ff5bbedb9 | |||
| ff52b652cf | |||
| fc19457093 | |||
| 2dbebbaa23 | |||
| 97cb566568 | |||
| 7c7f431a26 | |||
| 22716a21f7 | |||
| 3f8d6023ed | |||
| 4c975abbc7 | |||
| d66aa76457 | |||
| 4c37eb9f77 | |||
| 66021bfa90 | |||
| d3cc15d4b2 | |||
| f58657f987 | |||
| 8c2150d186 | |||
| 5c7df4f0e0 | |||
| 9135aedbb4 | |||
| 90a97dd7b6 | |||
| 417d0e1635 | |||
| 4440da10e5 | |||
| 4b55f9f3c1 | |||
| bb10adda6f | |||
| 2390f1d9eb | |||
| b643d6ba92 | |||
| 1f679daf00 | |||
| 0612a04d5d | |||
| f6d93318e0 | |||
| 821b3cc956 | |||
| b757529b6f | |||
| 566d5c707e | |||
| a922c92cd0 | |||
| aefefc3539 | |||
| 0e41e1ca5d | |||
| d2e90eb7c7 | |||
| 570933a6a3 | |||
| 84c97c051d | |||
| 5f67be43fa | |||
| b59756883a | |||
| 6daeebb5ac | |||
| 2bad6aac2f | |||
| 9d72065fa9 | |||
| 75d3f11945 | |||
| 6bebebe247 | |||
| 1d598e87db | |||
| 3645e5efa7 | |||
| e8953be355 | |||
| 782bcf6974 | |||
| 3d7ece43ea | |||
| 290404655f | |||
| c59948f6fb | |||
| b237ae81d2 | |||
| 82c4785a4c | |||
| 9113651bca | |||
| 3034dcc946 | |||
| 2aee052bf5 | |||
| 8e47ac0199 | |||
| 30c8d1abb2 | |||
| 5e18690298 | |||
| bec850697a | |||
| 4ffdbc48d8 | |||
| accd26d222 | |||
| 08b48df256 | |||
| bb4172dade | |||
| afe94dff9d | |||
| 1f71721001 |
+99
-1
@@ -1,7 +1,105 @@
|
||||
CHANGES - 2.2.6 - 2017-11-01
|
||||
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
|
||||
----------------------
|
||||
|
||||
- NOTICE: Raw print queues are now deprecated (Issue #5269)
|
||||
- Fixed an Avahi crash bug in the scheduler (Issue #5268)
|
||||
- The IPP Everywhere PPD generator did not include the `cupsJobPassword`
|
||||
keyword, when supported (Issue #5265)
|
||||
- Systemd did not restart cupsd when configuration changes were made that
|
||||
required a restart (Issue #5263)
|
||||
- The Lexmark Optra E310 printer needs the "no-reattach" USB quirk rule
|
||||
(Issue #5259)
|
||||
- The scheduler could crash while adding an IPP Everywhere printer (Issue #5258)
|
||||
- Label printers supported by the rastertolabel driver don't support SNMP, so
|
||||
don't delay printing to test it (Issue #5256)
|
||||
- Fixed a compile issue when PAM is not available (Issue #5253)
|
||||
- Documentation fixes (Issue #5252)
|
||||
- Star Micronics printers need the "unidir" USB quirk rule (Issue #5251)
|
||||
- The scheduler now supports using temporary print queues for older IPP/1.1
|
||||
print queues like those shared by CUPS 1.3 and earlier (Issue #5241)
|
||||
- Fixed printing to some IPP Everywhere printers (Issue #5238)
|
||||
- Kerberized printing to another CUPS server did not work correctly
|
||||
(Issue #5233)
|
||||
- The `cupsRasterWritePixels` function did not correctly swap bytes for some
|
||||
formats (Issue #5225)
|
||||
- Added a USB quirk rule for Canon MP280 series printers (Issue #5221)
|
||||
- The `ppdInstallableConflict` tested too many constraints (Issue #5213)
|
||||
- More fixes for printing to old CUPS servers (Issue #5211)
|
||||
- The `cupsCopyDest` function now correctly copies the `is_default` value
|
||||
(Issue #5208)
|
||||
- The scheduler did not work with older versions of uClibc (Issue #5188)
|
||||
- The scheduler now substitutes default values for invalid job attributes when
|
||||
running in "relaxed conformance" mode (Issue #5186)
|
||||
- Fixed PAM module detection and added support for the common PAM definitions
|
||||
(Issue #5185)
|
||||
- Fixed a journald support bug in the scheduler (Issue #5181)
|
||||
- The cups-driverd program incorrectly stopped scanning PPDs as soon as a loop
|
||||
was seen (Issue #5170)
|
||||
- Fixed group validation on OpenBSD (Issue #5166)
|
||||
- Fixed the `ippserver` sample code when threading is disabled or unavailable
|
||||
(Issue #5154)
|
||||
- The `cupsEnumDests` function did not include options from the lpoptions files
|
||||
(Issue #5144)
|
||||
- The `SSLOptions` directive now supports `MinTLS` and `MaxTLS` options to
|
||||
control the minimum and maximum TLS versions that will be allowed,
|
||||
respectively (Issue #5119)
|
||||
- The scheduler did not write out dirty configuration and state files if there
|
||||
were open client connections (Issue #5118)
|
||||
- The `lpadmin` command now provides a better error message when an unsupported
|
||||
System V interface script is used (Issue #5111)
|
||||
- The `lp` and `lpr` commands now provide better error messages when the default
|
||||
printer cannot be found (Issue #5096)
|
||||
- No longer support backslash, question mark, or quotes in printer names
|
||||
(Issue #4966)
|
||||
- The CUPS library now supports the latest HTTP Digest authentication
|
||||
specification including support for SHA-256 (Issue #4862)
|
||||
- The `lpstat` command now reports when new jobs are being held (Issue #4761)
|
||||
- The `lpoptions` command incorrectly saved default options (Issue #4717)
|
||||
- The `ppdLocalizeIPPReason` function incorrectly returned a localized version
|
||||
of "none" (rdar://36566269)
|
||||
- TLS connections now properly timeout (rdar://34938533)
|
||||
- The IPP backend did not properly detect failed PDF prints (rdar://34055474)
|
||||
- Temporary files are now placed in the correct directory for sandboxed
|
||||
applications on macOS (rdar://problem/37789645)
|
||||
|
||||
|
||||
Changes in CUPS v2.2.6
|
||||
----------------------
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
INSTALL - CUPS v2.2.6 - 2017-11-01
|
||||
INSTALL - CUPS v2.2.8 - 2018-06-05
|
||||
==================================
|
||||
|
||||
This file describes how to compile and install CUPS from source code. For more
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
README - CUPS v2.2.6 - 2017-11-01
|
||||
README - CUPS v2.2.8 - 2018-06-05
|
||||
=================================
|
||||
|
||||
Looking for compile instructions? Read the file `INSTALL.md` instead...
|
||||
@@ -148,7 +148,7 @@ This will prevent the filters from misinterpreting your print file.
|
||||
LEGAL STUFF
|
||||
-----------
|
||||
|
||||
CUPS is copyright © 2007-2017 by Apple Inc. CUPS and the CUPS logo are
|
||||
CUPS is copyright © 2007-2018 by Apple Inc. CUPS and the CUPS logo are
|
||||
trademarks of Apple Inc.
|
||||
|
||||
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
|
||||
|
||||
+38
-11
@@ -47,6 +47,8 @@ extern void xpc_connection_set_target_uid(xpc_connection_t connection,
|
||||
#define _CUPS_JSR_ACCOUNT_LIMIT_REACHED 0x08
|
||||
#define _CUPS_JSR_JOB_PASSWORD_WAIT 0x10
|
||||
#define _CUPS_JSR_JOB_RELEASE_WAIT 0x20
|
||||
#define _CUPS_JSR_DOCUMENT_FORMAT_ERROR 0x40
|
||||
#define _CUPS_JSR_DOCUMENT_UNPRINTABLE 0x80
|
||||
|
||||
|
||||
/*
|
||||
@@ -69,6 +71,7 @@ typedef struct _cups_monitor_s /**** Monitoring data ****/
|
||||
http_encryption_t encryption; /* Use encryption? */
|
||||
ipp_jstate_t job_state; /* Current job state */
|
||||
ipp_pstate_t printer_state; /* Current printer state */
|
||||
int retryable; /* Is this a job that should be retried? */
|
||||
} _cups_monitor_t;
|
||||
|
||||
|
||||
@@ -357,8 +360,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
* that way.
|
||||
*/
|
||||
|
||||
if (!getuid() && (value = getenv("AUTH_UID")) != NULL &&
|
||||
!getenv("AUTH_PASSWORD"))
|
||||
if (!getuid() && (value = getenv("AUTH_UID")) != NULL)
|
||||
{
|
||||
uid_t uid = (uid_t)atoi(value);
|
||||
/* User ID */
|
||||
@@ -392,7 +394,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
# else /* No XPC, just try to run as the user ID */
|
||||
if (uid > 0)
|
||||
seteuid(uid);
|
||||
setuid(uid);
|
||||
# endif /* HAVE_XPC */
|
||||
}
|
||||
#endif /* HAVE_GSSAPI */
|
||||
@@ -1448,6 +1450,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
monitor.encryption = cupsEncryption();
|
||||
monitor.job_state = IPP_JOB_PENDING;
|
||||
monitor.printer_state = IPP_PRINTER_IDLE;
|
||||
monitor.retryable = argc == 6 && document_format && strcmp(document_format, "image/pwg-raster") && strcmp(document_format, "image/urf");
|
||||
|
||||
if (create_job)
|
||||
{
|
||||
@@ -2568,22 +2571,24 @@ monitor_printer(
|
||||
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if (!strcmp(attr->values[i].string.text,
|
||||
"account-authorization-failed"))
|
||||
if (!strcmp(attr->values[i].string.text, "account-authorization-failed"))
|
||||
new_reasons |= _CUPS_JSR_ACCOUNT_AUTHORIZATION_FAILED;
|
||||
else if (!strcmp(attr->values[i].string.text, "account-closed"))
|
||||
new_reasons |= _CUPS_JSR_ACCOUNT_CLOSED;
|
||||
else if (!strcmp(attr->values[i].string.text, "account-info-needed"))
|
||||
new_reasons |= _CUPS_JSR_ACCOUNT_INFO_NEEDED;
|
||||
else if (!strcmp(attr->values[i].string.text,
|
||||
"account-limit-reached"))
|
||||
else if (!strcmp(attr->values[i].string.text, "account-limit-reached"))
|
||||
new_reasons |= _CUPS_JSR_ACCOUNT_LIMIT_REACHED;
|
||||
else if (!strcmp(attr->values[i].string.text, "job-password-wait"))
|
||||
new_reasons |= _CUPS_JSR_JOB_PASSWORD_WAIT;
|
||||
else if (!strcmp(attr->values[i].string.text, "job-release-wait"))
|
||||
new_reasons |= _CUPS_JSR_JOB_RELEASE_WAIT;
|
||||
if (!job_canceled &&
|
||||
(!strncmp(attr->values[i].string.text, "job-canceled-", 13) || !strcmp(attr->values[i].string.text, "aborted-by-system")))
|
||||
else if (!strcmp(attr->values[i].string.text, "document-format-error"))
|
||||
new_reasons |= _CUPS_JSR_DOCUMENT_FORMAT_ERROR;
|
||||
else if (!strcmp(attr->values[i].string.text, "document-unprintable"))
|
||||
new_reasons |= _CUPS_JSR_DOCUMENT_UNPRINTABLE;
|
||||
|
||||
if (!job_canceled && (!strncmp(attr->values[i].string.text, "job-canceled-", 13) || !strcmp(attr->values[i].string.text, "aborted-by-system")))
|
||||
job_canceled = 1;
|
||||
}
|
||||
|
||||
@@ -2601,6 +2606,26 @@ monitor_printer(
|
||||
fputs("JOBSTATE: job-password-wait\n", stderr);
|
||||
else if (new_reasons & _CUPS_JSR_JOB_RELEASE_WAIT)
|
||||
fputs("JOBSTATE: job-release-wait\n", stderr);
|
||||
else if (new_reasons & (_CUPS_JSR_DOCUMENT_FORMAT_ERROR | _CUPS_JSR_DOCUMENT_UNPRINTABLE))
|
||||
{
|
||||
if (monitor->retryable)
|
||||
{
|
||||
/*
|
||||
* Can't print this, so retry as raster...
|
||||
*/
|
||||
|
||||
job_canceled = 1;
|
||||
fputs("JOBSTATE: cups-retry-as-raster\n", stderr);
|
||||
}
|
||||
else if (new_reasons & _CUPS_JSR_DOCUMENT_FORMAT_ERROR)
|
||||
{
|
||||
fputs("JOBSTATE: document-format-error\n", stderr);
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs("JOBSTATE: document-unprintable\n", stderr);
|
||||
}
|
||||
}
|
||||
else
|
||||
fputs("JOBSTATE: job-printing\n", stderr);
|
||||
|
||||
@@ -2760,7 +2785,7 @@ new_request(
|
||||
char phone[1024], /* Phone number string */
|
||||
*ptr, /* Pointer into string */
|
||||
tel_uri[1024]; /* tel: URI */
|
||||
static const char * const allowed = "0123456789#*-+.()";
|
||||
static const char * const allowed = "0123456789#*-+.()pw";
|
||||
/* Allowed characters */
|
||||
|
||||
destination = ippNew();
|
||||
@@ -2773,7 +2798,9 @@ new_request(
|
||||
_httpDecodeURI(phone, keyword, sizeof(phone));
|
||||
for (ptr = phone; *ptr;)
|
||||
{
|
||||
if (!strchr(allowed, *ptr))
|
||||
if (*ptr == ',')
|
||||
*ptr = 'p';
|
||||
else if (!strchr(allowed, *ptr))
|
||||
_cups_strcpy(ptr, ptr + 1);
|
||||
else
|
||||
ptr ++;
|
||||
|
||||
@@ -8,10 +8,17 @@
|
||||
# delay-close Delay close/reset of selected interface
|
||||
# no-reattach Do no re-attach usblp kernel module after printing.
|
||||
# soft-reset Do a soft reset after printing for cleanup.
|
||||
# unidir Only supported unidirectional I/O
|
||||
# unidir Only supports unidirectional I/O
|
||||
# usb-init Needs vendor USB initialization string.
|
||||
# vendor-class Uses vendor-specific class or subclass.
|
||||
# whitelist The printer is functional with the USB backend.
|
||||
#
|
||||
# To get the USB vendor and product IDs for a given printer, run the "lsusb"
|
||||
# command, which will show something like the following:
|
||||
#
|
||||
# Bus 002 Device 003: ID ab21:34dc Acme Example Printer
|
||||
#
|
||||
# The "ab21:34dc" is the vendor and product ID, separated by a colon.
|
||||
|
||||
# HP DeskJet 895C
|
||||
0x03f0 0x0004 unidir
|
||||
@@ -265,3 +272,15 @@
|
||||
|
||||
# HP LaserJet 1160 (Issue #5121)
|
||||
0x03f0 0x1e17 delay-close
|
||||
|
||||
# Canon, Inc. MP280 series (Issue #5221)
|
||||
0x04a9 0x1746 unidir
|
||||
|
||||
# Star Micronics printers (Issue #5251)
|
||||
0x0519 unidir
|
||||
|
||||
# Lexmark Optra E310 (Issue #5259)
|
||||
0x043d 0x000c no-reattach
|
||||
|
||||
# HP LaserJet P1102 (Issue #5310)
|
||||
0x03F0 0x002A no-reattach
|
||||
|
||||
+4
-28
@@ -32,8 +32,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
char *printer, /* Destination printer or class */
|
||||
*instance, /* Instance */
|
||||
*opt; /* Option pointer */
|
||||
const char *title, /* Job title */
|
||||
*val; /* Environment variable name */
|
||||
const char *title; /* Job title */
|
||||
int num_copies; /* Number of copies per file */
|
||||
int num_files; /* Number of files to print */
|
||||
const char *files[1000]; /* Files to print */
|
||||
@@ -345,33 +344,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (printer == NULL)
|
||||
{
|
||||
val = NULL;
|
||||
|
||||
if ((printer = getenv("LPDEST")) == NULL)
|
||||
{
|
||||
if ((printer = getenv("PRINTER")) != NULL)
|
||||
{
|
||||
if (!strcmp(printer, "lp"))
|
||||
printer = NULL;
|
||||
else
|
||||
val = "PRINTER";
|
||||
}
|
||||
}
|
||||
if (!cupsGetNamedDest(NULL, NULL, NULL) && cupsLastError() == IPP_STATUS_ERROR_NOT_FOUND)
|
||||
_cupsLangPrintf(stderr, _("%s: Error - %s"), argv[0], cupsLastErrorString());
|
||||
else
|
||||
val = "LPDEST";
|
||||
|
||||
if (printer && !cupsGetNamedDest(NULL, printer, NULL))
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - %s environment variable names "
|
||||
"non-existent destination \"%s\"."), argv[0], val,
|
||||
printer);
|
||||
else if (cupsLastError() == IPP_NOT_FOUND)
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - no default destination available."),
|
||||
argv[0]);
|
||||
else
|
||||
_cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."),
|
||||
argv[0]);
|
||||
_cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."), argv[0]);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
+2
-6
@@ -18,7 +18,6 @@
|
||||
/*#define DEBUG*/
|
||||
#include "cgi-private.h"
|
||||
#include <cups/http.h>
|
||||
#include <cups/md5-private.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -1204,7 +1203,6 @@ cgi_set_sid(void)
|
||||
{
|
||||
char buffer[512], /* SID data */
|
||||
sid[33]; /* SID string */
|
||||
_cups_md5_state_t md5; /* MD5 state */
|
||||
unsigned char sum[16]; /* MD5 sum */
|
||||
const char *remote_addr, /* REMOTE_ADDR */
|
||||
*server_name, /* SERVER_NAME */
|
||||
@@ -1225,11 +1223,9 @@ cgi_set_sid(void)
|
||||
(unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255,
|
||||
(unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255,
|
||||
(unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255);
|
||||
_cupsMD5Init(&md5);
|
||||
_cupsMD5Append(&md5, (unsigned char *)buffer, (int)strlen(buffer));
|
||||
_cupsMD5Finish(&md5, sum);
|
||||
cupsHashData("md5", (unsigned char *)buffer, strlen(buffer), sum, sizeof(sum));
|
||||
|
||||
cgiSetCookie(CUPS_SID, httpMD5String(sum, sid), "/", NULL, 0, 0);
|
||||
cgiSetCookie(CUPS_SID, cupsHashString(sum, sizeof(sum), sid, sizeof(sid)), "/", NULL, 0, 0);
|
||||
|
||||
return (cupsGetOption(CUPS_SID, num_cookies, cookies));
|
||||
}
|
||||
|
||||
externo
+10
-10
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for CUPS 2.2.6.
|
||||
# Generated by GNU Autoconf 2.69 for CUPS 2.2.8.
|
||||
#
|
||||
# Report bugs to <https://github.com/apple/cups/issues>.
|
||||
#
|
||||
@@ -580,8 +580,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='CUPS'
|
||||
PACKAGE_TARNAME='cups'
|
||||
PACKAGE_VERSION='2.2.6'
|
||||
PACKAGE_STRING='CUPS 2.2.6'
|
||||
PACKAGE_VERSION='2.2.8'
|
||||
PACKAGE_STRING='CUPS 2.2.8'
|
||||
PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
|
||||
PACKAGE_URL='https://www.cups.org/'
|
||||
|
||||
@@ -1482,7 +1482,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures CUPS 2.2.6 to adapt to many kinds of systems.
|
||||
\`configure' configures CUPS 2.2.8 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1547,7 +1547,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of CUPS 2.2.6:";;
|
||||
short | recursive ) echo "Configuration of CUPS 2.2.8:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1728,7 +1728,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
CUPS configure 2.2.6
|
||||
CUPS configure 2.2.8
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -2192,7 +2192,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by CUPS $as_me 2.2.6, which was
|
||||
It was created by CUPS $as_me 2.2.8, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -2667,7 +2667,7 @@ fi
|
||||
ac_config_headers="$ac_config_headers config.h"
|
||||
|
||||
|
||||
CUPS_VERSION="2.2.6"
|
||||
CUPS_VERSION="2.2.8"
|
||||
CUPS_REVISION=""
|
||||
CUPS_BUILD="cups-$CUPS_VERSION"
|
||||
|
||||
@@ -10901,7 +10901,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by CUPS $as_me 2.2.6, which was
|
||||
This file was extended by CUPS $as_me 2.2.8, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -10964,7 +10964,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
CUPS config.status 2.2.6
|
||||
CUPS config.status 2.2.8
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
dnl
|
||||
dnl Configuration script for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2017 by Apple Inc.
|
||||
dnl Copyright 2007-2018 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
@@ -15,7 +15,7 @@ dnl We need at least autoconf 2.60...
|
||||
AC_PREREQ(2.60)
|
||||
|
||||
dnl Package name and version...
|
||||
AC_INIT([CUPS], [2.2.6], [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)
|
||||
|
||||
+5
-5
@@ -1,8 +1,8 @@
|
||||
#
|
||||
# Library Makefile for CUPS.
|
||||
#
|
||||
# Copyright 2007-2017 by Apple Inc.
|
||||
# Copyright 1997-2006 by Easy Software Products, all rights reserved.
|
||||
# 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
|
||||
# property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -331,7 +331,7 @@ libcups.2.dylib: $(LIBOBJS) $(LIBCUPSORDER)
|
||||
echo Linking $@...
|
||||
$(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \
|
||||
-install_name $(libdir)/$@ \
|
||||
-current_version 2.12.0 \
|
||||
-current_version 2.13.0 \
|
||||
-compatibility_version 2.0.0 \
|
||||
-exported_symbols_list t.exp \
|
||||
$(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
|
||||
@@ -347,7 +347,7 @@ libcups.2.dylib: $(LIBOBJS) $(LIBCUPSORDER)
|
||||
libcups.la: $(LIBOBJS)
|
||||
echo Linking $@...
|
||||
$(LD_CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) \
|
||||
-rpath $(LIBDIR) -version-info 2:12 $(LIBGSSAPI) $(SSLLIBS) \
|
||||
-rpath $(LIBDIR) -version-info 2:13 $(LIBGSSAPI) $(SSLLIBS) \
|
||||
$(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
|
||||
|
||||
|
||||
@@ -369,7 +369,7 @@ libcups.a: $(LIBOBJS)
|
||||
libcups2.def: $(LIBOBJS) Makefile
|
||||
echo Generating $@...
|
||||
echo "LIBRARY libcups2" >libcups2.def
|
||||
echo "VERSION 2.12" >>libcups2.def
|
||||
echo "VERSION 2.13" >>libcups2.def
|
||||
echo "EXPORTS" >>libcups2.def
|
||||
(nm $(LIBOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}'; \
|
||||
echo __cups_strcpy; echo __cups_strlcat; echo __cups_strlcpy) | \
|
||||
|
||||
+491
-138
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Authentication functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* This file contains Kerberos support code, copyright 2006 by
|
||||
* Jelmer Vernooij.
|
||||
@@ -47,6 +47,10 @@ extern const char *cssmErrorString(int error);
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static const char *cups_auth_find(const char *www_authenticate, const char *scheme);
|
||||
static const char *cups_auth_param(const char *scheme, const char *name, char *value, size_t valsize);
|
||||
static const char *cups_auth_scheme(const char *www_authenticate, char *scheme, size_t schemesize);
|
||||
|
||||
#ifdef HAVE_GSSAPI
|
||||
# ifdef HAVE_GSS_ACQUIRE_CRED_EX_F
|
||||
# ifdef HAVE_GSS_GSSAPI_SPI_H
|
||||
@@ -112,8 +116,10 @@ cupsDoAuthentication(
|
||||
const char *resource) /* I - Resource path */
|
||||
{
|
||||
const char *password, /* Password string */
|
||||
*www_auth; /* WWW-Authenticate header */
|
||||
char prompt[1024], /* Prompt for user */
|
||||
*www_auth, /* WWW-Authenticate header */
|
||||
*schemedata; /* Scheme-specific data */
|
||||
char scheme[256], /* Scheme name */
|
||||
prompt[1024], /* Prompt for user */
|
||||
realm[HTTP_MAX_VALUE], /* realm="xyz" string */
|
||||
nonce[HTTP_MAX_VALUE]; /* nonce="xyz" string */
|
||||
int localauth; /* Local authentication result */
|
||||
@@ -163,122 +169,237 @@ cupsDoAuthentication(
|
||||
}
|
||||
|
||||
/*
|
||||
* Nope, see if we should retry the current username:password...
|
||||
* Nope, loop through the authentication schemes to find the first we support.
|
||||
*/
|
||||
|
||||
www_auth = http->fields[HTTP_FIELD_WWW_AUTHENTICATE];
|
||||
www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE);
|
||||
|
||||
if ((http->digest_tries > 1 || !http->userpass[0]) &&
|
||||
(!_cups_strncasecmp(www_auth, "Basic", 5) ||
|
||||
!_cups_strncasecmp(www_auth, "Digest", 6)))
|
||||
for (schemedata = cups_auth_scheme(www_auth, scheme, sizeof(scheme)); schemedata; schemedata = cups_auth_scheme(schemedata + strlen(scheme), scheme, sizeof(scheme)))
|
||||
{
|
||||
/*
|
||||
* Nope - get a new password from the user...
|
||||
* Check the scheme name...
|
||||
*/
|
||||
|
||||
char default_username[HTTP_MAX_VALUE];
|
||||
/* Default username */
|
||||
|
||||
cg = _cupsGlobals();
|
||||
|
||||
if (!cg->lang_default)
|
||||
cg->lang_default = cupsLangDefault();
|
||||
|
||||
if (httpGetSubField(http, HTTP_FIELD_WWW_AUTHENTICATE, "username",
|
||||
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);
|
||||
|
||||
http->digest_tries = _cups_strncasecmp(www_auth, "Digest", 6) != 0;
|
||||
http->userpass[0] = '\0';
|
||||
|
||||
if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
|
||||
{
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
snprintf(http->userpass, sizeof(http->userpass), "%s:%s", cupsUser(),
|
||||
password);
|
||||
}
|
||||
else if (http->status == HTTP_STATUS_UNAUTHORIZED)
|
||||
http->digest_tries ++;
|
||||
|
||||
if (http->status == HTTP_STATUS_UNAUTHORIZED && http->digest_tries >= 3)
|
||||
{
|
||||
DEBUG_printf(("1cupsDoAuthentication: Too many authentication tries (%d)",
|
||||
http->digest_tries));
|
||||
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Got a password; encode it for the server...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_GSSAPI
|
||||
if (!_cups_strncasecmp(www_auth, "Negotiate", 9))
|
||||
{
|
||||
if (!_cups_strcasecmp(scheme, "Negotiate"))
|
||||
{
|
||||
/*
|
||||
* Kerberos authentication...
|
||||
*/
|
||||
|
||||
if (_cupsSetNegotiateAuthString(http, method, resource))
|
||||
{
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_GSSAPI */
|
||||
if (_cups_strcasecmp(scheme, "Basic") && _cups_strcasecmp(scheme, "Digest"))
|
||||
continue; /* Not supported (yet) */
|
||||
|
||||
/*
|
||||
* Kerberos authentication...
|
||||
* See if we should retry the current username:password...
|
||||
*/
|
||||
|
||||
if (_cupsSetNegotiateAuthString(http, method, resource))
|
||||
if ((http->digest_tries > 1 || !http->userpass[0]) && (!_cups_strcasecmp(scheme, "Basic") || (!_cups_strcasecmp(scheme, "Digest"))))
|
||||
{
|
||||
/*
|
||||
* Nope - get a new password from the user...
|
||||
*/
|
||||
|
||||
char default_username[HTTP_MAX_VALUE];
|
||||
/* Default username */
|
||||
|
||||
cg = _cupsGlobals();
|
||||
|
||||
if (!cg->lang_default)
|
||||
cg->lang_default = cupsLangDefault();
|
||||
|
||||
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);
|
||||
|
||||
http->digest_tries = _cups_strncasecmp(scheme, "Digest", 6) != 0;
|
||||
http->userpass[0] = '\0';
|
||||
|
||||
if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
|
||||
{
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
snprintf(http->userpass, sizeof(http->userpass), "%s:%s", cupsUser(), password);
|
||||
}
|
||||
else if (http->status == HTTP_STATUS_UNAUTHORIZED)
|
||||
http->digest_tries ++;
|
||||
|
||||
if (http->status == HTTP_STATUS_UNAUTHORIZED && http->digest_tries >= 3)
|
||||
{
|
||||
DEBUG_printf(("1cupsDoAuthentication: Too many authentication tries (%d)", http->digest_tries));
|
||||
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_GSSAPI */
|
||||
if (!_cups_strncasecmp(www_auth, "Basic", 5))
|
||||
{
|
||||
|
||||
/*
|
||||
* Basic authentication...
|
||||
* Got a password; encode it for the server...
|
||||
*/
|
||||
|
||||
char encode[256]; /* Base64 buffer */
|
||||
if (!_cups_strcasecmp(scheme, "Basic"))
|
||||
{
|
||||
/*
|
||||
* Basic authentication...
|
||||
*/
|
||||
|
||||
char encode[256]; /* Base64 buffer */
|
||||
|
||||
httpEncode64_2(encode, sizeof(encode), http->userpass,
|
||||
(int)strlen(http->userpass));
|
||||
httpSetAuthString(http, "Basic", encode);
|
||||
httpEncode64_2(encode, sizeof(encode), http->userpass, (int)strlen(http->userpass));
|
||||
httpSetAuthString(http, "Basic", encode);
|
||||
}
|
||||
else if (!_cups_strcasecmp(scheme, "Digest"))
|
||||
{
|
||||
/*
|
||||
* Digest authentication...
|
||||
*/
|
||||
|
||||
int i; /* Looping var */
|
||||
char algorithm[65], /* Hashing algorithm */
|
||||
opaque[HTTP_MAX_VALUE],
|
||||
/* Opaque data from server */
|
||||
cnonce[65], /* cnonce value */
|
||||
kd[65], /* Final MD5/SHA-256 digest */
|
||||
ha1[65], /* Hash of username:realm:password */
|
||||
ha2[65], /* Hash of method:request-uri */
|
||||
hdata[65], /* Hash of auth data */
|
||||
temp[1024], /* Temporary string */
|
||||
digest[1024]; /* Digest auth data */
|
||||
unsigned char hash[32]; /* Hash buffer */
|
||||
const char *hashalg; /* Hashing algorithm */
|
||||
size_t hashsize; /* Size of hash */
|
||||
|
||||
if (strcmp(nonce, http->nonce))
|
||||
{
|
||||
strlcpy(http->nonce, nonce, sizeof(http->nonce));
|
||||
http->nonce_count = 1;
|
||||
}
|
||||
else
|
||||
http->nonce_count ++;
|
||||
|
||||
cups_auth_param(schemedata, "opaque", opaque, sizeof(opaque));
|
||||
cups_auth_param(schemedata, "nonce", nonce, sizeof(nonce));
|
||||
cups_auth_param(schemedata, "realm", realm, sizeof(realm));
|
||||
|
||||
for (i = 0; i < 64; i ++)
|
||||
cnonce[i] = "0123456789ABCDEF"[CUPS_RAND() & 15];
|
||||
cnonce[64] = '\0';
|
||||
|
||||
if (cups_auth_param(schemedata, "algorithm", algorithm, sizeof(algorithm)))
|
||||
{
|
||||
/*
|
||||
* Follow RFC 2617/7616...
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(algorithm, "MD5"))
|
||||
{
|
||||
/*
|
||||
* RFC 2617 Digest with MD5
|
||||
*/
|
||||
|
||||
hashalg = "md5";
|
||||
}
|
||||
else if (!_cups_strcasecmp(algorithm, "SHA-256"))
|
||||
{
|
||||
/*
|
||||
* RFC 7616 Digest with SHA-256
|
||||
*/
|
||||
|
||||
hashalg = "sha2-256";
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Some other algorithm we don't support, skip this one...
|
||||
*/
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate digest value...
|
||||
*/
|
||||
|
||||
/* H(A1) = H(username:realm:password) */
|
||||
snprintf(temp, sizeof(temp), "%s:%s:%s", cupsUser(), realm, strchr(http->userpass, ':') + 1);
|
||||
hashsize = (size_t)cupsHashData(hashalg, (unsigned char *)temp, strlen(temp), hash, sizeof(hash));
|
||||
cupsHashString(hash, hashsize, ha1, sizeof(ha1));
|
||||
|
||||
/* H(A2) = H(method:uri) */
|
||||
snprintf(temp, sizeof(temp), "%s:%s", method, resource);
|
||||
hashsize = (size_t)cupsHashData(hashalg, (unsigned char *)temp, strlen(temp), hash, sizeof(hash));
|
||||
cupsHashString(hash, hashsize, ha2, sizeof(ha2));
|
||||
|
||||
/* H(data) = H(nonce:nc:cnonce:qop:H(A2)) */
|
||||
snprintf(temp, sizeof(temp), "%s:%08x:%s:auth:%s", nonce, http->nonce_count, cnonce, ha2);
|
||||
hashsize = (size_t)cupsHashData(hashalg, (unsigned char *)temp, strlen(temp), hash, sizeof(hash));
|
||||
cupsHashString(hash, hashsize, hdata, sizeof(hdata));
|
||||
|
||||
/* KD = H(H(A1):H(data)) */
|
||||
snprintf(temp, sizeof(temp), "%s:%s", ha1, hdata);
|
||||
hashsize = (size_t)cupsHashData(hashalg, (unsigned char *)temp, strlen(temp), hash, sizeof(hash));
|
||||
cupsHashString(hash, hashsize, kd, sizeof(kd));
|
||||
|
||||
/* Pass the RFC 2617/7616 WWW-Authenticate header */
|
||||
if (opaque[0])
|
||||
snprintf(digest, sizeof(digest), "username=\"%s\", realm=\"%s\", nonce=\"%s\", algorithm=%s, qop=auth, opaque=\"%s\", cnonce=\"%s\", nc=%08x, uri=\"%s\", response=\"%s\"", cupsUser(), realm, nonce, algorithm, opaque, cnonce, http->nonce_count, resource, kd);
|
||||
else
|
||||
snprintf(digest, sizeof(digest), "username=\"%s\", realm=\"%s\", nonce=\"%s\", algorithm=%s, qop=auth, cnonce=\"%s\", nc=%08x, uri=\"%s\", response=\"%s\"", cupsUser(), realm, nonce, algorithm, cnonce, http->nonce_count, resource, kd);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Use old RFC 2069 Digest method...
|
||||
*/
|
||||
|
||||
/* H(A1) = H(username:realm:password) */
|
||||
snprintf(temp, sizeof(temp), "%s:%s:%s", cupsUser(), realm, strchr(http->userpass, ':') + 1);
|
||||
hashsize = (size_t)cupsHashData("md5", (unsigned char *)temp, strlen(temp), hash, sizeof(hash));
|
||||
cupsHashString(hash, hashsize, ha1, sizeof(ha1));
|
||||
|
||||
/* H(A2) = H(method:uri) */
|
||||
snprintf(temp, sizeof(temp), "%s:%s", method, resource);
|
||||
hashsize = (size_t)cupsHashData("md5", (unsigned char *)temp, strlen(temp), hash, sizeof(hash));
|
||||
cupsHashString(hash, hashsize, ha2, sizeof(ha2));
|
||||
|
||||
/* KD = H(H(A1):nonce:H(A2)) */
|
||||
snprintf(temp, sizeof(temp), "%s:%s:%s", ha1, nonce, ha2);
|
||||
hashsize = (size_t)cupsHashData("md5", (unsigned char *)temp, strlen(temp), hash, sizeof(hash));
|
||||
cupsHashString(hash, hashsize, kd, sizeof(kd));
|
||||
|
||||
/* Pass the RFC 2069 WWW-Authenticate header */
|
||||
snprintf(digest, sizeof(digest), "username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", response=\"%s\"", cupsUser(), realm, nonce, resource, kd);
|
||||
}
|
||||
|
||||
httpSetAuthString(http, "Digest", digest);
|
||||
}
|
||||
}
|
||||
else if (!_cups_strncasecmp(www_auth, "Digest", 6))
|
||||
|
||||
if (http->authstring)
|
||||
{
|
||||
/*
|
||||
* Digest authentication...
|
||||
*/
|
||||
DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\"", http->authstring));
|
||||
|
||||
char encode[33], /* MD5 buffer */
|
||||
digest[1024]; /* Digest auth data */
|
||||
|
||||
httpGetSubField(http, HTTP_FIELD_WWW_AUTHENTICATE, "realm", realm);
|
||||
httpGetSubField(http, HTTP_FIELD_WWW_AUTHENTICATE, "nonce", nonce);
|
||||
|
||||
httpMD5(cupsUser(), realm, strchr(http->userpass, ':') + 1, encode);
|
||||
httpMD5Final(nonce, method, resource, encode);
|
||||
snprintf(digest, sizeof(digest),
|
||||
"username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", "
|
||||
"response=\"%s\"", cupsUser(), realm, nonce, resource, encode);
|
||||
httpSetAuthString(http, "Digest", digest);
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_printf(("1cupsDoAuthentication: Unknown auth type: \"%s\"",
|
||||
www_auth));
|
||||
DEBUG_printf(("1cupsDoAuthentication: Unknown auth type: \"%s\"", www_auth));
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\"", http->authstring));
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -336,7 +457,7 @@ _cupsSetNegotiateAuthString(
|
||||
GSS_C_NO_BUFFER, &http->gssmech,
|
||||
&output_token, NULL, NULL);
|
||||
|
||||
#ifdef HAVE_GSS_ACQUIRE_CRED_EX_F
|
||||
# ifdef HAVE_GSS_ACQUIRE_CRED_EX_F
|
||||
if (major_status == GSS_S_NO_CRED)
|
||||
{
|
||||
/*
|
||||
@@ -412,7 +533,7 @@ _cupsSetNegotiateAuthString(
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_GSS_ACQUIRED_CRED_EX_F */
|
||||
# endif /* HAVE_GSS_ACQUIRED_CRED_EX_F */
|
||||
|
||||
if (GSS_ERROR(major_status))
|
||||
{
|
||||
@@ -422,11 +543,11 @@ _cupsSetNegotiateAuthString(
|
||||
return (-1);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
# ifdef DEBUG
|
||||
else if (major_status == GSS_S_CONTINUE_NEEDED)
|
||||
cups_gss_printf(major_status, minor_status,
|
||||
"_cupsSetNegotiateAuthString: Continuation needed!");
|
||||
#endif /* DEBUG */
|
||||
# endif /* DEBUG */
|
||||
|
||||
if (output_token.length > 0 && output_token.length <= 65536)
|
||||
{
|
||||
@@ -464,8 +585,259 @@ _cupsSetNegotiateAuthString(
|
||||
|
||||
return (0);
|
||||
}
|
||||
#endif /* HAVE_GSSAPI */
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_auth_find()' - Find the named WWW-Authenticate scheme.
|
||||
*
|
||||
* The "www_authenticate" parameter points to the current position in the header.
|
||||
*
|
||||
* Returns @code NULL@ if the auth scheme is not present.
|
||||
*/
|
||||
|
||||
static const char * /* O - Start of matching scheme or @code NULL@ if not found */
|
||||
cups_auth_find(const char *www_authenticate, /* I - Pointer into WWW-Authenticate header */
|
||||
const char *scheme) /* I - Authentication scheme */
|
||||
{
|
||||
size_t schemelen = strlen(scheme); /* Length of scheme */
|
||||
|
||||
|
||||
DEBUG_printf(("8cups_auth_find(www_authenticate=\"%s\", scheme=\"%s\"(%d))", www_authenticate, scheme, (int)schemelen));
|
||||
|
||||
while (*www_authenticate)
|
||||
{
|
||||
/*
|
||||
* Skip leading whitespace and commas...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("9cups_auth_find: Before whitespace: \"%s\"", www_authenticate));
|
||||
while (isspace(*www_authenticate & 255) || *www_authenticate == ',')
|
||||
www_authenticate ++;
|
||||
DEBUG_printf(("9cups_auth_find: After whitespace: \"%s\"", www_authenticate));
|
||||
|
||||
/*
|
||||
* 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] == ',' || !www_authenticate[schemelen]))
|
||||
{
|
||||
/*
|
||||
* Yes, this is the start of the scheme-specific information...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("9cups_auth_find: Returning \"%s\".", www_authenticate));
|
||||
|
||||
return (www_authenticate);
|
||||
}
|
||||
|
||||
/*
|
||||
* Skip the scheme name or param="value" string...
|
||||
*/
|
||||
|
||||
while (!isspace(*www_authenticate & 255) && *www_authenticate)
|
||||
{
|
||||
if (*www_authenticate == '\"')
|
||||
{
|
||||
/*
|
||||
* Skip quoted value...
|
||||
*/
|
||||
|
||||
www_authenticate ++;
|
||||
while (*www_authenticate && *www_authenticate != '\"')
|
||||
www_authenticate ++;
|
||||
|
||||
DEBUG_printf(("9cups_auth_find: After quoted: \"%s\"", www_authenticate));
|
||||
}
|
||||
|
||||
www_authenticate ++;
|
||||
}
|
||||
|
||||
DEBUG_printf(("9cups_auth_find: After skip: \"%s\"", www_authenticate));
|
||||
}
|
||||
|
||||
DEBUG_puts("9cups_auth_find: Returning NULL.");
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_auth_param()' - Copy the value for the named authentication parameter,
|
||||
* if present.
|
||||
*/
|
||||
|
||||
static const char * /* O - Parameter value or @code NULL@ if not present */
|
||||
cups_auth_param(const char *scheme, /* I - Pointer to auth data */
|
||||
const char *name, /* I - Name of parameter */
|
||||
char *value, /* I - Value buffer */
|
||||
size_t valsize) /* I - Size of value buffer */
|
||||
{
|
||||
char *valptr = value, /* Pointer into value buffer */
|
||||
*valend = value + valsize - 1; /* Pointer to end of buffer */
|
||||
size_t namelen = strlen(name); /* Name length */
|
||||
int param; /* Is this a parameter? */
|
||||
|
||||
|
||||
DEBUG_printf(("8cups_auth_param(scheme=\"%s\", name=\"%s\", value=%p, valsize=%d)", scheme, name, (void *)value, (int)valsize));
|
||||
|
||||
while (!isspace(*scheme & 255) && *scheme)
|
||||
scheme ++;
|
||||
|
||||
while (*scheme)
|
||||
{
|
||||
while (isspace(*scheme & 255) || *scheme == ',')
|
||||
scheme ++;
|
||||
|
||||
if (!strncmp(scheme, name, namelen) && scheme[namelen] == '=')
|
||||
{
|
||||
/*
|
||||
* Found the parameter, copy the value...
|
||||
*/
|
||||
|
||||
scheme += namelen + 1;
|
||||
if (*scheme == '\"')
|
||||
{
|
||||
scheme ++;
|
||||
|
||||
while (*scheme && *scheme != '\"')
|
||||
{
|
||||
if (valptr < valend)
|
||||
*valptr++ = *scheme;
|
||||
|
||||
scheme ++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (*scheme && strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~+/=", *scheme))
|
||||
{
|
||||
if (valptr < valend)
|
||||
*valptr++ = *scheme;
|
||||
|
||||
scheme ++;
|
||||
}
|
||||
}
|
||||
|
||||
*valptr = '\0';
|
||||
|
||||
DEBUG_printf(("9cups_auth_param: Returning \"%s\".", value));
|
||||
|
||||
return (value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Skip the param=value string...
|
||||
*/
|
||||
|
||||
param = 0;
|
||||
|
||||
while (!isspace(*scheme & 255) && *scheme)
|
||||
{
|
||||
if (*scheme == '=')
|
||||
param = 1;
|
||||
else if (*scheme == '\"')
|
||||
{
|
||||
/*
|
||||
* Skip quoted value...
|
||||
*/
|
||||
|
||||
scheme ++;
|
||||
while (*scheme && *scheme != '\"')
|
||||
scheme ++;
|
||||
}
|
||||
|
||||
scheme ++;
|
||||
}
|
||||
|
||||
/*
|
||||
* If this wasn't a parameter, we are at the end of this scheme's
|
||||
* parameters...
|
||||
*/
|
||||
|
||||
if (!param)
|
||||
break;
|
||||
}
|
||||
|
||||
*value = '\0';
|
||||
|
||||
DEBUG_puts("9cups_auth_param: Returning NULL.");
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_auth_scheme()' - Get the (next) WWW-Authenticate scheme.
|
||||
*
|
||||
* The "www_authenticate" parameter points to the current position in the header.
|
||||
*
|
||||
* Returns @code NULL@ if there are no (more) auth schemes present.
|
||||
*/
|
||||
|
||||
static const char * /* O - Start of scheme or @code NULL@ if not found */
|
||||
cups_auth_scheme(const char *www_authenticate, /* I - Pointer into WWW-Authenticate header */
|
||||
char *scheme, /* I - Scheme name buffer */
|
||||
size_t schemesize) /* I - Size of buffer */
|
||||
{
|
||||
const char *start; /* Start of scheme data */
|
||||
char *sptr = scheme, /* Pointer into scheme buffer */
|
||||
*send = scheme + schemesize - 1;/* End of scheme buffer */
|
||||
int param; /* Is this a parameter? */
|
||||
|
||||
|
||||
DEBUG_printf(("8cups_auth_scheme(www_authenticate=\"%s\", scheme=%p, schemesize=%d)", www_authenticate, (void *)scheme, (int)schemesize));
|
||||
|
||||
while (*www_authenticate)
|
||||
{
|
||||
/*
|
||||
* Skip leading whitespace and commas...
|
||||
*/
|
||||
|
||||
while (isspace(*www_authenticate & 255) || *www_authenticate == ',')
|
||||
www_authenticate ++;
|
||||
|
||||
/*
|
||||
* Parse the scheme name or param="value" string...
|
||||
*/
|
||||
|
||||
for (sptr = scheme, start = www_authenticate, param = 0; *www_authenticate && *www_authenticate != ',' && !isspace(*www_authenticate & 255); www_authenticate ++)
|
||||
{
|
||||
if (*www_authenticate == '=')
|
||||
param = 1;
|
||||
else if (!param && sptr < send)
|
||||
*sptr++ = *www_authenticate;
|
||||
else if (*www_authenticate == '\"')
|
||||
{
|
||||
/*
|
||||
* Skip quoted value...
|
||||
*/
|
||||
|
||||
www_authenticate ++;
|
||||
while (*www_authenticate && *www_authenticate != '\"')
|
||||
www_authenticate ++;
|
||||
}
|
||||
}
|
||||
|
||||
if (sptr > scheme && !param)
|
||||
{
|
||||
*sptr = '\0';
|
||||
|
||||
DEBUG_printf(("9cups_auth_scheme: Returning \"%s\".", start));
|
||||
|
||||
return (start);
|
||||
}
|
||||
}
|
||||
|
||||
*scheme = '\0';
|
||||
|
||||
DEBUG_puts("9cups_auth_scheme: Returning NULL.");
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_GSSAPI
|
||||
# ifdef HAVE_GSS_ACQUIRE_CRED_EX_F
|
||||
/*
|
||||
* 'cups_gss_acquire()' - Kerberos credentials callback.
|
||||
@@ -650,6 +1022,8 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
FILE *fp; /* Certificate file */
|
||||
char trc[16], /* Try Root Certificate parameter */
|
||||
filename[1024]; /* Certificate filename */
|
||||
const char *www_auth, /* WWW-Authenticate header */
|
||||
*schemedata; /* Data for the named auth scheme */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
|
||||
# if defined(HAVE_AUTHORIZATION_H)
|
||||
OSStatus status; /* Status */
|
||||
@@ -668,13 +1042,14 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
* See if we are accessing localhost...
|
||||
*/
|
||||
|
||||
if (!httpAddrLocalhost(http->hostaddr) &&
|
||||
_cups_strcasecmp(http->hostname, "localhost") != 0)
|
||||
if (!httpAddrLocalhost(http->hostaddr) && _cups_strcasecmp(http->hostname, "localhost") != 0)
|
||||
{
|
||||
DEBUG_puts("8cups_local_auth: Not a local connection!");
|
||||
return (1);
|
||||
}
|
||||
|
||||
www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE);
|
||||
|
||||
# if defined(HAVE_AUTHORIZATION_H)
|
||||
/*
|
||||
* Delete any previous authorization reference...
|
||||
@@ -686,12 +1061,9 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
http->auth_ref = NULL;
|
||||
}
|
||||
|
||||
if (!getenv("GATEWAY_INTERFACE") &&
|
||||
httpGetSubField2(http, HTTP_FIELD_WWW_AUTHENTICATE, "authkey",
|
||||
auth_key, sizeof(auth_key)))
|
||||
if (!getenv("GATEWAY_INTERFACE") && (schemedata = cups_auth_find(www_auth, "AuthRef")) != NULL && cups_auth_param(schemedata, "key", auth_key, sizeof(auth_key)))
|
||||
{
|
||||
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
|
||||
kAuthorizationFlagDefaults, &http->auth_ref);
|
||||
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &http->auth_ref);
|
||||
if (status != errAuthorizationSuccess)
|
||||
{
|
||||
DEBUG_printf(("8cups_local_auth: AuthorizationCreate() returned %d (%s)",
|
||||
@@ -745,6 +1117,15 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
}
|
||||
# endif /* HAVE_AUTHORIZATION_H */
|
||||
|
||||
# ifdef HAVE_GSSAPI
|
||||
if (cups_auth_find(www_auth, "Negotiate"))
|
||||
return (1);
|
||||
# endif /* HAVE_GSSAPI */
|
||||
# ifdef HAVE_AUTHORIZATION_H
|
||||
if (cups_auth_find(www_auth, "AuthRef"))
|
||||
return (1);
|
||||
# endif /* HAVE_AUTHORIZATION_H */
|
||||
|
||||
# if defined(SO_PEERCRED) && defined(AF_LOCAL)
|
||||
/*
|
||||
* See if we can authenticate using the peer credentials provided over a
|
||||
@@ -752,16 +1133,9 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
* information...
|
||||
*/
|
||||
|
||||
if (
|
||||
# ifdef HAVE_GSSAPI
|
||||
_cups_strncasecmp(http->fields[HTTP_FIELD_WWW_AUTHENTICATE], "Negotiate", 9) &&
|
||||
# endif /* HAVE_GSSAPI */
|
||||
# ifdef HAVE_AUTHORIZATION_H
|
||||
!httpGetSubField2(http, HTTP_FIELD_WWW_AUTHENTICATE, "authkey",
|
||||
auth_key, sizeof(auth_key)) &&
|
||||
# endif /* HAVE_AUTHORIZATION_H */
|
||||
http->hostaddr->addr.sa_family == AF_LOCAL &&
|
||||
!getenv("GATEWAY_INTERFACE")) /* Not via CGI programs... */
|
||||
if (http->hostaddr->addr.sa_family == AF_LOCAL &&
|
||||
!getenv("GATEWAY_INTERFACE") && /* Not via CGI programs... */
|
||||
cups_auth_find(www_auth, "PeerCred"))
|
||||
{
|
||||
/*
|
||||
* Verify that the current cupsUser() matches the current UID...
|
||||
@@ -784,6 +1158,9 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
}
|
||||
# endif /* SO_PEERCRED && AF_LOCAL */
|
||||
|
||||
if ((schemedata = cups_auth_find(www_auth, "Local")) == NULL)
|
||||
return (1);
|
||||
|
||||
/*
|
||||
* Try opening a certificate file for this PID. If that fails,
|
||||
* try the root certificate...
|
||||
@@ -797,33 +1174,9 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
* No certificate for this PID; see if we can get the root certificate...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("9cups_local_auth: Unable to open file %s: %s",
|
||||
filename, strerror(errno)));
|
||||
DEBUG_printf(("9cups_local_auth: Unable to open file %s: %s", filename, strerror(errno)));
|
||||
|
||||
# ifdef HAVE_GSSAPI
|
||||
if (!_cups_strncasecmp(http->fields[HTTP_FIELD_WWW_AUTHENTICATE], "Negotiate", 9))
|
||||
{
|
||||
/*
|
||||
* Kerberos required, don't try the root certificate...
|
||||
*/
|
||||
|
||||
return (1);
|
||||
}
|
||||
# endif /* HAVE_GSSAPI */
|
||||
|
||||
# ifdef HAVE_AUTHORIZATION_H
|
||||
if (httpGetSubField2(http, HTTP_FIELD_WWW_AUTHENTICATE, "authkey",
|
||||
auth_key, sizeof(auth_key)))
|
||||
{
|
||||
/*
|
||||
* Don't use the root certificate as a replacement for an authkey...
|
||||
*/
|
||||
|
||||
return (1);
|
||||
}
|
||||
# endif /* HAVE_AUTHORIZATION_H */
|
||||
if (!httpGetSubField2(http, HTTP_FIELD_WWW_AUTHENTICATE, "trc", trc,
|
||||
sizeof(trc)))
|
||||
if (!cups_auth_param(schemedata, "trc", trc, sizeof(trc)))
|
||||
{
|
||||
/*
|
||||
* Scheduler doesn't want us to use the root certificate...
|
||||
|
||||
+6
-3
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* API definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -47,10 +47,10 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 2.0206
|
||||
# define CUPS_VERSION 2.0208
|
||||
# define CUPS_VERSION_MAJOR 2
|
||||
# define CUPS_VERSION_MINOR 2
|
||||
# define CUPS_VERSION_PATCH 6
|
||||
# define CUPS_VERSION_PATCH 8
|
||||
|
||||
# define CUPS_BC_FD 3
|
||||
/* Back-channel file descriptor for
|
||||
@@ -606,6 +606,9 @@ extern ssize_t cupsHashData(const char *algorithm, const void *data, size_t dat
|
||||
extern int cupsAddIntegerOption(const char *name, int value, int num_options, cups_option_t **options) _CUPS_API_2_2_4;
|
||||
extern int cupsGetIntegerOption(const char *name, int num_options, cups_option_t *options) _CUPS_API_2_2_4;
|
||||
|
||||
/* New in CUPS 2.2.7 */
|
||||
extern const char *cupsHashString(const unsigned char *hash, size_t hashsize, char *buffer, size_t bufsize) _CUPS_API_2_2_7;
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
|
||||
+86
-5
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Hashing function for CUPS.
|
||||
*
|
||||
* Copyright 2015-2016 by Apple Inc.
|
||||
* Copyright © 2015-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -21,6 +21,8 @@
|
||||
# include <CommonCrypto/CommonDigest.h>
|
||||
#elif defined(HAVE_GNUTLS)
|
||||
# include <gnutls/crypto.h>
|
||||
#else
|
||||
# include "md5-private.h"
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
|
||||
@@ -53,7 +55,24 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
if (!strcmp(algorithm, "sha"))
|
||||
if (!strcmp(algorithm, "md5"))
|
||||
{
|
||||
/*
|
||||
* MD5 (deprecated but widely used...)
|
||||
*/
|
||||
|
||||
CC_MD5_CTX ctx; /* MD5 context */
|
||||
|
||||
if (hashsize < CC_MD5_DIGEST_LENGTH)
|
||||
goto too_small;
|
||||
|
||||
CC_MD5_Init(&ctx);
|
||||
CC_MD5_Update(&ctx, data, (CC_LONG)datalen);
|
||||
CC_MD5_Final(hash, &ctx);
|
||||
|
||||
return (CC_MD5_DIGEST_LENGTH);
|
||||
}
|
||||
else if (!strcmp(algorithm, "sha"))
|
||||
{
|
||||
/*
|
||||
* SHA-1...
|
||||
@@ -171,7 +190,9 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
unsigned char temp[64]; /* Temporary hash buffer */
|
||||
size_t tempsize = 0; /* Truncate to this size? */
|
||||
|
||||
if (!strcmp(algorithm, "sha"))
|
||||
if (!strcmp(algorithm, "md5"))
|
||||
alg = GNUTLS_DIG_MD5;
|
||||
else if (!strcmp(algorithm, "sha"))
|
||||
alg = GNUTLS_DIG_SHA1;
|
||||
else if (!strcmp(algorithm, "sha2-224"))
|
||||
alg = GNUTLS_DIG_SHA224;
|
||||
@@ -219,10 +240,20 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
|
||||
#else
|
||||
/*
|
||||
* No hash support without CommonCrypto or GNU TLS...
|
||||
* No hash support beyond MD5 without CommonCrypto or GNU TLS...
|
||||
*/
|
||||
|
||||
if (hashsize < 64)
|
||||
if (!strcmp(algorithm, "md5"))
|
||||
{
|
||||
_cups_md5_state_t state; /* MD5 state info */
|
||||
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, data, datalen);
|
||||
_cupsMD5Finish(&state, hash);
|
||||
|
||||
return (16);
|
||||
}
|
||||
else if (hashsize < 64)
|
||||
goto too_small;
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
@@ -243,3 +274,53 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Hash buffer too small."), 1);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsHashString()' - Format a hash value as a hexadecimal string.
|
||||
*
|
||||
* The passed buffer must be at least 2 * hashsize + 1 characters in length.
|
||||
*
|
||||
* @since CUPS 2.2.7@
|
||||
*/
|
||||
|
||||
const char * /* O - Formatted string */
|
||||
cupsHashString(
|
||||
const unsigned char *hash, /* I - Hash */
|
||||
size_t hashsize, /* I - Size of hash */
|
||||
char *buffer, /* I - String buffer */
|
||||
size_t bufsize) /* I - Size of string buffer */
|
||||
{
|
||||
char *bufptr = buffer; /* Pointer into buffer */
|
||||
static const char *hex = "0123456789abcdef";
|
||||
/* Hex characters (lowercase!) */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!hash || hashsize < 1 || !buffer || bufsize < (2 * hashsize + 1))
|
||||
{
|
||||
if (buffer)
|
||||
*buffer = '\0';
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Loop until we've converted the whole hash...
|
||||
*/
|
||||
|
||||
while (hashsize > 0)
|
||||
{
|
||||
*bufptr++ = hex[*hash >> 4];
|
||||
*bufptr++ = hex[*hash & 15];
|
||||
|
||||
hash ++;
|
||||
hashsize --;
|
||||
}
|
||||
|
||||
*bufptr = '\0';
|
||||
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
+13
-10
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Private HTTP definitions 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
|
||||
@@ -68,7 +68,6 @@ typedef int socklen_t;
|
||||
# endif /* __APPLE__ && !_SOCKLEN_T */
|
||||
|
||||
# include <cups/http.h>
|
||||
# include "md5-private.h"
|
||||
# include "ipp-private.h"
|
||||
|
||||
# ifdef HAVE_GNUTLS
|
||||
@@ -180,13 +179,17 @@ extern "C" {
|
||||
|
||||
# define _HTTP_TLS_NONE 0 /* No TLS options */
|
||||
# define _HTTP_TLS_ALLOW_RC4 1 /* Allow RC4 cipher suites */
|
||||
# define _HTTP_TLS_ALLOW_SSL3 2 /* Allow SSL 3.0 */
|
||||
# define _HTTP_TLS_ALLOW_DH 4 /* Allow DH/DHE key negotiation */
|
||||
# define _HTTP_TLS_DENY_TLS10 16 /* Deny TLS 1.0 */
|
||||
# define _HTTP_TLS_DENY_CBC 32 /* Deny CBC cipher suites */
|
||||
# define _HTTP_TLS_ONLY_TLS10 64 /* Only use TLS 1.0 */
|
||||
# define _HTTP_TLS_ALLOW_DH 2 /* Allow DH/DHE key negotiation */
|
||||
# define _HTTP_TLS_DENY_CBC 4 /* Deny CBC cipher suites */
|
||||
# define _HTTP_TLS_SET_DEFAULT 128 /* Setting the default TLS options */
|
||||
|
||||
# define _HTTP_TLS_SSL3 0 /* Min/max version is SSL/3.0 */
|
||||
# define _HTTP_TLS_1_0 1 /* Min/max version is TLS/1.0 */
|
||||
# define _HTTP_TLS_1_1 2 /* Min/max version is TLS/1.1 */
|
||||
# define _HTTP_TLS_1_2 3 /* Min/max version is TLS/1.2 */
|
||||
# define _HTTP_TLS_1_3 4 /* Min/max version is TLS/1.3 */
|
||||
# define _HTTP_TLS_MAX 5 /* Highest known TLS version */
|
||||
|
||||
|
||||
/*
|
||||
* Types and functions for SSL support...
|
||||
@@ -297,10 +300,10 @@ struct _http_s /**** HTTP connection structure ****/
|
||||
char buffer[HTTP_MAX_BUFFER];
|
||||
/* Buffer for incoming data */
|
||||
int _auth_type; /* Authentication in use (deprecated) */
|
||||
_cups_md5_state_t md5_state; /* MD5 state */
|
||||
unsigned char _md5_state[88]; /* MD5 state (deprecated) */
|
||||
char nonce[HTTP_MAX_VALUE];
|
||||
/* Nonce value */
|
||||
int nonce_count; /* Nonce count */
|
||||
unsigned nonce_count; /* Nonce count */
|
||||
http_tls_t tls; /* TLS state information */
|
||||
http_encryption_t encryption; /* Encryption requirements */
|
||||
|
||||
@@ -442,7 +445,7 @@ extern void _httpTLSInitialize(void);
|
||||
extern size_t _httpTLSPending(http_t *http);
|
||||
extern int _httpTLSRead(http_t *http, char *buf, int len);
|
||||
extern int _httpTLSSetCredentials(http_t *http);
|
||||
extern void _httpTLSSetOptions(int options);
|
||||
extern void _httpTLSSetOptions(int options, int min_version, int max_version);
|
||||
extern int _httpTLSStart(http_t *http);
|
||||
extern void _httpTLSStop(http_t *http);
|
||||
extern int _httpTLSWrite(http_t *http, const char *buf, int len);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* HTTP support routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -502,7 +502,6 @@ httpAssembleUUID(const char *server, /* I - Server name */
|
||||
size_t bufsize) /* I - Size of buffer */
|
||||
{
|
||||
char data[1024]; /* Source string for MD5 */
|
||||
_cups_md5_state_t md5state; /* MD5 state */
|
||||
unsigned char md5sum[16]; /* MD5 digest/sum */
|
||||
|
||||
|
||||
@@ -517,9 +516,7 @@ httpAssembleUUID(const char *server, /* I - Server name */
|
||||
port, name ? name : server, number,
|
||||
(unsigned)CUPS_RAND() & 0xffff, (unsigned)CUPS_RAND() & 0xffff);
|
||||
|
||||
_cupsMD5Init(&md5state);
|
||||
_cupsMD5Append(&md5state, (unsigned char *)data, (int)strlen(data));
|
||||
_cupsMD5Finish(&md5state, md5sum);
|
||||
cupsHashData("md5", (unsigned char *)data, strlen(data), md5sum, sizeof(md5sum));
|
||||
|
||||
/*
|
||||
* Generate the UUID from the MD5...
|
||||
@@ -1035,7 +1032,7 @@ httpSeparateURI(
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
if (*uri != ':')
|
||||
if (*uri != ':' || *scheme == '.' || !*scheme)
|
||||
{
|
||||
*scheme = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_SCHEME);
|
||||
@@ -1360,6 +1357,9 @@ _httpStatus(cups_lang_t *lang, /* I - Language */
|
||||
case HTTP_STATUS_MOVED_PERMANENTLY :
|
||||
s = _("Moved Permanently");
|
||||
break;
|
||||
case HTTP_STATUS_FOUND :
|
||||
s = _("Found");
|
||||
break;
|
||||
case HTTP_STATUS_SEE_OTHER :
|
||||
s = _("See Other");
|
||||
break;
|
||||
|
||||
+119
-104
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* HTTP 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.
|
||||
*
|
||||
* This file contains Kerberos support code, copyright 2006 by
|
||||
@@ -39,6 +39,7 @@
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void http_add_field(http_t *http, http_field_t field, const char *value, int append);
|
||||
#ifdef HAVE_LIBZ
|
||||
static void http_content_coding_finish(http_t *http);
|
||||
static void http_content_coding_start(http_t *http,
|
||||
@@ -2659,105 +2660,7 @@ httpSetField(http_t *http, /* I - HTTP connection */
|
||||
value == NULL)
|
||||
return;
|
||||
|
||||
switch (field)
|
||||
{
|
||||
case HTTP_FIELD_ACCEPT_ENCODING :
|
||||
if (http->accept_encoding)
|
||||
_cupsStrFree(http->accept_encoding);
|
||||
|
||||
http->accept_encoding = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_ALLOW :
|
||||
if (http->allow)
|
||||
_cupsStrFree(http->allow);
|
||||
|
||||
http->allow = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_SERVER :
|
||||
if (http->server)
|
||||
_cupsStrFree(http->server);
|
||||
|
||||
http->server = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_WWW_AUTHENTICATE :
|
||||
/* CUPS STR #4503 - don't override WWW-Authenticate for unknown auth schemes */
|
||||
if (http->fields[HTTP_FIELD_WWW_AUTHENTICATE][0] &&
|
||||
_cups_strncasecmp(value, "Basic ", 6) &&
|
||||
_cups_strncasecmp(value, "Digest ", 7) &&
|
||||
_cups_strncasecmp(value, "Negotiate ", 10))
|
||||
{
|
||||
DEBUG_printf(("1httpSetField: Ignoring unknown auth scheme in \"%s\".", value));
|
||||
return;
|
||||
}
|
||||
|
||||
/* Fall through to copy */
|
||||
|
||||
default :
|
||||
strlcpy(http->fields[field], value, HTTP_MAX_VALUE);
|
||||
break;
|
||||
}
|
||||
|
||||
if (field == HTTP_FIELD_AUTHORIZATION)
|
||||
{
|
||||
/*
|
||||
* Special case for Authorization: as its contents can be
|
||||
* longer than HTTP_MAX_VALUE
|
||||
*/
|
||||
|
||||
if (http->field_authorization)
|
||||
free(http->field_authorization);
|
||||
|
||||
http->field_authorization = strdup(value);
|
||||
}
|
||||
else if (field == HTTP_FIELD_HOST)
|
||||
{
|
||||
/*
|
||||
* Special-case for Host: as we don't want a trailing "." on the hostname and
|
||||
* need to bracket IPv6 numeric addresses.
|
||||
*/
|
||||
|
||||
char *ptr = strchr(value, ':');
|
||||
|
||||
if (value[0] != '[' && ptr && strchr(ptr + 1, ':'))
|
||||
{
|
||||
/*
|
||||
* Bracket IPv6 numeric addresses...
|
||||
*
|
||||
* This is slightly inefficient (basically copying twice), but is an edge
|
||||
* case and not worth optimizing...
|
||||
*/
|
||||
|
||||
snprintf(http->fields[HTTP_FIELD_HOST],
|
||||
sizeof(http->fields[HTTP_FIELD_HOST]), "[%s]", value);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Check for a trailing dot on the hostname...
|
||||
*/
|
||||
|
||||
ptr = http->fields[HTTP_FIELD_HOST];
|
||||
|
||||
if (*ptr)
|
||||
{
|
||||
ptr += strlen(ptr) - 1;
|
||||
|
||||
if (*ptr == '.')
|
||||
*ptr = '\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef HAVE_LIBZ
|
||||
else if (field == HTTP_FIELD_CONTENT_ENCODING &&
|
||||
http->data_encoding != HTTP_ENCODING_FIELDS)
|
||||
{
|
||||
DEBUG_puts("1httpSetField: Calling http_content_coding_start.");
|
||||
http_content_coding_start(http, value);
|
||||
}
|
||||
#endif /* HAVE_LIBZ */
|
||||
http_add_field(http, field, value, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -3035,7 +2938,7 @@ _httpUpdate(http_t *http, /* I - HTTP connection */
|
||||
httpSetCookie(http, value);
|
||||
}
|
||||
else if ((field = httpFieldValue(line)) != HTTP_FIELD_UNKNOWN)
|
||||
httpSetField(http, field, value);
|
||||
http_add_field(http, field, value, 1);
|
||||
#ifdef DEBUG
|
||||
else
|
||||
DEBUG_printf(("1_httpUpdate: unknown field %s seen!", line));
|
||||
@@ -3689,6 +3592,118 @@ httpWriteResponse(http_t *http, /* I - HTTP connection */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'http_add_field()' - Add a value for a HTTP field, appending if needed.
|
||||
*/
|
||||
|
||||
static void
|
||||
http_add_field(http_t *http, /* I - HTTP connection */
|
||||
http_field_t field, /* I - HTTP field */
|
||||
const char *value, /* I - Value string */
|
||||
int append) /* I - Append value? */
|
||||
{
|
||||
char newvalue[1024]; /* New value string */
|
||||
const char *oldvalue; /* Old field value */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Optionally append the new value to the existing one...
|
||||
*/
|
||||
|
||||
if (append && field != HTTP_FIELD_ACCEPT_ENCODING && field != HTTP_FIELD_ACCEPT_LANGUAGE && field != HTTP_FIELD_ACCEPT_RANGES && field != HTTP_FIELD_ALLOW && field != HTTP_FIELD_LINK && field != HTTP_FIELD_TRANSFER_ENCODING && field != HTTP_FIELD_UPGRADE && field != HTTP_FIELD_WWW_AUTHENTICATE)
|
||||
append = 0;
|
||||
|
||||
if (field == HTTP_FIELD_HOST)
|
||||
{
|
||||
/*
|
||||
* Special-case for Host: as we don't want a trailing "." on the hostname and
|
||||
* need to bracket IPv6 numeric addresses.
|
||||
*/
|
||||
|
||||
char *ptr = strchr(value, ':');
|
||||
|
||||
if (value[0] != '[' && ptr && strchr(ptr + 1, ':'))
|
||||
{
|
||||
/*
|
||||
* Bracket IPv6 numeric addresses...
|
||||
*/
|
||||
|
||||
snprintf(newvalue, sizeof(newvalue), "[%s]", value);
|
||||
value = newvalue;
|
||||
}
|
||||
else if (*value && value[strlen(value) - 1] == '.')
|
||||
{
|
||||
/*
|
||||
* Strip the trailing dot on the hostname...
|
||||
*/
|
||||
|
||||
strlcpy(newvalue, value, sizeof(newvalue));
|
||||
newvalue[strlen(newvalue) - 1] = '\0';
|
||||
value = newvalue;
|
||||
}
|
||||
}
|
||||
else if (append && *value && (oldvalue = httpGetField(http, field)) != NULL && *oldvalue)
|
||||
{
|
||||
snprintf(newvalue, sizeof(newvalue), "%s, %s", oldvalue, value);
|
||||
value = newvalue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Save the new value...
|
||||
*/
|
||||
|
||||
switch (field)
|
||||
{
|
||||
case HTTP_FIELD_ACCEPT_ENCODING :
|
||||
if (http->accept_encoding)
|
||||
_cupsStrFree(http->accept_encoding);
|
||||
|
||||
http->accept_encoding = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_ALLOW :
|
||||
if (http->allow)
|
||||
_cupsStrFree(http->allow);
|
||||
|
||||
http->allow = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_SERVER :
|
||||
if (http->server)
|
||||
_cupsStrFree(http->server);
|
||||
|
||||
http->server = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
default :
|
||||
strlcpy(http->fields[field], value, HTTP_MAX_VALUE);
|
||||
break;
|
||||
}
|
||||
|
||||
if (field == HTTP_FIELD_AUTHORIZATION)
|
||||
{
|
||||
/*
|
||||
* Special case for Authorization: as its contents can be
|
||||
* longer than HTTP_MAX_VALUE
|
||||
*/
|
||||
|
||||
if (http->field_authorization)
|
||||
free(http->field_authorization);
|
||||
|
||||
http->field_authorization = strdup(value);
|
||||
}
|
||||
#ifdef HAVE_LIBZ
|
||||
else if (field == HTTP_FIELD_CONTENT_ENCODING &&
|
||||
http->data_encoding != HTTP_ENCODING_FIELDS)
|
||||
{
|
||||
DEBUG_puts("1http_add_field: Calling http_content_coding_start.");
|
||||
http_content_coding_start(http, value);
|
||||
}
|
||||
#endif /* HAVE_LIBZ */
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_LIBZ
|
||||
/*
|
||||
* 'http_content_coding_finish()' - Finish doing any content encoding.
|
||||
@@ -4056,7 +4071,7 @@ http_read(http_t *http, /* I - HTTP connection */
|
||||
|
||||
DEBUG_printf(("http_read(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length));
|
||||
|
||||
if (!http->blocking)
|
||||
if (!http->blocking || http->timeout_value > 0.0)
|
||||
{
|
||||
while (!httpWait(http, http->wait_value))
|
||||
{
|
||||
@@ -4651,7 +4666,7 @@ http_write(http_t *http, /* I - HTTP connection */
|
||||
{
|
||||
DEBUG_printf(("3http_write: About to write %d bytes.", (int)length));
|
||||
|
||||
if (http->timeout_cb)
|
||||
if (http->timeout_value > 0.0)
|
||||
{
|
||||
#ifdef HAVE_POLL
|
||||
struct pollfd pfd; /* Polled file descriptor */
|
||||
@@ -4695,7 +4710,7 @@ http_write(http_t *http, /* I - HTTP connection */
|
||||
http->error = errno;
|
||||
return (-1);
|
||||
}
|
||||
else if (nfds == 0 && !(*http->timeout_cb)(http, http->timeout_data))
|
||||
else if (nfds == 0 && (!http->timeout_cb || !(*http->timeout_cb)(http, http->timeout_data)))
|
||||
{
|
||||
#ifdef WIN32
|
||||
http->error = WSAEWOULDBLOCK;
|
||||
|
||||
+5
-2
@@ -248,10 +248,11 @@ typedef enum http_status_e /**** HTTP status codes ****/
|
||||
|
||||
HTTP_STATUS_MULTIPLE_CHOICES = 300, /* Multiple files match request */
|
||||
HTTP_STATUS_MOVED_PERMANENTLY, /* Document has moved permanently */
|
||||
HTTP_STATUS_MOVED_TEMPORARILY, /* Document has moved temporarily */
|
||||
HTTP_STATUS_SEE_OTHER, /* See this other link... */
|
||||
HTTP_STATUS_FOUND, /* Document was found at a different URI */
|
||||
HTTP_STATUS_SEE_OTHER, /* See this other link */
|
||||
HTTP_STATUS_NOT_MODIFIED, /* File not modified */
|
||||
HTTP_STATUS_USE_PROXY, /* Must use a proxy to access this URI */
|
||||
HTTP_STATUS_TEMPORARY_REDIRECT = 307, /* Temporary redirection */
|
||||
|
||||
HTTP_STATUS_BAD_REQUEST = 400, /* Bad request */
|
||||
HTTP_STATUS_UNAUTHORIZED, /* Unauthorized to access host */
|
||||
@@ -285,6 +286,8 @@ typedef enum http_status_e /**** HTTP status codes ****/
|
||||
HTTP_STATUS_CUPS_PKI_ERROR, /* Error negotiating a secure connection @since CUPS 1.5/macOS 10.7@ */
|
||||
HTTP_STATUS_CUPS_WEBIF_DISABLED /* Web interface is disabled @private@ */
|
||||
|
||||
# define HTTP_STATUS_MOVED_TEMPORARILY HTTP_STATUS_FOUND /* Renamed in RFC 7231 */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
/* Old names for this enumeration */
|
||||
# define HTTP_ERROR HTTP_STATUS_ERROR
|
||||
|
||||
+16
-4
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Internet Printing Protocol support 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
|
||||
@@ -960,9 +960,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"feed-orientation-supported",
|
||||
"finishings",
|
||||
"finishings-col",
|
||||
"finishings-col-database",
|
||||
"finishings-col-default",
|
||||
"finishings-col-ready",
|
||||
"finishings-col-supported",
|
||||
"finishings-default",
|
||||
"finishings-ready",
|
||||
"finishings-supported",
|
||||
"font-name-requested",
|
||||
"font-name-requested-default",
|
||||
@@ -1001,6 +1004,7 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"media-bottom-margin-supported",
|
||||
"media-col",
|
||||
"media-col-default",
|
||||
"media-col-ready",
|
||||
"media-col-supported",
|
||||
"media-color-supported",
|
||||
"media-default",
|
||||
@@ -1015,6 +1019,7 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"media-left-margin-supported",
|
||||
"media-order-count-supported",
|
||||
"media-pre-printed-supported",
|
||||
"media-ready",
|
||||
"media-recycled-supported",
|
||||
"media-right-margin-supported",
|
||||
"media-size-supported",
|
||||
@@ -1277,9 +1282,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"feed-orientation-supported",
|
||||
"finishings",
|
||||
"finishings-col",
|
||||
"finishings-col-database",
|
||||
"finishings-col-default",
|
||||
"finishings-col-ready",
|
||||
"finishings-col-supported",
|
||||
"finishings-default",
|
||||
"finishings-ready",
|
||||
"finishings-supported",
|
||||
"font-name-requested",
|
||||
"font-name-requested-default",
|
||||
@@ -1383,6 +1391,7 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"media-bottom-margin-supported",
|
||||
"media-col",
|
||||
"media-col-default",
|
||||
"media-col-ready",
|
||||
"media-col-supported",
|
||||
"media-color-supported",
|
||||
"media-default",
|
||||
@@ -1397,6 +1406,7 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"media-left-margin-supported",
|
||||
"media-order-count-supported",
|
||||
"media-pre-printed-supported",
|
||||
"media-ready",
|
||||
"media-recycled-supported",
|
||||
"media-right-margin-supported",
|
||||
"media-size-supported",
|
||||
@@ -1582,10 +1592,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"job-page-limit", /* CUPS extension */
|
||||
"job-password-encryption-supported",
|
||||
"job-password-supported",
|
||||
"job-presets-supported", /* IPP Presets */
|
||||
"job-quota-period", /* CUPS extension */
|
||||
"job-resolvers-supported",
|
||||
"job-settable-attributes-supported",
|
||||
"job-spooling-supported",
|
||||
"job-triggers-supported", /* IPP Presets */
|
||||
"jpeg-k-octets-supported", /* CUPS extension */
|
||||
"jpeg-x-dimension-supported", /* CUPS extension */
|
||||
"jpeg-y-dimension-supported", /* CUPS extension */
|
||||
@@ -1599,8 +1611,6 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"marker-message", /* CUPS extension */
|
||||
"marker-names", /* CUPS extension */
|
||||
"marker-types", /* CUPS extension */
|
||||
"media-col-ready",
|
||||
"media-ready",
|
||||
"member-names", /* CUPS extension */
|
||||
"member-uris", /* CUPS extension */
|
||||
"multiple-destination-uris-supported",/* IPP FaxOut */
|
||||
@@ -1623,6 +1633,8 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"printer-charge-info",
|
||||
"printer-charge-info-uri",
|
||||
"printer-commands", /* CUPS extension */
|
||||
"printer-config-change-date-time",
|
||||
"printer-config-change-time",
|
||||
"printer-current-time",
|
||||
"printer-detailed-status-messages",
|
||||
"printer-device-id",
|
||||
|
||||
+37
-38
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Internet Printing Protocol functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -3089,6 +3089,13 @@ ippReadIO(void *src, /* I - Data source */
|
||||
ipp->state = IPP_STATE_DATA;
|
||||
break;
|
||||
}
|
||||
else if (tag == IPP_TAG_ZERO || (tag == IPP_TAG_OPERATION && ipp->curtag != IPP_TAG_ZERO))
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid group tag."), 1);
|
||||
DEBUG_printf(("1ippReadIO: bad tag 0x%02x.", tag));
|
||||
_cupsBufferRelease((char *)buffer);
|
||||
return (IPP_STATE_ERROR);
|
||||
}
|
||||
else if (tag < IPP_TAG_UNSUPPORTED_VALUE)
|
||||
{
|
||||
/*
|
||||
@@ -4306,18 +4313,22 @@ ippSetString(ipp_t *ipp, /* I - IPP message */
|
||||
{
|
||||
char *temp; /* Temporary string */
|
||||
_ipp_value_t *value; /* Current value */
|
||||
ipp_tag_t value_tag; /* Value tag */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (attr && *attr)
|
||||
value_tag = (*attr)->value_tag & IPP_TAG_CUPS_MASK;
|
||||
else
|
||||
value_tag = IPP_TAG_ZERO;
|
||||
|
||||
if (!ipp || !attr || !*attr ||
|
||||
((*attr)->value_tag != IPP_TAG_TEXTLANG &&
|
||||
(*attr)->value_tag != IPP_TAG_NAMELANG &&
|
||||
((*attr)->value_tag < IPP_TAG_TEXT ||
|
||||
(*attr)->value_tag > IPP_TAG_MIMETYPE)) ||
|
||||
element < 0 || element > (*attr)->num_values || !strvalue)
|
||||
(value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG &&
|
||||
value_tag != IPP_TAG_NAMELANG) || value_tag > IPP_TAG_MIMETYPE ||
|
||||
!strvalue)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -4808,21 +4819,6 @@ ippValidateAttribute(
|
||||
ipp_attribute_t *colattr; /* Collection attribute */
|
||||
regex_t re; /* Regular expression */
|
||||
ipp_uchar_t *date; /* Current date value */
|
||||
static const char * const uri_status_strings[] =
|
||||
{ /* URI status strings */
|
||||
"URI too large",
|
||||
"Bad arguments to function",
|
||||
"Bad resource in URI",
|
||||
"Bad port number in URI",
|
||||
"Bad hostname/address in URI",
|
||||
"Bad username in URI",
|
||||
"Bad scheme in URI",
|
||||
"Bad/empty URI",
|
||||
"OK",
|
||||
"Missing scheme in URI",
|
||||
"Unknown scheme in URI",
|
||||
"Missing resource in URI"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -5097,14 +5093,18 @@ ippValidateAttribute(
|
||||
}
|
||||
else if (*ptr & 0x80)
|
||||
break;
|
||||
else if ((*ptr < ' ' && *ptr != '\n' && *ptr != '\r' && *ptr != '\t') || *ptr == 0x7f)
|
||||
break;
|
||||
}
|
||||
|
||||
if (*ptr)
|
||||
if (*ptr < ' ' || *ptr == 0x7f)
|
||||
{
|
||||
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
|
||||
_("\"%s\": Bad text value \"%s\" - bad UTF-8 "
|
||||
"sequence (RFC 8011 section 5.1.2)."), attr->name,
|
||||
attr->values[i].string.text);
|
||||
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."), attr->name, attr->values[i].string.text);
|
||||
return (0);
|
||||
}
|
||||
else if (*ptr)
|
||||
{
|
||||
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -5155,14 +5155,18 @@ ippValidateAttribute(
|
||||
}
|
||||
else if (*ptr & 0x80)
|
||||
break;
|
||||
else if (*ptr < ' ' || *ptr == 0x7f)
|
||||
break;
|
||||
}
|
||||
|
||||
if (*ptr)
|
||||
if (*ptr < ' ' || *ptr == 0x7f)
|
||||
{
|
||||
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
|
||||
_("\"%s\": Bad name value \"%s\" - bad UTF-8 "
|
||||
"sequence (RFC 8011 section 5.1.3)."), attr->name,
|
||||
attr->values[i].string.text);
|
||||
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."), attr->name, attr->values[i].string.text);
|
||||
return (0);
|
||||
}
|
||||
else if (*ptr)
|
||||
{
|
||||
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -5219,12 +5223,7 @@ ippValidateAttribute(
|
||||
|
||||
if (uri_status < HTTP_URI_STATUS_OK)
|
||||
{
|
||||
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
|
||||
_("\"%s\": Bad URI value \"%s\" - %s "
|
||||
"(RFC 8011 section 5.1.6)."), attr->name,
|
||||
attr->values[i].string.text,
|
||||
uri_status_strings[uri_status -
|
||||
HTTP_URI_STATUS_OVERFLOW]);
|
||||
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."), attr->name, attr->values[i].string.text, httpURIStatusString(uri_status));
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -79,11 +79,11 @@ extern "C" {
|
||||
|
||||
typedef enum ipp_dstate_e /**** Document states @exclude all@ ****/
|
||||
{
|
||||
IPP_DOCUMENT_PENDING = 3, /* Document is pending */
|
||||
IPP_DOCUMENT_PROCESSING = 5, /* Document is processing */
|
||||
IPP_DOCUMENT_CANCELED = 7, /* Document is canceled */
|
||||
IPP_DOCUMENT_ABORTED, /* Document is aborted */
|
||||
IPP_DOCUMENT_COMPLETED /* Document is completed */
|
||||
IPP_DSTATE_PENDING = 3, /* Document is pending */
|
||||
IPP_DSTATE_PROCESSING = 5, /* Document is processing */
|
||||
IPP_DSTATE_CANCELED = 7, /* Document is canceled */
|
||||
IPP_DSTATE_ABORTED, /* Document is aborted */
|
||||
IPP_DSTATE_COMPLETED /* Document is completed */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_DOCUMENT_PENDING IPP_DSTATE_PENDING
|
||||
|
||||
+86
-84
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Private MD5 implementation for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2005 by Easy Software Products
|
||||
* Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
|
||||
*
|
||||
@@ -43,70 +43,71 @@
|
||||
#include "md5-private.h"
|
||||
#include "string-private.h"
|
||||
|
||||
#define T1 0xd76aa478
|
||||
#define T2 0xe8c7b756
|
||||
#define T3 0x242070db
|
||||
#define T4 0xc1bdceee
|
||||
#define T5 0xf57c0faf
|
||||
#define T6 0x4787c62a
|
||||
#define T7 0xa8304613
|
||||
#define T8 0xfd469501
|
||||
#define T9 0x698098d8
|
||||
#define T10 0x8b44f7af
|
||||
#define T11 0xffff5bb1
|
||||
#define T12 0x895cd7be
|
||||
#define T13 0x6b901122
|
||||
#define T14 0xfd987193
|
||||
#define T15 0xa679438e
|
||||
#define T16 0x49b40821
|
||||
#define T17 0xf61e2562
|
||||
#define T18 0xc040b340
|
||||
#define T19 0x265e5a51
|
||||
#define T20 0xe9b6c7aa
|
||||
#define T21 0xd62f105d
|
||||
#define T22 0x02441453
|
||||
#define T23 0xd8a1e681
|
||||
#define T24 0xe7d3fbc8
|
||||
#define T25 0x21e1cde6
|
||||
#define T26 0xc33707d6
|
||||
#define T27 0xf4d50d87
|
||||
#define T28 0x455a14ed
|
||||
#define T29 0xa9e3e905
|
||||
#define T30 0xfcefa3f8
|
||||
#define T31 0x676f02d9
|
||||
#define T32 0x8d2a4c8a
|
||||
#define T33 0xfffa3942
|
||||
#define T34 0x8771f681
|
||||
#define T35 0x6d9d6122
|
||||
#define T36 0xfde5380c
|
||||
#define T37 0xa4beea44
|
||||
#define T38 0x4bdecfa9
|
||||
#define T39 0xf6bb4b60
|
||||
#define T40 0xbebfbc70
|
||||
#define T41 0x289b7ec6
|
||||
#define T42 0xeaa127fa
|
||||
#define T43 0xd4ef3085
|
||||
#define T44 0x04881d05
|
||||
#define T45 0xd9d4d039
|
||||
#define T46 0xe6db99e5
|
||||
#define T47 0x1fa27cf8
|
||||
#define T48 0xc4ac5665
|
||||
#define T49 0xf4292244
|
||||
#define T50 0x432aff97
|
||||
#define T51 0xab9423a7
|
||||
#define T52 0xfc93a039
|
||||
#define T53 0x655b59c3
|
||||
#define T54 0x8f0ccc92
|
||||
#define T55 0xffeff47d
|
||||
#define T56 0x85845dd1
|
||||
#define T57 0x6fa87e4f
|
||||
#define T58 0xfe2ce6e0
|
||||
#define T59 0xa3014314
|
||||
#define T60 0x4e0811a1
|
||||
#define T61 0xf7537e82
|
||||
#define T62 0xbd3af235
|
||||
#define T63 0x2ad7d2bb
|
||||
#define T64 0xeb86d391
|
||||
#if !defined(__APPLE__) && !defined(HAVE_GNUTLS)
|
||||
# define T1 0xd76aa478
|
||||
# define T2 0xe8c7b756
|
||||
# define T3 0x242070db
|
||||
# define T4 0xc1bdceee
|
||||
# define T5 0xf57c0faf
|
||||
# define T6 0x4787c62a
|
||||
# define T7 0xa8304613
|
||||
# define T8 0xfd469501
|
||||
# define T9 0x698098d8
|
||||
# define T10 0x8b44f7af
|
||||
# define T11 0xffff5bb1
|
||||
# define T12 0x895cd7be
|
||||
# define T13 0x6b901122
|
||||
# define T14 0xfd987193
|
||||
# define T15 0xa679438e
|
||||
# define T16 0x49b40821
|
||||
# define T17 0xf61e2562
|
||||
# define T18 0xc040b340
|
||||
# define T19 0x265e5a51
|
||||
# define T20 0xe9b6c7aa
|
||||
# define T21 0xd62f105d
|
||||
# define T22 0x02441453
|
||||
# define T23 0xd8a1e681
|
||||
# define T24 0xe7d3fbc8
|
||||
# define T25 0x21e1cde6
|
||||
# define T26 0xc33707d6
|
||||
# define T27 0xf4d50d87
|
||||
# define T28 0x455a14ed
|
||||
# define T29 0xa9e3e905
|
||||
# define T30 0xfcefa3f8
|
||||
# define T31 0x676f02d9
|
||||
# define T32 0x8d2a4c8a
|
||||
# define T33 0xfffa3942
|
||||
# define T34 0x8771f681
|
||||
# define T35 0x6d9d6122
|
||||
# define T36 0xfde5380c
|
||||
# define T37 0xa4beea44
|
||||
# define T38 0x4bdecfa9
|
||||
# define T39 0xf6bb4b60
|
||||
# define T40 0xbebfbc70
|
||||
# define T41 0x289b7ec6
|
||||
# define T42 0xeaa127fa
|
||||
# define T43 0xd4ef3085
|
||||
# define T44 0x04881d05
|
||||
# define T45 0xd9d4d039
|
||||
# define T46 0xe6db99e5
|
||||
# define T47 0x1fa27cf8
|
||||
# define T48 0xc4ac5665
|
||||
# define T49 0xf4292244
|
||||
# define T50 0x432aff97
|
||||
# define T51 0xab9423a7
|
||||
# define T52 0xfc93a039
|
||||
# define T53 0x655b59c3
|
||||
# define T54 0x8f0ccc92
|
||||
# define T55 0xffeff47d
|
||||
# define T56 0x85845dd1
|
||||
# define T57 0x6fa87e4f
|
||||
# define T58 0xfe2ce6e0
|
||||
# define T59 0xa3014314
|
||||
# define T60 0x4e0811a1
|
||||
# define T61 0xf7537e82
|
||||
# define T62 0xbd3af235
|
||||
# define T63 0x2ad7d2bb
|
||||
# define T64 0xeb86d391
|
||||
|
||||
static void
|
||||
_cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
@@ -116,10 +117,10 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
c = pms->abcd[2], d = pms->abcd[3];
|
||||
unsigned int t;
|
||||
|
||||
#ifndef ARCH_IS_BIG_ENDIAN
|
||||
# define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */
|
||||
#endif
|
||||
#if ARCH_IS_BIG_ENDIAN
|
||||
# ifndef ARCH_IS_BIG_ENDIAN
|
||||
# define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */
|
||||
# endif
|
||||
# if ARCH_IS_BIG_ENDIAN
|
||||
|
||||
/*
|
||||
* On big-endian machines, we must arrange the bytes in the right
|
||||
@@ -133,7 +134,7 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
X[i] = (unsigned)xp[0] + ((unsigned)xp[1] << 8) +
|
||||
((unsigned)xp[2] << 16) + ((unsigned)xp[3] << 24);
|
||||
|
||||
#else /* !ARCH_IS_BIG_ENDIAN */
|
||||
# else /* !ARCH_IS_BIG_ENDIAN */
|
||||
|
||||
/*
|
||||
* On little-endian machines, we can process properly aligned data
|
||||
@@ -150,15 +151,15 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
memcpy(xbuf, data, 64);
|
||||
X = xbuf;
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
|
||||
# define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
|
||||
|
||||
/* Round 1. */
|
||||
/* Let [abcd k s i] denote the operation
|
||||
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
# define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
|
||||
# define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + F(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
@@ -178,13 +179,13 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
SET(d, a, b, c, 13, 12, T14);
|
||||
SET(c, d, a, b, 14, 17, T15);
|
||||
SET(b, c, d, a, 15, 22, T16);
|
||||
#undef SET
|
||||
# undef SET
|
||||
|
||||
/* Round 2. */
|
||||
/* Let [abcd k s i] denote the operation
|
||||
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
# define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
|
||||
# define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + G(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
@@ -204,13 +205,13 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
SET(d, a, b, c, 2, 9, T30);
|
||||
SET(c, d, a, b, 7, 14, T31);
|
||||
SET(b, c, d, a, 12, 20, T32);
|
||||
#undef SET
|
||||
# undef SET
|
||||
|
||||
/* Round 3. */
|
||||
/* Let [abcd k s t] denote the operation
|
||||
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define H(x, y, z) ((x) ^ (y) ^ (z))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
# define H(x, y, z) ((x) ^ (y) ^ (z))
|
||||
# define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + H(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
@@ -230,13 +231,13 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
SET(d, a, b, c, 12, 11, T46);
|
||||
SET(c, d, a, b, 15, 16, T47);
|
||||
SET(b, c, d, a, 2, 23, T48);
|
||||
#undef SET
|
||||
# undef SET
|
||||
|
||||
/* Round 4. */
|
||||
/* Let [abcd k s t] denote the operation
|
||||
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define I(x, y, z) ((y) ^ ((x) | ~(z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
# define I(x, y, z) ((y) ^ ((x) | ~(z)))
|
||||
# define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + I(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
@@ -256,7 +257,7 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
SET(d, a, b, c, 11, 10, T62);
|
||||
SET(c, d, a, b, 2, 15, T63);
|
||||
SET(b, c, d, a, 9, 21, T64);
|
||||
#undef SET
|
||||
# undef SET
|
||||
|
||||
/* Then perform the following additions. (That is increment each
|
||||
of the four registers by the value it had before this block
|
||||
@@ -337,3 +338,4 @@ _cupsMD5Finish(_cups_md5_state_t *pms, unsigned char digest[16])
|
||||
for (i = 0; i < 16; ++i)
|
||||
digest[i] = (unsigned char)(pms->abcd[i >> 2] >> ((i & 3) << 3));
|
||||
}
|
||||
#endif /* !__APPLE__ && !HAVE_GNUTLS */
|
||||
|
||||
+16
-36
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* MD5 password support for CUPS.
|
||||
* MD5 password support for CUPS (deprecated).
|
||||
*
|
||||
* Copyright 2007-2010 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -17,12 +17,15 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <cups/cups.h>
|
||||
#include "http-private.h"
|
||||
#include "string-private.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'httpMD5()' - Compute the MD5 sum of the username:group:password.
|
||||
*
|
||||
* @deprecated@
|
||||
*/
|
||||
|
||||
char * /* O - MD5 sum */
|
||||
@@ -31,7 +34,6 @@ httpMD5(const char *username, /* I - User name */
|
||||
const char *passwd, /* I - Password string */
|
||||
char md5[33]) /* O - MD5 string */
|
||||
{
|
||||
_cups_md5_state_t state; /* MD5 state info */
|
||||
unsigned char sum[16]; /* Sum data */
|
||||
char line[256]; /* Line to sum */
|
||||
|
||||
@@ -41,15 +43,13 @@ httpMD5(const char *username, /* I - User name */
|
||||
*/
|
||||
|
||||
snprintf(line, sizeof(line), "%s:%s:%s", username, realm, passwd);
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
||||
_cupsMD5Finish(&state, sum);
|
||||
cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
||||
|
||||
/*
|
||||
* Return the sum...
|
||||
*/
|
||||
|
||||
return (httpMD5String(sum, md5));
|
||||
return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,8 @@ httpMD5(const char *username, /* I - User name */
|
||||
* 'httpMD5Final()' - Combine the MD5 sum of the username, group, and password
|
||||
* with the server-supplied nonce value, method, and
|
||||
* request-uri.
|
||||
*
|
||||
* @deprecated@
|
||||
*/
|
||||
|
||||
char * /* O - New sum */
|
||||
@@ -65,7 +67,6 @@ httpMD5Final(const char *nonce, /* I - Server nonce value */
|
||||
const char *resource, /* I - Resource path */
|
||||
char md5[33]) /* IO - MD5 sum */
|
||||
{
|
||||
_cups_md5_state_t state; /* MD5 state info */
|
||||
unsigned char sum[16]; /* Sum data */
|
||||
char line[1024]; /* Line of data */
|
||||
char a2[33]; /* Hash of method and resource */
|
||||
@@ -76,10 +77,8 @@ httpMD5Final(const char *nonce, /* I - Server nonce value */
|
||||
*/
|
||||
|
||||
snprintf(line, sizeof(line), "%s:%s", method, resource);
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
||||
_cupsMD5Finish(&state, sum);
|
||||
httpMD5String(sum, a2);
|
||||
cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
||||
cupsHashString(sum, sizeof(sum), a2, sizeof(a2));
|
||||
|
||||
/*
|
||||
* Then combine A1 (MD5 of username, realm, and password) with the nonce
|
||||
@@ -88,17 +87,16 @@ httpMD5Final(const char *nonce, /* I - Server nonce value */
|
||||
*/
|
||||
|
||||
snprintf(line, sizeof(line), "%s:%s:%s", md5, nonce, a2);
|
||||
cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
||||
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
||||
_cupsMD5Finish(&state, sum);
|
||||
|
||||
return (httpMD5String(sum, md5));
|
||||
return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpMD5String()' - Convert an MD5 sum to a character string.
|
||||
*
|
||||
* @deprecated@
|
||||
*/
|
||||
|
||||
char * /* O - MD5 sum in hex */
|
||||
@@ -106,23 +104,5 @@ httpMD5String(const unsigned char *sum, /* I - MD5 sum data */
|
||||
char md5[33])
|
||||
/* O - MD5 sum in hex */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
char *md5ptr; /* Pointer into MD5 string */
|
||||
static const char hex[] = "0123456789abcdef";
|
||||
/* Hex digits */
|
||||
|
||||
|
||||
/*
|
||||
* Convert the MD5 sum to hexadecimal...
|
||||
*/
|
||||
|
||||
for (i = 16, md5ptr = md5; i > 0; i --, sum ++)
|
||||
{
|
||||
*md5ptr++ = hex[*sum >> 4];
|
||||
*md5ptr++ = hex[*sum & 15];
|
||||
}
|
||||
|
||||
*md5ptr = '\0';
|
||||
|
||||
return (md5);
|
||||
return ((char *)cupsHashString(sum, 16, md5, 33));
|
||||
}
|
||||
|
||||
+47
-18
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* PPD cache implementation for CUPS.
|
||||
*
|
||||
* Copyright 2010-2017 by Apple Inc.
|
||||
* Copyright © 2010-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -3117,6 +3117,41 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
cupsFilePuts(fp, "*cupsSNMPSupplies: False\n");
|
||||
cupsFilePuts(fp, "*cupsLanguages: \"en\"\n");
|
||||
|
||||
/*
|
||||
* Password/PIN printing...
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(response, "job-password-supported", IPP_TAG_INTEGER)) != NULL)
|
||||
{
|
||||
char pattern[33]; /* Password pattern */
|
||||
int maxlen = ippGetInteger(attr, 0);
|
||||
/* Maximum length */
|
||||
const char *repertoire = ippGetString(ippFindAttribute(response, "job-password-repertoire-configured", IPP_TAG_KEYWORD), 0, NULL);
|
||||
/* Type of password */
|
||||
|
||||
if (maxlen > (int)(sizeof(pattern) - 1))
|
||||
maxlen = sizeof(pattern) - 1;
|
||||
|
||||
if (!repertoire || !strcmp(repertoire, "iana_us-ascii_digits"))
|
||||
memset(pattern, '1', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_us-ascii_letters"))
|
||||
memset(pattern, 'A', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_us-ascii_complex"))
|
||||
memset(pattern, 'C', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_us-ascii_any"))
|
||||
memset(pattern, '.', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_utf-8_digits"))
|
||||
memset(pattern, 'N', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_utf-8_letters"))
|
||||
memset(pattern, 'U', maxlen);
|
||||
else
|
||||
memset(pattern, '*', maxlen);
|
||||
|
||||
pattern[maxlen] = '\0';
|
||||
|
||||
cupsFilePrintf(fp, "*cupsPassword: \"%s\"\n", pattern);
|
||||
}
|
||||
|
||||
/*
|
||||
* Filters...
|
||||
*/
|
||||
@@ -3125,24 +3160,18 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
{
|
||||
is_apple = ippContainsString(attr, "image/urf");
|
||||
is_pdf = ippContainsString(attr, "application/pdf");
|
||||
is_pwg = ippContainsString(attr, "image/pwg-raster");
|
||||
is_pwg = ippContainsString(attr, "image/pwg-raster") && !is_apple;
|
||||
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
const char *format = ippGetString(attr, i, NULL);
|
||||
/* PDL */
|
||||
|
||||
/*
|
||||
* Write cupsFilter2 lines for supported formats...
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(format, "application/pdf"))
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n");
|
||||
else if (!_cups_strcasecmp(format, "image/jpeg") || !_cups_strcasecmp(format, "image/png"))
|
||||
cupsFilePrintf(fp, "*cupsFilter2: \"%s %s 0 -\"\n", format, format);
|
||||
else if (!_cups_strcasecmp(format, "image/pwg-raster") || !_cups_strcasecmp(format, "image/urf"))
|
||||
cupsFilePrintf(fp, "*cupsFilter2: \"%s %s 100 -\"\n", format, format);
|
||||
}
|
||||
if (ippContainsString(attr, "image/jpeg"))
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"image/jpeg image/jpeg 0 -\"\n");
|
||||
if (ippContainsString(attr, "image/png"))
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"image/png image/png 0 -\"\n");
|
||||
if (is_pdf)
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n");
|
||||
if (is_apple)
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"image/urf image/urf 100 -\"\n");
|
||||
if (is_pwg)
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"image/pwg-raster image/pwg-raster 100 -\"\n");
|
||||
}
|
||||
|
||||
if (!is_apple && !is_pdf && !is_pwg)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Option conflict management routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 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
|
||||
@@ -29,7 +29,6 @@
|
||||
|
||||
enum
|
||||
{
|
||||
_PPD_NORMAL_CONSTRAINTS,
|
||||
_PPD_OPTION_CONSTRAINTS,
|
||||
_PPD_INSTALLABLE_CONSTRAINTS,
|
||||
_PPD_ALL_CONSTRAINTS
|
||||
@@ -998,7 +997,7 @@ ppd_test_constraints(
|
||||
if (!consts->installable && which == _PPD_INSTALLABLE_CONSTRAINTS)
|
||||
continue; /* Skip non-installable option constraint */
|
||||
|
||||
if (which == _PPD_OPTION_CONSTRAINTS && option)
|
||||
if ((which == _PPD_OPTION_CONSTRAINTS || which == _PPD_INSTALLABLE_CONSTRAINTS) && option)
|
||||
{
|
||||
/*
|
||||
* Skip constraints that do not involve the current option...
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* PPD localization 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
|
||||
@@ -277,7 +277,7 @@ ppdLocalizeIPPReason(
|
||||
|
||||
if (!locattr)
|
||||
{
|
||||
if (lang && (!scheme || !strcmp(scheme, "text")))
|
||||
if (lang && (!scheme || !strcmp(scheme, "text")) && strcmp(reason, "none"))
|
||||
{
|
||||
/*
|
||||
* Try to localize a standard printer-state-reason keyword...
|
||||
|
||||
+28
-99
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* PPD utilities for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 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
|
||||
@@ -216,6 +216,27 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL
|
||||
const char *tmpdir; /* TMPDIR environment variable */
|
||||
struct timeval curtime; /* Current time */
|
||||
|
||||
#ifdef __APPLE__
|
||||
/*
|
||||
* On macOS and iOS, the TMPDIR environment variable is not always the
|
||||
* best location to place temporary files due to sandboxing. Instead,
|
||||
* the confstr function should be called to get the proper per-user,
|
||||
* per-process TMPDIR value.
|
||||
*/
|
||||
|
||||
char tmppath[1024]; /* Temporary directory */
|
||||
|
||||
if ((tmpdir = getenv("TMPDIR")) != NULL && access(tmpdir, W_OK))
|
||||
tmpdir = NULL;
|
||||
|
||||
if (!tmpdir)
|
||||
{
|
||||
if (confstr(_CS_DARWIN_USER_TEMP_DIR, tmppath, sizeof(tmppath)))
|
||||
tmpdir = tmppath;
|
||||
else
|
||||
tmpdir = "/private/tmp"; /* This should never happen */
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* Previously we put root temporary files in the default CUPS temporary
|
||||
* directory under /var/spool/cups. However, since the scheduler cleans
|
||||
@@ -224,11 +245,8 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL
|
||||
*/
|
||||
|
||||
if ((tmpdir = getenv("TMPDIR")) == NULL)
|
||||
# ifdef __APPLE__
|
||||
tmpdir = "/private/tmp"; /* /tmp is a symlink to /private/tmp */
|
||||
# else
|
||||
tmpdir = "/tmp";
|
||||
# endif /* __APPLE__ */
|
||||
tmpdir = "/tmp";
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
/*
|
||||
* Make the temporary name using the specified directory...
|
||||
@@ -511,23 +529,16 @@ cups_get_printer_uri(
|
||||
int depth) /* I - Depth of query */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
int http_port; /* Port number */
|
||||
http_t *http2; /* Alternate HTTP connection */
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
char uri[HTTP_MAX_URI], /* printer-uri attribute */
|
||||
scheme[HTTP_MAX_URI], /* Scheme name */
|
||||
username[HTTP_MAX_URI], /* Username:password */
|
||||
classname[255], /* Temporary class name */
|
||||
http_hostname[HTTP_MAX_HOST];
|
||||
/* Hostname associated with connection */
|
||||
username[HTTP_MAX_URI]; /* Username:password */
|
||||
static const char * const requested_attrs[] =
|
||||
{ /* Requested attributes */
|
||||
"device-uri",
|
||||
"member-uris",
|
||||
"printer-uri-supported",
|
||||
"printer-type"
|
||||
"printer-uri-supported"
|
||||
};
|
||||
|
||||
|
||||
@@ -549,15 +560,6 @@ cups_get_printer_uri(
|
||||
|
||||
DEBUG_printf(("5cups_get_printer_uri: printer-uri=\"%s\"", uri));
|
||||
|
||||
/*
|
||||
* Get the hostname and port number we are connected to...
|
||||
*/
|
||||
|
||||
httpGetHostname(http, http_hostname, sizeof(http_hostname));
|
||||
http_port = httpAddrPort(http->hostaddr);
|
||||
|
||||
DEBUG_printf(("5cups_get_printer_uri: http_hostname=\"%s\"", http_hostname));
|
||||
|
||||
/*
|
||||
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
|
||||
* attributes:
|
||||
@@ -582,31 +584,7 @@ cups_get_printer_uri(
|
||||
|
||||
if ((response = cupsDoRequest(http, request, resource)) != NULL)
|
||||
{
|
||||
const char *device_uri = NULL; /* device-uri value */
|
||||
|
||||
if ((attr = ippFindAttribute(response, "device-uri", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
device_uri = attr->values[0].string.text;
|
||||
DEBUG_printf(("5cups_get_printer_uri: device-uri=\"%s\"", device_uri));
|
||||
}
|
||||
|
||||
if (device_uri &&
|
||||
(((!strncmp(device_uri, "ipp://", 6) || !strncmp(device_uri, "ipps://", 7)) &&
|
||||
(strstr(device_uri, "/printers/") != NULL || strstr(device_uri, "/classes/") != NULL)) ||
|
||||
((strstr(device_uri, "._ipp.") != NULL || strstr(device_uri, "._ipps.") != NULL) &&
|
||||
!strcmp(device_uri + strlen(device_uri) - 5, "/cups"))))
|
||||
{
|
||||
/*
|
||||
* Statically-configured shared printer.
|
||||
*/
|
||||
|
||||
httpSeparateURI(HTTP_URI_CODING_ALL, _httpResolveURI(device_uri, uri, sizeof(uri), _HTTP_RESOLVE_DEFAULT, NULL, NULL), scheme, sizeof(scheme), username, sizeof(username), host, hostsize, port, resource, resourcesize);
|
||||
ippDelete(response);
|
||||
|
||||
DEBUG_printf(("5cups_get_printer_uri: Resolved to host=\"%s\", port=%d, resource=\"%s\"", host, *port, resource));
|
||||
return (1);
|
||||
}
|
||||
else if ((attr = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL)
|
||||
if ((attr = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Get the first actual printer name in the class...
|
||||
@@ -631,55 +609,6 @@ cups_get_printer_uri(
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* No printers in this class - try recursively looking for a printer,
|
||||
* but not more than 3 levels deep...
|
||||
*/
|
||||
|
||||
if (depth < 3)
|
||||
{
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[i].string.text,
|
||||
scheme, sizeof(scheme), username, sizeof(username),
|
||||
host, hostsize, port, resource, resourcesize);
|
||||
if (!strncmp(resource, "/classes/", 9))
|
||||
{
|
||||
/*
|
||||
* Found a class! Connect to the right server...
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(http_hostname, host) && *port == http_port)
|
||||
http2 = http;
|
||||
else if ((http2 = httpConnect2(host, *port, NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL)) == NULL)
|
||||
{
|
||||
DEBUG_puts("8cups_get_printer_uri: Unable to connect to server");
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Look up printers on that server...
|
||||
*/
|
||||
|
||||
strlcpy(classname, resource + 9, sizeof(classname));
|
||||
|
||||
cups_get_printer_uri(http2, classname, host, hostsize, port,
|
||||
resource, resourcesize, depth + 1);
|
||||
|
||||
/*
|
||||
* Close the connection as needed...
|
||||
*/
|
||||
|
||||
if (http2 != http)
|
||||
httpClose(http2);
|
||||
|
||||
if (*host)
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
|
||||
+25
-7
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Temp file utilities 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
|
||||
@@ -42,8 +42,10 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
int fd; /* File descriptor for temp file */
|
||||
int tries; /* Number of tries */
|
||||
const char *tmpdir; /* TMPDIR environment var */
|
||||
#if defined(__APPLE__) || defined(WIN32)
|
||||
char tmppath[1024]; /* Temporary directory */
|
||||
#endif /* __APPLE__ || WIN32 */
|
||||
#ifdef WIN32
|
||||
char tmppath[1024]; /* Windows temporary directory */
|
||||
DWORD curtime; /* Current time */
|
||||
#else
|
||||
struct timeval curtime; /* Current time */
|
||||
@@ -60,6 +62,26 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
GetTempPath(sizeof(tmppath), tmppath);
|
||||
tmpdir = tmppath;
|
||||
}
|
||||
|
||||
#elif defined(__APPLE__)
|
||||
/*
|
||||
* On macOS and iOS, the TMPDIR environment variable is not always the best
|
||||
* location to place temporary files due to sandboxing. Instead, the confstr
|
||||
* function should be called to get the proper per-user, per-process TMPDIR
|
||||
* value.
|
||||
*/
|
||||
|
||||
if ((tmpdir = getenv("TMPDIR")) != NULL && access(tmpdir, W_OK))
|
||||
tmpdir = NULL;
|
||||
|
||||
if (!tmpdir)
|
||||
{
|
||||
if (confstr(_CS_DARWIN_USER_TEMP_DIR, tmppath, sizeof(tmppath)))
|
||||
tmpdir = tmppath;
|
||||
else
|
||||
tmpdir = "/private/tmp"; /* This should never happen */
|
||||
}
|
||||
|
||||
#else
|
||||
/*
|
||||
* Previously we put root temporary files in the default CUPS temporary
|
||||
@@ -69,11 +91,7 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
*/
|
||||
|
||||
if ((tmpdir = getenv("TMPDIR")) == NULL)
|
||||
# if defined(__APPLE__) && !TARGET_OS_IOS
|
||||
tmpdir = "/private/tmp"; /* /tmp is a symlink to /private/tmp */
|
||||
# else
|
||||
tmpdir = "/tmp";
|
||||
# endif /* __APPLE__ && !TARGET_OS_IOS */
|
||||
#endif /* WIN32 */
|
||||
|
||||
/*
|
||||
|
||||
+11
-2
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* HTTP test program for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -120,6 +120,9 @@ static uri_test_t uri_tests[] = /* URI test data */
|
||||
{ HTTP_URI_STATUS_OK, "ipp://%22%23%2F%3A%3C%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D/",
|
||||
"ipp", "", "\"#/:<>?@[\\]^`{|}", "/", 631, 0,
|
||||
HTTP_URI_CODING_MOST },
|
||||
{ HTTP_URI_STATUS_UNKNOWN_SCHEME, "smb://server/Some%20Printer",
|
||||
"smb", "", "server", "/Some Printer", 0, 0,
|
||||
HTTP_URI_CODING_ALL },
|
||||
|
||||
/* Missing scheme */
|
||||
{ HTTP_URI_STATUS_MISSING_SCHEME, "/path/to/file/index.html",
|
||||
@@ -148,6 +151,9 @@ static uri_test_t uri_tests[] = /* URI test data */
|
||||
HTTP_URI_CODING_MOST },
|
||||
|
||||
/* Bad scheme */
|
||||
{ HTTP_URI_STATUS_BAD_SCHEME, "://server/ipp",
|
||||
"", "", "", "", 0, 0,
|
||||
HTTP_URI_CODING_MOST },
|
||||
{ HTTP_URI_STATUS_BAD_SCHEME, "bad_scheme://server/resource",
|
||||
"", "", "", "", 0, 0,
|
||||
HTTP_URI_CODING_MOST },
|
||||
@@ -180,6 +186,9 @@ static uri_test_t uri_tests[] = /* URI test data */
|
||||
HTTP_URI_CODING_MOST },
|
||||
|
||||
/* Bad resource */
|
||||
{ HTTP_URI_STATUS_BAD_RESOURCE, "mailto:\r\nbla",
|
||||
"mailto", "", "", "", 0, 0,
|
||||
HTTP_URI_CODING_MOST },
|
||||
{ HTTP_URI_STATUS_BAD_RESOURCE, "http://server/index.html%",
|
||||
"http", "", "server", "", 80, 0,
|
||||
HTTP_URI_CODING_MOST },
|
||||
|
||||
@@ -876,6 +876,13 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
host[256], /* Hostname */
|
||||
resource[256]; /* Resource path */
|
||||
int port; /* Port number */
|
||||
static const char * const pattrs[] =/* Requested printer attributes */
|
||||
{
|
||||
"job-template",
|
||||
"printer-defaults",
|
||||
"printer-description",
|
||||
"media-col-database"
|
||||
};
|
||||
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, argv[1], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
|
||||
{
|
||||
@@ -892,6 +899,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, argv[1]);
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs);
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
|
||||
if (_ppdCreateFromIPP(buffer, sizeof(buffer), response))
|
||||
|
||||
+23
-5
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Threading primitives for CUPS.
|
||||
*
|
||||
* Copyright 2009-2017 by Apple Inc.
|
||||
* Copyright © 2009-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -56,8 +56,16 @@ _cupsCondWait(_cups_cond_t *cond, /* I - Condition */
|
||||
{
|
||||
struct timespec abstime; /* Timeout */
|
||||
|
||||
abstime.tv_sec = (long)timeout;
|
||||
abstime.tv_nsec = (long)(1000000000 * (timeout - (long)timeout));
|
||||
clock_gettime(CLOCK_REALTIME, &abstime);
|
||||
|
||||
abstime.tv_sec += (long)timeout;
|
||||
abstime.tv_nsec += (long)(1000000000 * (timeout - (long)timeout));
|
||||
|
||||
while (abstime.tv_nsec >= 1000000000)
|
||||
{
|
||||
abstime.tv_nsec -= 1000000000;
|
||||
abstime.tv_sec ++;
|
||||
};
|
||||
|
||||
pthread_cond_timedwait(cond, mutex, &abstime);
|
||||
}
|
||||
@@ -513,8 +521,7 @@ _cupsThreadCreate(
|
||||
_cups_thread_func_t func, /* I - Entry point */
|
||||
void *arg) /* I - Entry point context */
|
||||
{
|
||||
fputs("DEBUG: CUPS was compiled without threading support, no thread "
|
||||
"created.\n", stderr);
|
||||
fputs("DEBUG: CUPS was compiled without threading support, no thread created.\n", stderr);
|
||||
|
||||
(void)func;
|
||||
(void)arg;
|
||||
@@ -523,6 +530,17 @@ _cupsThreadCreate(
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_cupsThreadDetach()' - Tell the OS that the thread is running independently.
|
||||
*/
|
||||
|
||||
void
|
||||
_cupsThreadDetach(_cups_thread_t thread)/* I - Thread ID */
|
||||
{
|
||||
(void)thread;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_cupsThreadWait()' - Wait for a thread to exit.
|
||||
*/
|
||||
|
||||
+62
-27
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* TLS support code for CUPS on macOS.
|
||||
*
|
||||
* 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
|
||||
@@ -53,7 +53,9 @@ static char *tls_keypath = NULL;
|
||||
/* Server cert keychain path */
|
||||
static _cups_mutex_t tls_mutex = _CUPS_MUTEX_INITIALIZER;
|
||||
/* Mutex for keychain/certs */
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
static int tls_options = -1,/* Options for TLS connections */
|
||||
tls_min_version = _HTTP_TLS_1_0,
|
||||
tls_max_version = _HTTP_TLS_MAX;
|
||||
|
||||
|
||||
/*
|
||||
@@ -807,7 +809,6 @@ httpCredentialsString(
|
||||
CFStringRef cf_name; /* CF common name string */
|
||||
char name[256]; /* Common name associated with cert */
|
||||
time_t expiration; /* Expiration date of cert */
|
||||
_cups_md5_state_t md5_state; /* MD5 state */
|
||||
unsigned char md5_digest[16]; /* MD5 result */
|
||||
|
||||
if ((cf_name = SecCertificateCopySubjectSummary(secCert)) != NULL)
|
||||
@@ -820,9 +821,7 @@ httpCredentialsString(
|
||||
|
||||
expiration = (time_t)(SecCertificateNotValidAfter(secCert) + kCFAbsoluteTimeIntervalSince1970);
|
||||
|
||||
_cupsMD5Init(&md5_state);
|
||||
_cupsMD5Append(&md5_state, first->data, (int)first->datalen);
|
||||
_cupsMD5Finish(&md5_state, md5_digest);
|
||||
cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest));
|
||||
|
||||
snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]);
|
||||
|
||||
@@ -1139,10 +1138,16 @@ _httpTLSRead(http_t *http, /* I - HTTP connection */
|
||||
*/
|
||||
|
||||
void
|
||||
_httpTLSSetOptions(int options) /* I - Options */
|
||||
_httpTLSSetOptions(int options, /* I - Options */
|
||||
int min_version, /* I - Minimum TLS version */
|
||||
int max_version) /* I - Maximum TLS version */
|
||||
{
|
||||
if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0)
|
||||
tls_options = options;
|
||||
{
|
||||
tls_options = options;
|
||||
tls_min_version = min_version;
|
||||
tls_max_version = max_version;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1174,7 +1179,7 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting defaults.");
|
||||
_cupsSetDefaults();
|
||||
DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
|
||||
DEBUG_printf(("4_httpTLSStart: tls_options=%x, tls_min_version=%d, tls_max_version=%d", tls_options, tls_min_version, tls_max_version));
|
||||
}
|
||||
|
||||
#ifdef HAVE_SECKEYCHAINOPEN
|
||||
@@ -1217,22 +1222,23 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
|
||||
if (!error)
|
||||
{
|
||||
SSLProtocol minProtocol;
|
||||
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
minProtocol = kTLSProtocol11;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
minProtocol = kSSLProtocol3;
|
||||
else
|
||||
minProtocol = kTLSProtocol1;
|
||||
|
||||
error = SSLSetProtocolVersionMin(http->tls, minProtocol);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin(%d), error=%d", minProtocol, (int)error));
|
||||
|
||||
if (!error && (tls_options & _HTTP_TLS_ONLY_TLS10))
|
||||
static const SSLProtocol protocols[] = /* Min/max protocol versions */
|
||||
{
|
||||
error = SSLSetProtocolVersionMax(http->tls, kTLSProtocol1);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMax(kTLSProtocol1), error=%d", (int)error));
|
||||
kSSLProtocol3,
|
||||
kTLSProtocol1,
|
||||
kTLSProtocol11,
|
||||
kTLSProtocol12,
|
||||
kTLSProtocol12, /* TODO: update to 1.3 when 1.3 is supported */
|
||||
kTLSProtocol12 /* TODO: update to 1.3 when 1.3 is supported */
|
||||
};
|
||||
|
||||
error = SSLSetProtocolVersionMin(http->tls, protocols[tls_min_version]);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin(%d), error=%d", protocols[tls_min_version], (int)error));
|
||||
|
||||
if (!error)
|
||||
{
|
||||
error = SSLSetProtocolVersionMax(http->tls, protocols[tls_max_version]);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMax(%d), error=%d", protocols[tls_max_version], (int)error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1532,7 +1538,28 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
|
||||
if (!error)
|
||||
{
|
||||
int done = 0; /* Are we done yet? */
|
||||
int done = 0; /* Are we done yet? */
|
||||
double old_timeout; /* Old timeout value */
|
||||
http_timeout_cb_t old_cb; /* Old timeout callback */
|
||||
void *old_data; /* Old timeout data */
|
||||
|
||||
/*
|
||||
* Enforce a minimum timeout of 10 seconds for the TLS handshake...
|
||||
*/
|
||||
|
||||
old_timeout = http->timeout_value;
|
||||
old_cb = http->timeout_cb;
|
||||
old_data = http->timeout_data;
|
||||
|
||||
if (!old_cb || old_timeout < 10.0)
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting timeout to 10 seconds.");
|
||||
httpSetTimeout(http, 10.0, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do the TLS handshake...
|
||||
*/
|
||||
|
||||
while (!error && !done)
|
||||
{
|
||||
@@ -1653,6 +1680,12 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Restore the previous timeout settings...
|
||||
*/
|
||||
|
||||
httpSetTimeout(http, old_timeout, old_cb, old_data);
|
||||
}
|
||||
|
||||
if (error)
|
||||
@@ -1864,7 +1897,9 @@ http_cdsa_copy_server(
|
||||
DEBUG_printf(("4http_cdsa_copy_server: Returning %p.", (void *)certificates));
|
||||
|
||||
return (certificates);
|
||||
|
||||
#else
|
||||
(void)common_name;
|
||||
|
||||
if (!tls_selfsigned)
|
||||
return (NULL);
|
||||
@@ -2085,7 +2120,7 @@ http_cdsa_read(
|
||||
|
||||
http = (http_t *)connection;
|
||||
|
||||
if (!http->blocking)
|
||||
if (!http->blocking || http->timeout_value > 0.0)
|
||||
{
|
||||
/*
|
||||
* Make sure we have data before we read...
|
||||
|
||||
+87
-17
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* TLS support code for CUPS using GNU TLS.
|
||||
*
|
||||
* 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
|
||||
@@ -35,7 +35,9 @@ static char *tls_keypath = NULL;
|
||||
/* Server cert keychain path */
|
||||
static _cups_mutex_t tls_mutex = _CUPS_MUTEX_INITIALIZER;
|
||||
/* Mutex for keychain/certs */
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
static int tls_options = -1,/* Options for TLS connections */
|
||||
tls_min_version = _HTTP_TLS_1_0,
|
||||
tls_max_version = _HTTP_TLS_MAX;
|
||||
|
||||
|
||||
/*
|
||||
@@ -397,7 +399,7 @@ httpCredentialsAreValidForName(
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
rserial_size = sizeof(rserial);
|
||||
if (!gnutls_x509_crl_get_crt_serial(tls_crl, (unsigned)i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, rserial_size))
|
||||
if (!gnutls_x509_crl_get_crt_serial(tls_crl, (unsigned)i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, (int)rserial_size))
|
||||
{
|
||||
result = 0;
|
||||
break;
|
||||
@@ -646,7 +648,6 @@ httpCredentialsString(
|
||||
char name[256]; /* Common name associated with cert */
|
||||
size_t namelen; /* Length of name */
|
||||
time_t expiration; /* Expiration date of cert */
|
||||
_cups_md5_state_t md5_state; /* MD5 state */
|
||||
unsigned char md5_digest[16]; /* MD5 result */
|
||||
|
||||
namelen = sizeof(name) - 1;
|
||||
@@ -657,9 +658,7 @@ httpCredentialsString(
|
||||
|
||||
expiration = gnutls_x509_crt_get_expiration_time(cert);
|
||||
|
||||
_cupsMD5Init(&md5_state);
|
||||
_cupsMD5Append(&md5_state, first->data, (int)first->datalen);
|
||||
_cupsMD5Finish(&md5_state, md5_digest);
|
||||
cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest));
|
||||
|
||||
snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]);
|
||||
|
||||
@@ -1094,7 +1093,7 @@ http_gnutls_read(
|
||||
|
||||
http = (http_t *)ptr;
|
||||
|
||||
if (!http->blocking)
|
||||
if (!http->blocking || http->timeout_value > 0.0)
|
||||
{
|
||||
/*
|
||||
* Make sure we have data before we read...
|
||||
@@ -1224,10 +1223,16 @@ _httpTLSSetCredentials(http_t *http) /* I - Connection to server */
|
||||
*/
|
||||
|
||||
void
|
||||
_httpTLSSetOptions(int options) /* I - Options */
|
||||
_httpTLSSetOptions(int options, /* I - Options */
|
||||
int min_version, /* I - Minimum TLS version */
|
||||
int max_version) /* I - Maximum TLS version */
|
||||
{
|
||||
if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0)
|
||||
tls_options = options;
|
||||
{
|
||||
tls_options = options;
|
||||
tls_min_version = min_version;
|
||||
tls_max_version = max_version;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1245,6 +1250,19 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
/* TLS credentials */
|
||||
char priority_string[2048];
|
||||
/* Priority string */
|
||||
int version; /* Current version */
|
||||
double old_timeout; /* Old timeout value */
|
||||
http_timeout_cb_t old_cb; /* Old timeout callback */
|
||||
void *old_data; /* Old timeout data */
|
||||
static const char * const versions[] =/* SSL/TLS versions */
|
||||
{
|
||||
"VERS-SSL3.0",
|
||||
"VERS-TLS1.0",
|
||||
"VERS-TLS1.1",
|
||||
"VERS-TLS1.2",
|
||||
"VERS-TLS1.3",
|
||||
"VERS-TLS-ALL"
|
||||
};
|
||||
|
||||
|
||||
DEBUG_printf(("3_httpTLSStart(http=%p)", http));
|
||||
@@ -1506,14 +1524,40 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
|
||||
strlcpy(priority_string, "NORMAL", sizeof(priority_string));
|
||||
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL:-VERS-TLS1.0:-VERS-SSL3.0", sizeof(priority_string));
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_max_version < _HTTP_TLS_MAX)
|
||||
{
|
||||
/*
|
||||
* Require specific TLS versions...
|
||||
*/
|
||||
|
||||
strlcat(priority_string, ":-VERS-TLS-ALL", sizeof(priority_string));
|
||||
for (version = tls_min_version; version <= tls_max_version; version ++)
|
||||
{
|
||||
strlcat(priority_string, ":+", sizeof(priority_string));
|
||||
strlcat(priority_string, versions[version], sizeof(priority_string));
|
||||
}
|
||||
}
|
||||
else if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
{
|
||||
/*
|
||||
* Allow all versions of TLS and SSL/3.0...
|
||||
*/
|
||||
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL:+VERS-SSL3.0", sizeof(priority_string));
|
||||
else if (tls_options & _HTTP_TLS_ONLY_TLS10)
|
||||
strlcat(priority_string, ":-VERS-TLS-ALL:-VERS-SSL3.0:+VERS-TLS1.0", sizeof(priority_string));
|
||||
}
|
||||
else
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL:-VERS-SSL3.0", sizeof(priority_string));
|
||||
{
|
||||
/*
|
||||
* Require a minimum version...
|
||||
*/
|
||||
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL", sizeof(priority_string));
|
||||
for (version = 0; version < tls_min_version; version ++)
|
||||
{
|
||||
strlcat(priority_string, ":-", sizeof(priority_string));
|
||||
strlcat(priority_string, versions[version], sizeof(priority_string));
|
||||
}
|
||||
}
|
||||
|
||||
if (tls_options & _HTTP_TLS_ALLOW_RC4)
|
||||
strlcat(priority_string, ":+ARCFOUR-128", sizeof(priority_string));
|
||||
@@ -1543,6 +1587,24 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
#endif /* HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION */
|
||||
gnutls_transport_set_push_function(http->tls, http_gnutls_write);
|
||||
|
||||
/*
|
||||
* Enforce a minimum timeout of 10 seconds for the TLS handshake...
|
||||
*/
|
||||
|
||||
old_timeout = http->timeout_value;
|
||||
old_cb = http->timeout_cb;
|
||||
old_data = http->timeout_data;
|
||||
|
||||
if (!old_cb || old_timeout < 10.0)
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting timeout to 10 seconds.");
|
||||
httpSetTimeout(http, 10.0, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do the TLS handshake...
|
||||
*/
|
||||
|
||||
while ((status = gnutls_handshake(http->tls)) != GNUTLS_E_SUCCESS)
|
||||
{
|
||||
DEBUG_printf(("5_httpStartTLS: gnutls_handshake returned %d (%s)",
|
||||
@@ -1560,10 +1622,18 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
free(credentials);
|
||||
http->tls = NULL;
|
||||
|
||||
httpSetTimeout(http, old_timeout, old_cb, old_data);
|
||||
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Restore the previous timeout settings...
|
||||
*/
|
||||
|
||||
httpSetTimeout(http, old_timeout, old_cb, old_data);
|
||||
|
||||
http->tls_credentials = credentials;
|
||||
|
||||
return (0);
|
||||
|
||||
+27
-18
@@ -2,7 +2,7 @@
|
||||
* TLS support for CUPS on Windows using the Security Support Provider
|
||||
* Interface (SSPI).
|
||||
*
|
||||
* Copyright 2010-2017 by Apple Inc.
|
||||
* Copyright 2010-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -52,7 +52,9 @@
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
static int tls_options = -1,/* Options for TLS connections */
|
||||
tls_min_version = _HTTP_TLS_1_0,
|
||||
tls_max_version = _HTTP_TLS_MAX;
|
||||
|
||||
|
||||
/*
|
||||
@@ -351,7 +353,6 @@ httpCredentialsString(
|
||||
SYSTEMTIME systime; /* System time */
|
||||
struct tm tm; /* UNIX date/time */
|
||||
time_t expiration; /* Expiration date of cert */
|
||||
_cups_md5_state_t md5_state; /* MD5 state */
|
||||
unsigned char md5_digest[16]; /* MD5 result */
|
||||
|
||||
FileTimeToSystemTime(&(cert->pCertInfo->NotAfter), &systime);
|
||||
@@ -378,9 +379,7 @@ httpCredentialsString(
|
||||
else
|
||||
strlcpy(cert_name, "unknown", sizeof(cert_name));
|
||||
|
||||
_cupsMD5Init(&md5_state);
|
||||
_cupsMD5Append(&md5_state, first->data, (int)first->datalen);
|
||||
_cupsMD5Finish(&md5_state, md5_digest);
|
||||
cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest));
|
||||
|
||||
snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", cert_name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]);
|
||||
|
||||
@@ -911,10 +910,16 @@ _httpTLSRead(http_t *http, /* I - HTTP connection */
|
||||
*/
|
||||
|
||||
void
|
||||
_httpTLSSetOptions(int options) /* I - Options */
|
||||
_httpTLSSetOptions(int options, /* I - Options */
|
||||
int min_version, /* I - Minimum TLS version */
|
||||
int max_version) /* I - Maximum TLS version */
|
||||
{
|
||||
if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0)
|
||||
tls_options = options;
|
||||
{
|
||||
tls_options = options;
|
||||
tls_min_version = min_version;
|
||||
tls_max_version = max_version;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1762,34 +1767,38 @@ http_sspi_find_credentials(
|
||||
#ifdef SP_PROT_TLS1_2_SERVER
|
||||
if (http->mode == _HTTP_MODE_SERVER)
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER | SP_PROT_SSL3_SERVER;
|
||||
else
|
||||
else if (tls_min_version == _HTTP_TLS_1_0)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER;
|
||||
else if (tls_min_version == _HTTP_TLS_1_1)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT | SP_PROT_SSL3_CLIENT;
|
||||
else
|
||||
else if (tls_min_version == _HTTP_TLS_1_0)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT;
|
||||
else if (tls_min_version == _HTTP_TLS_1_1)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT;
|
||||
}
|
||||
|
||||
#else
|
||||
if (http->mode == _HTTP_MODE_SERVER)
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_SERVER;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT;
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
* Include platform-specific TLS code...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
|
||||
+6
-3
@@ -54,6 +54,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
int af = AF_UNSPEC, /* Address family */
|
||||
tls_options = _HTTP_TLS_NONE,
|
||||
/* TLS options */
|
||||
tls_min_version = _HTTP_TLS_1_0,
|
||||
tls_max_version = _HTTP_TLS_MAX,
|
||||
verbose = 0; /* Verbosity */
|
||||
ipp_t *request, /* IPP Get-Printer-Attributes request */
|
||||
*response; /* IPP Get-Printer-Attributes response */
|
||||
@@ -88,11 +90,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
}
|
||||
else if (!strcmp(argv[i], "--no-tls10"))
|
||||
{
|
||||
tls_options |= _HTTP_TLS_DENY_TLS10;
|
||||
tls_min_version = _HTTP_TLS_1_1;
|
||||
}
|
||||
else if (!strcmp(argv[i], "--tls10"))
|
||||
{
|
||||
tls_options |= _HTTP_TLS_ONLY_TLS10;
|
||||
tls_min_version = _HTTP_TLS_1_0;
|
||||
tls_max_version = _HTTP_TLS_1_0;
|
||||
}
|
||||
else if (!strcmp(argv[i], "--rc4"))
|
||||
{
|
||||
@@ -148,7 +151,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
if (!port)
|
||||
port = 631;
|
||||
|
||||
_httpTLSSetOptions(tls_options);
|
||||
_httpTLSSetOptions(tls_options, tls_min_version, tls_max_version);
|
||||
|
||||
http = httpConnect2(server, port, NULL, af, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL);
|
||||
if (!http)
|
||||
|
||||
+38
-12
@@ -54,7 +54,9 @@
|
||||
typedef struct _cups_client_conf_s /**** client.conf config data ****/
|
||||
{
|
||||
#ifdef HAVE_SSL
|
||||
int ssl_options; /* SSLOptions values */
|
||||
int ssl_options, /* SSLOptions values */
|
||||
ssl_min_version,/* Minimum SSL/TLS version */
|
||||
ssl_max_version;/* Maximum SSL/TLS version */
|
||||
#endif /* HAVE_SSL */
|
||||
int trust_first, /* Trust on first use? */
|
||||
any_root, /* Allow any (e.g., self-signed) root */
|
||||
@@ -957,7 +959,7 @@ _cupsSetDefaults(void)
|
||||
cg->validate_certs = cc.validate_certs;
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
_httpTLSSetOptions(cc.ssl_options | _HTTP_TLS_SET_DEFAULT);
|
||||
_httpTLSSetOptions(cc.ssl_options | _HTTP_TLS_SET_DEFAULT, cc.ssl_min_version, cc.ssl_max_version);
|
||||
#endif /* HAVE_SSL */
|
||||
}
|
||||
|
||||
@@ -1164,11 +1166,15 @@ cups_init_client_conf(
|
||||
|
||||
memset(cc, 0, sizeof(_cups_client_conf_t));
|
||||
|
||||
cc->encryption = (http_encryption_t)-1;
|
||||
cc->trust_first = -1;
|
||||
cc->any_root = -1;
|
||||
cc->expired_certs = -1;
|
||||
cc->validate_certs = -1;
|
||||
#ifdef HAVE_SSL
|
||||
cc->ssl_min_version = _HTTP_TLS_1_0;
|
||||
cc->ssl_max_version = _HTTP_TLS_MAX;
|
||||
#endif /* HAVE_SSL */
|
||||
cc->encryption = (http_encryption_t)-1;
|
||||
cc->trust_first = -1;
|
||||
cc->any_root = -1;
|
||||
cc->expired_certs = -1;
|
||||
cc->validate_certs = -1;
|
||||
|
||||
/*
|
||||
* Load settings from the org.cups.PrintingPrefs plist (which trump
|
||||
@@ -1336,7 +1342,9 @@ cups_set_ssl_options(
|
||||
* SSLOptions [AllowRC4] [AllowSSL3] [AllowDH] [DenyTLS1.0] [None]
|
||||
*/
|
||||
|
||||
int options = _HTTP_TLS_NONE; /* SSL/TLS options */
|
||||
int options = _HTTP_TLS_NONE, /* SSL/TLS options */
|
||||
min_version = _HTTP_TLS_1_0, /* Minimum SSL/TLS version */
|
||||
max_version = _HTTP_TLS_MAX; /* Maximum SSL/TLS version */
|
||||
char temp[256], /* Copy of value */
|
||||
*start, /* Start of option */
|
||||
*end; /* End of option */
|
||||
@@ -1364,20 +1372,38 @@ cups_set_ssl_options(
|
||||
if (!_cups_strcasecmp(start, "AllowRC4"))
|
||||
options |= _HTTP_TLS_ALLOW_RC4;
|
||||
else if (!_cups_strcasecmp(start, "AllowSSL3"))
|
||||
options |= _HTTP_TLS_ALLOW_SSL3;
|
||||
min_version = _HTTP_TLS_SSL3;
|
||||
else if (!_cups_strcasecmp(start, "AllowDH"))
|
||||
options |= _HTTP_TLS_ALLOW_DH;
|
||||
else if (!_cups_strcasecmp(start, "DenyCBC"))
|
||||
options |= _HTTP_TLS_DENY_CBC;
|
||||
else if (!_cups_strcasecmp(start, "DenyTLS1.0"))
|
||||
options |= _HTTP_TLS_DENY_TLS10;
|
||||
min_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.0"))
|
||||
max_version = _HTTP_TLS_1_0;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.1"))
|
||||
max_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.2"))
|
||||
max_version = _HTTP_TLS_1_2;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.3"))
|
||||
max_version = _HTTP_TLS_1_3;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.0"))
|
||||
min_version = _HTTP_TLS_1_0;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.1"))
|
||||
min_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.2"))
|
||||
min_version = _HTTP_TLS_1_2;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.3"))
|
||||
min_version = _HTTP_TLS_1_3;
|
||||
else if (!_cups_strcasecmp(start, "None"))
|
||||
options = _HTTP_TLS_NONE;
|
||||
}
|
||||
|
||||
cc->ssl_options = options;
|
||||
cc->ssl_options = options;
|
||||
cc->ssl_max_version = max_version;
|
||||
cc->ssl_min_version = min_version;
|
||||
|
||||
DEBUG_printf(("4cups_set_ssl_options(cc=%p, value=\"%s\") options=%x", (void *)cc, value, options));
|
||||
DEBUG_printf(("4cups_set_ssl_options(cc=%p, value=\"%s\") options=%x, min_version=%d, max_version=%d", (void *)cc, value, options, min_version, max_version));
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
|
||||
+8
-48
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Printing utilities for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -27,19 +27,6 @@
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
@@ -174,7 +161,7 @@ cupsCreateJob(
|
||||
{
|
||||
int job_id = 0; /* job-id value */
|
||||
ipp_status_t status; /* Create-Job status */
|
||||
_cups_createdata_t data; /* Enumeration data */
|
||||
cups_dest_t *dest; /* Destination */
|
||||
cups_dinfo_t *info; /* Destination information */
|
||||
|
||||
|
||||
@@ -194,12 +181,7 @@ cupsCreateJob(
|
||||
* Lookup the destination...
|
||||
*/
|
||||
|
||||
data.name = name;
|
||||
data.dest = NULL;
|
||||
|
||||
cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_create_cb, &data);
|
||||
|
||||
if (!data.dest)
|
||||
if ((dest = cupsGetNamedDest(http, name, NULL)) == NULL)
|
||||
{
|
||||
DEBUG_puts("1cupsCreateJob: Destination not found.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
|
||||
@@ -211,18 +193,18 @@ cupsCreateJob(
|
||||
*/
|
||||
|
||||
DEBUG_puts("1cupsCreateJob: Querying destination info.");
|
||||
if ((info = cupsCopyDestInfo(http, data.dest)) == NULL)
|
||||
if ((info = cupsCopyDestInfo(http, dest)) == NULL)
|
||||
{
|
||||
DEBUG_puts("1cupsCreateJob: Query failed.");
|
||||
cupsFreeDests(1, data.dest);
|
||||
cupsFreeDests(1, dest);
|
||||
return (0);
|
||||
}
|
||||
|
||||
status = cupsCreateDestJob(http, data.dest, info, &job_id, title, num_options, options);
|
||||
status = cupsCreateDestJob(http, dest, info, &job_id, title, num_options, options);
|
||||
DEBUG_printf(("1cupsCreateJob: cupsCreateDestJob returned %04x (%s)", status, ippErrorString(status)));
|
||||
|
||||
cupsFreeDestInfo(info);
|
||||
cupsFreeDests(1, data.dest);
|
||||
cupsFreeDests(1, dest);
|
||||
|
||||
/*
|
||||
* Return the job...
|
||||
@@ -974,25 +956,3 @@ cupsStartDocument(
|
||||
return (status);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_create_cb()' - Find the destination for printing.
|
||||
*/
|
||||
|
||||
static int /* O - 0 on match */
|
||||
cups_create_cb(
|
||||
_cups_createdata_t *data, /* I - Data from cupsCreateJob call */
|
||||
unsigned flags, /* I - Enumeration flags */
|
||||
cups_dest_t *dest) /* I - Destination */
|
||||
{
|
||||
DEBUG_printf(("2cups_create_cb(data=%p(%s), flags=%08x, dest=%p(%s))", (void *)data, data->name, flags, (void *)dest, dest->name));
|
||||
|
||||
(void)flags;
|
||||
|
||||
if (dest->instance || strcasecmp(data->name, dest->name))
|
||||
return (1);
|
||||
|
||||
cupsCopyDest(dest, 0, &data->dest);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
+3
-1
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* API versioning definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -71,6 +71,7 @@
|
||||
# define _CUPS_API_2_0 AVAILABLE_MAC_OS_X_VERSION_10_10_AND_LATER
|
||||
# define _CUPS_API_2_2 AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER
|
||||
# define _CUPS_API_2_2_4 AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
|
||||
# define _CUPS_API_2_2_7
|
||||
# else
|
||||
# define _CUPS_API_1_1_19
|
||||
# define _CUPS_API_1_1_20
|
||||
@@ -84,6 +85,7 @@
|
||||
# define _CUPS_API_2_0
|
||||
# define _CUPS_API_2_2
|
||||
# define _CUPS_API_2_2_4
|
||||
# define _CUPS_API_2_2_7
|
||||
# endif /* __APPLE__ && !_CUPS_SOURCE */
|
||||
|
||||
/*
|
||||
|
||||
Arquivo binário não exibido.
@@ -6125,12 +6125,12 @@ are server-oriented...</p>
|
||||
<tr><th>HTTP_STATUS_ERROR </th> <td class="description">An error response from httpXxxx()</td></tr>
|
||||
<tr><th>HTTP_STATUS_EXPECTATION_FAILED </th> <td class="description">The expectation given in an Expect header field was not met</td></tr>
|
||||
<tr><th>HTTP_STATUS_FORBIDDEN </th> <td class="description">Forbidden to access this URI</td></tr>
|
||||
<tr><th>HTTP_STATUS_FOUND </th> <td class="description">Document was found at a different URI</td></tr>
|
||||
<tr><th>HTTP_STATUS_GATEWAY_TIMEOUT </th> <td class="description">Gateway connection timed out</td></tr>
|
||||
<tr><th>HTTP_STATUS_GONE </th> <td class="description">Server has gone away</td></tr>
|
||||
<tr><th>HTTP_STATUS_LENGTH_REQUIRED </th> <td class="description">A content length or encoding is required</td></tr>
|
||||
<tr><th>HTTP_STATUS_METHOD_NOT_ALLOWED </th> <td class="description">Method is not allowed</td></tr>
|
||||
<tr><th>HTTP_STATUS_MOVED_PERMANENTLY </th> <td class="description">Document has moved permanently</td></tr>
|
||||
<tr><th>HTTP_STATUS_MOVED_TEMPORARILY </th> <td class="description">Document has moved temporarily</td></tr>
|
||||
<tr><th>HTTP_STATUS_MULTIPLE_CHOICES </th> <td class="description">Multiple files match request</td></tr>
|
||||
<tr><th>HTTP_STATUS_NONE <span class="info"> CUPS 1.7/macOS 10.9 </span></th> <td class="description">No Expect value </td></tr>
|
||||
<tr><th>HTTP_STATUS_NOT_ACCEPTABLE </th> <td class="description">Not Acceptable</td></tr>
|
||||
@@ -6149,10 +6149,11 @@ are server-oriented...</p>
|
||||
<tr><th>HTTP_STATUS_REQUEST_TIMEOUT </th> <td class="description">Request timed out</td></tr>
|
||||
<tr><th>HTTP_STATUS_REQUEST_TOO_LARGE </th> <td class="description">Request entity too large</td></tr>
|
||||
<tr><th>HTTP_STATUS_RESET_CONTENT </th> <td class="description">Content was reset/recreated</td></tr>
|
||||
<tr><th>HTTP_STATUS_SEE_OTHER </th> <td class="description">See this other link...</td></tr>
|
||||
<tr><th>HTTP_STATUS_SEE_OTHER </th> <td class="description">See this other link</td></tr>
|
||||
<tr><th>HTTP_STATUS_SERVER_ERROR </th> <td class="description">Internal server error</td></tr>
|
||||
<tr><th>HTTP_STATUS_SERVICE_UNAVAILABLE </th> <td class="description">Service is unavailable</td></tr>
|
||||
<tr><th>HTTP_STATUS_SWITCHING_PROTOCOLS </th> <td class="description">HTTP upgrade to TLS/SSL</td></tr>
|
||||
<tr><th>HTTP_STATUS_TEMPORARY_REDIRECT </th> <td class="description">Temporary redirection</td></tr>
|
||||
<tr><th>HTTP_STATUS_UNAUTHORIZED </th> <td class="description">Unauthorized to access host</td></tr>
|
||||
<tr><th>HTTP_STATUS_UNSUPPORTED_MEDIATYPE </th> <td class="description">The requested media type is unsupported</td></tr>
|
||||
<tr><th>HTTP_STATUS_UPGRADE_REQUIRED </th> <td class="description">Upgrade to SSL/TLS required</td></tr>
|
||||
|
||||
@@ -44,8 +44,10 @@ CUPS adds the remote hostname ("name@server.example.com") for you. The default n
|
||||
<dd style="margin-left: 5.0em"><dt><b>SSLOptions None</b>
|
||||
<dd style="margin-left: 5.0em">Sets encryption options (only in /etc/cups/client.conf).
|
||||
By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites.
|
||||
The <i>AllowDH</i> option enables cipher suites using plain Diffie-Hellman key negotiation.
|
||||
The <i>AllowRC4</i> option enables the 128-bit RC4 cipher suites, which are required for some older clients that do not implement newer ones.
|
||||
Security is reduced when <i>Allow</i> options are used.
|
||||
Security is enhanced when <i>Deny</i> options are used.
|
||||
The <i>AllowDH</i> option enables cipher suites using plain Diffie-Hellman key negotiation (not supported on systems using GNU TLS).
|
||||
The <i>AllowRC4</i> option enables the 128-bit RC4 cipher suites, which are required for some older clients.
|
||||
The <i>AllowSSL3</i> option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0.
|
||||
The <i>DenyCBC</i> option disables all CBC cipher suites.
|
||||
The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
|
||||
|
||||
@@ -95,10 +95,6 @@ The <i>kind</i> strings are:
|
||||
<dt><b>permissions</b>
|
||||
<dd style="margin-left: 5.0em">Bad startup file permissions are fatal, for example shared TLS certificate and key files with world-read permissions.
|
||||
</div>
|
||||
<dt><a name="FileDevice"></a><b>FileDevice Yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>FileDevice No</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether the file pseudo-device can be used for new printer queues.
|
||||
The URI "file:///dev/null" is always allowed.
|
||||
<dt><a name="Group"></a><b>Group </b><i>group-name-or-number</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the group name or ID that will be used when executing external programs.
|
||||
The default group is operating system specific but is usually "lp" or "nobody".
|
||||
@@ -162,6 +158,13 @@ The default is "lp".
|
||||
<h3><a name="DEPRECATED_DIRECTIVES">Deprecated Directives</a></h3>
|
||||
The following directives are deprecated and will be removed from a future version of CUPS:
|
||||
<dl class="man">
|
||||
<dt><a name="FileDevice"></a><b>FileDevice Yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>FileDevice No</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether the file pseudo-device can be used for new printer queues.
|
||||
The URI "file:///dev/null" is always allowed.
|
||||
File devices cannot be used with "raw" print queues - a PPD file is required.
|
||||
The specified file is overwritten for every print job.
|
||||
Writing to directories is not supported.
|
||||
<dt><a name="FontPath"></a><b>FontPath </b><i>directory[:...:directoryN]</i>
|
||||
<dd style="margin-left: 5.0em">Specifies a colon separated list of directories where fonts can be found.
|
||||
On Linux the
|
||||
|
||||
@@ -88,10 +88,10 @@ A value of 0 causes the update to happen as soon as possible, typically within a
|
||||
The default value is "30".
|
||||
<dt><a name="ErrorPolicy"></a><b>ErrorPolicy abort-job</b>
|
||||
<dd style="margin-left: 5.0em">Specifies that a failed print job should be aborted (discarded) unless otherwise specified for the printer.
|
||||
<dt><b>ErrorPolicy retry-current-job</b>
|
||||
<dd style="margin-left: 5.0em">Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
|
||||
<dt><b>ErrorPolicy retry-job</b>
|
||||
<dd style="margin-left: 5.0em">Specifies that a failed print job should be retried at a later time unless otherwise specified for the printer.
|
||||
<dt><b>ErrorPolicy retry-this-job</b>
|
||||
<dd style="margin-left: 5.0em">Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
|
||||
<dt><b>ErrorPolicy stop-printer</b>
|
||||
<dd style="margin-left: 5.0em">Specifies that a failed print job should stop the printer unless otherwise specified for the printer. The 'stop-printer' error policy is the default.
|
||||
<dt><a name="FilterLimit"></a><b>FilterLimit </b><i>limit</i>
|
||||
@@ -283,8 +283,10 @@ The default is "Minimal".
|
||||
<dd style="margin-left: 5.0em"><dt><b>SSLOptions None</b>
|
||||
<dd style="margin-left: 5.0em">Sets encryption options.
|
||||
By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites.
|
||||
The <i>AllowDH</i> option enables cipher suites using plain Diffie-Hellman key negotiation.
|
||||
The <i>AllowRC4</i> option enables the 128-bit RC4 cipher suites, which are required for some older clients that do not implement newer ones.
|
||||
Security is reduced when <i>Allow</i> options are used.
|
||||
Security is enhanced when <i>Deny</i> options are used.
|
||||
The <i>AllowDH</i> option enables cipher suites using plain Diffie-Hellman key negotiation (not supported on systems using GNU TLS).
|
||||
The <i>AllowRC4</i> option enables the 128-bit RC4 cipher suites, which are required for some older clients.
|
||||
The <i>AllowSSL3</i> option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0.
|
||||
The <i>DenyCBC</i> option disables all CBC cipher suites.
|
||||
The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
|
||||
@@ -603,7 +605,7 @@ Require authentication for accesses from outside the 10. network:
|
||||
<a href="man-subscriptions.conf.html?TOPIC=Man+Pages"><b>subscriptions.conf</b>(5),</a>
|
||||
CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2007-2017 by Apple Inc.
|
||||
Copyright © 2007-2018 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -70,6 +70,9 @@ The following expressions are supported:
|
||||
The result is true if the URI is accessible, false otherwise.
|
||||
<dt><b>--local</b>
|
||||
<dd style="margin-left: 5.0em">True if the service is local to this computer.
|
||||
<dt><b>-N </b><i>name</i>
|
||||
<dd style="margin-left: 5.0em"><dt><b>--literal-name </b><i>name</i>
|
||||
<dd style="margin-left: 5.0em">True if the service instance name matches the given name.
|
||||
<dt><b>-n </b><i>regex</i>
|
||||
<dd style="margin-left: 5.0em"><dt><b>--name </b><i>regex</i>
|
||||
<dd style="margin-left: 5.0em">True if the service instance name matches the given regular expression.
|
||||
@@ -198,7 +201,7 @@ Similarly, to send a PostScript test page to every PostScript printer, run:
|
||||
<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
|
||||
<a href="man-ipptool.html?TOPIC=Man+Pages"><b>ipptool</b>(1)</a>
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2013-2015 by Apple Inc.
|
||||
Copyright © 2013-2018 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -80,6 +80,7 @@ Use the <i>-m</i> option with the
|
||||
<a href="man-lpinfo.html?TOPIC=Man+Pages"><b>lpinfo</b>(8)</a>
|
||||
command to get a list of supported models.
|
||||
The model "raw" clears any existing PPD file and the model "everywhere" queries the printer referred to by the specified IPP <i>device-uri</i>.
|
||||
Note: The "raw" model is deprecated and will not be supported in a future version of CUPS.
|
||||
<dt><b>-o cupsIPPSupplies=true</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>-o cupsIPPSupplies=false</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether IPP supply level values should be reported.
|
||||
|
||||
@@ -14,9 +14,6 @@ lpoptions - display or set printer options and defaults
|
||||
[
|
||||
<b>-E</b>
|
||||
] [
|
||||
<b>-U</b>
|
||||
<i>username</i>
|
||||
] [
|
||||
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
|
||||
]
|
||||
<b>-d </b><i>destination</i>[<b>/</b><i>instance</i>]
|
||||
@@ -28,9 +25,6 @@ lpoptions - display or set printer options and defaults
|
||||
[
|
||||
<b>-E</b>
|
||||
] [
|
||||
<b>-U</b>
|
||||
<i>username</i>
|
||||
] [
|
||||
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
|
||||
] [
|
||||
<b>-p </b><i>destination</i>[<b>/</b><i>instance</i>]
|
||||
@@ -41,9 +35,6 @@ lpoptions - display or set printer options and defaults
|
||||
[
|
||||
<b>-E</b>
|
||||
] [
|
||||
<b>-U</b>
|
||||
<i>username</i>
|
||||
] [
|
||||
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
|
||||
] [
|
||||
<b>-p </b><i>destination</i>[<b>/</b><i>instance</i>]
|
||||
@@ -55,9 +46,6 @@ lpoptions - display or set printer options and defaults
|
||||
[
|
||||
<b>-E</b>
|
||||
] [
|
||||
<b>-U</b>
|
||||
<i>username</i>
|
||||
] [
|
||||
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
|
||||
]
|
||||
<b>-x </b><i>destination</i>[<b>/</b><i>instance</i>]
|
||||
@@ -78,8 +66,6 @@ Otherwise, the per-user defaults are managed in the <i>~/.cups/lpoptions</i> fil
|
||||
<dl class="man">
|
||||
<dt><b>-E</b>
|
||||
<dd style="margin-left: 5.0em">Enables encryption when communicating with the CUPS server.
|
||||
<dt><b>-U </b><i>username</i>
|
||||
<dd style="margin-left: 5.0em">Uses an alternate username.
|
||||
<dt><b>-d </b><i>destination</i>[<b>/</b><i>instance</i>]
|
||||
<dd style="margin-left: 5.0em">Sets the user default printer to <i>destination</i>.
|
||||
If <i>instance</i> is supplied then that particular instance is used.
|
||||
@@ -119,7 +105,7 @@ The <b>lpoptions</b> command is unique to CUPS.
|
||||
<a href="man-lprm.html?TOPIC=Man+Pages"><b>lprm</b>(1),</a>
|
||||
CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2007-2017 by Apple Inc.
|
||||
Copyright © 2007-2018 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -546,24 +546,5 @@ lpr -o mirror filename
|
||||
<P>This is typically used when printing on T-shirt transfer
|
||||
media or sometimes on transparencies.</P>
|
||||
|
||||
<H3><A NAME="RAW">Raw or Unfiltered Output</A></H3>
|
||||
|
||||
<P>The <CODE>-o raw</CODE> option allows you to send files
|
||||
directly to a printer without filtering. This is sometimes
|
||||
required when printing from applications that provide their own
|
||||
"printer drivers" for your printer:</P>
|
||||
|
||||
<PRE CLASS="command">
|
||||
lp -o raw filename
|
||||
lpr -o raw filename
|
||||
</PRE>
|
||||
|
||||
<P>The <CODE>-l</CODE> option can also be used with the
|
||||
<B>lpr</B> command to send files directly to a printer:</P>
|
||||
|
||||
<PRE CLASS="command">
|
||||
lpr -l filename
|
||||
</PRE>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
||||
@@ -99,7 +99,7 @@ each remote queue by hand using the <a href="man-lpadmin.html">lpadmin(8)</a>
|
||||
command:</p>
|
||||
|
||||
<pre class='command'>
|
||||
lpadmin -p <em>printer</em> -E -v ipp://<em>server</em>/printers/<em>printer</em>
|
||||
lpadmin -p <em>printer</em> -E -v ipp://<em>server</em>/printers/<em>printer</em> -m everywhere
|
||||
</pre>
|
||||
|
||||
<p>The <var>printer</var> name is the name of the printer on the server machine.
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<!--
|
||||
CUPS command file format specification for CUPS.
|
||||
|
||||
Copyright 2007-2011 by Apple Inc.
|
||||
Copyright 2007-2018 by Apple Inc.
|
||||
Copyright 1997-2006 by Easy Software Products.
|
||||
|
||||
These coded instructions, statements, and computer programs are the
|
||||
@@ -43,7 +43,7 @@ files by checking the <code>printer-type</code> attribute for the
|
||||
commands separated by spaces, for example:</p>
|
||||
|
||||
<pre class='command'>
|
||||
*cupsCommand: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"
|
||||
*cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"
|
||||
</pre>
|
||||
|
||||
<p>If no <code>cupsCommands</code> keyword is provided, the command filter
|
||||
|
||||
@@ -1758,7 +1758,20 @@ http://www.vendor.com/help"
|
||||
|
||||
<p class='summary'>*cupsJobPassword: "format"</p>
|
||||
|
||||
<p>This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.</p>
|
||||
<p>This keyword defines the format of the "job-password" IPP attribute, if supported by the printer. The following format characters are supported:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>1</code>: US ASCII digits.</li>
|
||||
<li><code>A</code>: US ASCII letters.</li>
|
||||
<li><code>C</code>: US ASCII letters, numbers, and punctuation.</li>
|
||||
<li><code>.</code>: Any US ASCII printable character (0x20 to 0x7e).</li>
|
||||
<li><code>N</code>: Any Unicode digit character.</li>
|
||||
<li><code>U</code>: Any Unicode letter character.</li>
|
||||
<li><code>*</code>: Any Unicode (utf-8) character.</li>
|
||||
</ul>
|
||||
|
||||
<p>The format characters are repeated to indicate the length of the
|
||||
password string. For example, "1111" indicated a 4-digit US ASCII PIN code.</p>
|
||||
|
||||
<p>Example:</p>
|
||||
|
||||
@@ -2042,7 +2055,7 @@ PPD file extensions was used. Currently it must be the string
|
||||
|
||||
<h2 class='title'><a name='MACOSX'>macOS Attributes</a></h2>
|
||||
|
||||
<h3><span class='info'>macOS 10.3</span><a name='APDialogExtension'>APDialogExtension</a></h3>
|
||||
<h3><span class='info'>Deprecated</span><a name='APDialogExtension'>APDialogExtension</a></h3>
|
||||
|
||||
<p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
|
||||
|
||||
@@ -2054,9 +2067,13 @@ plug-ins.</p>
|
||||
|
||||
<blockquote><b>Note:</b>
|
||||
|
||||
<p>Starting with macOS 10.5, each plug-in must be compiled "4-way fat"
|
||||
(32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled
|
||||
in order to be usable with all applications.</p>
|
||||
<p>Since 2010, AirPrint has enabled the printing of full quality photos and
|
||||
documents from the Mac without requiring driver software. Starting with macOS
|
||||
10.12, system level security features prevent print dialog plug-ins from being
|
||||
loaded into applications that have enabled the library validation security
|
||||
feature. As of macOS 10.14 the <code>APDialogExtension</code> attribute used to
|
||||
create macOS print drivers is deprecated. All new printer models should support
|
||||
AirPrint moving forward.</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* PostScript filter for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1993-2007 by Easy Software Products.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1993-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -2235,7 +2235,7 @@ parse_text(const char *start, /* I - Start of text value */
|
||||
bufptr = buffer;
|
||||
bufend = buffer + bufsize - 1;
|
||||
|
||||
while (bufptr < bufend)
|
||||
while (*start && bufptr < bufend)
|
||||
{
|
||||
if (isspace(*start & 255) && !level)
|
||||
break;
|
||||
|
||||
+229
-39
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Raster file routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* This file is part of the CUPS Imaging library.
|
||||
@@ -50,11 +50,96 @@ struct _cups_raster_s /**** Raster stream data ****/
|
||||
*bufend; /* End of current (read) buffer */
|
||||
size_t bufsize; /* Buffer size */
|
||||
#ifdef DEBUG
|
||||
size_t iocount; /* Number of bytes read/written */
|
||||
size_t iostart, /* Start of read/write buffer */
|
||||
iocount; /* Number of bytes read/written */
|
||||
#endif /* DEBUG */
|
||||
unsigned apple_page_count;/* Apple raster page count */
|
||||
};
|
||||
|
||||
typedef void (*_cups_copyfunc_t)(void *dst, const void *src, size_t bytes);
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
static const char * const cups_color_spaces[] =
|
||||
{ /* Color spaces */
|
||||
"CUPS_CSPACE_W",
|
||||
"CUPS_CSPACE_RGB",
|
||||
"CUPS_CSPACE_RGBA",
|
||||
"CUPS_CSPACE_K",
|
||||
"CUPS_CSPACE_CMY",
|
||||
"CUPS_CSPACE_YMC",
|
||||
"CUPS_CSPACE_CMYK",
|
||||
"CUPS_CSPACE_YMCK",
|
||||
"CUPS_CSPACE_KCMY",
|
||||
"CUPS_CSPACE_KCMYcm",
|
||||
"CUPS_CSPACE_GMCK",
|
||||
"CUPS_CSPACE_GMCS",
|
||||
"CUPS_CSPACE_WHITE",
|
||||
"CUPS_CSPACE_GOLD",
|
||||
"CUPS_CSPACE_SILVER",
|
||||
"CUPS_CSPACE_CIEXYZ",
|
||||
"CUPS_CSPACE_CIELab",
|
||||
"CUPS_CSPACE_RGBW",
|
||||
"CUPS_CSPACE_SW",
|
||||
"CUPS_CSPACE_SRGB",
|
||||
"CUPS_CSPACE_ADOBERGB",
|
||||
"21",
|
||||
"22",
|
||||
"23",
|
||||
"24",
|
||||
"25",
|
||||
"26",
|
||||
"27",
|
||||
"28",
|
||||
"29",
|
||||
"30",
|
||||
"31",
|
||||
"CUPS_CSPACE_ICC1",
|
||||
"CUPS_CSPACE_ICC2",
|
||||
"CUPS_CSPACE_ICC3",
|
||||
"CUPS_CSPACE_ICC4",
|
||||
"CUPS_CSPACE_ICC5",
|
||||
"CUPS_CSPACE_ICC6",
|
||||
"CUPS_CSPACE_ICC7",
|
||||
"CUPS_CSPACE_ICC8",
|
||||
"CUPS_CSPACE_ICC9",
|
||||
"CUPS_CSPACE_ICCA",
|
||||
"CUPS_CSPACE_ICCB",
|
||||
"CUPS_CSPACE_ICCC",
|
||||
"CUPS_CSPACE_ICCD",
|
||||
"CUPS_CSPACE_ICCE",
|
||||
"CUPS_CSPACE_ICCF",
|
||||
"47",
|
||||
"CUPS_CSPACE_DEVICE1",
|
||||
"CUPS_CSPACE_DEVICE2",
|
||||
"CUPS_CSPACE_DEVICE3",
|
||||
"CUPS_CSPACE_DEVICE4",
|
||||
"CUPS_CSPACE_DEVICE5",
|
||||
"CUPS_CSPACE_DEVICE6",
|
||||
"CUPS_CSPACE_DEVICE7",
|
||||
"CUPS_CSPACE_DEVICE8",
|
||||
"CUPS_CSPACE_DEVICE9",
|
||||
"CUPS_CSPACE_DEVICEA",
|
||||
"CUPS_CSPACE_DEVICEB",
|
||||
"CUPS_CSPACE_DEVICEC",
|
||||
"CUPS_CSPACE_DEVICED",
|
||||
"CUPS_CSPACE_DEVICEE",
|
||||
"CUPS_CSPACE_DEVICEF"
|
||||
};
|
||||
static const char * const cups_modes[] =
|
||||
{ /* Open modes */
|
||||
"CUPS_RASTER_READ",
|
||||
"CUPS_RASTER_WRITE",
|
||||
"CUPS_RASTER_WRITE_COMPRESSED",
|
||||
"CUPS_RASTER_WRITE_PWG",
|
||||
"CUPS_RASTER_WRITE_APPLE"
|
||||
};
|
||||
#endif /* DEBUG */
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
@@ -62,13 +147,12 @@ struct _cups_raster_s /**** Raster stream data ****/
|
||||
|
||||
static ssize_t cups_raster_io(cups_raster_t *r, unsigned char *buf, size_t bytes);
|
||||
static unsigned cups_raster_read_header(cups_raster_t *r);
|
||||
static ssize_t cups_raster_read(cups_raster_t *r, unsigned char *buf,
|
||||
size_t bytes);
|
||||
static ssize_t cups_raster_read(cups_raster_t *r, unsigned char *buf, size_t bytes);
|
||||
static int cups_raster_update(cups_raster_t *r);
|
||||
static ssize_t cups_raster_write(cups_raster_t *r,
|
||||
const unsigned char *pixels);
|
||||
static ssize_t cups_raster_write(cups_raster_t *r, const unsigned char *pixels);
|
||||
static ssize_t cups_read_fd(void *ctx, unsigned char *buf, size_t bytes);
|
||||
static void cups_swap(unsigned char *buf, size_t bytes);
|
||||
static void cups_swap_copy(unsigned char *dst, const unsigned char *src, size_t bytes);
|
||||
static ssize_t cups_write_fd(void *ctx, unsigned char *buf, size_t bytes);
|
||||
|
||||
|
||||
@@ -356,6 +440,8 @@ cupsRasterOpen(int fd, /* I - File descriptor */
|
||||
@code CUPS_RASTER_WRITE_COMPRESSED@,
|
||||
or @code CUPS_RASTER_WRITE_PWG@ */
|
||||
{
|
||||
DEBUG_printf(("cupsRasterOpen(fd=%d, mode=%s)", fd, cups_modes[mode]));
|
||||
|
||||
if (mode == CUPS_RASTER_READ)
|
||||
return (cupsRasterOpenIO(cups_read_fd, (void *)((intptr_t)fd), mode));
|
||||
else
|
||||
@@ -387,12 +473,15 @@ cupsRasterOpenIO(
|
||||
cups_raster_t *r; /* New stream */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsRasterOpenIO(iocb=%p, ctx=%p, mode=%s)", (void *)iocb, ctx, cups_modes[mode]));
|
||||
|
||||
_cupsRasterClearError();
|
||||
|
||||
if ((r = calloc(sizeof(cups_raster_t), 1)) == NULL)
|
||||
{
|
||||
_cupsRasterAddError("Unable to allocate memory for raster stream: %s\n",
|
||||
strerror(errno));
|
||||
DEBUG_puts("1cupsRasterOpenIO: Returning NULL.");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -412,6 +501,7 @@ cupsRasterOpenIO(
|
||||
_cupsRasterAddError("Unable to read header from raster stream: %s\n",
|
||||
strerror(errno));
|
||||
free(r);
|
||||
DEBUG_puts("1cupsRasterOpenIO: Unable to read header, returning NULL.");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -426,6 +516,7 @@ cupsRasterOpenIO(
|
||||
{
|
||||
_cupsRasterAddError("Unknown raster format %08x!\n", r->sync);
|
||||
free(r);
|
||||
DEBUG_puts("1cupsRasterOpenIO: Unknown format, returning NULL.");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -435,6 +526,8 @@ cupsRasterOpenIO(
|
||||
r->sync == CUPS_RASTER_REVSYNCapple)
|
||||
r->compressed = 1;
|
||||
|
||||
DEBUG_printf(("1cupsRasterOpenIO: sync=%08x", r->sync));
|
||||
|
||||
if (r->sync == CUPS_RASTER_REVSYNC ||
|
||||
r->sync == CUPS_RASTER_REVSYNCv1 ||
|
||||
r->sync == CUPS_RASTER_REVSYNCv2 ||
|
||||
@@ -452,12 +545,14 @@ cupsRasterOpenIO(
|
||||
_cupsRasterAddError("Unable to read header from raster stream: %s\n",
|
||||
strerror(errno));
|
||||
free(r);
|
||||
DEBUG_puts("1cupsRasterOpenIO: Unable to read header, returning NULL.");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cupsRasterOpenIO: r->swapped=%d, r->sync=%08x\n", r->swapped, r->sync));
|
||||
#ifdef DEBUG
|
||||
r->iostart = r->iocount;
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -496,10 +591,13 @@ cupsRasterOpenIO(
|
||||
_cupsRasterAddError("Unable to write raster stream header: %s\n",
|
||||
strerror(errno));
|
||||
free(r);
|
||||
DEBUG_puts("1cupsRasterOpenIO: Unable to write header, returning NULL.");
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cupsRasterOpenIO: compressed=%d, swapped=%d, returning %p", r->compressed, r->swapped, (void *)r));
|
||||
|
||||
return (r);
|
||||
}
|
||||
|
||||
@@ -522,6 +620,8 @@ cupsRasterReadHeader(
|
||||
cups_raster_t *r, /* I - Raster stream */
|
||||
cups_page_header_t *h) /* I - Pointer to header data */
|
||||
{
|
||||
DEBUG_printf(("cupsRasterReadHeader(r=%p, h=%p)", (void *)r, (void *)h));
|
||||
|
||||
/*
|
||||
* Get the raster header...
|
||||
*/
|
||||
@@ -529,6 +629,7 @@ cupsRasterReadHeader(
|
||||
if (!cups_raster_read_header(r))
|
||||
{
|
||||
memset(h, 0, sizeof(cups_page_header_t));
|
||||
DEBUG_puts("1cupsRasterReadHeader: Unable to read page header, returning 0.");
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -538,6 +639,14 @@ cupsRasterReadHeader(
|
||||
|
||||
memcpy(h, &(r->header), sizeof(cups_page_header_t));
|
||||
|
||||
DEBUG_printf(("1cupsRasterReadHeader: cupsColorSpace=%s", cups_color_spaces[h->cupsColorSpace]));
|
||||
DEBUG_printf(("1cupsRasterReadHeader: cupsBitsPerColor=%u", h->cupsBitsPerColor));
|
||||
DEBUG_printf(("1cupsRasterReadHeader: cupsBitsPerPixel=%u", h->cupsBitsPerPixel));
|
||||
DEBUG_printf(("1cupsRasterReadHeader: cupsBytesPerLine=%u", h->cupsBytesPerLine));
|
||||
DEBUG_printf(("1cupsRasterReadHeader: cupsWidth=%u", h->cupsWidth));
|
||||
DEBUG_printf(("1cupsRasterReadHeader: cupsHeight=%u", h->cupsHeight));
|
||||
|
||||
DEBUG_puts("1cupsRasterReadHeader: Returning 1.");
|
||||
return (1);
|
||||
}
|
||||
|
||||
@@ -563,6 +672,7 @@ cupsRasterReadHeader2(
|
||||
if (!cups_raster_read_header(r))
|
||||
{
|
||||
memset(h, 0, sizeof(cups_page_header2_t));
|
||||
DEBUG_puts("1cupsRasterReadHeader2: Unable to read header, returning 0.");
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -572,6 +682,14 @@ cupsRasterReadHeader2(
|
||||
|
||||
memcpy(h, &(r->header), sizeof(cups_page_header2_t));
|
||||
|
||||
DEBUG_printf(("1cupsRasterReadHeader2: cupsColorSpace=%s", cups_color_spaces[h->cupsColorSpace]));
|
||||
DEBUG_printf(("1cupsRasterReadHeader2: cupsBitsPerColor=%u", h->cupsBitsPerColor));
|
||||
DEBUG_printf(("1cupsRasterReadHeader2: cupsBitsPerPixel=%u", h->cupsBitsPerPixel));
|
||||
DEBUG_printf(("1cupsRasterReadHeader2: cupsBytesPerLine=%u", h->cupsBytesPerLine));
|
||||
DEBUG_printf(("1cupsRasterReadHeader2: cupsWidth=%u", h->cupsWidth));
|
||||
DEBUG_printf(("1cupsRasterReadHeader2: cupsHeight=%u", h->cupsHeight));
|
||||
|
||||
DEBUG_puts("1cupsRasterReadHeader2: Returning 1.");
|
||||
return (1);
|
||||
}
|
||||
|
||||
@@ -777,7 +895,10 @@ cupsRasterReadPixels(cups_raster_t *r, /* I - Raster stream */
|
||||
r->header.cupsBitsPerPixel == 12 ||
|
||||
r->header.cupsBitsPerPixel == 16) &&
|
||||
r->swapped)
|
||||
cups_swap(ptr, (size_t)bytes);
|
||||
{
|
||||
DEBUG_puts("1cupsRasterReadPixels: Swapping bytes.");
|
||||
cups_swap(ptr, (size_t)cupsBytesPerLine);
|
||||
}
|
||||
|
||||
/*
|
||||
* Update pointers...
|
||||
@@ -847,8 +968,20 @@ cupsRasterWriteHeader(
|
||||
cups_raster_t *r, /* I - Raster stream */
|
||||
cups_page_header_t *h) /* I - Raster page header */
|
||||
{
|
||||
DEBUG_printf(("cupsRasterWriteHeader(r=%p, h=%p)", (void *)r, (void *)h));
|
||||
|
||||
if (r == NULL || r->mode == CUPS_RASTER_READ)
|
||||
{
|
||||
DEBUG_puts("1cupsRasterWriteHeader: Returning 0.");
|
||||
return (0);
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cupsRasterWriteHeader: cupsColorSpace=%s", cups_color_spaces[h->cupsColorSpace]));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader: cupsBitsPerColor=%u", h->cupsBitsPerColor));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader: cupsBitsPerPixel=%u", h->cupsBitsPerPixel));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader: cupsBytesPerLine=%u", h->cupsBytesPerLine));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader: cupsWidth=%u", h->cupsWidth));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader: cupsHeight=%u", h->cupsHeight));
|
||||
|
||||
/*
|
||||
* Make a copy of the header, and compute the number of raster
|
||||
@@ -859,7 +992,20 @@ cupsRasterWriteHeader(
|
||||
memcpy(&(r->header), h, sizeof(cups_page_header_t));
|
||||
|
||||
if (!cups_raster_update(r))
|
||||
{
|
||||
DEBUG_puts("1cupsRasterWriteHeader: Unable to update parameters, returning 0.");
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (r->mode == CUPS_RASTER_WRITE_APPLE)
|
||||
{
|
||||
r->rowheight = h->HWResolution[0] / h->HWResolution[1];
|
||||
|
||||
if (h->HWResolution[0] != (r->rowheight * h->HWResolution[1]))
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
r->rowheight = 1;
|
||||
|
||||
/*
|
||||
* Write the raster header...
|
||||
@@ -1019,8 +1165,20 @@ cupsRasterWriteHeader2(
|
||||
cups_raster_t *r, /* I - Raster stream */
|
||||
cups_page_header2_t *h) /* I - Raster page header */
|
||||
{
|
||||
DEBUG_printf(("cupsRasterWriteHeader(r=%p, h=%p)", (void *)r, (void *)h));
|
||||
|
||||
if (r == NULL || r->mode == CUPS_RASTER_READ)
|
||||
{
|
||||
DEBUG_puts("1cupsRasterWriteHeader2: Returning 0.");
|
||||
return (0);
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cupsRasterWriteHeader2: cupsColorSpace=%s", cups_color_spaces[h->cupsColorSpace]));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader2: cupsBitsPerColor=%u", h->cupsBitsPerColor));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader2: cupsBitsPerPixel=%u", h->cupsBitsPerPixel));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader2: cupsBytesPerLine=%u", h->cupsBytesPerLine));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader2: cupsWidth=%u", h->cupsWidth));
|
||||
DEBUG_printf(("1cupsRasterWriteHeader2: cupsHeight=%u", h->cupsHeight));
|
||||
|
||||
/*
|
||||
* Make a copy of the header, and compute the number of raster
|
||||
@@ -1030,7 +1188,10 @@ cupsRasterWriteHeader2(
|
||||
memcpy(&(r->header), h, sizeof(cups_page_header2_t));
|
||||
|
||||
if (!cups_raster_update(r))
|
||||
{
|
||||
DEBUG_puts("1cupsRasterWriteHeader: Unable to update parameters, returning 0.");
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (r->mode == CUPS_RASTER_WRITE_APPLE)
|
||||
{
|
||||
@@ -1202,7 +1363,6 @@ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
|
||||
r->header.cupsBitsPerPixel == 16))
|
||||
{
|
||||
unsigned char *bufptr; /* Pointer into write buffer */
|
||||
unsigned count; /* Remaining count */
|
||||
|
||||
/*
|
||||
* Allocate a write buffer as needed...
|
||||
@@ -1223,21 +1383,10 @@ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
|
||||
}
|
||||
|
||||
/*
|
||||
* Byte swap the pixels...
|
||||
* Byte swap the pixels and write them...
|
||||
*/
|
||||
|
||||
for (bufptr = r->buffer, count = len; count > 1; count -= 2, bufptr += 2)
|
||||
{
|
||||
bufptr[1] = *p++;
|
||||
bufptr[0] = *p++;
|
||||
}
|
||||
|
||||
if (count) /* This should never happen... */
|
||||
*bufptr = *p;
|
||||
|
||||
/*
|
||||
* Write the byte-swapped buffer...
|
||||
*/
|
||||
cups_swap_copy(r->buffer, p, len);
|
||||
|
||||
bytes = cups_raster_io(r, r->buffer, len);
|
||||
}
|
||||
@@ -1368,7 +1517,7 @@ cups_raster_read_header(
|
||||
size_t len; /* Length for read/swap */
|
||||
|
||||
|
||||
DEBUG_printf(("3cups_raster_read_header(r=%p), r->mode=%d", (void *)r, r ? r->mode : 0));
|
||||
DEBUG_printf(("3cups_raster_read_header(r=%p), r->mode=%s", (void *)r, r ? cups_modes[r->mode] : ""));
|
||||
|
||||
if (r == NULL || r->mode != CUPS_RASTER_READ)
|
||||
return (0);
|
||||
@@ -1523,10 +1672,7 @@ cups_raster_io(cups_raster_t *r, /* I - Raster stream */
|
||||
|
||||
DEBUG_printf(("6cups_raster_io: count=%d, total=%d", (int)count, (int)total));
|
||||
if (count == 0)
|
||||
{
|
||||
DEBUG_puts("6cups_raster_io: Returning 0.");
|
||||
return (0);
|
||||
}
|
||||
break;
|
||||
else if (count < 0)
|
||||
{
|
||||
DEBUG_puts("6cups_raster_io: Returning -1 on error.");
|
||||
@@ -1538,6 +1684,7 @@ cups_raster_io(cups_raster_t *r, /* I - Raster stream */
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
DEBUG_printf(("6cups_raster_io: iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
|
||||
DEBUG_printf(("6cups_raster_io: Returning " CUPS_LLFMT ".", CUPS_LLCAST total));
|
||||
|
||||
return (total);
|
||||
@@ -1558,7 +1705,7 @@ cups_raster_read(cups_raster_t *r, /* I - Raster stream */
|
||||
total; /* Total bytes read */
|
||||
|
||||
|
||||
DEBUG_printf(("5cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT ")", (void *)r, (void *)buf, CUPS_LLCAST bytes));
|
||||
DEBUG_printf(("4cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT "), offset=" CUPS_LLFMT, (void *)r, (void *)buf, CUPS_LLCAST bytes, CUPS_LLCAST (r->iostart + r->bufptr - r->buffer)));
|
||||
|
||||
if (!r->compressed)
|
||||
return (cups_raster_io(r, buf, bytes));
|
||||
@@ -1602,7 +1749,7 @@ cups_raster_read(cups_raster_t *r, /* I - Raster stream */
|
||||
{
|
||||
count = (ssize_t)bytes - total;
|
||||
|
||||
DEBUG_printf(("6cups_raster_read: count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p", CUPS_LLCAST count, CUPS_LLCAST remaining, (void *)buf, (void *)r->bufptr, (void *)r->bufend));
|
||||
DEBUG_printf(("5cups_raster_read: count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p", CUPS_LLCAST count, CUPS_LLCAST remaining, (void *)buf, (void *)r->bufptr, (void *)r->bufend));
|
||||
|
||||
if (remaining == 0)
|
||||
{
|
||||
@@ -1612,6 +1759,10 @@ cups_raster_read(cups_raster_t *r, /* I - Raster stream */
|
||||
* Read into the raster buffer and then copy...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
r->iostart += (size_t)(r->bufend - r->buffer);
|
||||
#endif /* DEBUG */
|
||||
|
||||
remaining = (*r->iocb)(r->ctx, r->buffer, r->bufsize);
|
||||
if (remaining <= 0)
|
||||
return (0);
|
||||
@@ -1635,6 +1786,7 @@ cups_raster_read(cups_raster_t *r, /* I - Raster stream */
|
||||
return (0);
|
||||
|
||||
#ifdef DEBUG
|
||||
r->iostart += (size_t)count;
|
||||
r->iocount += (size_t)count;
|
||||
#endif /* DEBUG */
|
||||
|
||||
@@ -1687,7 +1839,7 @@ cups_raster_read(cups_raster_t *r, /* I - Raster stream */
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG_printf(("6cups_raster_read: Returning %ld", (long)total));
|
||||
DEBUG_printf(("5cups_raster_read: Returning %ld", (long)total));
|
||||
|
||||
return (total);
|
||||
}
|
||||
@@ -1850,11 +2002,24 @@ cups_raster_write(
|
||||
unsigned char *wptr; /* Pointer into write buffer */
|
||||
unsigned bpp, /* Bytes per pixel */
|
||||
count; /* Count */
|
||||
_cups_copyfunc_t cf; /* Copy function */
|
||||
|
||||
|
||||
DEBUG_printf(("3cups_raster_write(r=%p, pixels=%p)", (void *)r, (void *)pixels));
|
||||
|
||||
/*
|
||||
* Determine whether we need to swap bytes...
|
||||
*/
|
||||
|
||||
if (r->swapped && (r->header.cupsBitsPerColor == 16 || r->header.cupsBitsPerPixel == 12 || r->header.cupsBitsPerPixel == 16))
|
||||
{
|
||||
DEBUG_puts("4cups_raster_write: Swapping bytes when writing.");
|
||||
cf = (_cups_copyfunc_t)cups_swap_copy;
|
||||
}
|
||||
else
|
||||
cf = (_cups_copyfunc_t)memcpy;
|
||||
|
||||
/*
|
||||
* Allocate a write buffer as needed...
|
||||
*/
|
||||
|
||||
@@ -1905,8 +2070,8 @@ cups_raster_write(
|
||||
*/
|
||||
|
||||
*wptr++ = 0;
|
||||
for (count = bpp; count > 0; count --)
|
||||
*wptr++ = *start++;
|
||||
(*cf)(wptr, start, bpp);
|
||||
wptr += bpp;
|
||||
}
|
||||
else if (!memcmp(start, ptr, bpp))
|
||||
{
|
||||
@@ -1919,8 +2084,9 @@ cups_raster_write(
|
||||
break;
|
||||
|
||||
*wptr++ = (unsigned char)(count - 1);
|
||||
for (count = bpp; count > 0; count --)
|
||||
*wptr++ = *ptr++;
|
||||
(*cf)(wptr, ptr, bpp);
|
||||
wptr += bpp;
|
||||
ptr += bpp;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1941,7 +2107,7 @@ cups_raster_write(
|
||||
*wptr++ = (unsigned char)(257 - count);
|
||||
|
||||
count *= bpp;
|
||||
memcpy(wptr, start, count);
|
||||
(*cf)(wptr, start, count);
|
||||
wptr += count;
|
||||
}
|
||||
}
|
||||
@@ -1973,11 +2139,11 @@ cups_read_fd(void *ctx, /* I - File descriptor as pointer */
|
||||
#endif /* WIN32 */
|
||||
if (errno != EINTR && errno != EAGAIN)
|
||||
{
|
||||
DEBUG_printf(("4cups_read_fd: %s", strerror(errno)));
|
||||
DEBUG_printf(("8cups_read_fd: %s", strerror(errno)));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
DEBUG_printf(("4cups_read_fd: Returning %d bytes.", (int)count));
|
||||
DEBUG_printf(("8cups_read_fd: Returning %d bytes.", (int)count));
|
||||
|
||||
return (count);
|
||||
}
|
||||
@@ -2009,6 +2175,30 @@ cups_swap(unsigned char *buf, /* I - Buffer to swap */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_swap_copy()' - Copy and swap bytes in raster data...
|
||||
*/
|
||||
|
||||
static void
|
||||
cups_swap_copy(
|
||||
unsigned char *dst, /* I - Destination */
|
||||
const unsigned char *src, /* I - Source */
|
||||
size_t bytes) /* I - Number of bytes to swap */
|
||||
{
|
||||
bytes /= 2;
|
||||
|
||||
while (bytes > 0)
|
||||
{
|
||||
dst[0] = src[1];
|
||||
dst[1] = src[0];
|
||||
|
||||
dst += 2;
|
||||
src += 2;
|
||||
bytes --;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_write_fd()' - Write bytes to a file.
|
||||
*/
|
||||
@@ -2030,7 +2220,7 @@ cups_write_fd(void *ctx, /* I - File descriptor pointer */
|
||||
#endif /* WIN32 */
|
||||
if (errno != EINTR && errno != EAGAIN)
|
||||
{
|
||||
DEBUG_printf(("4cups_write_fd: %s", strerror(errno)));
|
||||
DEBUG_printf(("8cups_write_fd: %s", strerror(errno)));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
+22
-5
@@ -1297,7 +1297,20 @@ http://www.vendor.com/help"
|
||||
|
||||
<p class='summary'>*cupsJobPassword: "format"</p>
|
||||
|
||||
<p>This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.</p>
|
||||
<p>This keyword defines the format of the "job-password" IPP attribute, if supported by the printer. The following format characters are supported:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>1</code>: US ASCII digits.</li>
|
||||
<li><code>A</code>: US ASCII letters.</li>
|
||||
<li><code>C</code>: US ASCII letters, numbers, and punctuation.</li>
|
||||
<li><code>.</code>: Any US ASCII printable character (0x20 to 0x7e).</li>
|
||||
<li><code>N</code>: Any Unicode digit character.</li>
|
||||
<li><code>U</code>: Any Unicode letter character.</li>
|
||||
<li><code>*</code>: Any Unicode (utf-8) character.</li>
|
||||
</ul>
|
||||
|
||||
<p>The format characters are repeated to indicate the length of the
|
||||
password string. For example, "1111" indicated a 4-digit US ASCII PIN code.</p>
|
||||
|
||||
<p>Example:</p>
|
||||
|
||||
@@ -1581,7 +1594,7 @@ PPD file extensions was used. Currently it must be the string
|
||||
|
||||
<h2 class='title'><a name='MACOSX'>macOS Attributes</a></h2>
|
||||
|
||||
<h3><span class='info'>macOS 10.3</span><a name='APDialogExtension'>APDialogExtension</a></h3>
|
||||
<h3><span class='info'>Deprecated</span><a name='APDialogExtension'>APDialogExtension</a></h3>
|
||||
|
||||
<p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
|
||||
|
||||
@@ -1593,9 +1606,13 @@ plug-ins.</p>
|
||||
|
||||
<blockquote><b>Note:</b>
|
||||
|
||||
<p>Starting with macOS 10.5, each plug-in must be compiled "4-way fat"
|
||||
(32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled
|
||||
in order to be usable with all applications.</p>
|
||||
<p>Since 2010, AirPrint has enabled the printing of full quality photos and
|
||||
documents from the Mac without requiring driver software. Starting with macOS
|
||||
10.12, system level security features prevent print dialog plug-ins from being
|
||||
loaded into applications that have enabled the library validation security
|
||||
feature. As of macOS 10.14 the <code>APDialogExtension</code> attribute used to
|
||||
create macOS print drivers is deprecated. All new printer models should support
|
||||
AirPrint moving forward.</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
|
||||
+140
-106
@@ -289,183 +289,183 @@ msgstr "Right Gate Fold"
|
||||
msgid "finishing-template.fold-z"
|
||||
msgstr "Z Fold"
|
||||
msgid "finishing-template.jdf-f10-1"
|
||||
msgstr "JDF F10-1"
|
||||
msgstr "JDF Fold F10-1"
|
||||
msgid "finishing-template.jdf-f10-2"
|
||||
msgstr "JDF F10-2"
|
||||
msgstr "JDF Fold F10-2"
|
||||
msgid "finishing-template.jdf-f10-3"
|
||||
msgstr "JDF F10-3"
|
||||
msgstr "JDF Fold F10-3"
|
||||
msgid "finishing-template.jdf-f12-1"
|
||||
msgstr "JDF F12-1"
|
||||
msgstr "JDF Fold F12-1"
|
||||
msgid "finishing-template.jdf-f12-10"
|
||||
msgstr "JDF F12-10"
|
||||
msgstr "JDF Fold F12-10"
|
||||
msgid "finishing-template.jdf-f12-11"
|
||||
msgstr "JDF F12-11"
|
||||
msgstr "JDF Fold F12-11"
|
||||
msgid "finishing-template.jdf-f12-12"
|
||||
msgstr "JDF F12-12"
|
||||
msgstr "JDF Fold F12-12"
|
||||
msgid "finishing-template.jdf-f12-13"
|
||||
msgstr "JDF F12-13"
|
||||
msgstr "JDF Fold F12-13"
|
||||
msgid "finishing-template.jdf-f12-14"
|
||||
msgstr "JDF F12-14"
|
||||
msgstr "JDF Fold F12-14"
|
||||
msgid "finishing-template.jdf-f12-2"
|
||||
msgstr "JDF F12-2"
|
||||
msgstr "JDF Fold F12-2"
|
||||
msgid "finishing-template.jdf-f12-3"
|
||||
msgstr "JDF F12-3"
|
||||
msgstr "JDF Fold F12-3"
|
||||
msgid "finishing-template.jdf-f12-4"
|
||||
msgstr "JDF F12-4"
|
||||
msgstr "JDF Fold F12-4"
|
||||
msgid "finishing-template.jdf-f12-5"
|
||||
msgstr "JDF F12-5"
|
||||
msgstr "JDF Fold F12-5"
|
||||
msgid "finishing-template.jdf-f12-6"
|
||||
msgstr "JDF F12-6"
|
||||
msgstr "JDF Fold F12-6"
|
||||
msgid "finishing-template.jdf-f12-7"
|
||||
msgstr "JDF F12-7"
|
||||
msgstr "JDF Fold F12-7"
|
||||
msgid "finishing-template.jdf-f12-8"
|
||||
msgstr "JDF F12-8"
|
||||
msgstr "JDF Fold F12-8"
|
||||
msgid "finishing-template.jdf-f12-9"
|
||||
msgstr "JDF F12-9"
|
||||
msgstr "JDF Fold F12-9"
|
||||
msgid "finishing-template.jdf-f14-1"
|
||||
msgstr "JDF F14-1"
|
||||
msgstr "JDF Fold F14-1"
|
||||
msgid "finishing-template.jdf-f16-1"
|
||||
msgstr "JDF F16-1"
|
||||
msgstr "JDF Fold F16-1"
|
||||
msgid "finishing-template.jdf-f16-10"
|
||||
msgstr "JDF F16-10"
|
||||
msgstr "JDF Fold F16-10"
|
||||
msgid "finishing-template.jdf-f16-11"
|
||||
msgstr "JDF F16-11"
|
||||
msgstr "JDF Fold F16-11"
|
||||
msgid "finishing-template.jdf-f16-12"
|
||||
msgstr "JDF F16-12"
|
||||
msgstr "JDF Fold F16-12"
|
||||
msgid "finishing-template.jdf-f16-13"
|
||||
msgstr "JDF F16-13"
|
||||
msgstr "JDF Fold F16-13"
|
||||
msgid "finishing-template.jdf-f16-14"
|
||||
msgstr "JDF F16-14"
|
||||
msgstr "JDF Fold F16-14"
|
||||
msgid "finishing-template.jdf-f16-2"
|
||||
msgstr "JDF F16-2"
|
||||
msgstr "JDF Fold F16-2"
|
||||
msgid "finishing-template.jdf-f16-3"
|
||||
msgstr "JDF F16-3"
|
||||
msgstr "JDF Fold F16-3"
|
||||
msgid "finishing-template.jdf-f16-4"
|
||||
msgstr "JDF F16-4"
|
||||
msgstr "JDF Fold F16-4"
|
||||
msgid "finishing-template.jdf-f16-5"
|
||||
msgstr "JDF F16-5"
|
||||
msgstr "JDF Fold F16-5"
|
||||
msgid "finishing-template.jdf-f16-6"
|
||||
msgstr "JDF F16-6"
|
||||
msgstr "JDF Fold F16-6"
|
||||
msgid "finishing-template.jdf-f16-7"
|
||||
msgstr "JDF F16-7"
|
||||
msgstr "JDF Fold F16-7"
|
||||
msgid "finishing-template.jdf-f16-8"
|
||||
msgstr "JDF F16-8"
|
||||
msgstr "JDF Fold F16-8"
|
||||
msgid "finishing-template.jdf-f16-9"
|
||||
msgstr "JDF F16-9"
|
||||
msgstr "JDF Fold F16-9"
|
||||
msgid "finishing-template.jdf-f18-1"
|
||||
msgstr "JDF F18-1"
|
||||
msgstr "JDF Fold F18-1"
|
||||
msgid "finishing-template.jdf-f18-2"
|
||||
msgstr "JDF F18-2"
|
||||
msgstr "JDF Fold F18-2"
|
||||
msgid "finishing-template.jdf-f18-3"
|
||||
msgstr "JDF F18-3"
|
||||
msgstr "JDF Fold F18-3"
|
||||
msgid "finishing-template.jdf-f18-4"
|
||||
msgstr "JDF F18-4"
|
||||
msgstr "JDF Fold F18-4"
|
||||
msgid "finishing-template.jdf-f18-5"
|
||||
msgstr "JDF F18-5"
|
||||
msgstr "JDF Fold F18-5"
|
||||
msgid "finishing-template.jdf-f18-6"
|
||||
msgstr "JDF F18-6"
|
||||
msgstr "JDF Fold F18-6"
|
||||
msgid "finishing-template.jdf-f18-7"
|
||||
msgstr "JDF F18-7"
|
||||
msgstr "JDF Fold F18-7"
|
||||
msgid "finishing-template.jdf-f18-8"
|
||||
msgstr "JDF F18-8"
|
||||
msgstr "JDF Fold F18-8"
|
||||
msgid "finishing-template.jdf-f18-9"
|
||||
msgstr "JDF F18-9"
|
||||
msgstr "JDF Fold F18-9"
|
||||
msgid "finishing-template.jdf-f2-1"
|
||||
msgstr "JDF F2-1"
|
||||
msgstr "JDF Fold F2-1"
|
||||
msgid "finishing-template.jdf-f20-1"
|
||||
msgstr "JDF F20-1"
|
||||
msgstr "JDF Fold F20-1"
|
||||
msgid "finishing-template.jdf-f20-2"
|
||||
msgstr "JDF F20-2"
|
||||
msgstr "JDF Fold F20-2"
|
||||
msgid "finishing-template.jdf-f24-1"
|
||||
msgstr "JDF F24-1"
|
||||
msgstr "JDF Fold F24-1"
|
||||
msgid "finishing-template.jdf-f24-10"
|
||||
msgstr "JDF F24-10"
|
||||
msgstr "JDF Fold F24-10"
|
||||
msgid "finishing-template.jdf-f24-11"
|
||||
msgstr "JDF F24-11"
|
||||
msgstr "JDF Fold F24-11"
|
||||
msgid "finishing-template.jdf-f24-2"
|
||||
msgstr "JDF F24-2"
|
||||
msgstr "JDF Fold F24-2"
|
||||
msgid "finishing-template.jdf-f24-3"
|
||||
msgstr "JDF F24-3"
|
||||
msgstr "JDF Fold F24-3"
|
||||
msgid "finishing-template.jdf-f24-4"
|
||||
msgstr "JDF F24-4"
|
||||
msgstr "JDF Fold F24-4"
|
||||
msgid "finishing-template.jdf-f24-5"
|
||||
msgstr "JDF F24-5"
|
||||
msgstr "JDF Fold F24-5"
|
||||
msgid "finishing-template.jdf-f24-6"
|
||||
msgstr "JDF F24-6"
|
||||
msgstr "JDF Fold F24-6"
|
||||
msgid "finishing-template.jdf-f24-7"
|
||||
msgstr "JDF F24-7"
|
||||
msgstr "JDF Fold F24-7"
|
||||
msgid "finishing-template.jdf-f24-8"
|
||||
msgstr "JDF F24-8"
|
||||
msgstr "JDF Fold F24-8"
|
||||
msgid "finishing-template.jdf-f24-9"
|
||||
msgstr "JDF F24-9"
|
||||
msgstr "JDF Fold F24-9"
|
||||
msgid "finishing-template.jdf-f28-1"
|
||||
msgstr "JDF F28-1"
|
||||
msgstr "JDF Fold F28-1"
|
||||
msgid "finishing-template.jdf-f32-1"
|
||||
msgstr "JDF F32-1"
|
||||
msgstr "JDF Fold F32-1"
|
||||
msgid "finishing-template.jdf-f32-2"
|
||||
msgstr "JDF F32-2"
|
||||
msgstr "JDF Fold F32-2"
|
||||
msgid "finishing-template.jdf-f32-3"
|
||||
msgstr "JDF F32-3"
|
||||
msgstr "JDF Fold F32-3"
|
||||
msgid "finishing-template.jdf-f32-4"
|
||||
msgstr "JDF F32-4"
|
||||
msgstr "JDF Fold F32-4"
|
||||
msgid "finishing-template.jdf-f32-5"
|
||||
msgstr "JDF F32-5"
|
||||
msgstr "JDF Fold F32-5"
|
||||
msgid "finishing-template.jdf-f32-6"
|
||||
msgstr "JDF F32-6"
|
||||
msgstr "JDF Fold F32-6"
|
||||
msgid "finishing-template.jdf-f32-7"
|
||||
msgstr "JDF F32-7"
|
||||
msgstr "JDF Fold F32-7"
|
||||
msgid "finishing-template.jdf-f32-8"
|
||||
msgstr "JDF F32-8"
|
||||
msgstr "JDF Fold F32-8"
|
||||
msgid "finishing-template.jdf-f32-9"
|
||||
msgstr "JDF F32-9"
|
||||
msgstr "JDF Fold F32-9"
|
||||
msgid "finishing-template.jdf-f36-1"
|
||||
msgstr "JDF F36-1"
|
||||
msgstr "JDF Fold F36-1"
|
||||
msgid "finishing-template.jdf-f36-2"
|
||||
msgstr "JDF F36-2"
|
||||
msgstr "JDF Fold F36-2"
|
||||
msgid "finishing-template.jdf-f4-1"
|
||||
msgstr "JDF F4-1"
|
||||
msgstr "JDF Fold F4-1"
|
||||
msgid "finishing-template.jdf-f4-2"
|
||||
msgstr "JDF F4-2"
|
||||
msgstr "JDF Fold F4-2"
|
||||
msgid "finishing-template.jdf-f40-1"
|
||||
msgstr "JDF F40-1"
|
||||
msgstr "JDF Fold F40-1"
|
||||
msgid "finishing-template.jdf-f48-1"
|
||||
msgstr "JDF F48-1"
|
||||
msgstr "JDF Fold F48-1"
|
||||
msgid "finishing-template.jdf-f48-2"
|
||||
msgstr "JDF F48-2"
|
||||
msgstr "JDF Fold F48-2"
|
||||
msgid "finishing-template.jdf-f6-1"
|
||||
msgstr "JDF F6-1"
|
||||
msgstr "JDF Fold F6-1"
|
||||
msgid "finishing-template.jdf-f6-2"
|
||||
msgstr "JDF F6-2"
|
||||
msgstr "JDF Fold F6-2"
|
||||
msgid "finishing-template.jdf-f6-3"
|
||||
msgstr "JDF F6-3"
|
||||
msgstr "JDF Fold F6-3"
|
||||
msgid "finishing-template.jdf-f6-4"
|
||||
msgstr "JDF F6-4"
|
||||
msgstr "JDF Fold F6-4"
|
||||
msgid "finishing-template.jdf-f6-5"
|
||||
msgstr "JDF F6-5"
|
||||
msgstr "JDF Fold F6-5"
|
||||
msgid "finishing-template.jdf-f6-6"
|
||||
msgstr "JDF F6-6"
|
||||
msgstr "JDF Fold F6-6"
|
||||
msgid "finishing-template.jdf-f6-7"
|
||||
msgstr "JDF F6-7"
|
||||
msgstr "JDF Fold F6-7"
|
||||
msgid "finishing-template.jdf-f6-8"
|
||||
msgstr "JDF F6-8"
|
||||
msgstr "JDF Fold F6-8"
|
||||
msgid "finishing-template.jdf-f64-1"
|
||||
msgstr "JDF F64-1"
|
||||
msgstr "JDF Fold F64-1"
|
||||
msgid "finishing-template.jdf-f64-2"
|
||||
msgstr "JDF F64-2"
|
||||
msgstr "JDF Fold F64-2"
|
||||
msgid "finishing-template.jdf-f8-1"
|
||||
msgstr "JDF F8-1"
|
||||
msgstr "JDF Fold F8-1"
|
||||
msgid "finishing-template.jdf-f8-2"
|
||||
msgstr "JDF F8-2"
|
||||
msgstr "JDF Fold F8-2"
|
||||
msgid "finishing-template.jdf-f8-3"
|
||||
msgstr "JDF F8-3"
|
||||
msgstr "JDF Fold F8-3"
|
||||
msgid "finishing-template.jdf-f8-4"
|
||||
msgstr "JDF F8-4"
|
||||
msgstr "JDF Fold F8-4"
|
||||
msgid "finishing-template.jdf-f8-5"
|
||||
msgstr "JDF F8-5"
|
||||
msgstr "JDF Fold F8-5"
|
||||
msgid "finishing-template.jdf-f8-6"
|
||||
msgstr "JDF F8-6"
|
||||
msgstr "JDF Fold F8-6"
|
||||
msgid "finishing-template.jdf-f8-7"
|
||||
msgstr "JDF F8-7"
|
||||
msgstr "JDF Fold F8-7"
|
||||
msgid "finishing-template.jog-offset"
|
||||
msgstr "Jog Offset"
|
||||
msgid "finishing-template.laminate"
|
||||
@@ -1465,41 +1465,41 @@ msgstr "Media Name"
|
||||
msgid "media-source"
|
||||
msgstr "Media Source"
|
||||
msgid "media-source.alternate"
|
||||
msgstr "Alternate"
|
||||
msgstr "Alternate Tray"
|
||||
msgid "media-source.alternate-roll"
|
||||
msgstr "Alternate Roll"
|
||||
msgid "media-source.auto"
|
||||
msgstr "Automatic"
|
||||
msgstr "Automatic Tray"
|
||||
msgid "media-source.bottom"
|
||||
msgstr "Bottom"
|
||||
msgstr "Bottom Tray"
|
||||
msgid "media-source.by-pass-tray"
|
||||
msgstr "By-pass Tray"
|
||||
msgid "media-source.center"
|
||||
msgstr "Center"
|
||||
msgstr "Center Tray"
|
||||
msgid "media-source.disc"
|
||||
msgstr "Disc"
|
||||
msgstr "Disc Feed"
|
||||
msgid "media-source.envelope"
|
||||
msgstr "Envelope"
|
||||
msgstr "Envelope Feed"
|
||||
msgid "media-source.hagaki"
|
||||
msgstr "Hagaki"
|
||||
msgstr "Hagaki Feed"
|
||||
msgid "media-source.large-capacity"
|
||||
msgstr "Large Capacity"
|
||||
msgstr "Large Capacity Tray"
|
||||
msgid "media-source.left"
|
||||
msgstr "Left"
|
||||
msgstr "Left Tray"
|
||||
msgid "media-source.main"
|
||||
msgstr "Main"
|
||||
msgstr "Main Tray"
|
||||
msgid "media-source.main-roll"
|
||||
msgstr "Main Roll"
|
||||
msgid "media-source.manual"
|
||||
msgstr "Manual"
|
||||
msgstr "Manual Feed"
|
||||
msgid "media-source.middle"
|
||||
msgstr "Middle"
|
||||
msgstr "Middle Tray"
|
||||
msgid "media-source.photo"
|
||||
msgstr "Photo"
|
||||
msgstr "Photo Tray"
|
||||
msgid "media-source.rear"
|
||||
msgstr "Rear"
|
||||
msgstr "Rear Tray"
|
||||
msgid "media-source.right"
|
||||
msgstr "Right"
|
||||
msgstr "Right Tray"
|
||||
msgid "media-source.roll-1"
|
||||
msgstr "Roll 1"
|
||||
msgid "media-source.roll-10"
|
||||
@@ -1571,7 +1571,7 @@ msgstr "Media Tooth (Texture)"
|
||||
msgid "media-tooth.antique"
|
||||
msgstr "Antique"
|
||||
msgid "media-tooth.calendared"
|
||||
msgstr "Calendared"
|
||||
msgstr "Extra Smooth"
|
||||
msgid "media-tooth.coarse"
|
||||
msgstr "Coarse"
|
||||
msgid "media-tooth.fine"
|
||||
@@ -1585,7 +1585,7 @@ msgstr "Smooth"
|
||||
msgid "media-tooth.stipple"
|
||||
msgstr "Stipple"
|
||||
msgid "media-tooth.uncalendared"
|
||||
msgstr "Uncalendared"
|
||||
msgstr "Rough"
|
||||
msgid "media-tooth.vellum"
|
||||
msgstr "Vellum"
|
||||
msgid "media-top-margin"
|
||||
@@ -1604,6 +1604,32 @@ msgid "media-type.cardstock"
|
||||
msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
msgid "media-type.continuous-long"
|
||||
@@ -1700,6 +1726,14 @@ msgid "media-type.image-setter-paper"
|
||||
msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
msgid "media-type.labels-colored"
|
||||
|
||||
+871
-780
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+137
-107
@@ -328,6 +328,7 @@
|
||||
"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad characters (RFC 8011 section 5.1.10).";
|
||||
"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad length %d (RFC 8011 section 5.1.10).";
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.3).";
|
||||
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)." = "“%s”: Bad name value “%s” - bad control character (PWG 5100.14 section 8.1).";
|
||||
"\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad length %d (RFC 8011 section 5.1.3).";
|
||||
"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad characters (RFC 8011 section 5.1.9).";
|
||||
"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad length %d (RFC 8011 section 5.1.9).";
|
||||
@@ -337,9 +338,12 @@
|
||||
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16).";
|
||||
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16).";
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.2).";
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)." = "“%s”: Bad text value “%s” - bad control character (PWG 5100.14 section 8.3).";
|
||||
"\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad length %d (RFC 8011 section 5.1.2).";
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad characters (RFC 8011 section 5.1.7).";
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad length %d (RFC 8011 section 5.1.7).";
|
||||
"\"requesting-user-name\" attribute in wrong group." = "“requesting-user-name” attribute in wrong group.";
|
||||
"\"requesting-user-name\" attribute with wrong syntax." = "“requesting-user-name” attribute with wrong syntax.";
|
||||
"%-7s %-7.7s %-7d %-31.31s %.0f bytes" = "%-7s %-7.7s %-7d %-31.31s %.0f bytes";
|
||||
"%d x %d mm" = "%d x %d mm";
|
||||
"%g x %g \"" = "%g x %g ″";
|
||||
@@ -366,6 +370,7 @@
|
||||
"%s: Bad printer URI \"%s\"." = "%s: Bad printer URI “%s”.";
|
||||
"%s: Bad version %s for \"-V\"." = "%s: Bad version %s for “-V”.";
|
||||
"%s: Don't know what to do." = "%s: Don’t know what to do.";
|
||||
"%s: Error - %s" = "%s: Error - %s";
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"." = "%s: Error - %s environment variable names non-existent destination “%s”.";
|
||||
"%s: Error - add '/version=1.1' to server name." = "%s: Error - add ‘/version=1.1’ to server name.";
|
||||
"%s: Error - bad job ID." = "%s: Error - bad job ID.";
|
||||
@@ -720,6 +725,7 @@
|
||||
"B8" = "B8";
|
||||
"B9" = "B9";
|
||||
"Back Print Film" = "Back Print Film";
|
||||
"Bad '%s' value." = "Bad ‘%s’ value.";
|
||||
"Bad 'document-format' value \"%s\"." = "Bad ‘document-format’ value “%s”.";
|
||||
"Bad NULL dests pointer" = "Bad NULL dests pointer";
|
||||
"Bad OpenGroup" = "Bad OpenGroup";
|
||||
@@ -748,6 +754,7 @@
|
||||
"Bad job-uri \"%s\"." = "Bad job-uri “%s”.";
|
||||
"Bad notify-pull-method \"%s\"." = "Bad notify-pull-method “%s”.";
|
||||
"Bad notify-recipient-uri \"%s\"." = "Bad notify-recipient-uri “%s”.";
|
||||
"Bad notify-user-data \"%s\"." = "Bad notify-user-data “%s”.";
|
||||
"Bad number-up value %d." = "Bad number-up value %d.";
|
||||
"Bad option + choice on line %d." = "Bad option + choice on line %d.";
|
||||
"Bad page-ranges values %d-%d." = "Bad page-ranges values %d-%d.";
|
||||
@@ -757,7 +764,6 @@
|
||||
"Bad printer-uri." = "Bad printer-uri.";
|
||||
"Bad request ID %d." = "Bad request ID %d.";
|
||||
"Bad request version number %d.%d." = "Bad request version number %d.%d.";
|
||||
"Bad requesting-user-name value: %s" = "Bad requesting-user-name value: %s";
|
||||
"Bad resource in URI" = "Bad resource in URI";
|
||||
"Bad scheme in URI" = "Bad scheme in URI";
|
||||
"Bad subscription ID" = "Bad subscription ID";
|
||||
@@ -967,6 +973,7 @@
|
||||
"Fold" = "Fold";
|
||||
"Folio" = "Folio";
|
||||
"Forbidden" = "Forbidden";
|
||||
"Found" = "Found";
|
||||
"Full Cut Tabs" = "Full Cut Tabs";
|
||||
"Gate Fold" = "Gate Fold";
|
||||
"General" = "General";
|
||||
@@ -1044,6 +1051,7 @@
|
||||
"Internet Postage 2-Part" = "Internet Postage 2-Part";
|
||||
"Internet Postage 3-Part" = "Internet Postage 3-Part";
|
||||
"Internet Printing Protocol" = "Internet Printing Protocol";
|
||||
"Invalid group tag." = "Invalid group tag.";
|
||||
"Invalid media name arguments." = "Invalid media name arguments.";
|
||||
"Invalid media size." = "Invalid media size.";
|
||||
"Invalid ppd-name value." = "Invalid ppd-name value.";
|
||||
@@ -1654,6 +1662,7 @@
|
||||
"Unknown version option value: \"%s\"." = "Unknown version option value: “%s”.";
|
||||
"Unsupported 'compression' value \"%s\"." = "Unsupported ‘compression’ value “%s”.";
|
||||
"Unsupported 'document-format' value \"%s\"." = "Unsupported ‘document-format’ value “%s”.";
|
||||
"Unsupported 'job-hold-until' value." = "Unsupported ‘job-hold-until’ value.";
|
||||
"Unsupported 'job-name' value." = "Unsupported ‘job-name’ value.";
|
||||
"Unsupported character set \"%s\"." = "Unsupported character set “%s”.";
|
||||
"Unsupported compression \"%s\"." = "Unsupported compression “%s”.";
|
||||
@@ -1746,6 +1755,7 @@
|
||||
"ippfind: Missing expression before \"--and\"." = "ippfind: Missing expression before “--and”.";
|
||||
"ippfind: Missing expression before \"--or\"." = "ippfind: Missing expression before “--or”.";
|
||||
"ippfind: Missing key name after %s." = "ippfind: Missing key name after %s.";
|
||||
"ippfind: Missing name after %s." = "ippfind: Missing name after %s.";
|
||||
"ippfind: Missing open parenthesis." = "ippfind: Missing open parenthesis.";
|
||||
"ippfind: Missing program after %s." = "ippfind: Missing program after %s.";
|
||||
"ippfind: Missing regular expression after %s." = "ippfind: Missing regular expression after %s.";
|
||||
@@ -1787,6 +1797,8 @@
|
||||
"lpadmin: Printer %s is already a member of class %s." = "lpadmin: Printer %s is already a member of class %s.";
|
||||
"lpadmin: Printer %s is not a member of class %s." = "lpadmin: Printer %s is not a member of class %s.";
|
||||
"lpadmin: Printer name can only contain printable characters." = "lpadmin: Printer name can only contain printable characters.";
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS." = "lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS.";
|
||||
"lpadmin: System V interface scripts are no longer supported for security reasons." = "lpadmin: System V interface scripts are no longer supported for security reasons.";
|
||||
"lpadmin: Unable to add a printer to the class:\n You must specify a printer name first." = "lpadmin: Unable to add a printer to the class:\n You must specify a printer name first.";
|
||||
"lpadmin: Unable to connect to server: %s" = "lpadmin: Unable to connect to server: %s";
|
||||
"lpadmin: Unable to create temporary file" = "lpadmin: Unable to create temporary file";
|
||||
@@ -1798,6 +1810,7 @@
|
||||
"lpadmin: Unknown allow/deny option \"%s\"." = "lpadmin: Unknown allow/deny option “%s”.";
|
||||
"lpadmin: Unknown argument \"%s\"." = "lpadmin: Unknown argument “%s”.";
|
||||
"lpadmin: Unknown option \"%c\"." = "lpadmin: Unknown option “%c”.";
|
||||
"lpadmin: Use the 'everywhere' model for shared printers." = "lpadmin: Use the ‘everywhere’ model for shared printers.";
|
||||
"lpadmin: Warning - content type list ignored." = "lpadmin: Warning - content type list ignored.";
|
||||
"lpc> " = "lpc> ";
|
||||
"lpinfo: Expected 1284 device ID string after \"--device-id\"." = "lpinfo: Expected 1284 device ID string after “--device-id”.";
|
||||
@@ -2080,95 +2093,95 @@
|
||||
"finishing-template.fold-poster" = "Poster Fold";
|
||||
"finishing-template.fold-right-gate" = "Right Gate Fold";
|
||||
"finishing-template.fold-z" = "Z Fold";
|
||||
"finishing-template.jdf-f10-1" = "JDF F10-1";
|
||||
"finishing-template.jdf-f10-2" = "JDF F10-2";
|
||||
"finishing-template.jdf-f10-3" = "JDF F10-3";
|
||||
"finishing-template.jdf-f12-1" = "JDF F12-1";
|
||||
"finishing-template.jdf-f12-10" = "JDF F12-10";
|
||||
"finishing-template.jdf-f12-11" = "JDF F12-11";
|
||||
"finishing-template.jdf-f12-12" = "JDF F12-12";
|
||||
"finishing-template.jdf-f12-13" = "JDF F12-13";
|
||||
"finishing-template.jdf-f12-14" = "JDF F12-14";
|
||||
"finishing-template.jdf-f12-2" = "JDF F12-2";
|
||||
"finishing-template.jdf-f12-3" = "JDF F12-3";
|
||||
"finishing-template.jdf-f12-4" = "JDF F12-4";
|
||||
"finishing-template.jdf-f12-5" = "JDF F12-5";
|
||||
"finishing-template.jdf-f12-6" = "JDF F12-6";
|
||||
"finishing-template.jdf-f12-7" = "JDF F12-7";
|
||||
"finishing-template.jdf-f12-8" = "JDF F12-8";
|
||||
"finishing-template.jdf-f12-9" = "JDF F12-9";
|
||||
"finishing-template.jdf-f14-1" = "JDF F14-1";
|
||||
"finishing-template.jdf-f16-1" = "JDF F16-1";
|
||||
"finishing-template.jdf-f16-10" = "JDF F16-10";
|
||||
"finishing-template.jdf-f16-11" = "JDF F16-11";
|
||||
"finishing-template.jdf-f16-12" = "JDF F16-12";
|
||||
"finishing-template.jdf-f16-13" = "JDF F16-13";
|
||||
"finishing-template.jdf-f16-14" = "JDF F16-14";
|
||||
"finishing-template.jdf-f16-2" = "JDF F16-2";
|
||||
"finishing-template.jdf-f16-3" = "JDF F16-3";
|
||||
"finishing-template.jdf-f16-4" = "JDF F16-4";
|
||||
"finishing-template.jdf-f16-5" = "JDF F16-5";
|
||||
"finishing-template.jdf-f16-6" = "JDF F16-6";
|
||||
"finishing-template.jdf-f16-7" = "JDF F16-7";
|
||||
"finishing-template.jdf-f16-8" = "JDF F16-8";
|
||||
"finishing-template.jdf-f16-9" = "JDF F16-9";
|
||||
"finishing-template.jdf-f18-1" = "JDF F18-1";
|
||||
"finishing-template.jdf-f18-2" = "JDF F18-2";
|
||||
"finishing-template.jdf-f18-3" = "JDF F18-3";
|
||||
"finishing-template.jdf-f18-4" = "JDF F18-4";
|
||||
"finishing-template.jdf-f18-5" = "JDF F18-5";
|
||||
"finishing-template.jdf-f18-6" = "JDF F18-6";
|
||||
"finishing-template.jdf-f18-7" = "JDF F18-7";
|
||||
"finishing-template.jdf-f18-8" = "JDF F18-8";
|
||||
"finishing-template.jdf-f18-9" = "JDF F18-9";
|
||||
"finishing-template.jdf-f2-1" = "JDF F2-1";
|
||||
"finishing-template.jdf-f20-1" = "JDF F20-1";
|
||||
"finishing-template.jdf-f20-2" = "JDF F20-2";
|
||||
"finishing-template.jdf-f24-1" = "JDF F24-1";
|
||||
"finishing-template.jdf-f24-10" = "JDF F24-10";
|
||||
"finishing-template.jdf-f24-11" = "JDF F24-11";
|
||||
"finishing-template.jdf-f24-2" = "JDF F24-2";
|
||||
"finishing-template.jdf-f24-3" = "JDF F24-3";
|
||||
"finishing-template.jdf-f24-4" = "JDF F24-4";
|
||||
"finishing-template.jdf-f24-5" = "JDF F24-5";
|
||||
"finishing-template.jdf-f24-6" = "JDF F24-6";
|
||||
"finishing-template.jdf-f24-7" = "JDF F24-7";
|
||||
"finishing-template.jdf-f24-8" = "JDF F24-8";
|
||||
"finishing-template.jdf-f24-9" = "JDF F24-9";
|
||||
"finishing-template.jdf-f28-1" = "JDF F28-1";
|
||||
"finishing-template.jdf-f32-1" = "JDF F32-1";
|
||||
"finishing-template.jdf-f32-2" = "JDF F32-2";
|
||||
"finishing-template.jdf-f32-3" = "JDF F32-3";
|
||||
"finishing-template.jdf-f32-4" = "JDF F32-4";
|
||||
"finishing-template.jdf-f32-5" = "JDF F32-5";
|
||||
"finishing-template.jdf-f32-6" = "JDF F32-6";
|
||||
"finishing-template.jdf-f32-7" = "JDF F32-7";
|
||||
"finishing-template.jdf-f32-8" = "JDF F32-8";
|
||||
"finishing-template.jdf-f32-9" = "JDF F32-9";
|
||||
"finishing-template.jdf-f36-1" = "JDF F36-1";
|
||||
"finishing-template.jdf-f36-2" = "JDF F36-2";
|
||||
"finishing-template.jdf-f4-1" = "JDF F4-1";
|
||||
"finishing-template.jdf-f4-2" = "JDF F4-2";
|
||||
"finishing-template.jdf-f40-1" = "JDF F40-1";
|
||||
"finishing-template.jdf-f48-1" = "JDF F48-1";
|
||||
"finishing-template.jdf-f48-2" = "JDF F48-2";
|
||||
"finishing-template.jdf-f6-1" = "JDF F6-1";
|
||||
"finishing-template.jdf-f6-2" = "JDF F6-2";
|
||||
"finishing-template.jdf-f6-3" = "JDF F6-3";
|
||||
"finishing-template.jdf-f6-4" = "JDF F6-4";
|
||||
"finishing-template.jdf-f6-5" = "JDF F6-5";
|
||||
"finishing-template.jdf-f6-6" = "JDF F6-6";
|
||||
"finishing-template.jdf-f6-7" = "JDF F6-7";
|
||||
"finishing-template.jdf-f6-8" = "JDF F6-8";
|
||||
"finishing-template.jdf-f64-1" = "JDF F64-1";
|
||||
"finishing-template.jdf-f64-2" = "JDF F64-2";
|
||||
"finishing-template.jdf-f8-1" = "JDF F8-1";
|
||||
"finishing-template.jdf-f8-2" = "JDF F8-2";
|
||||
"finishing-template.jdf-f8-3" = "JDF F8-3";
|
||||
"finishing-template.jdf-f8-4" = "JDF F8-4";
|
||||
"finishing-template.jdf-f8-5" = "JDF F8-5";
|
||||
"finishing-template.jdf-f8-6" = "JDF F8-6";
|
||||
"finishing-template.jdf-f8-7" = "JDF F8-7";
|
||||
"finishing-template.jdf-f10-1" = "JDF Fold F10-1";
|
||||
"finishing-template.jdf-f10-2" = "JDF Fold F10-2";
|
||||
"finishing-template.jdf-f10-3" = "JDF Fold F10-3";
|
||||
"finishing-template.jdf-f12-1" = "JDF Fold F12-1";
|
||||
"finishing-template.jdf-f12-10" = "JDF Fold F12-10";
|
||||
"finishing-template.jdf-f12-11" = "JDF Fold F12-11";
|
||||
"finishing-template.jdf-f12-12" = "JDF Fold F12-12";
|
||||
"finishing-template.jdf-f12-13" = "JDF Fold F12-13";
|
||||
"finishing-template.jdf-f12-14" = "JDF Fold F12-14";
|
||||
"finishing-template.jdf-f12-2" = "JDF Fold F12-2";
|
||||
"finishing-template.jdf-f12-3" = "JDF Fold F12-3";
|
||||
"finishing-template.jdf-f12-4" = "JDF Fold F12-4";
|
||||
"finishing-template.jdf-f12-5" = "JDF Fold F12-5";
|
||||
"finishing-template.jdf-f12-6" = "JDF Fold F12-6";
|
||||
"finishing-template.jdf-f12-7" = "JDF Fold F12-7";
|
||||
"finishing-template.jdf-f12-8" = "JDF Fold F12-8";
|
||||
"finishing-template.jdf-f12-9" = "JDF Fold F12-9";
|
||||
"finishing-template.jdf-f14-1" = "JDF Fold F14-1";
|
||||
"finishing-template.jdf-f16-1" = "JDF Fold F16-1";
|
||||
"finishing-template.jdf-f16-10" = "JDF Fold F16-10";
|
||||
"finishing-template.jdf-f16-11" = "JDF Fold F16-11";
|
||||
"finishing-template.jdf-f16-12" = "JDF Fold F16-12";
|
||||
"finishing-template.jdf-f16-13" = "JDF Fold F16-13";
|
||||
"finishing-template.jdf-f16-14" = "JDF Fold F16-14";
|
||||
"finishing-template.jdf-f16-2" = "JDF Fold F16-2";
|
||||
"finishing-template.jdf-f16-3" = "JDF Fold F16-3";
|
||||
"finishing-template.jdf-f16-4" = "JDF Fold F16-4";
|
||||
"finishing-template.jdf-f16-5" = "JDF Fold F16-5";
|
||||
"finishing-template.jdf-f16-6" = "JDF Fold F16-6";
|
||||
"finishing-template.jdf-f16-7" = "JDF Fold F16-7";
|
||||
"finishing-template.jdf-f16-8" = "JDF Fold F16-8";
|
||||
"finishing-template.jdf-f16-9" = "JDF Fold F16-9";
|
||||
"finishing-template.jdf-f18-1" = "JDF Fold F18-1";
|
||||
"finishing-template.jdf-f18-2" = "JDF Fold F18-2";
|
||||
"finishing-template.jdf-f18-3" = "JDF Fold F18-3";
|
||||
"finishing-template.jdf-f18-4" = "JDF Fold F18-4";
|
||||
"finishing-template.jdf-f18-5" = "JDF Fold F18-5";
|
||||
"finishing-template.jdf-f18-6" = "JDF Fold F18-6";
|
||||
"finishing-template.jdf-f18-7" = "JDF Fold F18-7";
|
||||
"finishing-template.jdf-f18-8" = "JDF Fold F18-8";
|
||||
"finishing-template.jdf-f18-9" = "JDF Fold F18-9";
|
||||
"finishing-template.jdf-f2-1" = "JDF Fold F2-1";
|
||||
"finishing-template.jdf-f20-1" = "JDF Fold F20-1";
|
||||
"finishing-template.jdf-f20-2" = "JDF Fold F20-2";
|
||||
"finishing-template.jdf-f24-1" = "JDF Fold F24-1";
|
||||
"finishing-template.jdf-f24-10" = "JDF Fold F24-10";
|
||||
"finishing-template.jdf-f24-11" = "JDF Fold F24-11";
|
||||
"finishing-template.jdf-f24-2" = "JDF Fold F24-2";
|
||||
"finishing-template.jdf-f24-3" = "JDF Fold F24-3";
|
||||
"finishing-template.jdf-f24-4" = "JDF Fold F24-4";
|
||||
"finishing-template.jdf-f24-5" = "JDF Fold F24-5";
|
||||
"finishing-template.jdf-f24-6" = "JDF Fold F24-6";
|
||||
"finishing-template.jdf-f24-7" = "JDF Fold F24-7";
|
||||
"finishing-template.jdf-f24-8" = "JDF Fold F24-8";
|
||||
"finishing-template.jdf-f24-9" = "JDF Fold F24-9";
|
||||
"finishing-template.jdf-f28-1" = "JDF Fold F28-1";
|
||||
"finishing-template.jdf-f32-1" = "JDF Fold F32-1";
|
||||
"finishing-template.jdf-f32-2" = "JDF Fold F32-2";
|
||||
"finishing-template.jdf-f32-3" = "JDF Fold F32-3";
|
||||
"finishing-template.jdf-f32-4" = "JDF Fold F32-4";
|
||||
"finishing-template.jdf-f32-5" = "JDF Fold F32-5";
|
||||
"finishing-template.jdf-f32-6" = "JDF Fold F32-6";
|
||||
"finishing-template.jdf-f32-7" = "JDF Fold F32-7";
|
||||
"finishing-template.jdf-f32-8" = "JDF Fold F32-8";
|
||||
"finishing-template.jdf-f32-9" = "JDF Fold F32-9";
|
||||
"finishing-template.jdf-f36-1" = "JDF Fold F36-1";
|
||||
"finishing-template.jdf-f36-2" = "JDF Fold F36-2";
|
||||
"finishing-template.jdf-f4-1" = "JDF Fold F4-1";
|
||||
"finishing-template.jdf-f4-2" = "JDF Fold F4-2";
|
||||
"finishing-template.jdf-f40-1" = "JDF Fold F40-1";
|
||||
"finishing-template.jdf-f48-1" = "JDF Fold F48-1";
|
||||
"finishing-template.jdf-f48-2" = "JDF Fold F48-2";
|
||||
"finishing-template.jdf-f6-1" = "JDF Fold F6-1";
|
||||
"finishing-template.jdf-f6-2" = "JDF Fold F6-2";
|
||||
"finishing-template.jdf-f6-3" = "JDF Fold F6-3";
|
||||
"finishing-template.jdf-f6-4" = "JDF Fold F6-4";
|
||||
"finishing-template.jdf-f6-5" = "JDF Fold F6-5";
|
||||
"finishing-template.jdf-f6-6" = "JDF Fold F6-6";
|
||||
"finishing-template.jdf-f6-7" = "JDF Fold F6-7";
|
||||
"finishing-template.jdf-f6-8" = "JDF Fold F6-8";
|
||||
"finishing-template.jdf-f64-1" = "JDF Fold F64-1";
|
||||
"finishing-template.jdf-f64-2" = "JDF Fold F64-2";
|
||||
"finishing-template.jdf-f8-1" = "JDF Fold F8-1";
|
||||
"finishing-template.jdf-f8-2" = "JDF Fold F8-2";
|
||||
"finishing-template.jdf-f8-3" = "JDF Fold F8-3";
|
||||
"finishing-template.jdf-f8-4" = "JDF Fold F8-4";
|
||||
"finishing-template.jdf-f8-5" = "JDF Fold F8-5";
|
||||
"finishing-template.jdf-f8-6" = "JDF Fold F8-6";
|
||||
"finishing-template.jdf-f8-7" = "JDF Fold F8-7";
|
||||
"finishing-template.jog-offset" = "Jog Offset";
|
||||
"finishing-template.laminate" = "Laminate";
|
||||
"finishing-template.punch" = "Punch";
|
||||
@@ -2668,24 +2681,24 @@
|
||||
"media-size" = "Media Dimensions";
|
||||
"media-size-name" = "Media Name";
|
||||
"media-source" = "Media Source";
|
||||
"media-source.alternate" = "Alternate";
|
||||
"media-source.alternate" = "Alternate Tray";
|
||||
"media-source.alternate-roll" = "Alternate Roll";
|
||||
"media-source.auto" = "Automatic";
|
||||
"media-source.bottom" = "Bottom";
|
||||
"media-source.auto" = "Automatic Tray";
|
||||
"media-source.bottom" = "Bottom Tray";
|
||||
"media-source.by-pass-tray" = "By-pass Tray";
|
||||
"media-source.center" = "Center";
|
||||
"media-source.disc" = "Disc";
|
||||
"media-source.envelope" = "Envelope";
|
||||
"media-source.hagaki" = "Hagaki";
|
||||
"media-source.large-capacity" = "Large Capacity";
|
||||
"media-source.left" = "Left";
|
||||
"media-source.main" = "Main";
|
||||
"media-source.center" = "Center Tray";
|
||||
"media-source.disc" = "Disc Feed";
|
||||
"media-source.envelope" = "Envelope Feed";
|
||||
"media-source.hagaki" = "Hagaki Feed";
|
||||
"media-source.large-capacity" = "Large Capacity Tray";
|
||||
"media-source.left" = "Left Tray";
|
||||
"media-source.main" = "Main Tray";
|
||||
"media-source.main-roll" = "Main Roll";
|
||||
"media-source.manual" = "Manual";
|
||||
"media-source.middle" = "Middle";
|
||||
"media-source.photo" = "Photo";
|
||||
"media-source.rear" = "Rear";
|
||||
"media-source.right" = "Right";
|
||||
"media-source.manual" = "Manual Feed";
|
||||
"media-source.middle" = "Middle Tray";
|
||||
"media-source.photo" = "Photo Tray";
|
||||
"media-source.rear" = "Rear Tray";
|
||||
"media-source.right" = "Right Tray";
|
||||
"media-source.roll-1" = "Roll 1";
|
||||
"media-source.roll-10" = "Roll 10";
|
||||
"media-source.roll-2" = "Roll 2";
|
||||
@@ -2721,14 +2734,14 @@
|
||||
"media-thickness" = "Media Thickness";
|
||||
"media-tooth" = "Media Tooth (Texture)";
|
||||
"media-tooth.antique" = "Antique";
|
||||
"media-tooth.calendared" = "Calendared";
|
||||
"media-tooth.calendared" = "Extra Smooth";
|
||||
"media-tooth.coarse" = "Coarse";
|
||||
"media-tooth.fine" = "Fine";
|
||||
"media-tooth.linen" = "Linen";
|
||||
"media-tooth.medium" = "Medium";
|
||||
"media-tooth.smooth" = "Smooth";
|
||||
"media-tooth.stipple" = "Stipple";
|
||||
"media-tooth.uncalendared" = "Uncalendared";
|
||||
"media-tooth.uncalendared" = "Rough";
|
||||
"media-tooth.vellum" = "Vellum";
|
||||
"media-top-margin" = "Media Top Margin";
|
||||
"media-type" = "Media Type";
|
||||
@@ -2738,6 +2751,19 @@
|
||||
"media-type.cardboard" = "Cardboard";
|
||||
"media-type.cardstock" = "Cardstock";
|
||||
"media-type.cd" = "CD";
|
||||
"media-type.com.hp.advanced-photo" = "Advanced Photo Paper";
|
||||
"media-type.com.hp.brochure-glossy" = "Glossy Brochure Paper";
|
||||
"media-type.com.hp.brochure-matte" = "Matte Brochure Paper";
|
||||
"media-type.com.hp.cover-matte" = "Matte Cover Paper";
|
||||
"media-type.com.hp.ecosmart-lite" = "Office Recycled Paper";
|
||||
"media-type.com.hp.everyday-glossy" = "Everyday Glossy Photo Paper";
|
||||
"media-type.com.hp.everyday-matte" = "Everyday Matte Paper";
|
||||
"media-type.com.hp.extra-heavy" = "Extra Heavyweight Paper";
|
||||
"media-type.com.hp.intermediate" = "Multipurpose Paper";
|
||||
"media-type.com.hp.mid-weight" = "Mid-Weight Paper";
|
||||
"media-type.com.hp.premium-inkjet" = "Premium Inkjet Paper";
|
||||
"media-type.com.hp.premium-photo" = "Premium Photo Glossy Paper";
|
||||
"media-type.com.hp.premium-presentation-matte" = "Premium Presentation Matte Paper";
|
||||
"media-type.continuous" = "Continuous";
|
||||
"media-type.continuous-long" = "Continuous Long";
|
||||
"media-type.continuous-short" = "Continuous Short";
|
||||
@@ -2786,6 +2812,10 @@
|
||||
"media-type.gravure-cylinder" = "Gravure Cylinder";
|
||||
"media-type.image-setter-paper" = "Image Setter Paper";
|
||||
"media-type.imaging-cylinder" = "Imaging Cylinder";
|
||||
"media-type.jp.co.canon_photo-paper-plus-glossy-ii" = "Photo Paper Plus Glossy II";
|
||||
"media-type.jp.co.canon_photo-paper-pro-platinum" = "Photo Paper Pro Platinum";
|
||||
"media-type.jp.co.canon-photo-paper-plus-glossy-ii" = "Photo Paper Plus Glossy II";
|
||||
"media-type.jp.co.canon-photo-paper-pro-platinum" = "Photo Paper Pro Platinum";
|
||||
"media-type.labels" = "Labels";
|
||||
"media-type.labels-colored" = "Colored Labels";
|
||||
"media-type.labels-glossy" = "Glossy Labels";
|
||||
|
||||
+108
-5
@@ -32,7 +32,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.4.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1474,6 +1474,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1524,6 +1530,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1538,6 +1550,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
@@ -1639,6 +1657,10 @@ msgstr ""
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s: no sé que fer."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2796,6 +2818,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr ""
|
||||
@@ -2891,6 +2917,10 @@ msgstr "La notify-pull-method «%s» és incorrecta."
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr "La notify-recipient-uri «%s» és incorrecta."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "El valor de number-up %d és incorrecte."
|
||||
@@ -2925,10 +2955,6 @@ msgstr "L'identificador %d de la sol·licitud és incorrecte."
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr "El número de versió %d.%d de la sol·licitud és incorrecte."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr ""
|
||||
|
||||
@@ -3598,6 +3624,9 @@ msgstr "Foli"
|
||||
msgid "Forbidden"
|
||||
msgstr "Prohibit"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3832,6 +3861,9 @@ msgstr "Franqueig per Internet en 3 parts"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "Protocol d'impressió per Internet"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr ""
|
||||
|
||||
@@ -5804,6 +5836,9 @@ msgstr ""
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr ""
|
||||
|
||||
@@ -7395,6 +7430,10 @@ msgstr ""
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr ""
|
||||
|
||||
@@ -8011,6 +8050,16 @@ msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr ""
|
||||
"lpadmin: el nom de la impressora només pot contenir caràcters imprimibles."
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -8066,6 +8115,9 @@ msgstr "lpadmin: l'argument «%s» és desconegut."
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr "lpadmin: l'opció «%c» és desconeguda."
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr "lpadmin: avís - s'ignora el contingut de la llista de tipus."
|
||||
|
||||
@@ -8817,6 +8869,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8961,6 +9052,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1297,6 +1297,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1347,6 +1353,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1361,6 +1373,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr ""
|
||||
@@ -1462,6 +1480,10 @@ msgstr ""
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2604,6 +2626,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr ""
|
||||
@@ -2699,6 +2725,10 @@ msgstr ""
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "Chybná hodnota %d."
|
||||
@@ -2733,10 +2763,6 @@ msgstr ""
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr ""
|
||||
|
||||
@@ -3396,6 +3422,9 @@ msgstr "Fólie"
|
||||
msgid "Forbidden"
|
||||
msgstr "Zakázaný"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3627,6 +3656,9 @@ msgstr "Internet Postage 3-Part"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "Internetový tiskový protokol"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr ""
|
||||
|
||||
@@ -5554,6 +5586,9 @@ msgstr ""
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr ""
|
||||
|
||||
@@ -7125,6 +7160,10 @@ msgstr ""
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr ""
|
||||
|
||||
@@ -7740,6 +7779,16 @@ msgstr ""
|
||||
msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -7787,6 +7836,9 @@ msgstr ""
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr ""
|
||||
|
||||
@@ -8530,6 +8582,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8674,6 +8765,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1361,6 +1361,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1411,6 +1417,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1425,6 +1437,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr ""
|
||||
@@ -1526,6 +1544,10 @@ msgstr "%s: Ungültige Version %s für \"-V\"."
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s: Unklar was zu tun ist."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2680,6 +2702,10 @@ msgstr "DIN B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr "Fehlerhafter 'document-format' Wert \"%s\"."
|
||||
@@ -2775,6 +2801,10 @@ msgstr "Ungültige notify-pull-method \"%s\"."
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr "Ungültige notify-recipient-uri \"%s\"."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "Ungültiger number-up-Wert %d."
|
||||
@@ -2809,10 +2839,6 @@ msgstr "Ungültige Anfrage-ID %d."
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr "Ungültige Versionsnummernanfrage %d.%d."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr "Ungültige Resource in URI"
|
||||
|
||||
@@ -3476,6 +3502,9 @@ msgstr "Folio"
|
||||
msgid "Forbidden"
|
||||
msgstr "Verboten"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3707,6 +3736,9 @@ msgstr "Internet Postage 3-teilig"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "Internet Printing Protocol"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr "Ungültige Argumente des Mediennamens."
|
||||
|
||||
@@ -5663,6 +5695,9 @@ msgstr "Nicht unterstützter Kompressionswert »%s«."
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr "Nicht unterstützter Wert des 'document-format' »%s«."
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr "Nicht unterstützter 'job-name' Wert."
|
||||
|
||||
@@ -7256,6 +7291,10 @@ msgstr ""
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr ""
|
||||
|
||||
@@ -7872,6 +7911,16 @@ msgstr "lpadmin: Drucker %s ist kein Mitglied der Klasse %s."
|
||||
msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr "lpadmin: Druckername darf nur druckbare Zeichen enthalten."
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -7925,6 +7974,9 @@ msgstr "lpadmin: unbekanntes Argument \"%s\"."
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr "lpadmin: Unbekannte Option »%c«."
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr "lpadmin: Warnung - Inhaltstypliste ignoriert."
|
||||
|
||||
@@ -8668,6 +8720,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8812,6 +8903,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -16,7 +16,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.2\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1504,6 +1504,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1554,6 +1560,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1568,6 +1580,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
@@ -1669,6 +1687,10 @@ msgstr "%s: Versión %s incorrecta para \"-V\"."
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s: No sé que hay que hacer."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2826,6 +2848,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr "Valor 'document-format' \"%s\" incorrecto."
|
||||
@@ -2921,6 +2947,10 @@ msgstr "notify-pull-method \"%s\" incorrecto."
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr "notify-recipient-uri \"%s\" incorrecto."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "Valor number-up (páginas por hoja) %d incorrecto."
|
||||
@@ -2955,10 +2985,6 @@ msgstr "Petición incorrecta de ID %d."
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr "Petición incorrecta de número de versión %d.%d."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr "Recurso incorrecto en URI"
|
||||
|
||||
@@ -3628,6 +3654,9 @@ msgstr "Folio"
|
||||
msgid "Forbidden"
|
||||
msgstr "Prohibido"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3859,6 +3888,9 @@ msgstr "Correo por Internet Parte-3"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "Protocolo de Impresión de Internet IPP"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr "Argumentos del nombre del papel no válidos."
|
||||
|
||||
@@ -5837,6 +5869,9 @@ msgstr "Valor 'compression' \"%s\" no implementado."
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr "Valor 'document-format' \"%s\" no implementado."
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr "Valor 'job-name' no implementado."
|
||||
|
||||
@@ -7443,6 +7478,10 @@ msgstr "ippfind: Falta una expresión antes de \"--or\"."
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr "ippfind: Falta un nombre de clave tras %s."
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr "ippfind: Falta el paréntesis de apertura."
|
||||
|
||||
@@ -8061,6 +8100,16 @@ msgstr ""
|
||||
"lpadmin: El nombre de la impresora sólo puede contener caracteres "
|
||||
"imprimibles."
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -8117,6 +8166,9 @@ msgstr "lpadmin: Argumento \"%s\" desconocido."
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr "lpadmin: Opción \"%c\" desconocida."
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr "lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta."
|
||||
|
||||
@@ -8863,6 +8915,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -9007,6 +9098,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1357,6 +1357,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1407,6 +1413,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1421,6 +1433,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f octets"
|
||||
@@ -1522,6 +1540,10 @@ msgstr "%s : Mauvaise version %s for « -V »."
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s : ne sait pas quoi faire."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2664,6 +2686,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr ""
|
||||
@@ -2759,6 +2785,10 @@ msgstr ""
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "Valeur de number-up %d incorrecte."
|
||||
@@ -2793,10 +2823,6 @@ msgstr ""
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr ""
|
||||
|
||||
@@ -3458,6 +3484,9 @@ msgstr "Folio"
|
||||
msgid "Forbidden"
|
||||
msgstr "Interdit"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3689,6 +3718,9 @@ msgstr "Affranchissement Internet en 3 parties"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "Internet Printing Protocol"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr ""
|
||||
|
||||
@@ -5621,6 +5653,9 @@ msgstr ""
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr ""
|
||||
|
||||
@@ -7192,6 +7227,10 @@ msgstr ""
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr ""
|
||||
|
||||
@@ -7807,6 +7846,16 @@ msgstr ""
|
||||
msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -7854,6 +7903,9 @@ msgstr ""
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr ""
|
||||
|
||||
@@ -8597,6 +8649,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8741,6 +8832,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1499,6 +1499,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1549,6 +1555,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1563,6 +1575,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f byte"
|
||||
@@ -1664,6 +1682,10 @@ msgstr "%s: la versione %s non è valida per \"-V\"."
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s: non so cosa fare."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2822,6 +2844,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr "Il valore di 'document-format' non è valido \"%s\"."
|
||||
@@ -2917,6 +2943,10 @@ msgstr "Il valore di notify-pull-method \"%s\" non è valido."
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr "Il valore di notify-recipient-uri \"%s\" non è valido."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "Il valore di number-up %d non è valido."
|
||||
@@ -2951,10 +2981,6 @@ msgstr "L'ID della richiesta %d non è valido."
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr "Il numero della versione richiesta %d.%d non è valido."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr ""
|
||||
|
||||
@@ -3626,6 +3652,9 @@ msgstr "Foglio"
|
||||
msgid "Forbidden"
|
||||
msgstr "Vietato"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3857,6 +3886,9 @@ msgstr "Internet Postage 3-Part"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "Internet Printing Protocol"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr "Gli argomenti del nome del supporto non sono validi."
|
||||
|
||||
@@ -5825,6 +5857,9 @@ msgstr "Valore di 'compressione' non supportato \"%s\"."
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr "Valore di 'document-format' non supportato \"%s\"."
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr "Valore di 'job-name' non supportato."
|
||||
|
||||
@@ -7417,6 +7452,10 @@ msgstr "ippfind: manca l'espressione prima di \"--or\"."
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr "ippfind: manca il nome della chiave dopo %s."
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr "ippfind: mancano le parentesi aperte."
|
||||
|
||||
@@ -8033,6 +8072,16 @@ msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr ""
|
||||
"lpadmin: il nome della stampante può contenere solo caratteri stampabili."
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -8088,6 +8137,9 @@ msgstr "lpadmin: argomento sconosciuto \"%s\"."
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr "lpadmin: opzione sconosciuta \"%c\"."
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr "lpadmin: attenzione - contenuto nell'elenco tipo ignorato."
|
||||
|
||||
@@ -8834,6 +8886,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8978,6 +9069,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -28,7 +28,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1475,6 +1475,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.1)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
|
||||
msgstr ""
|
||||
@@ -1525,6 +1531,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1539,6 +1551,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f バイト"
|
||||
@@ -1640,6 +1658,10 @@ msgstr "%s: -V オプションにおいて %s は不正なバージョンです
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s: 何が起きているか不明です。"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2792,6 +2814,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr "誤った 'document-format' の値です \"%s\"。"
|
||||
@@ -2887,6 +2913,10 @@ msgstr "\"%s\" は無効な notify-pull-method です。"
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr "URI \"%s\" は不正な notify-recipient-uri です。"
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "%d は不正な number-up 値です。"
|
||||
@@ -2921,10 +2951,6 @@ msgstr "%d は無効なリクエストIDです。"
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr "バージョン番号 %d.%d は無効なリクエストです。"
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr "URI のリソースが不正"
|
||||
|
||||
@@ -3600,6 +3626,9 @@ msgstr "フォリオ"
|
||||
msgid "Forbidden"
|
||||
msgstr "Forbidden"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3831,6 +3860,9 @@ msgstr "Internet Postage 3-Part"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "インターネット印刷プロトコル"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr "無効なメディア名引数です。"
|
||||
|
||||
@@ -5777,6 +5809,9 @@ msgstr "\"%s\" はサポートされていない 'compression' の値です。"
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr "\"%s\" はサポートされていない 'document-format' の値です。"
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr "サポートされていない 'job-name' の値です。"
|
||||
|
||||
@@ -7377,6 +7412,10 @@ msgstr "ippfind: \"--or\" の前には式が必要です。"
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr "ippfind: %s のあとにはキー名が必要です。"
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr "ippfind: 開きカッコが足りません。"
|
||||
|
||||
@@ -7995,6 +8034,16 @@ msgstr "lpadmin: プリンター %s はクラス %s のメンバーではあり
|
||||
msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr "lpadmin: プリンター名には表示可能文字だけが使用できます。"
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -8050,6 +8099,9 @@ msgstr "lpadmin: \"%s\" は未知の引数です。"
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr "lpadmin: \"%c\" は未知のオプションです。"
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr "lpadmin: 警告 - コンテンツタイプリストは無視されます。"
|
||||
|
||||
@@ -8803,6 +8855,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8947,6 +9038,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -40,7 +40,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.1.2\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1508,6 +1508,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1558,6 +1564,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1572,6 +1584,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
@@ -1673,6 +1691,10 @@ msgstr "%s: Versão inválida %s para \"-V\"."
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s: Não sei o que fazer."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2826,6 +2848,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr "Valor de \"document-format\" inválido \"%s\"."
|
||||
@@ -2921,6 +2947,10 @@ msgstr "notify-pull-method inválido \"%s\"."
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr "notify-recipient-uri inválido \"%s\"."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "Valor de number-up inválido %d."
|
||||
@@ -2955,10 +2985,6 @@ msgstr "ID da requisição inválido %d."
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr "Número da versão de requisição inválido %d.%d."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr "Recurso inválido na URI"
|
||||
|
||||
@@ -3629,6 +3655,9 @@ msgstr "Fólio"
|
||||
msgid "Forbidden"
|
||||
msgstr "Proibido"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3860,6 +3889,9 @@ msgstr "Internet Postage Parte-3"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "Protocolo de Impressão para Internet"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr "Argumentos de nome de mídia inválidos."
|
||||
|
||||
@@ -5830,6 +5862,9 @@ msgstr "Não suporte a \"compression\" com valor \"%s\"."
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr "Não há suporte a \"document-format\" com valor \"%s\"."
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr "Não há suporte ao valor de \"job-name\"."
|
||||
|
||||
@@ -7422,6 +7457,10 @@ msgstr "ippfind: Faltando expressão antes de \"--or\"."
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr "ippfind: Faltando nome da chave após %s."
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr "ippfind: Faltando parênteses de abertura."
|
||||
|
||||
@@ -8038,6 +8077,16 @@ msgstr "lpadmin: Impressora %s não é membro da classe %s."
|
||||
msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr "lpadmin: Nome da impressora só pode conter caracteres imprimíveis."
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -8093,6 +8142,9 @@ msgstr "lpadmin: Argumento desconhecido \"%s\"."
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr "lpadmin: Opção desconhecida \"%c\"."
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr "lpadmin: Aviso - lista de tipos de conteúdos ignorada."
|
||||
|
||||
@@ -8838,6 +8890,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8982,6 +9073,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1436,6 +1436,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1486,6 +1492,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1500,6 +1512,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f байт"
|
||||
@@ -1601,6 +1619,10 @@ msgstr "%s: Неверная версия %s для \"-V\"."
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s: Дальнейшие действия неизвестны."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2760,6 +2782,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr ""
|
||||
@@ -2855,6 +2881,10 @@ msgstr "Неверное значение notify-pull-method \"%s\"."
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr "Неверный notify-recipient-uri \"%s\"."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "Неверное значение number-up %d."
|
||||
@@ -2889,10 +2919,6 @@ msgstr "Неверный ID запроса %d."
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr "Неверный номер версии запроса %d.%d."
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr ""
|
||||
|
||||
@@ -3557,6 +3583,9 @@ msgstr "Фолио"
|
||||
msgid "Forbidden"
|
||||
msgstr "Запрещено"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr ""
|
||||
|
||||
@@ -3788,6 +3817,9 @@ msgstr "Наклейки Internet Postage 3-Part"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "Протокол интернет-печати"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr "Неверные аргументы имени бумаги."
|
||||
|
||||
@@ -5736,6 +5768,9 @@ msgstr "Неподдерживаемое значение 'compression' \"%s\"."
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr "Неподдерживаемое значение'document-format' \"%s\"."
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr "Неподдерживаемое значение 'job-name'."
|
||||
|
||||
@@ -7333,6 +7368,10 @@ msgstr "ippfind: Отсутствует выражение перед \"--or\"."
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr "ippfind: Отсутствует key name после %s."
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr "ippfind: Отсутствует открывающая скобка."
|
||||
|
||||
@@ -7948,6 +7987,16 @@ msgstr "lpadmin: Принтер %s не находится в группе %s."
|
||||
msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr "lpadmin: Имя принтера может содержать только печатаемые символы."
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -8003,6 +8052,9 @@ msgstr "lpadmin: Неизвестный аргумент \"%s\"."
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr "lpadmin: Неизвестный параметр \"%c\"."
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr "lpadmin: Внимание - список типов содержимого пропущен."
|
||||
|
||||
@@ -8748,6 +8800,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8892,6 +8983,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
+108
-5
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2017-10-23 17:48-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"
|
||||
@@ -1430,6 +1430,12 @@ msgid ""
|
||||
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
|
||||
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 ""
|
||||
@@ -1480,6 +1486,12 @@ msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
|
||||
"8.3)."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
|
||||
msgstr ""
|
||||
@@ -1494,6 +1506,12 @@ msgid ""
|
||||
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute in wrong group."
|
||||
msgstr ""
|
||||
|
||||
msgid "\"requesting-user-name\" attribute with wrong syntax."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
|
||||
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f 字节"
|
||||
@@ -1595,6 +1613,10 @@ msgstr "%s:用于“-V”的版本 %s 无效。"
|
||||
msgid "%s: Don't know what to do."
|
||||
msgstr "%s:不知如何处理。"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Error - %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"."
|
||||
@@ -2737,6 +2759,10 @@ msgstr "B9"
|
||||
msgid "Back Print Film"
|
||||
msgstr "印片用胶片"
|
||||
|
||||
#, c-format
|
||||
msgid "Bad '%s' value."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad 'document-format' value \"%s\"."
|
||||
msgstr "无效的“document-format”值“%s”。"
|
||||
@@ -2832,6 +2858,10 @@ msgstr "无效的 notify-pull-method 值“%s”。"
|
||||
msgid "Bad notify-recipient-uri \"%s\"."
|
||||
msgstr "无效的 notify-recipient-uri 值“%s”。"
|
||||
|
||||
#, c-format
|
||||
msgid "Bad notify-user-data \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Bad number-up value %d."
|
||||
msgstr "无效的 number-up 值 %d。"
|
||||
@@ -2866,10 +2896,6 @@ msgstr "无效的请求 ID %d。"
|
||||
msgid "Bad request version number %d.%d."
|
||||
msgstr "无效的请求版本号 %d.%d。"
|
||||
|
||||
#, c-format
|
||||
msgid "Bad requesting-user-name value: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bad resource in URI"
|
||||
msgstr "URI 中的资源无效"
|
||||
|
||||
@@ -3539,6 +3565,9 @@ msgstr "对开本"
|
||||
msgid "Forbidden"
|
||||
msgstr "已禁止"
|
||||
|
||||
msgid "Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Cut Tabs"
|
||||
msgstr "完整裁剪标签"
|
||||
|
||||
@@ -3770,6 +3799,9 @@ msgstr "网邮 3 部"
|
||||
msgid "Internet Printing Protocol"
|
||||
msgstr "互联网打印协议"
|
||||
|
||||
msgid "Invalid group tag."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid media name arguments."
|
||||
msgstr "无效的媒体名称参数。"
|
||||
|
||||
@@ -5699,6 +5731,9 @@ msgstr "不支持的“compression”值“%s”。"
|
||||
msgid "Unsupported 'document-format' value \"%s\"."
|
||||
msgstr "不支持的“document-format”值“%s”。"
|
||||
|
||||
msgid "Unsupported 'job-hold-until' value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsupported 'job-name' value."
|
||||
msgstr "不支持的“job-name”值。"
|
||||
|
||||
@@ -7288,6 +7323,10 @@ msgstr "ippfind:“--or”前缺少表达式。"
|
||||
msgid "ippfind: Missing key name after %s."
|
||||
msgstr "ippfind:在 %s 后缺少键名。"
|
||||
|
||||
#, c-format
|
||||
msgid "ippfind: Missing name after %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "ippfind: Missing open parenthesis."
|
||||
msgstr "ippfind:缺少左括号。"
|
||||
|
||||
@@ -7903,6 +7942,16 @@ msgstr "lpadmin:打印机 %s 不是类 %s 中的成员。"
|
||||
msgid "lpadmin: Printer name can only contain printable characters."
|
||||
msgstr "lpadmin:打印机名称中只能包含可打印字符。"
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Raw queues are deprecated and will stop working in a future version "
|
||||
"of CUPS."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: System V interface scripts are no longer supported for security "
|
||||
"reasons."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"lpadmin: Unable to add a printer to the class:\n"
|
||||
" You must specify a printer name first."
|
||||
@@ -7958,6 +8007,9 @@ msgstr "lpadmin:未知参数“%s”。"
|
||||
msgid "lpadmin: Unknown option \"%c\"."
|
||||
msgstr "lpadmin:未知选项“%c”。"
|
||||
|
||||
msgid "lpadmin: Use the 'everywhere' model for shared printers."
|
||||
msgstr ""
|
||||
|
||||
msgid "lpadmin: Warning - content type list ignored."
|
||||
msgstr "lpadmin:警告 — 内容类型列表已被忽略。"
|
||||
|
||||
@@ -8701,6 +8753,45 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Advanced Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Glossy Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Matte Brochure Paper"
|
||||
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Cover Paper"
|
||||
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "Office Recycled Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Photo Paper"
|
||||
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Multipurpose Paper"
|
||||
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Premium Inkjet Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Premium Photo Glossy Paper"
|
||||
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Presentation Matte Paper"
|
||||
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
|
||||
@@ -8845,6 +8936,18 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
|
||||
|
||||
@@ -157,6 +157,11 @@ The server name may be included in filenames using the string "%s", for example:
|
||||
|
||||
.fi
|
||||
The default is "/var/log/cups/page_log".
|
||||
.\"#PassEnv
|
||||
.TP 5
|
||||
\fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
|
||||
Passes the specified environment variable(s) to child processes.
|
||||
Note: the standard CUPS filter and backend environment variables cannot be overridden using this directive.
|
||||
.\"#RemoteRoot
|
||||
.TP 5
|
||||
\fBRemoteRoot \fIusername\fR
|
||||
@@ -191,6 +196,11 @@ macOS uses its keychain database to store certificates and keys while other plat
|
||||
\fBServerRoot \fIdirectory\fR
|
||||
Specifies the directory containing the server configuration files.
|
||||
The default is "/etc/cups".
|
||||
.\"#SetEnv
|
||||
.TP 5
|
||||
\fBSetEnv \fIvariable value\fR
|
||||
Set the specified environment variable to be passed to child processes.
|
||||
Note: the standard CUPS filter and backend environment variables cannot be overridden using this directive.
|
||||
.\"#StateDir
|
||||
.TP 5
|
||||
\fBStateDir \fIdirectory\fR
|
||||
|
||||
+7
-15
@@ -1,8 +1,8 @@
|
||||
.\"
|
||||
.\" cupsd.conf man page for CUPS.
|
||||
.\"
|
||||
.\" Copyright 2007-2017 by Apple Inc.
|
||||
.\" Copyright 1997-2006 by Easy Software Products.
|
||||
.\" Copyright © 2007-2018 by Apple Inc.
|
||||
.\" Copyright © 1997-2006 by Easy Software Products.
|
||||
.\"
|
||||
.\" These coded instructions, statements, and computer programs are the
|
||||
.\" property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -10,7 +10,7 @@
|
||||
.\" which should have been included with this file. If this file is
|
||||
.\" file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
.\"
|
||||
.TH cupsd.conf 5 "CUPS" "19 October 2017" "Apple Inc."
|
||||
.TH cupsd.conf 5 "CUPS" "24 April 2018" "Apple Inc."
|
||||
.SH NAME
|
||||
cupsd.conf \- server configuration file for cups
|
||||
.SH DESCRIPTION
|
||||
@@ -132,12 +132,12 @@ The default value is "30".
|
||||
\fBErrorPolicy abort-job\fR
|
||||
Specifies that a failed print job should be aborted (discarded) unless otherwise specified for the printer.
|
||||
.TP 5
|
||||
\fBErrorPolicy retry-current-job\fR
|
||||
Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
|
||||
.TP 5
|
||||
\fBErrorPolicy retry-job\fR
|
||||
Specifies that a failed print job should be retried at a later time unless otherwise specified for the printer.
|
||||
.TP 5
|
||||
\fBErrorPolicy retry-this-job\fR
|
||||
Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
|
||||
.TP 5
|
||||
\fBErrorPolicy stop-printer\fR
|
||||
Specifies that a failed print job should stop the printer unless otherwise specified for the printer. The 'stop-printer' error policy is the default.
|
||||
.\"#FilterLimit
|
||||
@@ -342,10 +342,6 @@ The default is "1048576" (1MB).
|
||||
\fBMultipleOperationTimeout \fIseconds\fR
|
||||
Specifies the maximum amount of time to allow between files in a multiple file print job.
|
||||
The default is "300" (5 minutes).
|
||||
.\"#PassEnv
|
||||
.TP 5
|
||||
\fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
|
||||
Passes the specified environment variable(s) to child processes.
|
||||
.\"#Policy
|
||||
.TP 5
|
||||
\fB<Policy \fIname\fB> \fR... \fB</Policy>\fR
|
||||
@@ -426,10 +422,6 @@ Specifies what information is included in the Server header of HTTP responses.
|
||||
command.
|
||||
"Full" reports "CUPS 2.0.0 (UNAME) IPP/2.0".
|
||||
The default is "Minimal".
|
||||
.\"#SetEnv
|
||||
.TP 5
|
||||
\fBSetEnv \fIvariable value\fR
|
||||
Set the specified environment variable to be passed to child processes.
|
||||
.\"#SSLListen
|
||||
.TP 5
|
||||
\fBSSLListen \fIipv4-address\fB:\fIport\fR
|
||||
@@ -884,4 +876,4 @@ Require authentication for accesses from outside the 10. network:
|
||||
.BR subscriptions.conf (5),
|
||||
CUPS Online Help (http://localhost:631/help)
|
||||
.SH COPYRIGHT
|
||||
Copyright \[co] 2007-2017 by Apple Inc.
|
||||
Copyright \[co] 2007-2018 by Apple Inc.
|
||||
|
||||
+8
-3
@@ -1,7 +1,7 @@
|
||||
.\"
|
||||
.\" ippfind man page for CUPS.
|
||||
.\"
|
||||
.\" Copyright 2013-2014 by Apple Inc.
|
||||
.\" Copyright © 2013-2018 by Apple Inc.
|
||||
.\"
|
||||
.\" These coded instructions, statements, and computer programs are the
|
||||
.\" property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -9,7 +9,7 @@
|
||||
.\" which should have been included with this file. If this file is
|
||||
.\" file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
.\"
|
||||
.TH ippfind 1 "CUPS" "11 June 2014" "Apple Inc."
|
||||
.TH ippfind 1 "CUPS" "14 February 2018" "Apple Inc."
|
||||
.SH NAME
|
||||
ippfind \- find internet printing protocol printers
|
||||
.SH SYNOPSIS
|
||||
@@ -84,6 +84,11 @@ The result is true if the URI is accessible, false otherwise.
|
||||
.B \-\-local
|
||||
True if the service is local to this computer.
|
||||
.TP 5
|
||||
\fB\-N \fIname\fR
|
||||
.TP 5
|
||||
\fB\-\-literal\-name \fIname\fR
|
||||
True if the service instance name matches the given name.
|
||||
.TP 5
|
||||
\fB\-n \fIregex\fR
|
||||
.TP 5
|
||||
\fB\-\-name \fIregex\fR
|
||||
@@ -253,4 +258,4 @@ Similarly, to send a PostScript test page to every PostScript printer, run:
|
||||
.SH SEE ALSO
|
||||
.BR ipptool (1)
|
||||
.SH COPYRIGHT
|
||||
Copyright \[co] 2013-2015 by Apple Inc.
|
||||
Copyright \[co] 2013-2018 by Apple Inc.
|
||||
|
||||
+4
-3
@@ -1,8 +1,8 @@
|
||||
.\"
|
||||
.\" lpadmin man page for CUPS.
|
||||
.\"
|
||||
.\" Copyright 2007-2016 by Apple Inc.
|
||||
.\" Copyright 1997-2006 by Easy Software Products.
|
||||
.\" Copyright © 2007-2018 by Apple Inc.
|
||||
.\" Copyright © 1997-2006 by Easy Software Products.
|
||||
.\"
|
||||
.\" These coded instructions, statements, and computer programs are the
|
||||
.\" property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -10,7 +10,7 @@
|
||||
.\" which should have been included with this file. If this file is
|
||||
.\" file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
.\"
|
||||
.TH lpadmin 8 "CUPS" "29 March 2016" "Apple Inc."
|
||||
.TH lpadmin 8 "CUPS" "19 March 2018" "Apple Inc."
|
||||
.SH NAME
|
||||
lpadmin \- configure cups printers and classes
|
||||
.SH SYNOPSIS
|
||||
@@ -91,6 +91,7 @@ Use the \fI-m\fR option with the
|
||||
.BR lpinfo (8)
|
||||
command to get a list of supported models.
|
||||
The model "raw" clears any existing PPD file and the model "everywhere" queries the printer referred to by the specified IPP \fIdevice-uri\fR.
|
||||
Note: The "raw" model is deprecated and will not be supported in a future version of CUPS.
|
||||
.TP 5
|
||||
\fB\-o cupsIPPSupplies=true\fR
|
||||
.TP 5
|
||||
|
||||
+4
-19
@@ -1,8 +1,8 @@
|
||||
.\"
|
||||
.\" lpoptions man page for CUPS.
|
||||
.\"
|
||||
.\" Copyright 2007-2014 by Apple Inc.
|
||||
.\" Copyright 1997-2006 by Easy Software Products.
|
||||
.\" Copyright © 2007-2018 by Apple Inc.
|
||||
.\" Copyright © 1997-2006 by Easy Software Products.
|
||||
.\"
|
||||
.\" These coded instructions, statements, and computer programs are the
|
||||
.\" property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -10,7 +10,7 @@
|
||||
.\" which should have been included with this file. If this file is
|
||||
.\" file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
.\"
|
||||
.TH lpoptions 1 "CUPS" "12 June 2014" "Apple Inc."
|
||||
.TH lpoptions 1 "CUPS" "10 April 2018" "Apple Inc."
|
||||
.SH NAME
|
||||
lpoptions \- display or set printer options and defaults
|
||||
.SH SYNOPSIS
|
||||
@@ -18,9 +18,6 @@ lpoptions \- display or set printer options and defaults
|
||||
[
|
||||
.B \-E
|
||||
] [
|
||||
.B \-U
|
||||
.I username
|
||||
] [
|
||||
\fB\-h \fIserver\fR[\fB:\fIport\fR]
|
||||
]
|
||||
\fB\-d \fIdestination\fR[\fB/\fIinstance\fR]
|
||||
@@ -32,9 +29,6 @@ lpoptions \- display or set printer options and defaults
|
||||
[
|
||||
.B \-E
|
||||
] [
|
||||
.B \-U
|
||||
.I username
|
||||
] [
|
||||
\fB\-h \fIserver\fR[\fB:\fIport\fR]
|
||||
] [
|
||||
\fB\-p \fIdestination\fR[\fB/\fIinstance\fR]
|
||||
@@ -45,9 +39,6 @@ lpoptions \- display or set printer options and defaults
|
||||
[
|
||||
.B \-E
|
||||
] [
|
||||
.B \-U
|
||||
.I username
|
||||
] [
|
||||
\fB\-h \fIserver\fR[\fB:\fIport\fR]
|
||||
] [
|
||||
\fB\-p \fIdestination\fR[\fB/\fIinstance\fR]
|
||||
@@ -59,9 +50,6 @@ lpoptions \- display or set printer options and defaults
|
||||
[
|
||||
.B \-E
|
||||
] [
|
||||
.B \-U
|
||||
.I username
|
||||
] [
|
||||
\fB\-h \fIserver\fR[\fB:\fIport\fR]
|
||||
]
|
||||
\fB\-x \fIdestination\fR[\fB/\fIinstance\fR]
|
||||
@@ -86,9 +74,6 @@ Otherwise, the per-user defaults are managed in the \fI~/.cups/lpoptions\fR file
|
||||
.B \-E
|
||||
Enables encryption when communicating with the CUPS server.
|
||||
.TP 5
|
||||
\fB\-U \fIusername\fR
|
||||
Uses an alternate username.
|
||||
.TP 5
|
||||
\fB\-d \fIdestination\fR[\fB/\fIinstance\fR]
|
||||
Sets the user default printer to \fIdestination\fR.
|
||||
If \fIinstance\fR is supplied then that particular instance is used.
|
||||
@@ -133,4 +118,4 @@ The \fBlpoptions\fR command is unique to CUPS.
|
||||
.BR lprm (1),
|
||||
CUPS Online Help (http://localhost:631/help)
|
||||
.SH COPYRIGHT
|
||||
Copyright \[co] 2007-2017 by Apple Inc.
|
||||
Copyright \[co] 2007-2018 by Apple Inc.
|
||||
|
||||
+9
-4
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* "mailto" notifier for CUPS.
|
||||
*
|
||||
* Copyright 2007-2011 by Apple Inc.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -36,8 +36,7 @@ char mailtoSendmail[1024]; /* Sendmail program to use */
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
void email_message(const char *to, const char *subject,
|
||||
const char *text);
|
||||
void email_message(const char *to, const char *subject, const char *text);
|
||||
int load_configuration(void);
|
||||
cups_file_t *pipe_sendmail(const char *to);
|
||||
void print_attributes(ipp_t *ipp, int indent);
|
||||
@@ -233,7 +232,9 @@ email_message(const char *to, /* I - Recipient of message */
|
||||
|
||||
|
||||
if (strchr(mailtoSMTPServer, ':'))
|
||||
{
|
||||
fp = cupsFileOpen(mailtoSMTPServer, "s");
|
||||
}
|
||||
else
|
||||
{
|
||||
char spec[1024]; /* Host:service spec */
|
||||
@@ -252,6 +253,10 @@ email_message(const char *to, /* I - Recipient of message */
|
||||
|
||||
fprintf(stderr, "DEBUG: Connected to \"%s\"...\n", mailtoSMTPServer);
|
||||
|
||||
if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500)
|
||||
goto smtp_error;
|
||||
fprintf(stderr, "DEBUG: <<< %s\n", response);
|
||||
|
||||
cupsFilePrintf(fp, "HELO %s\r\n",
|
||||
httpGetHostname(NULL, hostbuf, sizeof(hostbuf)));
|
||||
fprintf(stderr, "DEBUG: >>> HELO %s\n", hostbuf);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// Shared message catalog class for the CUPS PPD Compiler.
|
||||
//
|
||||
// Copyright 2007-2016 by Apple Inc.
|
||||
// Copyright 2007-2017 by Apple Inc.
|
||||
// Copyright 2002-2006 by Easy Software Products.
|
||||
//
|
||||
// These coded instructions, statements, and computer programs are the
|
||||
@@ -58,7 +58,7 @@ ppdcCatalog::ppdcCatalog(const char *l, // I - Locale
|
||||
filename = new ppdcString(f);
|
||||
messages = new ppdcArray();
|
||||
|
||||
if (l)
|
||||
if (l && strcmp(l, "en"))
|
||||
{
|
||||
// Try loading the base messages for this locale...
|
||||
char pofile[1024]; // Message catalog file
|
||||
|
||||
@@ -143,6 +143,7 @@ Version "2.1"
|
||||
Throughput 8
|
||||
ManualCopies Yes
|
||||
ColorDevice No
|
||||
Attribute "cupsSNMPSupplies" "" "false"
|
||||
|
||||
HWMargins 2 14.9 2 14.9
|
||||
|
||||
@@ -437,6 +438,7 @@ Version "2.1"
|
||||
ModelNumber $INTELLITECH_PCL
|
||||
Throughput 8
|
||||
ColorDevice No
|
||||
Attribute "cupsSNMPSupplies" "" "false"
|
||||
|
||||
HWMargins 0 5.76 0 5.76
|
||||
VariablePaperSize Yes
|
||||
@@ -588,6 +590,7 @@ Version "2.1"
|
||||
DriverType label
|
||||
Throughput 8
|
||||
ColorDevice False
|
||||
Attribute "cupsSNMPSupplies" "" "false"
|
||||
|
||||
// Zebra CPCL Label Printer
|
||||
{
|
||||
|
||||
+18
-136
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Authorization routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* This file contains Kerberos support code, copyright 2006 by
|
||||
* Jelmer Vernooij.
|
||||
@@ -71,9 +71,6 @@ static int check_authref(cupsd_client_t *con, const char *right);
|
||||
static int compare_locations(cupsd_location_t *a,
|
||||
cupsd_location_t *b);
|
||||
static cupsd_authmask_t *copy_authmask(cupsd_authmask_t *am, void *data);
|
||||
#if !HAVE_LIBPAM
|
||||
static char *cups_crypt(const char *pw, const char *salt);
|
||||
#endif /* !HAVE_LIBPAM */
|
||||
static void free_authmask(cupsd_authmask_t *am, void *data);
|
||||
#if HAVE_LIBPAM
|
||||
static int pam_func(int, const struct pam_message **,
|
||||
@@ -694,14 +691,14 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
|
||||
* client...
|
||||
*/
|
||||
|
||||
pass = cups_crypt(password, pw->pw_passwd);
|
||||
pass = crypt(password, pw->pw_passwd);
|
||||
|
||||
if (!pass || strcmp(pw->pw_passwd, pass))
|
||||
{
|
||||
# ifdef HAVE_SHADOW_H
|
||||
if (spw)
|
||||
{
|
||||
pass = cups_crypt(password, spw->sp_pwdp);
|
||||
pass = crypt(password, spw->sp_pwdp);
|
||||
|
||||
if (pass == NULL || strcmp(spw->sp_pwdp, pass))
|
||||
{
|
||||
@@ -1146,7 +1143,8 @@ cupsdCheckGroup(
|
||||
const char *groupname) /* I - Group name */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
struct group *group; /* System group info */
|
||||
struct group *group; /* Group info */
|
||||
gid_t groupid; /* ID of named group */
|
||||
#ifdef HAVE_MBR_UID_TO_UUID
|
||||
uuid_t useruuid, /* UUID for username */
|
||||
groupuuid; /* UUID for groupname */
|
||||
@@ -1176,6 +1174,8 @@ cupsdCheckGroup(
|
||||
* Group exists, check it...
|
||||
*/
|
||||
|
||||
groupid = group->gr_gid;
|
||||
|
||||
#ifdef HAVE_GETGROUPLIST
|
||||
if (user)
|
||||
{
|
||||
@@ -1194,22 +1194,27 @@ cupsdCheckGroup(
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
for (i = 0; i < ngroups; i ++)
|
||||
if ((int)group->gr_gid == (int)groups[i])
|
||||
if ((int)groupid == (int)groups[i])
|
||||
return (1);
|
||||
}
|
||||
#endif /* HAVE_GETGROUPLIST */
|
||||
|
||||
#else
|
||||
for (i = 0; group->gr_mem[i]; i ++)
|
||||
{
|
||||
if (!_cups_strcasecmp(username, group->gr_mem[i]))
|
||||
return (1);
|
||||
}
|
||||
#endif /* HAVE_GETGROUPLIST */
|
||||
}
|
||||
else
|
||||
groupid = (gid_t)-1;
|
||||
|
||||
/*
|
||||
* Group doesn't exist or user not in group list, check the group ID
|
||||
* against the user's group ID...
|
||||
*/
|
||||
|
||||
if (user && group && group->gr_gid == user->pw_gid)
|
||||
if (user && groupid == user->pw_gid)
|
||||
return (1);
|
||||
|
||||
#ifdef HAVE_MBR_UID_TO_UUID
|
||||
@@ -1219,13 +1224,13 @@ cupsdCheckGroup(
|
||||
|
||||
if (user && !mbr_uid_to_uuid(user->pw_uid, useruuid))
|
||||
{
|
||||
if (group)
|
||||
if (groupid != (gid_t)-1)
|
||||
{
|
||||
/*
|
||||
* Map group name to UUID and check membership...
|
||||
*/
|
||||
|
||||
if (!mbr_gid_to_uuid(group->gr_gid, groupuuid))
|
||||
if (!mbr_gid_to_uuid(groupid, groupuuid))
|
||||
if (!mbr_check_membership(useruuid, groupuuid, &is_member))
|
||||
if (is_member)
|
||||
return (1);
|
||||
@@ -1987,129 +1992,6 @@ copy_authmask(cupsd_authmask_t *mask, /* I - Existing auth mask */
|
||||
}
|
||||
|
||||
|
||||
#if !HAVE_LIBPAM
|
||||
/*
|
||||
* 'cups_crypt()' - Encrypt the password using the DES or MD5 algorithms,
|
||||
* as needed.
|
||||
*/
|
||||
|
||||
static char * /* O - Encrypted password */
|
||||
cups_crypt(const char *pw, /* I - Password string */
|
||||
const char *salt) /* I - Salt (key) string */
|
||||
{
|
||||
if (!strncmp(salt, "$1$", 3))
|
||||
{
|
||||
/*
|
||||
* Use MD5 passwords without the benefit of PAM; this is for
|
||||
* Slackware Linux, and the algorithm was taken from the
|
||||
* old shadow-19990827/lib/md5crypt.c source code... :(
|
||||
*/
|
||||
|
||||
int i; /* Looping var */
|
||||
unsigned long n; /* Output number */
|
||||
int pwlen; /* Length of password string */
|
||||
const char *salt_end; /* End of "salt" data for MD5 */
|
||||
char *ptr; /* Pointer into result string */
|
||||
_cups_md5_state_t state; /* Primary MD5 state info */
|
||||
_cups_md5_state_t state2; /* Secondary MD5 state info */
|
||||
unsigned char digest[16]; /* MD5 digest result */
|
||||
static char result[120]; /* Final password string */
|
||||
|
||||
|
||||
/*
|
||||
* Get the salt data between dollar signs, e.g. $1$saltdata$md5.
|
||||
* Get a maximum of 8 characters of salt data after $1$...
|
||||
*/
|
||||
|
||||
for (salt_end = salt + 3; *salt_end && (salt_end - salt) < 11; salt_end ++)
|
||||
if (*salt_end == '$')
|
||||
break;
|
||||
|
||||
/*
|
||||
* Compute the MD5 sum we need...
|
||||
*/
|
||||
|
||||
pwlen = strlen(pw);
|
||||
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, (unsigned char *)pw, pwlen);
|
||||
_cupsMD5Append(&state, (unsigned char *)salt, salt_end - salt);
|
||||
|
||||
_cupsMD5Init(&state2);
|
||||
_cupsMD5Append(&state2, (unsigned char *)pw, pwlen);
|
||||
_cupsMD5Append(&state2, (unsigned char *)salt + 3, salt_end - salt - 3);
|
||||
_cupsMD5Append(&state2, (unsigned char *)pw, pwlen);
|
||||
_cupsMD5Finish(&state2, digest);
|
||||
|
||||
for (i = pwlen; i > 0; i -= 16)
|
||||
_cupsMD5Append(&state, digest, i > 16 ? 16 : i);
|
||||
|
||||
for (i = pwlen; i > 0; i >>= 1)
|
||||
_cupsMD5Append(&state, (unsigned char *)((i & 1) ? "" : pw), 1);
|
||||
|
||||
_cupsMD5Finish(&state, digest);
|
||||
|
||||
for (i = 0; i < 1000; i ++)
|
||||
{
|
||||
_cupsMD5Init(&state);
|
||||
|
||||
if (i & 1)
|
||||
_cupsMD5Append(&state, (unsigned char *)pw, pwlen);
|
||||
else
|
||||
_cupsMD5Append(&state, digest, 16);
|
||||
|
||||
if (i % 3)
|
||||
_cupsMD5Append(&state, (unsigned char *)salt + 3, salt_end - salt - 3);
|
||||
|
||||
if (i % 7)
|
||||
_cupsMD5Append(&state, (unsigned char *)pw, pwlen);
|
||||
|
||||
if (i & 1)
|
||||
_cupsMD5Append(&state, digest, 16);
|
||||
else
|
||||
_cupsMD5Append(&state, (unsigned char *)pw, pwlen);
|
||||
|
||||
_cupsMD5Finish(&state, digest);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the final sum to the result string and return...
|
||||
*/
|
||||
|
||||
memcpy(result, salt, (size_t)(salt_end - salt));
|
||||
ptr = result + (salt_end - salt);
|
||||
*ptr++ = '$';
|
||||
|
||||
for (i = 0; i < 5; i ++, ptr += 4)
|
||||
{
|
||||
n = ((((unsigned)digest[i] << 8) | (unsigned)digest[i + 6]) << 8);
|
||||
|
||||
if (i < 4)
|
||||
n |= (unsigned)digest[i + 12];
|
||||
else
|
||||
n |= (unsigned)digest[5];
|
||||
|
||||
to64(ptr, n, 4);
|
||||
}
|
||||
|
||||
to64(ptr, (unsigned)digest[11], 2);
|
||||
ptr += 2;
|
||||
*ptr = '\0';
|
||||
|
||||
return (result);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Use the standard crypt() function...
|
||||
*/
|
||||
|
||||
return (crypt(pw, salt));
|
||||
}
|
||||
}
|
||||
#endif /* !HAVE_LIBPAM */
|
||||
|
||||
|
||||
/*
|
||||
* 'free_authmask()' - Free function for auth masks.
|
||||
*/
|
||||
|
||||
+42
-13
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Client routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* This file contains Kerberos support code, copyright 2006 by
|
||||
* Jelmer Vernooij.
|
||||
@@ -818,6 +818,18 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
|
||||
|
||||
if (status == HTTP_STATUS_OK)
|
||||
{
|
||||
/*
|
||||
* Record whether the client is a web browser. "Mozilla" was the original
|
||||
* and it seems that every web browser in existence now uses that as the
|
||||
* prefix with additional information identifying *which* browser.
|
||||
*
|
||||
* Chrome (at least) has problems with multiple WWW-Authenticate values in
|
||||
* a single header, so we only report Basic or Negotiate to web browsers and
|
||||
* leave the multiple choices to the native CUPS client...
|
||||
*/
|
||||
|
||||
con->is_browser = !strncmp(httpGetField(con->http, HTTP_FIELD_USER_AGENT), "Mozilla/", 8);
|
||||
|
||||
if (httpGetField(con->http, HTTP_FIELD_ACCEPT_LANGUAGE)[0])
|
||||
{
|
||||
/*
|
||||
@@ -2350,18 +2362,20 @@ cupsdSendHeader(
|
||||
auth_str[0] = '\0';
|
||||
|
||||
if (auth_type == CUPSD_AUTH_BASIC)
|
||||
{
|
||||
strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str));
|
||||
}
|
||||
else if (auth_type == CUPSD_AUTH_NEGOTIATE)
|
||||
{
|
||||
#ifdef AF_LOCAL
|
||||
#if defined(SO_PEERCRED) && defined(AF_LOCAL)
|
||||
if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
|
||||
strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str));
|
||||
strlcpy(auth_str, "PeerCred", sizeof(auth_str));
|
||||
else
|
||||
#endif /* AF_LOCAL */
|
||||
#endif /* SO_PEERCRED && AF_LOCAL */
|
||||
strlcpy(auth_str, "Negotiate", sizeof(auth_str));
|
||||
}
|
||||
|
||||
if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE &&
|
||||
if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE && !con->is_browser &&
|
||||
!_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
|
||||
{
|
||||
/*
|
||||
@@ -2369,25 +2383,38 @@ cupsdSendHeader(
|
||||
* requests when the request requires system group membership - then the
|
||||
* client knows the root certificate can/should be used.
|
||||
*
|
||||
* Also, for macOS we also look for @AUTHKEY and add an "authkey"
|
||||
* parameter as needed...
|
||||
* Also, for macOS we also look for @AUTHKEY and add an "AuthRef key=foo"
|
||||
* method as needed...
|
||||
*/
|
||||
|
||||
char *name, /* Current user name */
|
||||
*auth_key; /* Auth key buffer */
|
||||
size_t auth_size; /* Size of remaining buffer */
|
||||
int need_local = 1; /* Do we need to list "Local" method? */
|
||||
|
||||
auth_key = auth_str + strlen(auth_str);
|
||||
auth_size = sizeof(auth_str) - (size_t)(auth_key - auth_str);
|
||||
|
||||
#if defined(SO_PEERCRED) && defined(AF_LOCAL)
|
||||
if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
|
||||
{
|
||||
strlcpy(auth_key, ", PeerCred", auth_size);
|
||||
auth_key += 10;
|
||||
auth_size -= 10;
|
||||
}
|
||||
#endif /* SO_PEERCRED && AF_LOCAL */
|
||||
|
||||
for (name = (char *)cupsArrayFirst(con->best->names);
|
||||
name;
|
||||
name = (char *)cupsArrayNext(con->best->names))
|
||||
{
|
||||
cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdSendHeader: require \"%s\"", name);
|
||||
|
||||
#ifdef HAVE_AUTHORIZATION_H
|
||||
if (!_cups_strncasecmp(name, "@AUTHKEY(", 9))
|
||||
{
|
||||
snprintf(auth_key, auth_size, ", authkey=\"%s\"", name + 9);
|
||||
snprintf(auth_key, auth_size, ", AuthRef key=\"%s\"", name + 9);
|
||||
need_local = 0;
|
||||
/* end parenthesis is stripped in conf.c */
|
||||
break;
|
||||
}
|
||||
@@ -2397,16 +2424,18 @@ cupsdSendHeader(
|
||||
{
|
||||
#ifdef HAVE_AUTHORIZATION_H
|
||||
if (SystemGroupAuthKey)
|
||||
snprintf(auth_key, auth_size,
|
||||
", authkey=\"%s\"",
|
||||
SystemGroupAuthKey);
|
||||
snprintf(auth_key, auth_size, ", AuthRef key=\"%s\"", SystemGroupAuthKey);
|
||||
else
|
||||
#else
|
||||
strlcpy(auth_key, ", trc=\"y\"", auth_size);
|
||||
strlcpy(auth_key, ", Local trc=\"y\"", auth_size);
|
||||
#endif /* HAVE_AUTHORIZATION_H */
|
||||
need_local = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (need_local)
|
||||
strlcat(auth_key, ", Local", auth_size);
|
||||
}
|
||||
|
||||
if (auth_str[0])
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Client definitions for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -30,6 +30,7 @@ struct cupsd_client_s
|
||||
struct timeval start; /* Request start time */
|
||||
http_state_t operation; /* Request operation */
|
||||
off_t bytes; /* Bytes transferred for this request */
|
||||
int is_browser; /* Is the client a web browser? */
|
||||
int type; /* AuthType for username */
|
||||
char username[HTTP_MAX_VALUE],
|
||||
/* Username from Authorization: line */
|
||||
|
||||
+175
-98
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Configuration routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -617,7 +617,7 @@ cupsdReadConfiguration(void)
|
||||
cupsdSetString(&ServerKeychain, "/Library/Keychains/System.keychain");
|
||||
# endif /* HAVE_GNUTLS */
|
||||
|
||||
_httpTLSSetOptions(0);
|
||||
_httpTLSSetOptions(_HTTP_TLS_NONE, _HTTP_TLS_1_0, _HTTP_TLS_MAX);
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
language = cupsLangDefault();
|
||||
@@ -1481,13 +1481,25 @@ cupsdReadConfiguration(void)
|
||||
}
|
||||
}
|
||||
|
||||
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: NumPolicies=%d",
|
||||
cupsArrayCount(Policies));
|
||||
for (i = 0, p = (cupsd_policy_t *)cupsArrayFirst(Policies);
|
||||
p;
|
||||
i ++, p = (cupsd_policy_t *)cupsArrayNext(Policies))
|
||||
cupsdLogMessage(CUPSD_LOG_DEBUG2,
|
||||
"cupsdReadConfiguration: Policies[%d]=\"%s\"", i, p->name);
|
||||
if (LogLevel >= CUPSD_LOG_DEBUG2)
|
||||
{
|
||||
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: NumPolicies=%d",
|
||||
cupsArrayCount(Policies));
|
||||
for (i = 0, p = (cupsd_policy_t *)cupsArrayFirst(Policies);
|
||||
p;
|
||||
i ++, p = (cupsd_policy_t *)cupsArrayNext(Policies))
|
||||
{
|
||||
int j; /* Looping var */
|
||||
cupsd_location_t *loc; /* Current location */
|
||||
|
||||
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: Policies[%d]=\"%s\"", i, p->name);
|
||||
|
||||
for (j = 0, loc = (cupsd_location_t *)cupsArrayFirst(p->ops); loc; j ++, loc = (cupsd_location_t *)cupsArrayNext(p->ops))
|
||||
{
|
||||
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: ops[%d]=%s", j, ippOpString(loc->op));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If we are doing a full reload or the server root has changed, flush
|
||||
@@ -2916,13 +2928,10 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
/* Line from file */
|
||||
temp[HTTP_MAX_BUFFER],
|
||||
/* Temporary buffer for value */
|
||||
*value, /* Pointer to value */
|
||||
*valueptr; /* Pointer into value */
|
||||
*value; /* Pointer to value */
|
||||
int valuelen; /* Length of value */
|
||||
http_addrlist_t *addrlist, /* Address list */
|
||||
*addr; /* Current address */
|
||||
cups_file_t *incfile; /* Include file */
|
||||
char incname[1024]; /* Include filename */
|
||||
|
||||
|
||||
/*
|
||||
@@ -2937,28 +2946,7 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
* Decode the directive...
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(line, "Include") && value)
|
||||
{
|
||||
/*
|
||||
* Include filename
|
||||
*/
|
||||
|
||||
if (value[0] == '/')
|
||||
strlcpy(incname, value, sizeof(incname));
|
||||
else
|
||||
snprintf(incname, sizeof(incname), "%s/%s", ServerRoot, value);
|
||||
|
||||
if ((incfile = cupsFileOpen(incname, "rb")) == NULL)
|
||||
cupsdLogMessage(CUPSD_LOG_ERROR,
|
||||
"Unable to include config file \"%s\" - %s",
|
||||
incname, strerror(errno));
|
||||
else
|
||||
{
|
||||
read_cupsd_conf(incfile);
|
||||
cupsFileClose(incfile);
|
||||
}
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "<Location") && value)
|
||||
if (!_cups_strcasecmp(line, "<Location") && value)
|
||||
{
|
||||
/*
|
||||
* <Location path>
|
||||
@@ -2999,7 +2987,9 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
* SSLOptions [AllowRC4] [AllowSSL3] [AllowDH] [DenyCBC] [DenyTLS1.0] [None]
|
||||
*/
|
||||
|
||||
int options = 0; /* SSL/TLS options */
|
||||
int options = _HTTP_TLS_NONE,/* SSL/TLS options */
|
||||
min_version = _HTTP_TLS_1_0,
|
||||
max_version = _HTTP_TLS_MAX;
|
||||
|
||||
if (value)
|
||||
{
|
||||
@@ -3023,24 +3013,40 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
* Compare...
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(start, "AllowRC4"))
|
||||
if (!_cups_strcasecmp(start, "AllowRC4"))
|
||||
options |= _HTTP_TLS_ALLOW_RC4;
|
||||
else if (!_cups_strcasecmp(start, "AllowSSL3"))
|
||||
options |= _HTTP_TLS_ALLOW_SSL3;
|
||||
else if (!_cups_strcasecmp(start, "AllowSSL3"))
|
||||
min_version = _HTTP_TLS_SSL3;
|
||||
else if (!_cups_strcasecmp(start, "AllowDH"))
|
||||
options |= _HTTP_TLS_ALLOW_DH;
|
||||
else if (!_cups_strcasecmp(start, "DenyCBC"))
|
||||
options |= _HTTP_TLS_DENY_CBC;
|
||||
else if (!_cups_strcasecmp(start, "DenyTLS1.0"))
|
||||
options |= _HTTP_TLS_DENY_TLS10;
|
||||
else if (!_cups_strcasecmp(start, "None"))
|
||||
options = 0;
|
||||
min_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.0"))
|
||||
max_version = _HTTP_TLS_1_0;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.1"))
|
||||
max_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.2"))
|
||||
max_version = _HTTP_TLS_1_2;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.3"))
|
||||
max_version = _HTTP_TLS_1_3;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.0"))
|
||||
min_version = _HTTP_TLS_1_0;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.1"))
|
||||
min_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.2"))
|
||||
min_version = _HTTP_TLS_1_2;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.3"))
|
||||
min_version = _HTTP_TLS_1_3;
|
||||
else if (!_cups_strcasecmp(start, "None"))
|
||||
options = _HTTP_TLS_NONE;
|
||||
else if (_cups_strcasecmp(start, "NoEmptyFragments"))
|
||||
cupsdLogMessage(CUPSD_LOG_WARN, "Unknown SSL option %s at line %d.", start, linenum);
|
||||
}
|
||||
}
|
||||
|
||||
_httpTLSSetOptions(options);
|
||||
_httpTLSSetOptions(options, min_version, max_version);
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
else if ((!_cups_strcasecmp(line, "Port") || !_cups_strcasecmp(line, "Listen")
|
||||
@@ -3336,31 +3342,6 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
cupsdLogMessage(CUPSD_LOG_WARN, "Unknown ServerTokens %s on line %d of %s.",
|
||||
value, linenum, ConfigurationFile);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "PassEnv") && value)
|
||||
{
|
||||
/*
|
||||
* PassEnv variable [... variable]
|
||||
*/
|
||||
|
||||
for (; *value;)
|
||||
{
|
||||
for (valuelen = 0; value[valuelen]; valuelen ++)
|
||||
if (_cups_isspace(value[valuelen]) || value[valuelen] == ',')
|
||||
break;
|
||||
|
||||
if (value[valuelen])
|
||||
{
|
||||
value[valuelen] = '\0';
|
||||
valuelen ++;
|
||||
}
|
||||
|
||||
cupsdSetEnv(value, NULL);
|
||||
|
||||
for (value += valuelen; *value; value ++)
|
||||
if (!_cups_isspace(*value) || *value != ',')
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "ServerAlias") && value)
|
||||
{
|
||||
/*
|
||||
@@ -3389,30 +3370,6 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "SetEnv") && value)
|
||||
{
|
||||
/*
|
||||
* SetEnv variable value
|
||||
*/
|
||||
|
||||
for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++);
|
||||
|
||||
if (*valueptr)
|
||||
{
|
||||
/*
|
||||
* Found a value...
|
||||
*/
|
||||
|
||||
while (isspace(*valueptr & 255))
|
||||
*valueptr++ = '\0';
|
||||
|
||||
cupsdSetEnv(value, valueptr);
|
||||
}
|
||||
else
|
||||
cupsdLogMessage(CUPSD_LOG_ERROR,
|
||||
"Missing value for SetEnv directive on line %d of %s.",
|
||||
linenum, ConfigurationFile);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "AccessLog") ||
|
||||
!_cups_strcasecmp(line, "CacheDir") ||
|
||||
!_cups_strcasecmp(line, "ConfigFilePerm") ||
|
||||
@@ -3426,6 +3383,7 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
!_cups_strcasecmp(line, "LogFilePerm") ||
|
||||
!_cups_strcasecmp(line, "LPDConfigFile") ||
|
||||
!_cups_strcasecmp(line, "PageLog") ||
|
||||
!_cups_strcasecmp(line, "PassEnv") ||
|
||||
!_cups_strcasecmp(line, "Printcap") ||
|
||||
!_cups_strcasecmp(line, "PrintcapFormat") ||
|
||||
!_cups_strcasecmp(line, "RemoteRoot") ||
|
||||
@@ -3435,6 +3393,7 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
!_cups_strcasecmp(line, "ServerKey") ||
|
||||
!_cups_strcasecmp(line, "ServerKeychain") ||
|
||||
!_cups_strcasecmp(line, "ServerRoot") ||
|
||||
!_cups_strcasecmp(line, "SetEnv") ||
|
||||
!_cups_strcasecmp(line, "SMBConfigFile") ||
|
||||
!_cups_strcasecmp(line, "StateDir") ||
|
||||
!_cups_strcasecmp(line, "SystemGroup") ||
|
||||
@@ -3464,10 +3423,49 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
||||
static int /* O - 1 on success, 0 on failure */
|
||||
read_cups_files_conf(cups_file_t *fp) /* I - File to read from */
|
||||
{
|
||||
int linenum; /* Current line number */
|
||||
int i, /* Looping var */
|
||||
linenum; /* Current line number */
|
||||
char line[HTTP_MAX_BUFFER], /* Line from file */
|
||||
*value; /* Value from line */
|
||||
struct group *group; /* Group */
|
||||
static const char * const prohibited_env[] =
|
||||
{ /* Prohibited environment variables */
|
||||
"APPLE_LANGUAGE",
|
||||
"AUTH_DOMAIN",
|
||||
"AUTH_INFO_REQUIRED",
|
||||
"AUTH_NEGOTIATE",
|
||||
"AUTH_PASSWORD",
|
||||
"AUTH_UID",
|
||||
"AUTH_USERNAME",
|
||||
"CHARSET",
|
||||
"CLASS",
|
||||
"CLASSIFICATION",
|
||||
"CONTENT_TYPE",
|
||||
"CUPS_CACHEDIR",
|
||||
"CUPS_DATADIR",
|
||||
"CUPS_DOCROOT",
|
||||
"CUPS_FILETYPE",
|
||||
"CUPS_FONTPATH",
|
||||
"CUPS_MAX_MESSAGE",
|
||||
"CUPS_REQUESTROOT",
|
||||
"CUPS_SERVERBIN",
|
||||
"CUPS_SERVERROOT",
|
||||
"CUPS_STATEDIR",
|
||||
"DEVICE_URI",
|
||||
"FINAL_CONTENT_TYPE",
|
||||
"HOME",
|
||||
"LANG",
|
||||
"PPD",
|
||||
"PRINTER",
|
||||
"PRINTER_INFO",
|
||||
"PRINTER_LOCATION",
|
||||
"PRINTER_STATE_REASONS",
|
||||
"RIP_CACHE",
|
||||
"SERVER_ADMIN",
|
||||
"SOFTWARE",
|
||||
"TMPDIR",
|
||||
"USER"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -3505,6 +3503,47 @@ read_cups_files_conf(cups_file_t *fp) /* I - File to read from */
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "PassEnv") && value)
|
||||
{
|
||||
/*
|
||||
* PassEnv variable [... variable]
|
||||
*/
|
||||
|
||||
int valuelen; /* Length of variable name */
|
||||
|
||||
for (; *value;)
|
||||
{
|
||||
for (valuelen = 0; value[valuelen]; valuelen ++)
|
||||
if (_cups_isspace(value[valuelen]) || value[valuelen] == ',')
|
||||
break;
|
||||
|
||||
if (value[valuelen])
|
||||
{
|
||||
value[valuelen] = '\0';
|
||||
valuelen ++;
|
||||
}
|
||||
|
||||
for (i = 0; i < (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])); i ++)
|
||||
{
|
||||
if (!strcmp(value, prohibited_env[i]))
|
||||
{
|
||||
cupsdLogMessage(CUPSD_LOG_ERROR, "Environment variable \"%s\" cannot be passed through on line %d of %s.", value, linenum, CupsFilesFile);
|
||||
|
||||
if (FatalErrors & CUPSD_FATAL_CONFIG)
|
||||
return (0);
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])))
|
||||
cupsdSetEnv(value, NULL);
|
||||
|
||||
for (value += valuelen; *value; value ++)
|
||||
if (!_cups_isspace(*value) || *value != ',')
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "PrintcapFormat") && value)
|
||||
{
|
||||
/*
|
||||
@@ -3550,6 +3589,46 @@ read_cups_files_conf(cups_file_t *fp) /* I - File to read from */
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "SetEnv") && value)
|
||||
{
|
||||
/*
|
||||
* SetEnv variable value
|
||||
*/
|
||||
|
||||
char *valueptr; /* Pointer to environment variable value */
|
||||
|
||||
for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++);
|
||||
|
||||
if (*valueptr)
|
||||
{
|
||||
/*
|
||||
* Found a value...
|
||||
*/
|
||||
|
||||
while (isspace(*valueptr & 255))
|
||||
*valueptr++ = '\0';
|
||||
|
||||
for (i = 0; i < (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])); i ++)
|
||||
{
|
||||
if (!strcmp(value, prohibited_env[i]))
|
||||
{
|
||||
cupsdLogMessage(CUPSD_LOG_ERROR, "Environment variable \"%s\" cannot be set on line %d of %s.", value, linenum, CupsFilesFile);
|
||||
|
||||
if (FatalErrors & CUPSD_FATAL_CONFIG)
|
||||
return (0);
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])))
|
||||
cupsdSetEnv(value, valueptr);
|
||||
}
|
||||
else
|
||||
cupsdLogMessage(CUPSD_LOG_ERROR,
|
||||
"Missing value for SetEnv directive on line %d of %s.",
|
||||
linenum, ConfigurationFile);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "SystemGroup") && value)
|
||||
{
|
||||
/*
|
||||
@@ -3835,11 +3914,9 @@ read_policy(cups_file_t *fp, /* I - Configuration file */
|
||||
if (num_ops < (int)(sizeof(ops) / sizeof(ops[0])))
|
||||
{
|
||||
if (!_cups_strcasecmp(value, "All"))
|
||||
ops[num_ops] = IPP_ANY_OPERATION;
|
||||
ops[num_ops ++] = IPP_ANY_OPERATION;
|
||||
else if ((ops[num_ops] = ippOpValue(value)) == IPP_BAD_OPERATION)
|
||||
cupsdLogMessage(CUPSD_LOG_ERROR,
|
||||
"Bad IPP operation name \"%s\" on line %d of %s.",
|
||||
value, linenum, ConfigurationFile);
|
||||
cupsdLogMessage(CUPSD_LOG_ERROR, "Bad IPP operation name \"%s\" on line %d of %s.", value, linenum, ConfigurationFile);
|
||||
else
|
||||
num_ops ++;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* created from driver information files, and dynamically generated PPD files
|
||||
* using driver helper programs.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -2404,7 +2404,7 @@ load_ppds(const char *d, /* I - Actual directory */
|
||||
{
|
||||
fprintf(stderr, "ERROR: [cups-driverd] Skipping \"%s\": loop detected!\n",
|
||||
d);
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2619,7 +2619,7 @@ load_ppds_dat(char *filename, /* I - Filename buffer */
|
||||
unsigned ppdsync; /* Sync word */
|
||||
int num_ppds; /* Number of PPDs */
|
||||
|
||||
if (cupsFileRead(fp, (char *)&ppdsync, sizeof(ppdsync)) == sizeof(ppdsync) &&
|
||||
if ((size_t)cupsFileRead(fp, (char *)&ppdsync, sizeof(ppdsync)) == sizeof(ppdsync) &&
|
||||
ppdsync == PPD_SYNC &&
|
||||
!stat(filename, &fileinfo) &&
|
||||
(((size_t)fileinfo.st_size - sizeof(ppdsync)) % sizeof(ppd_rec_t)) == 0 &&
|
||||
@@ -2728,7 +2728,7 @@ read_tar(cups_file_t *fp, /* I - Archive to read */
|
||||
tar_rec_t record; /* Record from file */
|
||||
|
||||
|
||||
while (cupsFileRead(fp, (char *)&record, sizeof(record)) == sizeof(record))
|
||||
while ((size_t)cupsFileRead(fp, (char *)&record, sizeof(record)) == sizeof(record))
|
||||
{
|
||||
/*
|
||||
* Check for a valid tar header...
|
||||
|
||||
+11
-10
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Directory services routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2015 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
|
||||
@@ -698,20 +698,21 @@ dnssdDeregisterInstance(
|
||||
|
||||
DNSServiceRefDeallocate(*srv);
|
||||
|
||||
*srv = NULL;
|
||||
|
||||
# else /* HAVE_AVAHI */
|
||||
if (!from_callback)
|
||||
avahi_threaded_poll_lock(DNSSDMaster);
|
||||
|
||||
if (*srv)
|
||||
{
|
||||
if (!from_callback)
|
||||
avahi_threaded_poll_lock(DNSSDMaster);
|
||||
|
||||
avahi_entry_group_free(*srv);
|
||||
|
||||
if (!from_callback)
|
||||
avahi_threaded_poll_unlock(DNSSDMaster);
|
||||
*srv = NULL;
|
||||
}
|
||||
# endif /* HAVE_DNSSD */
|
||||
|
||||
*srv = NULL;
|
||||
if (!from_callback)
|
||||
avahi_threaded_poll_unlock(DNSSDMaster);
|
||||
# endif /* HAVE_DNSSD */
|
||||
}
|
||||
|
||||
|
||||
|
||||
+359
-370
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+13
-1
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Job management routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -4774,6 +4774,18 @@ start_job(cupsd_job_t *job, /* I - Job ID */
|
||||
job->profile = cupsdCreateProfile(job->id, 0);
|
||||
job->bprofile = cupsdCreateProfile(job->id, 1);
|
||||
|
||||
#ifdef HAVE_SANDBOX_H
|
||||
if ((!job->profile || !job->bprofile) && UseSandboxing && Sandboxing != CUPSD_SANDBOXING_OFF)
|
||||
{
|
||||
/*
|
||||
* Failure to create the sandbox profile means something really bad has
|
||||
* happened and we need to shutdown immediately.
|
||||
*/
|
||||
|
||||
return;
|
||||
}
|
||||
#endif /* HAVE_SANDBOX_H */
|
||||
|
||||
/*
|
||||
* Create the status pipes and buffer...
|
||||
*/
|
||||
|
||||
+2
-2
@@ -960,7 +960,7 @@ cupsdLogPage(cupsd_job_t *job, /* I - Job being printed */
|
||||
*bufptr = '\0';
|
||||
|
||||
#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
|
||||
if (!strcmp(ErrorLog, "syslog"))
|
||||
if (!strcmp(PageLog, "syslog"))
|
||||
{
|
||||
static const char * const job_states[] =
|
||||
{ /* job-state strings */
|
||||
@@ -1157,7 +1157,7 @@ cupsdLogRequest(cupsd_client_t *con, /* I - Request to log */
|
||||
}
|
||||
|
||||
#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
|
||||
if (!strcmp(ErrorLog, "syslog"))
|
||||
if (!strcmp(AccessLog, "syslog"))
|
||||
{
|
||||
sd_journal_print(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s", con->http->hostname, con->username[0] != '\0' ? con->username : "-", states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-");
|
||||
return (1);
|
||||
|
||||
+1
-1
@@ -893,7 +893,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
* Write dirty config/state files...
|
||||
*/
|
||||
|
||||
if (DirtyCleanTime && current_time >= DirtyCleanTime && cupsArrayCount(Clients) == 0)
|
||||
if (DirtyCleanTime && current_time >= DirtyCleanTime)
|
||||
cupsdCleanDirty();
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
@@ -5,6 +5,7 @@ Documentation=man:cupsd(8)
|
||||
[Service]
|
||||
ExecStart=@sbindir@/cupsd -l
|
||||
Type=simple
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
Also=org.cups.cupsd.socket org.cups.cupsd.path
|
||||
|
||||
+20
-13
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Process management routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -23,13 +23,16 @@
|
||||
#ifdef HAVE_POSIX_SPAWN
|
||||
# include <spawn.h>
|
||||
extern char **environ;
|
||||
#endif /* HAVE_POSIX_SPAWN */
|
||||
#ifdef HAVE_POSIX_SPAWN
|
||||
# if !defined(__OpenBSD__) || OpenBSD >= 201505
|
||||
# define USE_POSIX_SPAWN 1
|
||||
# else
|
||||
/* Don't use posix_spawn on systems with bugs in their implementations... */
|
||||
# if defined(OpenBSD) && OpenBSD < 201505
|
||||
# define USE_POSIX_SPAWN 0
|
||||
# endif /* !__OpenBSD__ || */
|
||||
# elif defined(__UCLIBC__) && __UCLIBC_MAJOR__ == 1 && __UCLIBC_MINOR__ == 0 && __UCLIBC_SUBLEVEL__ < 27
|
||||
# define USE_POSIX_SPAWN 0
|
||||
# elif defined(__UCLIBC__) && __UCLIBC_MAJOR__ < 1
|
||||
# define USE_POSIX_SPAWN 0
|
||||
# else /* All other platforms */
|
||||
# define USE_POSIX_SPAWN 1
|
||||
# endif /* ... */
|
||||
#else
|
||||
# define USE_POSIX_SPAWN 0
|
||||
#endif /* HAVE_POSIX_SPAWN */
|
||||
@@ -99,9 +102,13 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
|
||||
|
||||
if ((fp = cupsTempFile2(profile, sizeof(profile))) == NULL)
|
||||
{
|
||||
/*
|
||||
* This should never happen, and is fatal when sandboxing is enabled.
|
||||
*/
|
||||
|
||||
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d, allow_networking=%d) = NULL", job_id, allow_networking);
|
||||
cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create security profile: %s",
|
||||
strerror(errno));
|
||||
cupsdLogMessage(CUPSD_LOG_EMERG, "Unable to create security profile: %s", strerror(errno));
|
||||
kill(getpid(), SIGTERM);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -198,10 +205,8 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
|
||||
" #\"^%s/\"" /* TempDir/... */
|
||||
" #\"^%s$\"" /* CacheDir */
|
||||
" #\"^%s/\"" /* CacheDir/... */
|
||||
" #\"^%s$\"" /* StateDir */
|
||||
" #\"^%s/\"" /* StateDir/... */
|
||||
"))\n",
|
||||
temp, temp, cache, cache, state, state);
|
||||
temp, temp, cache, cache);
|
||||
/* Read common folders */
|
||||
cupsFilePrintf(fp,
|
||||
"(allow file-read-data file-read-metadata\n"
|
||||
@@ -243,8 +248,10 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
|
||||
" #\"^%s/\"" /* ServerBin/... */
|
||||
" #\"^%s$\"" /* ServerRoot */
|
||||
" #\"^%s/\"" /* ServerRoot/... */
|
||||
" #\"^%s$\"" /* StateDir */
|
||||
" #\"^%s/\"" /* StateDir/... */
|
||||
"))\n",
|
||||
request, request, bin, bin, root, root);
|
||||
request, request, bin, bin, root, root, state, state);
|
||||
if (Sandboxing == CUPSD_SANDBOXING_RELAXED)
|
||||
{
|
||||
/* Limited write access to /Library/Printers/... */
|
||||
|
||||
+19
-7
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Server start/stop routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -37,18 +37,30 @@ static int started = 0; /* Did we start the server already? */
|
||||
void
|
||||
cupsdStartServer(void)
|
||||
{
|
||||
/*
|
||||
* Start color management (as needed)...
|
||||
*/
|
||||
|
||||
cupsdStartColor();
|
||||
|
||||
/*
|
||||
* Create the default security profile...
|
||||
*/
|
||||
|
||||
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 */
|
||||
|
||||
/*
|
||||
* Start color management (as needed)...
|
||||
*/
|
||||
|
||||
cupsdStartColor();
|
||||
|
||||
/*
|
||||
* Startup all the networking stuff...
|
||||
*/
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* "cupsaccept", "cupsdisable", "cupsenable", and "cupsreject" commands for
|
||||
* CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -83,11 +83,11 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
switch (*opt)
|
||||
{
|
||||
case 'E' : /* Encrypt */
|
||||
#ifdef HAVE_SSL
|
||||
#ifdef HAVE_SSL
|
||||
cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
|
||||
#else
|
||||
#else
|
||||
_cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), command);
|
||||
#endif /* HAVE_SSL */
|
||||
#endif /* HAVE_SSL */
|
||||
break;
|
||||
|
||||
case 'U' : /* Username */
|
||||
|
||||
+4
-27
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "lp" command for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -586,33 +586,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (printer == NULL)
|
||||
{
|
||||
val = NULL;
|
||||
|
||||
if ((printer = getenv("LPDEST")) == NULL)
|
||||
{
|
||||
if ((printer = getenv("PRINTER")) != NULL)
|
||||
{
|
||||
if (!strcmp(printer, "lp"))
|
||||
printer = NULL;
|
||||
else
|
||||
val = "PRINTER";
|
||||
}
|
||||
}
|
||||
if (!cupsGetNamedDest(NULL, NULL, NULL) && cupsLastError() == IPP_STATUS_ERROR_NOT_FOUND)
|
||||
_cupsLangPrintf(stderr, _("%s: Error - %s"), argv[0], cupsLastErrorString());
|
||||
else
|
||||
val = "LPDEST";
|
||||
|
||||
if (printer && !cupsGetNamedDest(NULL, printer, NULL))
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - %s environment variable names "
|
||||
"non-existent destination \"%s\"."), argv[0], val,
|
||||
printer);
|
||||
else if (cupsLastError() == IPP_NOT_FOUND)
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - no default destination available."),
|
||||
argv[0]);
|
||||
else
|
||||
_cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."),
|
||||
argv[0]);
|
||||
_cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."), argv[0]);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
+78
-28
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* "lpadmin" command for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 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
|
||||
@@ -33,7 +33,7 @@ static int delete_printer_from_class(http_t *http, char *printer,
|
||||
static int delete_printer_option(http_t *http, char *printer,
|
||||
char *option);
|
||||
static int enable_printer(http_t *http, char *printer);
|
||||
static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize);
|
||||
static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize, int *num_options, cups_option_t **options);
|
||||
static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri,
|
||||
size_t urisize);
|
||||
static int set_printer_options(http_t *http, char *printer,
|
||||
@@ -46,23 +46,22 @@ static int validate_name(const char *name);
|
||||
* 'main()' - Parse options and configure the scheduler.
|
||||
*/
|
||||
|
||||
int
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* Connection to server */
|
||||
char *printer, /* Destination printer */
|
||||
*pclass, /* Printer class name */
|
||||
*opt, /* Option pointer */
|
||||
*val; /* Pointer to allow/deny value */
|
||||
int num_options; /* Number of options */
|
||||
cups_option_t *options; /* Options */
|
||||
char *file, /* New PPD file */
|
||||
evefile[1024] = "";
|
||||
/* IPP Everywhere PPD */
|
||||
const char *ppd_name, /* ppd-name value */
|
||||
*device_uri; /* device-uri value */
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* Connection to server */
|
||||
char *printer, /* Destination printer */
|
||||
*pclass, /* Printer class name */
|
||||
*opt, /* Option pointer */
|
||||
*val; /* Pointer to allow/deny value */
|
||||
int num_options; /* Number of options */
|
||||
cups_option_t *options; /* Options */
|
||||
char *file, /* New PPD file */
|
||||
evefile[1024] = ""; /* IPP Everywhere PPD */
|
||||
const char *ppd_name, /* ppd-name value */
|
||||
*device_uri; /* device-uri value */
|
||||
|
||||
|
||||
_cupsSetLocale(argv);
|
||||
@@ -218,6 +217,25 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
file = argv[i];
|
||||
}
|
||||
|
||||
if (*opt == 'i')
|
||||
{
|
||||
/*
|
||||
* Check to see that the specified file is, in fact, a PPD...
|
||||
*/
|
||||
|
||||
cups_file_t *fp = cupsFileOpen(file, "r");
|
||||
char line[256];
|
||||
|
||||
if (!cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "*PPD-Adobe", 10))
|
||||
{
|
||||
_cupsLangPuts(stderr, _("lpadmin: System V interface scripts are no longer supported for security reasons."));
|
||||
cupsFileClose(fp);
|
||||
return (1);
|
||||
}
|
||||
|
||||
cupsFileClose(fp);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'E' : /* Enable the printer/enable encryption */
|
||||
@@ -591,9 +609,19 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Set options as needed...
|
||||
*/
|
||||
|
||||
if ((ppd_name = cupsGetOption("ppd-name", num_options, options)) != NULL && !strcmp(ppd_name, "everywhere") && (device_uri = cupsGetOption("device-uri", num_options, options)) != NULL)
|
||||
ppd_name = cupsGetOption("ppd-name", num_options, options);
|
||||
device_uri = cupsGetOption("device-uri", num_options, options);
|
||||
|
||||
if (ppd_name && !strcmp(ppd_name, "raw"))
|
||||
{
|
||||
if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile))) == NULL)
|
||||
_cupsLangPuts(stderr, _("lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS."));
|
||||
|
||||
if (device_uri && (!strncmp(device_uri, "ipp://", 6) || !strncmp(device_uri, "ipps://", 7)) && strstr(device_uri, "/printers/"))
|
||||
_cupsLangPuts(stderr, _("lpadmin: Use the 'everywhere' model for shared printers."));
|
||||
}
|
||||
else if (ppd_name && !strcmp(ppd_name, "everywhere") && device_uri)
|
||||
{
|
||||
if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile), &num_options, &options)) == NULL)
|
||||
return (1);
|
||||
|
||||
num_options = cupsRemoveOption("ppd-name", num_options, &options);
|
||||
@@ -1144,20 +1172,31 @@ enable_printer(http_t *http, /* I - Server connection */
|
||||
* 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
|
||||
*/
|
||||
|
||||
static char * /* O - Filename or NULL */
|
||||
get_printer_ppd(const char *uri, /* I - Printer URI */
|
||||
char *buffer, /* I - Filename buffer */
|
||||
size_t bufsize) /* I - Size of filename buffer */
|
||||
static char * /* O - Filename or NULL */
|
||||
get_printer_ppd(
|
||||
const char *uri, /* I - Printer URI */
|
||||
char *buffer, /* I - Filename buffer */
|
||||
size_t bufsize, /* I - Size of filename buffer */
|
||||
int *num_options, /* IO - Number of options */
|
||||
cups_option_t **options) /* IO - Options */
|
||||
{
|
||||
http_t *http; /* Connection to printer */
|
||||
ipp_t *request, /* Get-Printer-Attributes request */
|
||||
*response; /* Get-Printer-Attributes response */
|
||||
ipp_attribute_t *attr; /* Attribute from response */
|
||||
char resolved[1024], /* Resolved URI */
|
||||
scheme[32], /* URI scheme */
|
||||
userpass[256], /* Username:password */
|
||||
host[256], /* Hostname */
|
||||
resource[256]; /* Resource path */
|
||||
int port; /* Port number */
|
||||
static const char * const pattrs[] = /* Attributes to use */
|
||||
{
|
||||
"job-template",
|
||||
"printer-defaults",
|
||||
"printer-description",
|
||||
"media-col-database"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -1198,9 +1237,21 @@ get_printer_ppd(const char *uri, /* I - Printer URI */
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs);
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
|
||||
if (!_ppdCreateFromIPP(buffer, bufsize, response))
|
||||
if (_ppdCreateFromIPP(buffer, bufsize, response))
|
||||
{
|
||||
if (!cupsGetOption("printer-geo-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-geo-location", IPP_TAG_URI)) != NULL)
|
||||
*num_options = cupsAddOption("printer-geo-location", ippGetString(attr, 0, NULL), *num_options, options);
|
||||
|
||||
if (!cupsGetOption("printer-info", *num_options, *options) && (attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL)
|
||||
*num_options = cupsAddOption("printer-info", ippGetString(attr, 0, NULL), *num_options, options);
|
||||
|
||||
if (!cupsGetOption("printer-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-location", IPP_TAG_TEXT)) != NULL)
|
||||
*num_options = cupsAddOption("printer-location", ippGetString(attr, 0, NULL), *num_options, options);
|
||||
}
|
||||
else
|
||||
_cupsLangPrintf(stderr, _("%s: Unable to create PPD file: %s"), "lpadmin", strerror(errno));
|
||||
|
||||
ippDelete(response);
|
||||
@@ -1572,8 +1623,7 @@ validate_name(const char *name) /* I - Name to check */
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if (*ptr == '@')
|
||||
break;
|
||||
else if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' ||
|
||||
*ptr == '#')
|
||||
else if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '\\' || *ptr == '?' || *ptr == '\'' || *ptr == '\"' || *ptr == '#')
|
||||
return (0);
|
||||
|
||||
/*
|
||||
|
||||
+20
-1
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "lpinfo" command for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -454,6 +454,25 @@ show_models(
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
|
||||
/*
|
||||
* Show the "everywhere" model, which is handled by the lpadmin command...
|
||||
*/
|
||||
|
||||
if ((!include_schemes || strstr(include_schemes, "everywhere")) && (!exclude_schemes || !strstr(exclude_schemes, "everywhere")))
|
||||
{
|
||||
if (long_status)
|
||||
{
|
||||
_cupsLangPrintf(stdout,
|
||||
_("Model: name = %s\n"
|
||||
" natural_language = %s\n"
|
||||
" make-and-model = %s\n"
|
||||
" device-id = %s"),
|
||||
"everywhere", cupsLangDefault()->language, "IPP Everywhere", "CMD:PwgRaster");
|
||||
}
|
||||
else
|
||||
_cupsLangPuts(stdout, "everywhere IPP Everywhere");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<TR>
|
||||
<TH CLASS="label">Nom :</TH>
|
||||
<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
|
||||
<SMALL>(Peux contenir n'importe quel caractè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>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<TR>
|
||||
<TH CLASS="label">Nom \:</TH>
|
||||
<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127" VALUE="{?template_name}"><BR>
|
||||
<SMALL>(Peux contenir n'importe quel caractè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>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<TR>
|
||||
<TH CLASS="label">Partage :</TH>
|
||||
<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_IS_SHARED" VALUE="{?printer_is_shared}">
|
||||
{?printer_is_shared=?Ne pas:{?printer_is_shared=0?Do Not:}} partager cette imprimante</TD>
|
||||
{?printer_is_shared=?Ne pas p:{?printer_is_shared=0?Ne pas p:P}}artager cette imprimante</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TH CLASS="label">Marque :</TH>
|
||||
@@ -38,7 +38,7 @@
|
||||
<TH CLASS="label">Modèle :</TH>
|
||||
<TD>
|
||||
<SELECT NAME="PPD_NAME" SIZE="10">
|
||||
{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Pilote courant - {current_make_and_model}</OPTION>:}
|
||||
{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Pilote actuel - {current_make_and_model}</OPTION>:}
|
||||
{[ppd_name]<OPTION VALUE="{ppd_name}" {op=modify-printer?:{?current_make_and_model={ppd_make_and_model}?SELECTED:}}>{ppd_make_and_model} ({ppd_natural_language})
|
||||
}</SELECT>
|
||||
</TD>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
socket://hostname:9100
|
||||
</PRE>
|
||||
|
||||
<P>Voir <A HREF="/help/network.html" TARGET="_blank">"Imprimantes réseaux"</A> pour construire l'URI à employée avec votre imprimante.</P>
|
||||
<P>Voir <A HREF="/help/network.html" TARGET="_blank">"Imprimantes réseaux"</A> pour construire l'URI à employer avec votre imprimante.</P>
|
||||
|
||||
</TD>
|
||||
</TR>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
|
||||
({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arrê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}">
|
||||
@@ -13,7 +13,7 @@
|
||||
<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">
|
||||
@@ -28,7 +28,7 @@
|
||||
<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}">
|
||||
|
||||
@@ -1 +1 @@
|
||||
<P ALIGN="CENTER">{total=0?Pas de classes:Affichage de {#printer_name} sur {total} classe{total=1?:es}}.</P>
|
||||
<P ALIGN="CENTER">{total=0?Pas de classes:Affichage de {#printer_name} sur {total} classe{total=1?:s}}.</P>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
</THEAD>
|
||||
<TBODY>
|
||||
{[printer_name]
|
||||
<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{?member_uris=?Aucun:{member_uris}}</TD><TD>{printer_state=3?Inoccupé:{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>}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
|
||||
{TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
|
||||
|
||||
<P ALIGN="CENTER"><B>Search in
|
||||
{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}:</B> <INPUT
|
||||
<P ALIGN="CENTER"><B>Rechercher dans
|
||||
{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:Tous les documents}}:</B> <INPUT
|
||||
TYPE="SEARCH" NAME="QUERY" VALUE="{?QUERY}" SIZE="40" PLACEHOLDER=""
|
||||
AUTOSAVE="org.cups.help" RESULTS="20">
|
||||
<INPUT TYPE="SUBMIT" NAME="SEARCH" VALUE="Search">
|
||||
@@ -14,9 +14,9 @@ AUTOSAVE="org.cups.help" RESULTS="20">
|
||||
<DIV CLASS="sidebar"><TABLE CLASS="inset" SUMMARY="Contents">
|
||||
<TR><TD>
|
||||
|
||||
<H3 CLASS="title">Online Help Documents</H3>
|
||||
<H3 CLASS="title">Documentation en ligne</H3>
|
||||
|
||||
<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">All Documents</A></P>
|
||||
<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">Tous les documents</A></P>
|
||||
<HR>
|
||||
|
||||
{[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
|
||||
@@ -24,18 +24,18 @@ AUTOSAVE="org.cups.help" RESULTS="20">
|
||||
</TD></TR>
|
||||
</TABLE></DIV>
|
||||
|
||||
{QUERY?<P>Search Results in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}\:</P>
|
||||
{QUERY?<P>Résultats de la recherche dans {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:Tous les documents}}\:</P>
|
||||
{QTEXT?<UL>
|
||||
{[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
|
||||
{QTEXT?</UL>:}
|
||||
:<P>No matches found.</P>}
|
||||
:<P>Aucun résultat.</P>}
|
||||
<HR NOSHADE>:}
|
||||
{HELPTITLE?<FORM ACTION="/help/{?HELPFILE}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="PRINTABLE" VALUE="YES"><INPUT TYPE="SUBMIT" VALUE="View Printable Version"></FORM>:
|
||||
{HELPTITLE?<FORM ACTION="/help/{?HELPFILE}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="PRINTABLE" VALUE="YES"><INPUT TYPE="SUBMIT" VALUE="Voir la version imprimable"></FORM>:
|
||||
|
||||
<H1>Online Help</H1>
|
||||
<H1>Aide en ligne</H1>
|
||||
|
||||
<P>This is the CUPS online help interface. Enter search words above or click on any of the documentation links to display online help information.</P>
|
||||
<P>Ceci est l'interface d'aide en ligne de CUPS. Entrez vos termes de recherch ci-dessus ou cliquez sur un des liens vers la documentation pour voir les informations d'aide en ligne.</P>
|
||||
|
||||
<P>If you are new to CUPS, read the "<a href="/help/overview.html">Overview of CUPS</a>" page.</P>
|
||||
<P>Si vous êtes un nouvel utilisateur de CUPS, lisez la page "<a href="/help/overview.html">Aperçu de CUPS</a>".</P>
|
||||
|
||||
<P>The <A HREF="http://www.cups.org/">CUPS home page</A> also provides many resources including user discussion forums, answers to frequently-asked questions, and a form for submitting bug reports and feature requests.</P>}
|
||||
<P>La <A HREF="http://www.cups.org/">page d'accueil CUPS</A> procure aussi beaucoup de ressources dont des forums, des FAQ, et un formulaire pour les rapports de bugs et les demandes de fonctionnalités.</P>}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<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>
|
||||
|
||||
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário