Comparar commits

...

69 Commits

Autor SHA1 Mensagem Data
Michael R Sweet 4ebeb20c50 Update README and INSTALL 2018-06-05 12:06:54 -04:00
Michael R Sweet 26e33331ce Update HTML man pages. 2018-06-05 12:04:24 -04:00
Michael R Sweet 2e913c4b4e Update documentation and localization files for CUPS 2.2.8 release. 2018-06-05 11:59:09 -04:00
Michael R Sweet b764f49b0c Mirror localization changes (Issue #5317) 2018-06-05 11:50:47 -04:00
Michael R Sweet 6ff5bbedb9 Fix a parsing bug in the pstops filter (Issue #5321) 2018-06-05 11:36:42 -04:00
Michael R Sweet ff52b652cf Added a USB quirks rule for the HP LaserJet P1102 (Issue #5310) 2018-06-05 11:27:53 -04:00
Michael R Sweet fc19457093 Fix iOS compile warning. 2018-06-05 09:19:13 -04:00
Michael R Sweet 2dbebbaa23 Update changelog. 2018-06-05 08:54:34 -04:00
Michael R Sweet 97cb566568 Fix local privilege escalation to root and sandbox bypasses in scheduler
(rdar://37836779, rdar://37836995, rdar://37837252, rdar://37837581)
2018-06-05 08:52:17 -04:00
Michael R Sweet 7c7f431a26 Mirror change from master. 2018-06-05 08:51:41 -04:00
Michael R Sweet 22716a21f7 Mirror change from master. 2018-06-04 16:19:55 -04:00
Michael R Sweet 3f8d6023ed Mirror smb change from master. 2018-05-18 15:38:03 -04:00
Michael R Sweet 4c975abbc7 Add more URI validation for scheme. 2018-05-14 15:24:47 -07:00
Michael R Sweet d66aa76457 Mirror documentation updates from master. 2018-05-14 10:27:59 -07:00
Michael R Sweet 4c37eb9f77 Generalize the input validation of some kinds of attributes.
cups/ipp.c:
- ippValidateAttribute: Do C0/DEL checks for name and text values, per IPP
  Everywhere.

cups/testhttp.c:
- Add URI test case containing a newline.

scheduler/ipp.c:
- create_subscriptions: Validate notify-user-data for mailto:.
- hold_job: Validate job-hold-until.
- set_job_attrs: Validate all attributes, specific checks for job-hold-until.
- validate_job: Add missing job-hold-until validation, move job-name validation
  to ippValidateAttribute function.
2018-05-11 12:02:27 -07:00
Michael R Sweet 66021bfa90 Mirror mailto changes from master (Issue #5312) 2018-05-11 10:27:24 -07:00
Michael R Sweet d3cc15d4b2 Always use Negotiate or PeerCred for Kerberized printing. 2018-05-10 16:33:07 -04:00
Michael R Sweet f58657f987 Mirror spec-command.html typo fix (Issue #5306) 2018-05-01 08:37:54 -04:00
Michael R Sweet 8c2150d186 Use -m everywhere for manual sharing. 2018-04-24 20:45:21 -04:00
Michael R Sweet 5c7df4f0e0 Fix 360dpi typo (Issue #5300) 2018-04-24 20:34:29 -04:00
Michael R Sweet 9135aedbb4 Update ErrorPolicy in cupsd.conf man page (Issue #5301) 2018-04-24 20:32:10 -04:00
Michael R Sweet 90a97dd7b6 Fix systemd restart policy (Issue #5297) 2018-04-18 08:50:59 -04:00
Michael R Sweet 417d0e1635 Fix policy limits using All (Issue #5296) 2018-04-17 16:55:14 -04:00
Michael R Sweet 4440da10e5 Map , to p in phone numbers. 2018-04-17 14:22:46 -04:00
Michael R Sweet 4b55f9f3c1 Add support for pause and wait characters in fax numbers (rdar://39212256) 2018-04-17 12:47:14 -04:00
Michael R Sweet bb10adda6f Try again to mirror fix (Issue #5289) 2018-04-16 19:19:13 -04:00
Michael R Sweet 2390f1d9eb Added a workaround for certain web browsers that do not support multiple authentication schemes in a single response header (Issue #5289) 2018-04-16 17:19:04 -04:00
Michael R Sweet b643d6ba92 Fix cups_auth_find for schemes without parameters. 2018-04-11 22:03:57 -04:00
Michael R Sweet 1f679daf00 Fix a parsing bug in the new authentication code. 2018-04-11 13:10:51 -04:00
Michael R Sweet 0612a04d5d Fix lpoptions man page (Issue #5286) 2018-04-10 15:41:59 -04:00
Michael R Sweet f6d93318e0 Fix another CUPS-Create-Local-Printer crash (Issue #5290) 2018-04-09 15:30:52 -04:00
Michael R Sweet 821b3cc956 Mirror changes to legacy CUPS print APIs from master (Issue #5288) 2018-04-09 09:54:16 -04:00
Michael R Sweet b757529b6f Fix ippfind _regtype 2018-04-05 17:26:05 -04:00
Michael R Sweet 566d5c707e Backport ippfind --literal-name option. 2018-04-03 18:29:52 -04:00
Michael R Sweet a922c92cd0 Bump version. 2018-04-03 15:57:28 -04:00
Michael R Sweet aefefc3539 Backport changes for attribute substitution (Issue #5229) 2018-04-03 15:57:19 -04:00
Michael R Sweet 0e41e1ca5d Changelog. 2018-04-02 20:19:22 -04:00
Michael R Sweet d2e90eb7c7 The ipptool program no longer checks for duplicate attributes when running
in list or CSV mode (Issue #5278)
2018-04-02 20:15:07 -04:00
Michael R Sweet 570933a6a3 Fix builds without PAM (Issue #5283) 2018-04-02 20:05:13 -04:00
Michael R Sweet 84c97c051d Update VisualStudio Project 2018-03-22 23:48:36 -04:00
Michael R Sweet 5f67be43fa Changelog 2018-03-22 11:43:05 -04:00
Michael R Sweet b59756883a Update documentation. 2018-03-22 09:50:29 -04:00
Michael R Sweet 6daeebb5ac Fix test script to account for unpredictability of Test3 page counts. 2018-03-22 09:32:58 -04:00
Michael R Sweet 2bad6aac2f Changelog 2018-03-22 09:02:27 -04:00
Michael R Sweet 9d72065fa9 Try another fix for Avahi crash (Issue #5268) 2018-03-21 18:00:18 -04:00
Michael R Sweet 75d3f11945 Fix 'make check' script. 2018-03-19 18:51:36 -04:00
Michael R Sweet 6bebebe247 Cleanup man page updates. 2018-03-19 18:41:46 -04:00
Michael R Sweet 1d598e87db Changelog and localizations. 2018-03-19 18:36:48 -04:00
Michael R Sweet 3645e5efa7 Deprecate raw print queues. 2018-03-19 18:35:34 -04:00
Michael R Sweet e8953be355 Include cupsJobPassword keyword in generated PPDs (Issue #5265) 2018-03-19 13:18:28 -04:00
Michael R Sweet 782bcf6974 Fix _cupsCondWait again. 2018-03-14 18:06:52 -04:00
Michael R Sweet 3d7ece43ea Fix definition of IPP_DSTATE_ enums. 2018-03-12 21:58:11 -04:00
Michael R Sweet 290404655f Fix implementation of _cupsCondWait with timeout. 2018-03-12 21:56:51 -04:00
Michael R Sweet c59948f6fb Use setuid for Kerberized IPP printing (Issue #5233) 2018-03-12 21:51:47 -04:00
Michael R Sweet b237ae81d2 Fix printing to some IPP Everywhere printers (Issue #5238) 2018-03-12 21:48:04 -04:00
Michael R Sweet 82c4785a4c Fix systemd integration with cupsd (Issue #5263) 2018-03-12 13:33:45 -04:00
Michael R Sweet 9113651bca Fix the Windows export file. 2018-03-09 18:48:39 -05:00
Michael R Sweet 3034dcc946 Bump shared library version to account for new functions. 2018-03-09 18:47:34 -05:00
Michael R Sweet 2aee052bf5 Fix Kerberized IPP printing (Issue #5233) 2018-03-09 15:41:19 -05:00
Michael R Sweet 8e47ac0199 The scheduler could crash while adding an IPP Everywhere printer (Issue #5258) 2018-03-08 11:48:43 -05:00
Michael R Sweet 30c8d1abb2 Disable SNMP supplies for all label printers (Issue #5256) 2018-03-08 11:09:38 -05:00
Michael R Sweet 5e18690298 Add USB quirk rule for Lexmark Optra E310 printers (Issue #5259) 2018-03-08 11:04:56 -05:00
Michael R Sweet bec850697a Fix stray space/tab. 2018-03-07 09:32:04 -05:00
Michael R Sweet 4ffdbc48d8 Bump versions in config headers. 2018-03-07 09:14:57 -05:00
Michael R Sweet accd26d222 Temporary files are now placed in the correct directory for sandboxed
applications on macOS (rdar://problem/37789645)
2018-03-07 09:03:24 -05:00
Michael R Sweet 08b48df256 Update documentation for cupsHashString. 2018-03-07 08:57:12 -05:00
Michael R Sweet bb4172dade Fix crash bug in HTTP field handling - regression in the backported change for
Issue #4862.
2018-03-06 23:21:40 -05:00
Michael R Sweet afe94dff9d Remainder of patches for backporting 2.3 changes to 2.2.x (Issue #5255) 2018-03-06 23:18:26 -05:00
Michael R Sweet 1f71721001 Backport CUPS 2.3.x changes to 2.2.x (Issue #5255)
- 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)
- 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)
2018-03-06 22:53:41 -05:00
121 arquivos alterados com 6074 adições e 3664 exclusões
+99 -1
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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 ++;
+20 -1
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
+6 -6
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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)
+2 -3
Ver Arquivo
@@ -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...
+2 -2
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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 },
+8
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -36,7 +36,7 @@
/*
* Local functions...
* Include platform-specific TLS code...
*/
#ifdef HAVE_SSL
+6 -3
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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.
+3 -2
Ver Arquivo
@@ -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">&#160;CUPS 1.7/macOS 10.9&#160;</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>
+4 -2
Ver Arquivo
@@ -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.
+7 -4
Ver Arquivo
@@ -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
+7 -5
Ver Arquivo
@@ -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 &copy; 2007-2017 by Apple Inc.
Copyright &copy; 2007-2018 by Apple Inc.
</body>
</html>
+4 -1
Ver Arquivo
@@ -70,6 +70,9 @@ The following expressions are supported:
The result is true if the URI is accessible, false otherwise.
<dt><b>--local</b>
<dd style="margin-left: 5.0em">True if the service is local to this computer.
<dt><b>-N </b><i>name</i>
<dd style="margin-left: 5.0em"><dt><b>--literal-name </b><i>name</i>
<dd style="margin-left: 5.0em">True if the service instance name matches the given name.
<dt><b>-n </b><i>regex</i>
<dd style="margin-left: 5.0em"><dt><b>--name </b><i>regex</i>
<dd style="margin-left: 5.0em">True if the service instance name matches the given regular expression.
@@ -198,7 +201,7 @@ Similarly, to send a PostScript test page to every PostScript printer, run:
<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
<a href="man-ipptool.html?TOPIC=Man+Pages"><b>ipptool</b>(1)</a>
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
Copyright &copy; 2013-2015 by Apple Inc.
Copyright &copy; 2013-2018 by Apple Inc.
</body>
</html>
+1
Ver Arquivo
@@ -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.
+1 -15
Ver Arquivo
@@ -14,9 +14,6 @@ lpoptions - display or set printer options and defaults
[
<b>-E</b>
] [
<b>-U</b>
<i>username</i>
] [
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
]
<b>-d </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -28,9 +25,6 @@ lpoptions - display or set printer options and defaults
[
<b>-E</b>
] [
<b>-U</b>
<i>username</i>
] [
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
] [
<b>-p </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -41,9 +35,6 @@ lpoptions - display or set printer options and defaults
[
<b>-E</b>
] [
<b>-U</b>
<i>username</i>
] [
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
] [
<b>-p </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -55,9 +46,6 @@ lpoptions - display or set printer options and defaults
[
<b>-E</b>
] [
<b>-U</b>
<i>username</i>
] [
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
]
<b>-x </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -78,8 +66,6 @@ Otherwise, the per-user defaults are managed in the <i>~/.cups/lpoptions</i> fil
<dl class="man">
<dt><b>-E</b>
<dd style="margin-left: 5.0em">Enables encryption when communicating with the CUPS server.
<dt><b>-U </b><i>username</i>
<dd style="margin-left: 5.0em">Uses an alternate username.
<dt><b>-d </b><i>destination</i>[<b>/</b><i>instance</i>]
<dd style="margin-left: 5.0em">Sets the user default printer to <i>destination</i>.
If <i>instance</i> is supplied then that particular instance is used.
@@ -119,7 +105,7 @@ The <b>lpoptions</b> command is unique to CUPS.
<a href="man-lprm.html?TOPIC=Man+Pages"><b>lprm</b>(1),</a>
CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
Copyright &copy; 2007-2017 by Apple Inc.
Copyright &copy; 2007-2018 by Apple Inc.
</body>
</html>
-19
Ver Arquivo
@@ -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>
+1 -1
Ver Arquivo
@@ -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.
+2 -2
Ver Arquivo
@@ -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
+22 -5
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+137 -107
Ver Arquivo
@@ -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: Dont 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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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"
+10
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
+2 -2
Ver Arquivo
@@ -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
+3
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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])
+3 -2
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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 ++;
}
+4 -4
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+13 -1
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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__
+1
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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...
*/
+4 -4
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
{
+1 -1
Ver Arquivo
@@ -8,7 +8,7 @@
<TR>
<TH CLASS="label">Nom:</TH>
<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
<SMALL>(Peux contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
<SMALL>(Peut contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
</TR>
<TR>
<TH CLASS="label">Description:</TH>
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
<TR>
<TH CLASS="label">Nom\:</TH>
<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127" VALUE="{?template_name}"><BR>
<SMALL>(Peux contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
<SMALL>(Peut contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
</TR>
<TR>
<TH CLASS="label">Description:</TH>
+2 -2
Ver Arquivo
@@ -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>
+1 -1
Ver Arquivo
@@ -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>
+4 -4
Ver Arquivo
@@ -1,7 +1,7 @@
<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arr&ecirc;t&eacute;}},
({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arr&ecirc;t&eacute;e}},
{printer_is_accepting_jobs=0?rejette les t&acirc;ches:accepte les t&acirc;ches},
{server_is_sharing_printers=0?Non:{printer_is_shared=0?Non:}} partag&eacute;e{default_name={printer_name}?, imprimante par d&eacute;faut:})</H2>
{server_is_sharing_printers=0?Non p:{printer_is_shared=0?Non p:P}}artag&eacute;e{default_name={printer_name}?, imprimante par d&eacute;faut:})</H2>
<FORM METHOD="POST" ACTION="{printer_uri_supported}" NAME="maintenance">
<INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}">
@@ -13,7 +13,7 @@
<OPTION VALUE="move-jobs">Transf&eacute;rer toutes les t&acirc;ches</OPTION>
<OPTION VALUE="purge-jobs">Annuler toutes les t&acirc;ches</OPTION>
</SELECT>
<INPUT TYPE="SUBMIT" VALUE="Go" STYLE="display: none;">
<INPUT TYPE="SUBMIT" VALUE="Valider" STYLE="display: none;">
</FORM>
<FORM METHOD="POST" ACTION="{admin_uri}" NAME="administration">
@@ -28,7 +28,7 @@
<OPTION VALUE="set-as-default">D&eacute;finir par d&eacute;faut</OPTION>
<OPTION VALUE="set-allowed-users">D&eacute;finir les autorisations</OPTION>
</SELECT>
<INPUT TYPE="SUBMIT" VALUE="Go" STYLE="display: none;">
<INPUT TYPE="SUBMIT" VALUE="Valider" STYLE="display: none;">
</FORM>
<TABLE SUMMARY="{printer_name}">
+1 -1
Ver Arquivo
@@ -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>
+1 -1
Ver Arquivo
@@ -5,7 +5,7 @@
</THEAD>
<TBODY>
{[printer_name]
<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{?member_uris=?Aucun:{member_uris}}</TD><TD>{printer_state=3?Inoccup&eacute;:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{?member_uris=?Aucun:{member_uris}}</TD><TD>{printer_state=3?Inoccup&eacute;e:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
}
</TBODY>
</TABLE></DIV>}
+11 -11
Ver Arquivo
@@ -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>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 -1
Ver Arquivo
@@ -1,4 +1,4 @@
<H2 CLASS="title">{job_id?Transf&eacute;rer la t&acirc;che {job_id}:Transf&eacute;rer toutes les t&acirc;ches}</H2>
<P>{job_id?<A HREF="/jobs/{job_id}">Job {job_id}</A>:Toutes les t&acirc;ches} transf&eacute;r&eacute;e(s) vers
<P>{job_id?<A HREF="/jobs/{job_id}">T&acirc;che {job_id}</A>:Toutes les t&acirc;ches} transf&eacute;r&eacute;e(s) vers
<A HREF="/{is_class?classes:printers}/{job_printer_name}">{job_printer_name}</A>.</P>

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais