Comparar commits

...

30 Commits

Autor SHA1 Mensagem Data
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
89 arquivos alterados com 4627 adições e 2599 exclusões
+66 -1
Ver Arquivo
@@ -1,7 +1,72 @@
CHANGES - 2.2.6 - 2017-11-01
CHANGES - 2.2.7 - 2018-03-22
============================
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.7 - 2018-03-22
==================================
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.7 - 2018-03-22
=================================
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.
+34 -9
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);
+17 -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,12 @@
# 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
+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.7.
#
# 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.7'
PACKAGE_STRING='CUPS 2.2.7'
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.7 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.7:";;
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.7
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.7, 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.7"
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.7, 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.7
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.7], [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) | \
+489 -136
Ver Arquivo
@@ -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(scheme, "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]))
{
/*
* 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 && !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.0207
# define CUPS_VERSION_MAJOR 2
# define CUPS_VERSION_MINOR 2
# define CUPS_VERSION_PATCH 6
# define CUPS_VERSION_PATCH 7
# 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);
+4 -4
Ver Arquivo
@@ -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...
@@ -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",
+9 -5
Ver Arquivo
@@ -4306,18 +4306,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);
/*
+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 */
/*
+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.
*/
+60 -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)
@@ -2085,7 +2118,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 */
+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
+4 -2
Ver Arquivo
@@ -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.
+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.
+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);
}
+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"
+660 -605
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+128 -106
Ver Arquivo
@@ -366,6 +366,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.";
@@ -967,6 +968,7 @@
"Fold" = "Fold";
"Folio" = "Folio";
"Forbidden" = "Forbidden";
"Found" = "Found";
"Full Cut Tabs" = "Full Cut Tabs";
"Gate Fold" = "Gate Fold";
"General" = "General";
@@ -1787,6 +1789,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 +1802,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 +2085,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 +2673,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 +2726,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 +2743,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 +2804,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";
+72 -1
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-03-19 18:36-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"
@@ -1639,6 +1639,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\"."
@@ -3598,6 +3602,9 @@ msgstr "Foli"
msgid "Forbidden"
msgstr "Prohibit"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -8011,6 +8018,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 +8083,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 +8837,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 +9020,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"
+72 -1
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-03-19 18:36-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"
@@ -1462,6 +1462,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\"."
@@ -3396,6 +3400,9 @@ msgstr "Fólie"
msgid "Forbidden"
msgstr "Zakázaný"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -7740,6 +7747,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 +7804,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 +8550,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 +8733,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"
+72 -1
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-03-19 18:36-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"
@@ -1526,6 +1526,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\"."
@@ -3476,6 +3480,9 @@ msgstr "Folio"
msgid "Forbidden"
msgstr "Verboten"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -7872,6 +7879,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 +7942,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 +8688,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 +8871,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"
+74 -3
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-03-19 18:36-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"
@@ -1669,6 +1669,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\"."
@@ -3628,6 +3632,9 @@ msgstr "Folio"
msgid "Forbidden"
msgstr "Prohibido"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -5933,8 +5940,8 @@ msgstr "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]"
msgid ""
"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
msgstr ""
"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN."
"ppd[.gz]]"
"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd"
"[.gz]]"
msgid ""
"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
@@ -8061,6 +8068,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 +8134,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 +8883,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 +9066,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"
+72 -1
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-03-19 18:36-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"
@@ -1522,6 +1522,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\"."
@@ -3458,6 +3462,9 @@ msgstr "Folio"
msgid "Forbidden"
msgstr "Interdit"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -7807,6 +7814,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 +7871,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 +8617,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 +8800,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"
+72 -1
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-03-19 18:36-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"
@@ -1664,6 +1664,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\"."
@@ -3626,6 +3630,9 @@ msgstr "Foglio"
msgid "Forbidden"
msgstr "Vietato"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -8033,6 +8040,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 +8105,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 +8854,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 +9037,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"
+72 -1
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-03-19 18:36-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"
@@ -1640,6 +1640,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\"."
@@ -3600,6 +3604,9 @@ msgstr "フォリオ"
msgid "Forbidden"
msgstr "Forbidden"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -7995,6 +8002,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 +8067,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 +8823,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 +9006,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"
+72 -1
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-03-19 18:36-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"
@@ -1673,6 +1673,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\"."
@@ -3629,6 +3633,9 @@ msgstr "Fólio"
msgid "Forbidden"
msgstr "Proibido"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -8038,6 +8045,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 +8110,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 +8858,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 +9041,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"
+72 -1
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-03-19 18:36-0400\n"
"PO-Revision-Date: 2015-01-28 12:00-0800\n"
"Last-Translator: Aleksandr Proklov\n"
"Language-Team: PuppyRus Linux Team\n"
@@ -1601,6 +1601,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\"."
@@ -3557,6 +3561,9 @@ msgstr "Фолио"
msgid "Forbidden"
msgstr "Запрещено"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr ""
@@ -7948,6 +7955,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 +8020,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 +8768,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 +8951,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"
+72 -1
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-03-19 18:36-0400\n"
"PO-Revision-Date: 2017-06-11 12:38+0800\n"
"Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n"
"Language-Team: \n"
@@ -1595,6 +1595,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\"."
@@ -3539,6 +3543,9 @@ msgstr "对开本"
msgid "Forbidden"
msgstr "已禁止"
msgid "Found"
msgstr ""
msgid "Full Cut Tabs"
msgstr "完整裁剪标签"
@@ -7903,6 +7910,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 +7975,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 +8721,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 +8904,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"
+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
+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
{
+14 -6
Ver Arquivo
@@ -1146,7 +1146,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 +1177,8 @@ cupsdCheckGroup(
* Group exists, check it...
*/
groupid = group->gr_gid;
#ifdef HAVE_GETGROUPLIST
if (user)
{
@@ -1194,22 +1197,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 +1227,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);
+22 -7
Ver Arquivo
@@ -2369,25 +2369,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 +2410,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])
+27 -9
Ver Arquivo
@@ -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();
@@ -2999,7 +2999,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 +3025,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")
+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 */
}
+4
Ver Arquivo
@@ -4896,6 +4896,8 @@ copy_printer_attrs(
* and document-format attributes that may be provided by the client.
*/
_cupsRWLockRead(&printer->lock);
curtime = time(NULL);
if (!ra || cupsArrayFind(ra, "marker-change-time"))
@@ -5088,6 +5090,8 @@ copy_printer_attrs(
if (printer->ppd_attrs)
copy_attrs(con->response, printer->ppd_attrs, ra, IPP_TAG_ZERO, 0, NULL);
copy_attrs(con->response, CommonData, ra, IPP_TAG_ZERO, IPP_TAG_COPY, NULL);
_cupsRWUnlock(&printer->lock);
}
+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=always
[Install]
Also=org.cups.cupsd.socket org.cups.cupsd.path
+9 -6
Ver Arquivo
@@ -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 */
+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
{
+871 -866
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+7 -5
Ver Arquivo
@@ -3,8 +3,8 @@
# Perform the complete set of IPP compliance tests specified in the
# CUPS Software Test Plan.
#
# 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
@@ -304,8 +304,9 @@ for file in ../locale/cups_*.po; do
loc=`basename $file .po | cut -c 6-`
mkdir $BASE/share/locale/$loc
ln -s $root/locale/cups_$loc.po $BASE/share/locale/$loc
ln -s $root/locale/ppdc_$loc.po $BASE/share/locale/$loc
done
mkdir $BASE/share/locale/en
ln -s $root/locale/cups.pot $BASE/share/locale/en/cups_en.po
mkdir $BASE/share/mime
mkdir $BASE/share/model
mkdir $BASE/share/ppdc
@@ -319,6 +320,7 @@ mkdir $BASE/ssl
ln -s $root/backend/dnssd $BASE/bin/backend
ln -s $root/backend/http $BASE/bin/backend
ln -s $root/backend/ipp $BASE/bin/backend
ln -s ipp $BASE/bin/backend/ipps
ln -s $root/backend/lpd $BASE/bin/backend
ln -s $root/backend/mdns $BASE/bin/backend
ln -s $root/backend/pseudo $BASE/bin/backend
@@ -914,9 +916,9 @@ else
fi
# Paged printed on Test3
count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
count=`$GREP '^Test3 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
expected=2
if test $count != $expected; then
if test $count -lt $expected; then
echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
fail=`expr $fail + 1`
+9 -12
Ver Arquivo
@@ -12,15 +12,15 @@
%%BeginProlog
%%BeginResource procset testprint 1.3 0
%
% PostScript test page for CUPS.
% PostScript test page for CUPS.
%
% Copyright 2007-2011 Apple Inc.
% Copyright 1993-2007 Easy Software Products
% Copyright (c) 2007-2011 Apple Inc.
% Copyright (c) 1993-2007 Easy Software Products
%
% These coded instructions, statements, and computer programs are the
% property of Apple Inc. and are protected by Federal copyright law.
% Distribution and use rights are outlined in the file "LICENSE.txt"
% which is included with the CUPS source distribution.
% These coded instructions, statements, and computer programs are the
% property of Apple Inc. and are protected by Federal copyright law.
% Distribution and use rights are outlined in the file "LICENSE.txt"
% which is included with the CUPS source distribution.
%
/SEXTANT { % Draw a color wheel sextant...
% (name) white radius r g b SEXTANT -
@@ -573,10 +573,10 @@ gsave
pageHeight 8 mul % Move down...
2 copy moveto % Position text
smallFont setfont % Font
(Copyright 2007 Apple Inc., All Rights Reserved. CUPS and the CUPS logo are the trademark) show
(Copyright 2007-2018 Apple Inc., All Rights Reserved. CUPS and the CUPS logo are trademarks) show
pageHeight 2 add sub % Move down...
2 copy moveto % Position text
(property of Apple Inc., 1 Infinite Loop, Cupertino, CA 95014, USA.) show
(of Apple Inc., One Apple Park Way, Cupertino, CA 95014, USA.) show
pageHeight 2 mul 4 add sub % Move down...
moveto % Position text
(Need help? Contact your operating system vendor or visit "http://www.cups.org/".) show
@@ -592,7 +592,4 @@ gsave
% Show the page...
grestore
showpage
%
% End of "$Id: testfile.ps 6649 2007-07-11 21:46:42Z mike $".
%
%%EOF
+6 -6
Ver Arquivo
@@ -1,8 +1,8 @@
/*
* Configuration file for CUPS on Windows.
*
* Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -56,8 +56,8 @@
* and strnicmp() functions...
*/
#define strcasecmp stricmp
#define strncasecmp strnicmp
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
/*
@@ -94,8 +94,8 @@ typedef unsigned long useconds_t;
* Version of software...
*/
#define CUPS_SVERSION "CUPS v2.2.6"
#define CUPS_MINIMAL "CUPS/2.2.6"
#define CUPS_SVERSION "CUPS v2.2.7"
#define CUPS_MINIMAL "CUPS/2.2.7"
/*
+6 -5
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -22,28 +22,29 @@
<ProjectGuid>{6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}</ProjectGuid>
<RootNamespace>cupstestppd</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+6 -5
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -22,28 +22,29 @@
<ProjectGuid>{B484DA0C-62C8-4C32-83B6-CCEB58968B85}</ProjectGuid>
<RootNamespace>ippfind</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+6 -5
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -22,28 +22,29 @@
<ProjectGuid>{82A03BC7-0746-4B85-8908-3C7A3FAA58A9}</ProjectGuid>
<RootNamespace>ippserver</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+6 -5
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -22,28 +22,29 @@
<ProjectGuid>{B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}</ProjectGuid>
<RootNamespace>ipptool</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+14 -5
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -22,26 +22,27 @@
<ProjectGuid>{CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}</ProjectGuid>
<RootNamespace>libcups2</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -386,6 +387,7 @@ xcopy /I/Y "$(TargetPath)"
</ItemGroup>
<ItemGroup>
<None Include="..\cups\libcups2.def" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\cups\adminutil.h" />
@@ -423,5 +425,12 @@ xcopy /I/Y "$(TargetPath)"
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="packages\zlib128-vc140-static-32_64.1.2.8\build\native\zlib128-vc140-static-32_64.targets" Condition="Exists('packages\zlib128-vc140-static-32_64.1.2.8\build\native\zlib128-vc140-static-32_64.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\zlib128-vc140-static-32_64.1.2.8\build\native\zlib128-vc140-static-32_64.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\zlib128-vc140-static-32_64.1.2.8\build\native\zlib128-vc140-static-32_64.targets'))" />
</Target>
</Project>
+1
Ver Arquivo
@@ -167,6 +167,7 @@
<None Include="..\cups\libcups2.def">
<Filter>Source Files</Filter>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\cups\adminutil.h">
+6 -5
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -21,26 +21,27 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{CB4AA6F2-3E84-45BE-B505-95CD375E1234}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+6 -5
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -22,28 +22,29 @@
<ProjectGuid>{18950A1B-D37A-40C7-B2DF-C12986C0526E}</ProjectGuid>
<RootNamespace>regex</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+4 -3
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -13,16 +13,17 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{CE75FC5F-E0CF-45DC-AD27-84666D3FBA30}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+4 -3
Ver Arquivo
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -13,16 +13,17 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{90B0058C-8393-411F-BD3B-E2C831D4E883}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+4 -4
Ver Arquivo
@@ -1,8 +1,8 @@
/*
* Configuration file for CUPS and Xcode.
*
* Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -22,8 +22,8 @@
* Version of software...
*/
#define CUPS_SVERSION "CUPS v2.2.6"
#define CUPS_MINIMAL "CUPS/2.2.6"
#define CUPS_SVERSION "CUPS v2.2.7"
#define CUPS_MINIMAL "CUPS/2.2.7"
/*