Comparar commits
30 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 84c97c051d | |||
| 5f67be43fa | |||
| b59756883a | |||
| 6daeebb5ac | |||
| 2bad6aac2f | |||
| 9d72065fa9 | |||
| 75d3f11945 | |||
| 6bebebe247 | |||
| 1d598e87db | |||
| 3645e5efa7 | |||
| e8953be355 | |||
| 782bcf6974 | |||
| 3d7ece43ea | |||
| 290404655f | |||
| c59948f6fb | |||
| b237ae81d2 | |||
| 82c4785a4c | |||
| 9113651bca | |||
| 3034dcc946 | |||
| 2aee052bf5 | |||
| 8e47ac0199 | |||
| 30c8d1abb2 | |||
| 5e18690298 | |||
| bec850697a | |||
| 4ffdbc48d8 | |||
| accd26d222 | |||
| 08b48df256 | |||
| bb4172dade | |||
| afe94dff9d | |||
| 1f71721001 |
+66
-1
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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
@@ -32,8 +32,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
char *printer, /* Destination printer or class */
|
||||
*instance, /* Instance */
|
||||
*opt; /* Option pointer */
|
||||
const char *title, /* Job title */
|
||||
*val; /* Environment variable name */
|
||||
const char *title; /* Job title */
|
||||
int num_copies; /* Number of copies per file */
|
||||
int num_files; /* Number of files to print */
|
||||
const char *files[1000]; /* Files to print */
|
||||
@@ -345,33 +344,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (printer == NULL)
|
||||
{
|
||||
val = NULL;
|
||||
|
||||
if ((printer = getenv("LPDEST")) == NULL)
|
||||
{
|
||||
if ((printer = getenv("PRINTER")) != NULL)
|
||||
{
|
||||
if (!strcmp(printer, "lp"))
|
||||
printer = NULL;
|
||||
else
|
||||
val = "PRINTER";
|
||||
}
|
||||
}
|
||||
if (!cupsGetNamedDest(NULL, NULL, NULL) && cupsLastError() == IPP_STATUS_ERROR_NOT_FOUND)
|
||||
_cupsLangPrintf(stderr, _("%s: Error - %s"), argv[0], cupsLastErrorString());
|
||||
else
|
||||
val = "LPDEST";
|
||||
|
||||
if (printer && !cupsGetNamedDest(NULL, printer, NULL))
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - %s environment variable names "
|
||||
"non-existent destination \"%s\"."), argv[0], val,
|
||||
printer);
|
||||
else if (cupsLastError() == IPP_NOT_FOUND)
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - no default destination available."),
|
||||
argv[0]);
|
||||
else
|
||||
_cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."),
|
||||
argv[0]);
|
||||
_cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."), argv[0]);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
+2
-6
@@ -18,7 +18,6 @@
|
||||
/*#define DEBUG*/
|
||||
#include "cgi-private.h"
|
||||
#include <cups/http.h>
|
||||
#include <cups/md5-private.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -1204,7 +1203,6 @@ cgi_set_sid(void)
|
||||
{
|
||||
char buffer[512], /* SID data */
|
||||
sid[33]; /* SID string */
|
||||
_cups_md5_state_t md5; /* MD5 state */
|
||||
unsigned char sum[16]; /* MD5 sum */
|
||||
const char *remote_addr, /* REMOTE_ADDR */
|
||||
*server_name, /* SERVER_NAME */
|
||||
@@ -1225,11 +1223,9 @@ cgi_set_sid(void)
|
||||
(unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255,
|
||||
(unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255,
|
||||
(unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255);
|
||||
_cupsMD5Init(&md5);
|
||||
_cupsMD5Append(&md5, (unsigned char *)buffer, (int)strlen(buffer));
|
||||
_cupsMD5Finish(&md5, sum);
|
||||
cupsHashData("md5", (unsigned char *)buffer, strlen(buffer), sum, sizeof(sum));
|
||||
|
||||
cgiSetCookie(CUPS_SID, httpMD5String(sum, sid), "/", NULL, 0, 0);
|
||||
cgiSetCookie(CUPS_SID, cupsHashString(sum, sizeof(sum), sid, sizeof(sid)), "/", NULL, 0, 0);
|
||||
|
||||
return (cupsGetOption(CUPS_SID, num_cookies, cookies));
|
||||
}
|
||||
|
||||
externo
+10
-10
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for CUPS 2.2.6.
|
||||
# Generated by GNU Autoconf 2.69 for CUPS 2.2.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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Hashing function for CUPS.
|
||||
*
|
||||
* Copyright 2015-2016 by Apple Inc.
|
||||
* Copyright © 2015-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -21,6 +21,8 @@
|
||||
# include <CommonCrypto/CommonDigest.h>
|
||||
#elif defined(HAVE_GNUTLS)
|
||||
# include <gnutls/crypto.h>
|
||||
#else
|
||||
# include "md5-private.h"
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
|
||||
@@ -53,7 +55,24 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
if (!strcmp(algorithm, "sha"))
|
||||
if (!strcmp(algorithm, "md5"))
|
||||
{
|
||||
/*
|
||||
* MD5 (deprecated but widely used...)
|
||||
*/
|
||||
|
||||
CC_MD5_CTX ctx; /* MD5 context */
|
||||
|
||||
if (hashsize < CC_MD5_DIGEST_LENGTH)
|
||||
goto too_small;
|
||||
|
||||
CC_MD5_Init(&ctx);
|
||||
CC_MD5_Update(&ctx, data, (CC_LONG)datalen);
|
||||
CC_MD5_Final(hash, &ctx);
|
||||
|
||||
return (CC_MD5_DIGEST_LENGTH);
|
||||
}
|
||||
else if (!strcmp(algorithm, "sha"))
|
||||
{
|
||||
/*
|
||||
* SHA-1...
|
||||
@@ -171,7 +190,9 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
unsigned char temp[64]; /* Temporary hash buffer */
|
||||
size_t tempsize = 0; /* Truncate to this size? */
|
||||
|
||||
if (!strcmp(algorithm, "sha"))
|
||||
if (!strcmp(algorithm, "md5"))
|
||||
alg = GNUTLS_DIG_MD5;
|
||||
else if (!strcmp(algorithm, "sha"))
|
||||
alg = GNUTLS_DIG_SHA1;
|
||||
else if (!strcmp(algorithm, "sha2-224"))
|
||||
alg = GNUTLS_DIG_SHA224;
|
||||
@@ -219,10 +240,20 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
|
||||
#else
|
||||
/*
|
||||
* No hash support without CommonCrypto or GNU TLS...
|
||||
* No hash support beyond MD5 without CommonCrypto or GNU TLS...
|
||||
*/
|
||||
|
||||
if (hashsize < 64)
|
||||
if (!strcmp(algorithm, "md5"))
|
||||
{
|
||||
_cups_md5_state_t state; /* MD5 state info */
|
||||
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, data, datalen);
|
||||
_cupsMD5Finish(&state, hash);
|
||||
|
||||
return (16);
|
||||
}
|
||||
else if (hashsize < 64)
|
||||
goto too_small;
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
@@ -243,3 +274,53 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Hash buffer too small."), 1);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsHashString()' - Format a hash value as a hexadecimal string.
|
||||
*
|
||||
* The passed buffer must be at least 2 * hashsize + 1 characters in length.
|
||||
*
|
||||
* @since CUPS 2.2.7@
|
||||
*/
|
||||
|
||||
const char * /* O - Formatted string */
|
||||
cupsHashString(
|
||||
const unsigned char *hash, /* I - Hash */
|
||||
size_t hashsize, /* I - Size of hash */
|
||||
char *buffer, /* I - String buffer */
|
||||
size_t bufsize) /* I - Size of string buffer */
|
||||
{
|
||||
char *bufptr = buffer; /* Pointer into buffer */
|
||||
static const char *hex = "0123456789abcdef";
|
||||
/* Hex characters (lowercase!) */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!hash || hashsize < 1 || !buffer || bufsize < (2 * hashsize + 1))
|
||||
{
|
||||
if (buffer)
|
||||
*buffer = '\0';
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Loop until we've converted the whole hash...
|
||||
*/
|
||||
|
||||
while (hashsize > 0)
|
||||
{
|
||||
*bufptr++ = hex[*hash >> 4];
|
||||
*bufptr++ = hex[*hash & 15];
|
||||
|
||||
hash ++;
|
||||
hashsize --;
|
||||
}
|
||||
|
||||
*bufptr = '\0';
|
||||
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
+13
-10
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Private HTTP definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -68,7 +68,6 @@ typedef int socklen_t;
|
||||
# endif /* __APPLE__ && !_SOCKLEN_T */
|
||||
|
||||
# include <cups/http.h>
|
||||
# include "md5-private.h"
|
||||
# include "ipp-private.h"
|
||||
|
||||
# ifdef HAVE_GNUTLS
|
||||
@@ -180,13 +179,17 @@ extern "C" {
|
||||
|
||||
# define _HTTP_TLS_NONE 0 /* No TLS options */
|
||||
# define _HTTP_TLS_ALLOW_RC4 1 /* Allow RC4 cipher suites */
|
||||
# define _HTTP_TLS_ALLOW_SSL3 2 /* Allow SSL 3.0 */
|
||||
# define _HTTP_TLS_ALLOW_DH 4 /* Allow DH/DHE key negotiation */
|
||||
# define _HTTP_TLS_DENY_TLS10 16 /* Deny TLS 1.0 */
|
||||
# define _HTTP_TLS_DENY_CBC 32 /* Deny CBC cipher suites */
|
||||
# define _HTTP_TLS_ONLY_TLS10 64 /* Only use TLS 1.0 */
|
||||
# define _HTTP_TLS_ALLOW_DH 2 /* Allow DH/DHE key negotiation */
|
||||
# define _HTTP_TLS_DENY_CBC 4 /* Deny CBC cipher suites */
|
||||
# define _HTTP_TLS_SET_DEFAULT 128 /* Setting the default TLS options */
|
||||
|
||||
# define _HTTP_TLS_SSL3 0 /* Min/max version is SSL/3.0 */
|
||||
# define _HTTP_TLS_1_0 1 /* Min/max version is TLS/1.0 */
|
||||
# define _HTTP_TLS_1_1 2 /* Min/max version is TLS/1.1 */
|
||||
# define _HTTP_TLS_1_2 3 /* Min/max version is TLS/1.2 */
|
||||
# define _HTTP_TLS_1_3 4 /* Min/max version is TLS/1.3 */
|
||||
# define _HTTP_TLS_MAX 5 /* Highest known TLS version */
|
||||
|
||||
|
||||
/*
|
||||
* Types and functions for SSL support...
|
||||
@@ -297,10 +300,10 @@ struct _http_s /**** HTTP connection structure ****/
|
||||
char buffer[HTTP_MAX_BUFFER];
|
||||
/* Buffer for incoming data */
|
||||
int _auth_type; /* Authentication in use (deprecated) */
|
||||
_cups_md5_state_t md5_state; /* MD5 state */
|
||||
unsigned char _md5_state[88]; /* MD5 state (deprecated) */
|
||||
char nonce[HTTP_MAX_VALUE];
|
||||
/* Nonce value */
|
||||
int nonce_count; /* Nonce count */
|
||||
unsigned nonce_count; /* Nonce count */
|
||||
http_tls_t tls; /* TLS state information */
|
||||
http_encryption_t encryption; /* Encryption requirements */
|
||||
|
||||
@@ -442,7 +445,7 @@ extern void _httpTLSInitialize(void);
|
||||
extern size_t _httpTLSPending(http_t *http);
|
||||
extern int _httpTLSRead(http_t *http, char *buf, int len);
|
||||
extern int _httpTLSSetCredentials(http_t *http);
|
||||
extern void _httpTLSSetOptions(int options);
|
||||
extern void _httpTLSSetOptions(int options, int min_version, int max_version);
|
||||
extern int _httpTLSStart(http_t *http);
|
||||
extern void _httpTLSStop(http_t *http);
|
||||
extern int _httpTLSWrite(http_t *http, const char *buf, int len);
|
||||
|
||||
@@ -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
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* HTTP routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* This file contains Kerberos support code, copyright 2006 by
|
||||
@@ -39,6 +39,7 @@
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void http_add_field(http_t *http, http_field_t field, const char *value, int append);
|
||||
#ifdef HAVE_LIBZ
|
||||
static void http_content_coding_finish(http_t *http);
|
||||
static void http_content_coding_start(http_t *http,
|
||||
@@ -2659,105 +2660,7 @@ httpSetField(http_t *http, /* I - HTTP connection */
|
||||
value == NULL)
|
||||
return;
|
||||
|
||||
switch (field)
|
||||
{
|
||||
case HTTP_FIELD_ACCEPT_ENCODING :
|
||||
if (http->accept_encoding)
|
||||
_cupsStrFree(http->accept_encoding);
|
||||
|
||||
http->accept_encoding = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_ALLOW :
|
||||
if (http->allow)
|
||||
_cupsStrFree(http->allow);
|
||||
|
||||
http->allow = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_SERVER :
|
||||
if (http->server)
|
||||
_cupsStrFree(http->server);
|
||||
|
||||
http->server = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_WWW_AUTHENTICATE :
|
||||
/* CUPS STR #4503 - don't override WWW-Authenticate for unknown auth schemes */
|
||||
if (http->fields[HTTP_FIELD_WWW_AUTHENTICATE][0] &&
|
||||
_cups_strncasecmp(value, "Basic ", 6) &&
|
||||
_cups_strncasecmp(value, "Digest ", 7) &&
|
||||
_cups_strncasecmp(value, "Negotiate ", 10))
|
||||
{
|
||||
DEBUG_printf(("1httpSetField: Ignoring unknown auth scheme in \"%s\".", value));
|
||||
return;
|
||||
}
|
||||
|
||||
/* Fall through to copy */
|
||||
|
||||
default :
|
||||
strlcpy(http->fields[field], value, HTTP_MAX_VALUE);
|
||||
break;
|
||||
}
|
||||
|
||||
if (field == HTTP_FIELD_AUTHORIZATION)
|
||||
{
|
||||
/*
|
||||
* Special case for Authorization: as its contents can be
|
||||
* longer than HTTP_MAX_VALUE
|
||||
*/
|
||||
|
||||
if (http->field_authorization)
|
||||
free(http->field_authorization);
|
||||
|
||||
http->field_authorization = strdup(value);
|
||||
}
|
||||
else if (field == HTTP_FIELD_HOST)
|
||||
{
|
||||
/*
|
||||
* Special-case for Host: as we don't want a trailing "." on the hostname and
|
||||
* need to bracket IPv6 numeric addresses.
|
||||
*/
|
||||
|
||||
char *ptr = strchr(value, ':');
|
||||
|
||||
if (value[0] != '[' && ptr && strchr(ptr + 1, ':'))
|
||||
{
|
||||
/*
|
||||
* Bracket IPv6 numeric addresses...
|
||||
*
|
||||
* This is slightly inefficient (basically copying twice), but is an edge
|
||||
* case and not worth optimizing...
|
||||
*/
|
||||
|
||||
snprintf(http->fields[HTTP_FIELD_HOST],
|
||||
sizeof(http->fields[HTTP_FIELD_HOST]), "[%s]", value);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Check for a trailing dot on the hostname...
|
||||
*/
|
||||
|
||||
ptr = http->fields[HTTP_FIELD_HOST];
|
||||
|
||||
if (*ptr)
|
||||
{
|
||||
ptr += strlen(ptr) - 1;
|
||||
|
||||
if (*ptr == '.')
|
||||
*ptr = '\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef HAVE_LIBZ
|
||||
else if (field == HTTP_FIELD_CONTENT_ENCODING &&
|
||||
http->data_encoding != HTTP_ENCODING_FIELDS)
|
||||
{
|
||||
DEBUG_puts("1httpSetField: Calling http_content_coding_start.");
|
||||
http_content_coding_start(http, value);
|
||||
}
|
||||
#endif /* HAVE_LIBZ */
|
||||
http_add_field(http, field, value, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -3035,7 +2938,7 @@ _httpUpdate(http_t *http, /* I - HTTP connection */
|
||||
httpSetCookie(http, value);
|
||||
}
|
||||
else if ((field = httpFieldValue(line)) != HTTP_FIELD_UNKNOWN)
|
||||
httpSetField(http, field, value);
|
||||
http_add_field(http, field, value, 1);
|
||||
#ifdef DEBUG
|
||||
else
|
||||
DEBUG_printf(("1_httpUpdate: unknown field %s seen!", line));
|
||||
@@ -3689,6 +3592,118 @@ httpWriteResponse(http_t *http, /* I - HTTP connection */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'http_add_field()' - Add a value for a HTTP field, appending if needed.
|
||||
*/
|
||||
|
||||
static void
|
||||
http_add_field(http_t *http, /* I - HTTP connection */
|
||||
http_field_t field, /* I - HTTP field */
|
||||
const char *value, /* I - Value string */
|
||||
int append) /* I - Append value? */
|
||||
{
|
||||
char newvalue[1024]; /* New value string */
|
||||
const char *oldvalue; /* Old field value */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Optionally append the new value to the existing one...
|
||||
*/
|
||||
|
||||
if (append && field != HTTP_FIELD_ACCEPT_ENCODING && field != HTTP_FIELD_ACCEPT_LANGUAGE && field != HTTP_FIELD_ACCEPT_RANGES && field != HTTP_FIELD_ALLOW && field != HTTP_FIELD_LINK && field != HTTP_FIELD_TRANSFER_ENCODING && field != HTTP_FIELD_UPGRADE && field != HTTP_FIELD_WWW_AUTHENTICATE)
|
||||
append = 0;
|
||||
|
||||
if (field == HTTP_FIELD_HOST)
|
||||
{
|
||||
/*
|
||||
* Special-case for Host: as we don't want a trailing "." on the hostname and
|
||||
* need to bracket IPv6 numeric addresses.
|
||||
*/
|
||||
|
||||
char *ptr = strchr(value, ':');
|
||||
|
||||
if (value[0] != '[' && ptr && strchr(ptr + 1, ':'))
|
||||
{
|
||||
/*
|
||||
* Bracket IPv6 numeric addresses...
|
||||
*/
|
||||
|
||||
snprintf(newvalue, sizeof(newvalue), "[%s]", value);
|
||||
value = newvalue;
|
||||
}
|
||||
else if (*value && value[strlen(value) - 1] == '.')
|
||||
{
|
||||
/*
|
||||
* Strip the trailing dot on the hostname...
|
||||
*/
|
||||
|
||||
strlcpy(newvalue, value, sizeof(newvalue));
|
||||
newvalue[strlen(newvalue) - 1] = '\0';
|
||||
value = newvalue;
|
||||
}
|
||||
}
|
||||
else if (append && *value && (oldvalue = httpGetField(http, field)) != NULL && *oldvalue)
|
||||
{
|
||||
snprintf(newvalue, sizeof(newvalue), "%s, %s", oldvalue, value);
|
||||
value = newvalue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Save the new value...
|
||||
*/
|
||||
|
||||
switch (field)
|
||||
{
|
||||
case HTTP_FIELD_ACCEPT_ENCODING :
|
||||
if (http->accept_encoding)
|
||||
_cupsStrFree(http->accept_encoding);
|
||||
|
||||
http->accept_encoding = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_ALLOW :
|
||||
if (http->allow)
|
||||
_cupsStrFree(http->allow);
|
||||
|
||||
http->allow = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
case HTTP_FIELD_SERVER :
|
||||
if (http->server)
|
||||
_cupsStrFree(http->server);
|
||||
|
||||
http->server = _cupsStrAlloc(value);
|
||||
break;
|
||||
|
||||
default :
|
||||
strlcpy(http->fields[field], value, HTTP_MAX_VALUE);
|
||||
break;
|
||||
}
|
||||
|
||||
if (field == HTTP_FIELD_AUTHORIZATION)
|
||||
{
|
||||
/*
|
||||
* Special case for Authorization: as its contents can be
|
||||
* longer than HTTP_MAX_VALUE
|
||||
*/
|
||||
|
||||
if (http->field_authorization)
|
||||
free(http->field_authorization);
|
||||
|
||||
http->field_authorization = strdup(value);
|
||||
}
|
||||
#ifdef HAVE_LIBZ
|
||||
else if (field == HTTP_FIELD_CONTENT_ENCODING &&
|
||||
http->data_encoding != HTTP_ENCODING_FIELDS)
|
||||
{
|
||||
DEBUG_puts("1http_add_field: Calling http_content_coding_start.");
|
||||
http_content_coding_start(http, value);
|
||||
}
|
||||
#endif /* HAVE_LIBZ */
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_LIBZ
|
||||
/*
|
||||
* 'http_content_coding_finish()' - Finish doing any content encoding.
|
||||
@@ -4056,7 +4071,7 @@ http_read(http_t *http, /* I - HTTP connection */
|
||||
|
||||
DEBUG_printf(("http_read(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length));
|
||||
|
||||
if (!http->blocking)
|
||||
if (!http->blocking || http->timeout_value > 0.0)
|
||||
{
|
||||
while (!httpWait(http, http->wait_value))
|
||||
{
|
||||
@@ -4651,7 +4666,7 @@ http_write(http_t *http, /* I - HTTP connection */
|
||||
{
|
||||
DEBUG_printf(("3http_write: About to write %d bytes.", (int)length));
|
||||
|
||||
if (http->timeout_cb)
|
||||
if (http->timeout_value > 0.0)
|
||||
{
|
||||
#ifdef HAVE_POLL
|
||||
struct pollfd pfd; /* Polled file descriptor */
|
||||
@@ -4695,7 +4710,7 @@ http_write(http_t *http, /* I - HTTP connection */
|
||||
http->error = errno;
|
||||
return (-1);
|
||||
}
|
||||
else if (nfds == 0 && !(*http->timeout_cb)(http, http->timeout_data))
|
||||
else if (nfds == 0 && (!http->timeout_cb || !(*http->timeout_cb)(http, http->timeout_data)))
|
||||
{
|
||||
#ifdef WIN32
|
||||
http->error = WSAEWOULDBLOCK;
|
||||
|
||||
+5
-2
@@ -248,10 +248,11 @@ typedef enum http_status_e /**** HTTP status codes ****/
|
||||
|
||||
HTTP_STATUS_MULTIPLE_CHOICES = 300, /* Multiple files match request */
|
||||
HTTP_STATUS_MOVED_PERMANENTLY, /* Document has moved permanently */
|
||||
HTTP_STATUS_MOVED_TEMPORARILY, /* Document has moved temporarily */
|
||||
HTTP_STATUS_SEE_OTHER, /* See this other link... */
|
||||
HTTP_STATUS_FOUND, /* Document was found at a different URI */
|
||||
HTTP_STATUS_SEE_OTHER, /* See this other link */
|
||||
HTTP_STATUS_NOT_MODIFIED, /* File not modified */
|
||||
HTTP_STATUS_USE_PROXY, /* Must use a proxy to access this URI */
|
||||
HTTP_STATUS_TEMPORARY_REDIRECT = 307, /* Temporary redirection */
|
||||
|
||||
HTTP_STATUS_BAD_REQUEST = 400, /* Bad request */
|
||||
HTTP_STATUS_UNAUTHORIZED, /* Unauthorized to access host */
|
||||
@@ -285,6 +286,8 @@ typedef enum http_status_e /**** HTTP status codes ****/
|
||||
HTTP_STATUS_CUPS_PKI_ERROR, /* Error negotiating a secure connection @since CUPS 1.5/macOS 10.7@ */
|
||||
HTTP_STATUS_CUPS_WEBIF_DISABLED /* Web interface is disabled @private@ */
|
||||
|
||||
# define HTTP_STATUS_MOVED_TEMPORARILY HTTP_STATUS_FOUND /* Renamed in RFC 7231 */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
/* Old names for this enumeration */
|
||||
# define HTTP_ERROR HTTP_STATUS_ERROR
|
||||
|
||||
+16
-4
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Internet Printing Protocol support functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -960,9 +960,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"feed-orientation-supported",
|
||||
"finishings",
|
||||
"finishings-col",
|
||||
"finishings-col-database",
|
||||
"finishings-col-default",
|
||||
"finishings-col-ready",
|
||||
"finishings-col-supported",
|
||||
"finishings-default",
|
||||
"finishings-ready",
|
||||
"finishings-supported",
|
||||
"font-name-requested",
|
||||
"font-name-requested-default",
|
||||
@@ -1001,6 +1004,7 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"media-bottom-margin-supported",
|
||||
"media-col",
|
||||
"media-col-default",
|
||||
"media-col-ready",
|
||||
"media-col-supported",
|
||||
"media-color-supported",
|
||||
"media-default",
|
||||
@@ -1015,6 +1019,7 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"media-left-margin-supported",
|
||||
"media-order-count-supported",
|
||||
"media-pre-printed-supported",
|
||||
"media-ready",
|
||||
"media-recycled-supported",
|
||||
"media-right-margin-supported",
|
||||
"media-size-supported",
|
||||
@@ -1277,9 +1282,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"feed-orientation-supported",
|
||||
"finishings",
|
||||
"finishings-col",
|
||||
"finishings-col-database",
|
||||
"finishings-col-default",
|
||||
"finishings-col-ready",
|
||||
"finishings-col-supported",
|
||||
"finishings-default",
|
||||
"finishings-ready",
|
||||
"finishings-supported",
|
||||
"font-name-requested",
|
||||
"font-name-requested-default",
|
||||
@@ -1383,6 +1391,7 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"media-bottom-margin-supported",
|
||||
"media-col",
|
||||
"media-col-default",
|
||||
"media-col-ready",
|
||||
"media-col-supported",
|
||||
"media-color-supported",
|
||||
"media-default",
|
||||
@@ -1397,6 +1406,7 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"media-left-margin-supported",
|
||||
"media-order-count-supported",
|
||||
"media-pre-printed-supported",
|
||||
"media-ready",
|
||||
"media-recycled-supported",
|
||||
"media-right-margin-supported",
|
||||
"media-size-supported",
|
||||
@@ -1582,10 +1592,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"job-page-limit", /* CUPS extension */
|
||||
"job-password-encryption-supported",
|
||||
"job-password-supported",
|
||||
"job-presets-supported", /* IPP Presets */
|
||||
"job-quota-period", /* CUPS extension */
|
||||
"job-resolvers-supported",
|
||||
"job-settable-attributes-supported",
|
||||
"job-spooling-supported",
|
||||
"job-triggers-supported", /* IPP Presets */
|
||||
"jpeg-k-octets-supported", /* CUPS extension */
|
||||
"jpeg-x-dimension-supported", /* CUPS extension */
|
||||
"jpeg-y-dimension-supported", /* CUPS extension */
|
||||
@@ -1599,8 +1611,6 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"marker-message", /* CUPS extension */
|
||||
"marker-names", /* CUPS extension */
|
||||
"marker-types", /* CUPS extension */
|
||||
"media-col-ready",
|
||||
"media-ready",
|
||||
"member-names", /* CUPS extension */
|
||||
"member-uris", /* CUPS extension */
|
||||
"multiple-destination-uris-supported",/* IPP FaxOut */
|
||||
@@ -1623,6 +1633,8 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
|
||||
"printer-charge-info",
|
||||
"printer-charge-info-uri",
|
||||
"printer-commands", /* CUPS extension */
|
||||
"printer-config-change-date-time",
|
||||
"printer-config-change-time",
|
||||
"printer-current-time",
|
||||
"printer-detailed-status-messages",
|
||||
"printer-device-id",
|
||||
|
||||
+9
-5
@@ -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
@@ -79,11 +79,11 @@ extern "C" {
|
||||
|
||||
typedef enum ipp_dstate_e /**** Document states @exclude all@ ****/
|
||||
{
|
||||
IPP_DOCUMENT_PENDING = 3, /* Document is pending */
|
||||
IPP_DOCUMENT_PROCESSING = 5, /* Document is processing */
|
||||
IPP_DOCUMENT_CANCELED = 7, /* Document is canceled */
|
||||
IPP_DOCUMENT_ABORTED, /* Document is aborted */
|
||||
IPP_DOCUMENT_COMPLETED /* Document is completed */
|
||||
IPP_DSTATE_PENDING = 3, /* Document is pending */
|
||||
IPP_DSTATE_PROCESSING = 5, /* Document is processing */
|
||||
IPP_DSTATE_CANCELED = 7, /* Document is canceled */
|
||||
IPP_DSTATE_ABORTED, /* Document is aborted */
|
||||
IPP_DSTATE_COMPLETED /* Document is completed */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_DOCUMENT_PENDING IPP_DSTATE_PENDING
|
||||
|
||||
+86
-84
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Private MD5 implementation for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2005 by Easy Software Products
|
||||
* Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
|
||||
*
|
||||
@@ -43,70 +43,71 @@
|
||||
#include "md5-private.h"
|
||||
#include "string-private.h"
|
||||
|
||||
#define T1 0xd76aa478
|
||||
#define T2 0xe8c7b756
|
||||
#define T3 0x242070db
|
||||
#define T4 0xc1bdceee
|
||||
#define T5 0xf57c0faf
|
||||
#define T6 0x4787c62a
|
||||
#define T7 0xa8304613
|
||||
#define T8 0xfd469501
|
||||
#define T9 0x698098d8
|
||||
#define T10 0x8b44f7af
|
||||
#define T11 0xffff5bb1
|
||||
#define T12 0x895cd7be
|
||||
#define T13 0x6b901122
|
||||
#define T14 0xfd987193
|
||||
#define T15 0xa679438e
|
||||
#define T16 0x49b40821
|
||||
#define T17 0xf61e2562
|
||||
#define T18 0xc040b340
|
||||
#define T19 0x265e5a51
|
||||
#define T20 0xe9b6c7aa
|
||||
#define T21 0xd62f105d
|
||||
#define T22 0x02441453
|
||||
#define T23 0xd8a1e681
|
||||
#define T24 0xe7d3fbc8
|
||||
#define T25 0x21e1cde6
|
||||
#define T26 0xc33707d6
|
||||
#define T27 0xf4d50d87
|
||||
#define T28 0x455a14ed
|
||||
#define T29 0xa9e3e905
|
||||
#define T30 0xfcefa3f8
|
||||
#define T31 0x676f02d9
|
||||
#define T32 0x8d2a4c8a
|
||||
#define T33 0xfffa3942
|
||||
#define T34 0x8771f681
|
||||
#define T35 0x6d9d6122
|
||||
#define T36 0xfde5380c
|
||||
#define T37 0xa4beea44
|
||||
#define T38 0x4bdecfa9
|
||||
#define T39 0xf6bb4b60
|
||||
#define T40 0xbebfbc70
|
||||
#define T41 0x289b7ec6
|
||||
#define T42 0xeaa127fa
|
||||
#define T43 0xd4ef3085
|
||||
#define T44 0x04881d05
|
||||
#define T45 0xd9d4d039
|
||||
#define T46 0xe6db99e5
|
||||
#define T47 0x1fa27cf8
|
||||
#define T48 0xc4ac5665
|
||||
#define T49 0xf4292244
|
||||
#define T50 0x432aff97
|
||||
#define T51 0xab9423a7
|
||||
#define T52 0xfc93a039
|
||||
#define T53 0x655b59c3
|
||||
#define T54 0x8f0ccc92
|
||||
#define T55 0xffeff47d
|
||||
#define T56 0x85845dd1
|
||||
#define T57 0x6fa87e4f
|
||||
#define T58 0xfe2ce6e0
|
||||
#define T59 0xa3014314
|
||||
#define T60 0x4e0811a1
|
||||
#define T61 0xf7537e82
|
||||
#define T62 0xbd3af235
|
||||
#define T63 0x2ad7d2bb
|
||||
#define T64 0xeb86d391
|
||||
#if !defined(__APPLE__) && !defined(HAVE_GNUTLS)
|
||||
# define T1 0xd76aa478
|
||||
# define T2 0xe8c7b756
|
||||
# define T3 0x242070db
|
||||
# define T4 0xc1bdceee
|
||||
# define T5 0xf57c0faf
|
||||
# define T6 0x4787c62a
|
||||
# define T7 0xa8304613
|
||||
# define T8 0xfd469501
|
||||
# define T9 0x698098d8
|
||||
# define T10 0x8b44f7af
|
||||
# define T11 0xffff5bb1
|
||||
# define T12 0x895cd7be
|
||||
# define T13 0x6b901122
|
||||
# define T14 0xfd987193
|
||||
# define T15 0xa679438e
|
||||
# define T16 0x49b40821
|
||||
# define T17 0xf61e2562
|
||||
# define T18 0xc040b340
|
||||
# define T19 0x265e5a51
|
||||
# define T20 0xe9b6c7aa
|
||||
# define T21 0xd62f105d
|
||||
# define T22 0x02441453
|
||||
# define T23 0xd8a1e681
|
||||
# define T24 0xe7d3fbc8
|
||||
# define T25 0x21e1cde6
|
||||
# define T26 0xc33707d6
|
||||
# define T27 0xf4d50d87
|
||||
# define T28 0x455a14ed
|
||||
# define T29 0xa9e3e905
|
||||
# define T30 0xfcefa3f8
|
||||
# define T31 0x676f02d9
|
||||
# define T32 0x8d2a4c8a
|
||||
# define T33 0xfffa3942
|
||||
# define T34 0x8771f681
|
||||
# define T35 0x6d9d6122
|
||||
# define T36 0xfde5380c
|
||||
# define T37 0xa4beea44
|
||||
# define T38 0x4bdecfa9
|
||||
# define T39 0xf6bb4b60
|
||||
# define T40 0xbebfbc70
|
||||
# define T41 0x289b7ec6
|
||||
# define T42 0xeaa127fa
|
||||
# define T43 0xd4ef3085
|
||||
# define T44 0x04881d05
|
||||
# define T45 0xd9d4d039
|
||||
# define T46 0xe6db99e5
|
||||
# define T47 0x1fa27cf8
|
||||
# define T48 0xc4ac5665
|
||||
# define T49 0xf4292244
|
||||
# define T50 0x432aff97
|
||||
# define T51 0xab9423a7
|
||||
# define T52 0xfc93a039
|
||||
# define T53 0x655b59c3
|
||||
# define T54 0x8f0ccc92
|
||||
# define T55 0xffeff47d
|
||||
# define T56 0x85845dd1
|
||||
# define T57 0x6fa87e4f
|
||||
# define T58 0xfe2ce6e0
|
||||
# define T59 0xa3014314
|
||||
# define T60 0x4e0811a1
|
||||
# define T61 0xf7537e82
|
||||
# define T62 0xbd3af235
|
||||
# define T63 0x2ad7d2bb
|
||||
# define T64 0xeb86d391
|
||||
|
||||
static void
|
||||
_cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
@@ -116,10 +117,10 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
c = pms->abcd[2], d = pms->abcd[3];
|
||||
unsigned int t;
|
||||
|
||||
#ifndef ARCH_IS_BIG_ENDIAN
|
||||
# define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */
|
||||
#endif
|
||||
#if ARCH_IS_BIG_ENDIAN
|
||||
# ifndef ARCH_IS_BIG_ENDIAN
|
||||
# define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */
|
||||
# endif
|
||||
# if ARCH_IS_BIG_ENDIAN
|
||||
|
||||
/*
|
||||
* On big-endian machines, we must arrange the bytes in the right
|
||||
@@ -133,7 +134,7 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
X[i] = (unsigned)xp[0] + ((unsigned)xp[1] << 8) +
|
||||
((unsigned)xp[2] << 16) + ((unsigned)xp[3] << 24);
|
||||
|
||||
#else /* !ARCH_IS_BIG_ENDIAN */
|
||||
# else /* !ARCH_IS_BIG_ENDIAN */
|
||||
|
||||
/*
|
||||
* On little-endian machines, we can process properly aligned data
|
||||
@@ -150,15 +151,15 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
memcpy(xbuf, data, 64);
|
||||
X = xbuf;
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
|
||||
# define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
|
||||
|
||||
/* Round 1. */
|
||||
/* Let [abcd k s i] denote the operation
|
||||
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
# define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
|
||||
# define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + F(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
@@ -178,13 +179,13 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
SET(d, a, b, c, 13, 12, T14);
|
||||
SET(c, d, a, b, 14, 17, T15);
|
||||
SET(b, c, d, a, 15, 22, T16);
|
||||
#undef SET
|
||||
# undef SET
|
||||
|
||||
/* Round 2. */
|
||||
/* Let [abcd k s i] denote the operation
|
||||
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
# define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
|
||||
# define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + G(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
@@ -204,13 +205,13 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
SET(d, a, b, c, 2, 9, T30);
|
||||
SET(c, d, a, b, 7, 14, T31);
|
||||
SET(b, c, d, a, 12, 20, T32);
|
||||
#undef SET
|
||||
# undef SET
|
||||
|
||||
/* Round 3. */
|
||||
/* Let [abcd k s t] denote the operation
|
||||
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define H(x, y, z) ((x) ^ (y) ^ (z))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
# define H(x, y, z) ((x) ^ (y) ^ (z))
|
||||
# define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + H(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
@@ -230,13 +231,13 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
SET(d, a, b, c, 12, 11, T46);
|
||||
SET(c, d, a, b, 15, 16, T47);
|
||||
SET(b, c, d, a, 2, 23, T48);
|
||||
#undef SET
|
||||
# undef SET
|
||||
|
||||
/* Round 4. */
|
||||
/* Let [abcd k s t] denote the operation
|
||||
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define I(x, y, z) ((y) ^ ((x) | ~(z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
# define I(x, y, z) ((y) ^ ((x) | ~(z)))
|
||||
# define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + I(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
@@ -256,7 +257,7 @@ _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/)
|
||||
SET(d, a, b, c, 11, 10, T62);
|
||||
SET(c, d, a, b, 2, 15, T63);
|
||||
SET(b, c, d, a, 9, 21, T64);
|
||||
#undef SET
|
||||
# undef SET
|
||||
|
||||
/* Then perform the following additions. (That is increment each
|
||||
of the four registers by the value it had before this block
|
||||
@@ -337,3 +338,4 @@ _cupsMD5Finish(_cups_md5_state_t *pms, unsigned char digest[16])
|
||||
for (i = 0; i < 16; ++i)
|
||||
digest[i] = (unsigned char)(pms->abcd[i >> 2] >> ((i & 3) << 3));
|
||||
}
|
||||
#endif /* !__APPLE__ && !HAVE_GNUTLS */
|
||||
|
||||
+16
-36
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* MD5 password support for CUPS.
|
||||
* MD5 password support for CUPS (deprecated).
|
||||
*
|
||||
* Copyright 2007-2010 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -17,12 +17,15 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <cups/cups.h>
|
||||
#include "http-private.h"
|
||||
#include "string-private.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'httpMD5()' - Compute the MD5 sum of the username:group:password.
|
||||
*
|
||||
* @deprecated@
|
||||
*/
|
||||
|
||||
char * /* O - MD5 sum */
|
||||
@@ -31,7 +34,6 @@ httpMD5(const char *username, /* I - User name */
|
||||
const char *passwd, /* I - Password string */
|
||||
char md5[33]) /* O - MD5 string */
|
||||
{
|
||||
_cups_md5_state_t state; /* MD5 state info */
|
||||
unsigned char sum[16]; /* Sum data */
|
||||
char line[256]; /* Line to sum */
|
||||
|
||||
@@ -41,15 +43,13 @@ httpMD5(const char *username, /* I - User name */
|
||||
*/
|
||||
|
||||
snprintf(line, sizeof(line), "%s:%s:%s", username, realm, passwd);
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
||||
_cupsMD5Finish(&state, sum);
|
||||
cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
||||
|
||||
/*
|
||||
* Return the sum...
|
||||
*/
|
||||
|
||||
return (httpMD5String(sum, md5));
|
||||
return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,8 @@ httpMD5(const char *username, /* I - User name */
|
||||
* 'httpMD5Final()' - Combine the MD5 sum of the username, group, and password
|
||||
* with the server-supplied nonce value, method, and
|
||||
* request-uri.
|
||||
*
|
||||
* @deprecated@
|
||||
*/
|
||||
|
||||
char * /* O - New sum */
|
||||
@@ -65,7 +67,6 @@ httpMD5Final(const char *nonce, /* I - Server nonce value */
|
||||
const char *resource, /* I - Resource path */
|
||||
char md5[33]) /* IO - MD5 sum */
|
||||
{
|
||||
_cups_md5_state_t state; /* MD5 state info */
|
||||
unsigned char sum[16]; /* Sum data */
|
||||
char line[1024]; /* Line of data */
|
||||
char a2[33]; /* Hash of method and resource */
|
||||
@@ -76,10 +77,8 @@ httpMD5Final(const char *nonce, /* I - Server nonce value */
|
||||
*/
|
||||
|
||||
snprintf(line, sizeof(line), "%s:%s", method, resource);
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
||||
_cupsMD5Finish(&state, sum);
|
||||
httpMD5String(sum, a2);
|
||||
cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
||||
cupsHashString(sum, sizeof(sum), a2, sizeof(a2));
|
||||
|
||||
/*
|
||||
* Then combine A1 (MD5 of username, realm, and password) with the nonce
|
||||
@@ -88,17 +87,16 @@ httpMD5Final(const char *nonce, /* I - Server nonce value */
|
||||
*/
|
||||
|
||||
snprintf(line, sizeof(line), "%s:%s:%s", md5, nonce, a2);
|
||||
cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
||||
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
||||
_cupsMD5Finish(&state, sum);
|
||||
|
||||
return (httpMD5String(sum, md5));
|
||||
return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpMD5String()' - Convert an MD5 sum to a character string.
|
||||
*
|
||||
* @deprecated@
|
||||
*/
|
||||
|
||||
char * /* O - MD5 sum in hex */
|
||||
@@ -106,23 +104,5 @@ httpMD5String(const unsigned char *sum, /* I - MD5 sum data */
|
||||
char md5[33])
|
||||
/* O - MD5 sum in hex */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
char *md5ptr; /* Pointer into MD5 string */
|
||||
static const char hex[] = "0123456789abcdef";
|
||||
/* Hex digits */
|
||||
|
||||
|
||||
/*
|
||||
* Convert the MD5 sum to hexadecimal...
|
||||
*/
|
||||
|
||||
for (i = 16, md5ptr = md5; i > 0; i --, sum ++)
|
||||
{
|
||||
*md5ptr++ = hex[*sum >> 4];
|
||||
*md5ptr++ = hex[*sum & 15];
|
||||
}
|
||||
|
||||
*md5ptr = '\0';
|
||||
|
||||
return (md5);
|
||||
return ((char *)cupsHashString(sum, 16, md5, 33));
|
||||
}
|
||||
|
||||
+47
-18
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* PPD cache implementation for CUPS.
|
||||
*
|
||||
* Copyright 2010-2017 by Apple Inc.
|
||||
* Copyright © 2010-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -3117,6 +3117,41 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
cupsFilePuts(fp, "*cupsSNMPSupplies: False\n");
|
||||
cupsFilePuts(fp, "*cupsLanguages: \"en\"\n");
|
||||
|
||||
/*
|
||||
* Password/PIN printing...
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(response, "job-password-supported", IPP_TAG_INTEGER)) != NULL)
|
||||
{
|
||||
char pattern[33]; /* Password pattern */
|
||||
int maxlen = ippGetInteger(attr, 0);
|
||||
/* Maximum length */
|
||||
const char *repertoire = ippGetString(ippFindAttribute(response, "job-password-repertoire-configured", IPP_TAG_KEYWORD), 0, NULL);
|
||||
/* Type of password */
|
||||
|
||||
if (maxlen > (int)(sizeof(pattern) - 1))
|
||||
maxlen = sizeof(pattern) - 1;
|
||||
|
||||
if (!repertoire || !strcmp(repertoire, "iana_us-ascii_digits"))
|
||||
memset(pattern, '1', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_us-ascii_letters"))
|
||||
memset(pattern, 'A', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_us-ascii_complex"))
|
||||
memset(pattern, 'C', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_us-ascii_any"))
|
||||
memset(pattern, '.', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_utf-8_digits"))
|
||||
memset(pattern, 'N', maxlen);
|
||||
else if (!strcmp(repertoire, "iana_utf-8_letters"))
|
||||
memset(pattern, 'U', maxlen);
|
||||
else
|
||||
memset(pattern, '*', maxlen);
|
||||
|
||||
pattern[maxlen] = '\0';
|
||||
|
||||
cupsFilePrintf(fp, "*cupsPassword: \"%s\"\n", pattern);
|
||||
}
|
||||
|
||||
/*
|
||||
* Filters...
|
||||
*/
|
||||
@@ -3125,24 +3160,18 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
{
|
||||
is_apple = ippContainsString(attr, "image/urf");
|
||||
is_pdf = ippContainsString(attr, "application/pdf");
|
||||
is_pwg = ippContainsString(attr, "image/pwg-raster");
|
||||
is_pwg = ippContainsString(attr, "image/pwg-raster") && !is_apple;
|
||||
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
const char *format = ippGetString(attr, i, NULL);
|
||||
/* PDL */
|
||||
|
||||
/*
|
||||
* Write cupsFilter2 lines for supported formats...
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(format, "application/pdf"))
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n");
|
||||
else if (!_cups_strcasecmp(format, "image/jpeg") || !_cups_strcasecmp(format, "image/png"))
|
||||
cupsFilePrintf(fp, "*cupsFilter2: \"%s %s 0 -\"\n", format, format);
|
||||
else if (!_cups_strcasecmp(format, "image/pwg-raster") || !_cups_strcasecmp(format, "image/urf"))
|
||||
cupsFilePrintf(fp, "*cupsFilter2: \"%s %s 100 -\"\n", format, format);
|
||||
}
|
||||
if (ippContainsString(attr, "image/jpeg"))
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"image/jpeg image/jpeg 0 -\"\n");
|
||||
if (ippContainsString(attr, "image/png"))
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"image/png image/png 0 -\"\n");
|
||||
if (is_pdf)
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n");
|
||||
if (is_apple)
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"image/urf image/urf 100 -\"\n");
|
||||
if (is_pwg)
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"image/pwg-raster image/pwg-raster 100 -\"\n");
|
||||
}
|
||||
|
||||
if (!is_apple && !is_pdf && !is_pwg)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Option conflict management routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -29,7 +29,6 @@
|
||||
|
||||
enum
|
||||
{
|
||||
_PPD_NORMAL_CONSTRAINTS,
|
||||
_PPD_OPTION_CONSTRAINTS,
|
||||
_PPD_INSTALLABLE_CONSTRAINTS,
|
||||
_PPD_ALL_CONSTRAINTS
|
||||
@@ -998,7 +997,7 @@ ppd_test_constraints(
|
||||
if (!consts->installable && which == _PPD_INSTALLABLE_CONSTRAINTS)
|
||||
continue; /* Skip non-installable option constraint */
|
||||
|
||||
if (which == _PPD_OPTION_CONSTRAINTS && option)
|
||||
if ((which == _PPD_OPTION_CONSTRAINTS || which == _PPD_INSTALLABLE_CONSTRAINTS) && option)
|
||||
{
|
||||
/*
|
||||
* Skip constraints that do not involve the current option...
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* PPD localization routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -277,7 +277,7 @@ ppdLocalizeIPPReason(
|
||||
|
||||
if (!locattr)
|
||||
{
|
||||
if (lang && (!scheme || !strcmp(scheme, "text")))
|
||||
if (lang && (!scheme || !strcmp(scheme, "text")) && strcmp(reason, "none"))
|
||||
{
|
||||
/*
|
||||
* Try to localize a standard printer-state-reason keyword...
|
||||
|
||||
+28
-99
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* PPD utilities for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -216,6 +216,27 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL
|
||||
const char *tmpdir; /* TMPDIR environment variable */
|
||||
struct timeval curtime; /* Current time */
|
||||
|
||||
#ifdef __APPLE__
|
||||
/*
|
||||
* On macOS and iOS, the TMPDIR environment variable is not always the
|
||||
* best location to place temporary files due to sandboxing. Instead,
|
||||
* the confstr function should be called to get the proper per-user,
|
||||
* per-process TMPDIR value.
|
||||
*/
|
||||
|
||||
char tmppath[1024]; /* Temporary directory */
|
||||
|
||||
if ((tmpdir = getenv("TMPDIR")) != NULL && access(tmpdir, W_OK))
|
||||
tmpdir = NULL;
|
||||
|
||||
if (!tmpdir)
|
||||
{
|
||||
if (confstr(_CS_DARWIN_USER_TEMP_DIR, tmppath, sizeof(tmppath)))
|
||||
tmpdir = tmppath;
|
||||
else
|
||||
tmpdir = "/private/tmp"; /* This should never happen */
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* Previously we put root temporary files in the default CUPS temporary
|
||||
* directory under /var/spool/cups. However, since the scheduler cleans
|
||||
@@ -224,11 +245,8 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL
|
||||
*/
|
||||
|
||||
if ((tmpdir = getenv("TMPDIR")) == NULL)
|
||||
# ifdef __APPLE__
|
||||
tmpdir = "/private/tmp"; /* /tmp is a symlink to /private/tmp */
|
||||
# else
|
||||
tmpdir = "/tmp";
|
||||
# endif /* __APPLE__ */
|
||||
tmpdir = "/tmp";
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
/*
|
||||
* Make the temporary name using the specified directory...
|
||||
@@ -511,23 +529,16 @@ cups_get_printer_uri(
|
||||
int depth) /* I - Depth of query */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
int http_port; /* Port number */
|
||||
http_t *http2; /* Alternate HTTP connection */
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
char uri[HTTP_MAX_URI], /* printer-uri attribute */
|
||||
scheme[HTTP_MAX_URI], /* Scheme name */
|
||||
username[HTTP_MAX_URI], /* Username:password */
|
||||
classname[255], /* Temporary class name */
|
||||
http_hostname[HTTP_MAX_HOST];
|
||||
/* Hostname associated with connection */
|
||||
username[HTTP_MAX_URI]; /* Username:password */
|
||||
static const char * const requested_attrs[] =
|
||||
{ /* Requested attributes */
|
||||
"device-uri",
|
||||
"member-uris",
|
||||
"printer-uri-supported",
|
||||
"printer-type"
|
||||
"printer-uri-supported"
|
||||
};
|
||||
|
||||
|
||||
@@ -549,15 +560,6 @@ cups_get_printer_uri(
|
||||
|
||||
DEBUG_printf(("5cups_get_printer_uri: printer-uri=\"%s\"", uri));
|
||||
|
||||
/*
|
||||
* Get the hostname and port number we are connected to...
|
||||
*/
|
||||
|
||||
httpGetHostname(http, http_hostname, sizeof(http_hostname));
|
||||
http_port = httpAddrPort(http->hostaddr);
|
||||
|
||||
DEBUG_printf(("5cups_get_printer_uri: http_hostname=\"%s\"", http_hostname));
|
||||
|
||||
/*
|
||||
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
|
||||
* attributes:
|
||||
@@ -582,31 +584,7 @@ cups_get_printer_uri(
|
||||
|
||||
if ((response = cupsDoRequest(http, request, resource)) != NULL)
|
||||
{
|
||||
const char *device_uri = NULL; /* device-uri value */
|
||||
|
||||
if ((attr = ippFindAttribute(response, "device-uri", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
device_uri = attr->values[0].string.text;
|
||||
DEBUG_printf(("5cups_get_printer_uri: device-uri=\"%s\"", device_uri));
|
||||
}
|
||||
|
||||
if (device_uri &&
|
||||
(((!strncmp(device_uri, "ipp://", 6) || !strncmp(device_uri, "ipps://", 7)) &&
|
||||
(strstr(device_uri, "/printers/") != NULL || strstr(device_uri, "/classes/") != NULL)) ||
|
||||
((strstr(device_uri, "._ipp.") != NULL || strstr(device_uri, "._ipps.") != NULL) &&
|
||||
!strcmp(device_uri + strlen(device_uri) - 5, "/cups"))))
|
||||
{
|
||||
/*
|
||||
* Statically-configured shared printer.
|
||||
*/
|
||||
|
||||
httpSeparateURI(HTTP_URI_CODING_ALL, _httpResolveURI(device_uri, uri, sizeof(uri), _HTTP_RESOLVE_DEFAULT, NULL, NULL), scheme, sizeof(scheme), username, sizeof(username), host, hostsize, port, resource, resourcesize);
|
||||
ippDelete(response);
|
||||
|
||||
DEBUG_printf(("5cups_get_printer_uri: Resolved to host=\"%s\", port=%d, resource=\"%s\"", host, *port, resource));
|
||||
return (1);
|
||||
}
|
||||
else if ((attr = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL)
|
||||
if ((attr = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Get the first actual printer name in the class...
|
||||
@@ -631,55 +609,6 @@ cups_get_printer_uri(
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* No printers in this class - try recursively looking for a printer,
|
||||
* but not more than 3 levels deep...
|
||||
*/
|
||||
|
||||
if (depth < 3)
|
||||
{
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[i].string.text,
|
||||
scheme, sizeof(scheme), username, sizeof(username),
|
||||
host, hostsize, port, resource, resourcesize);
|
||||
if (!strncmp(resource, "/classes/", 9))
|
||||
{
|
||||
/*
|
||||
* Found a class! Connect to the right server...
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(http_hostname, host) && *port == http_port)
|
||||
http2 = http;
|
||||
else if ((http2 = httpConnect2(host, *port, NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL)) == NULL)
|
||||
{
|
||||
DEBUG_puts("8cups_get_printer_uri: Unable to connect to server");
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Look up printers on that server...
|
||||
*/
|
||||
|
||||
strlcpy(classname, resource + 9, sizeof(classname));
|
||||
|
||||
cups_get_printer_uri(http2, classname, host, hostsize, port,
|
||||
resource, resourcesize, depth + 1);
|
||||
|
||||
/*
|
||||
* Close the connection as needed...
|
||||
*/
|
||||
|
||||
if (http2 != http)
|
||||
httpClose(http2);
|
||||
|
||||
if (*host)
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
|
||||
+25
-7
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Temp file utilities for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -42,8 +42,10 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
int fd; /* File descriptor for temp file */
|
||||
int tries; /* Number of tries */
|
||||
const char *tmpdir; /* TMPDIR environment var */
|
||||
#if defined(__APPLE__) || defined(WIN32)
|
||||
char tmppath[1024]; /* Temporary directory */
|
||||
#endif /* __APPLE__ || WIN32 */
|
||||
#ifdef WIN32
|
||||
char tmppath[1024]; /* Windows temporary directory */
|
||||
DWORD curtime; /* Current time */
|
||||
#else
|
||||
struct timeval curtime; /* Current time */
|
||||
@@ -60,6 +62,26 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
GetTempPath(sizeof(tmppath), tmppath);
|
||||
tmpdir = tmppath;
|
||||
}
|
||||
|
||||
#elif defined(__APPLE__)
|
||||
/*
|
||||
* On macOS and iOS, the TMPDIR environment variable is not always the best
|
||||
* location to place temporary files due to sandboxing. Instead, the confstr
|
||||
* function should be called to get the proper per-user, per-process TMPDIR
|
||||
* value.
|
||||
*/
|
||||
|
||||
if ((tmpdir = getenv("TMPDIR")) != NULL && access(tmpdir, W_OK))
|
||||
tmpdir = NULL;
|
||||
|
||||
if (!tmpdir)
|
||||
{
|
||||
if (confstr(_CS_DARWIN_USER_TEMP_DIR, tmppath, sizeof(tmppath)))
|
||||
tmpdir = tmppath;
|
||||
else
|
||||
tmpdir = "/private/tmp"; /* This should never happen */
|
||||
}
|
||||
|
||||
#else
|
||||
/*
|
||||
* Previously we put root temporary files in the default CUPS temporary
|
||||
@@ -69,11 +91,7 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
*/
|
||||
|
||||
if ((tmpdir = getenv("TMPDIR")) == NULL)
|
||||
# if defined(__APPLE__) && !TARGET_OS_IOS
|
||||
tmpdir = "/private/tmp"; /* /tmp is a symlink to /private/tmp */
|
||||
# else
|
||||
tmpdir = "/tmp";
|
||||
# endif /* __APPLE__ && !TARGET_OS_IOS */
|
||||
#endif /* WIN32 */
|
||||
|
||||
/*
|
||||
|
||||
@@ -876,6 +876,13 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
host[256], /* Hostname */
|
||||
resource[256]; /* Resource path */
|
||||
int port; /* Port number */
|
||||
static const char * const pattrs[] =/* Requested printer attributes */
|
||||
{
|
||||
"job-template",
|
||||
"printer-defaults",
|
||||
"printer-description",
|
||||
"media-col-database"
|
||||
};
|
||||
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, argv[1], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
|
||||
{
|
||||
@@ -892,6 +899,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, argv[1]);
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs);
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
|
||||
if (_ppdCreateFromIPP(buffer, sizeof(buffer), response))
|
||||
|
||||
+23
-5
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Threading primitives for CUPS.
|
||||
*
|
||||
* Copyright 2009-2017 by Apple Inc.
|
||||
* Copyright © 2009-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -56,8 +56,16 @@ _cupsCondWait(_cups_cond_t *cond, /* I - Condition */
|
||||
{
|
||||
struct timespec abstime; /* Timeout */
|
||||
|
||||
abstime.tv_sec = (long)timeout;
|
||||
abstime.tv_nsec = (long)(1000000000 * (timeout - (long)timeout));
|
||||
clock_gettime(CLOCK_REALTIME, &abstime);
|
||||
|
||||
abstime.tv_sec += (long)timeout;
|
||||
abstime.tv_nsec += (long)(1000000000 * (timeout - (long)timeout));
|
||||
|
||||
while (abstime.tv_nsec >= 1000000000)
|
||||
{
|
||||
abstime.tv_nsec -= 1000000000;
|
||||
abstime.tv_sec ++;
|
||||
};
|
||||
|
||||
pthread_cond_timedwait(cond, mutex, &abstime);
|
||||
}
|
||||
@@ -513,8 +521,7 @@ _cupsThreadCreate(
|
||||
_cups_thread_func_t func, /* I - Entry point */
|
||||
void *arg) /* I - Entry point context */
|
||||
{
|
||||
fputs("DEBUG: CUPS was compiled without threading support, no thread "
|
||||
"created.\n", stderr);
|
||||
fputs("DEBUG: CUPS was compiled without threading support, no thread created.\n", stderr);
|
||||
|
||||
(void)func;
|
||||
(void)arg;
|
||||
@@ -523,6 +530,17 @@ _cupsThreadCreate(
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_cupsThreadDetach()' - Tell the OS that the thread is running independently.
|
||||
*/
|
||||
|
||||
void
|
||||
_cupsThreadDetach(_cups_thread_t thread)/* I - Thread ID */
|
||||
{
|
||||
(void)thread;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_cupsThreadWait()' - Wait for a thread to exit.
|
||||
*/
|
||||
|
||||
+60
-27
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* TLS support code for CUPS on macOS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -53,7 +53,9 @@ static char *tls_keypath = NULL;
|
||||
/* Server cert keychain path */
|
||||
static _cups_mutex_t tls_mutex = _CUPS_MUTEX_INITIALIZER;
|
||||
/* Mutex for keychain/certs */
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
static int tls_options = -1,/* Options for TLS connections */
|
||||
tls_min_version = _HTTP_TLS_1_0,
|
||||
tls_max_version = _HTTP_TLS_MAX;
|
||||
|
||||
|
||||
/*
|
||||
@@ -807,7 +809,6 @@ httpCredentialsString(
|
||||
CFStringRef cf_name; /* CF common name string */
|
||||
char name[256]; /* Common name associated with cert */
|
||||
time_t expiration; /* Expiration date of cert */
|
||||
_cups_md5_state_t md5_state; /* MD5 state */
|
||||
unsigned char md5_digest[16]; /* MD5 result */
|
||||
|
||||
if ((cf_name = SecCertificateCopySubjectSummary(secCert)) != NULL)
|
||||
@@ -820,9 +821,7 @@ httpCredentialsString(
|
||||
|
||||
expiration = (time_t)(SecCertificateNotValidAfter(secCert) + kCFAbsoluteTimeIntervalSince1970);
|
||||
|
||||
_cupsMD5Init(&md5_state);
|
||||
_cupsMD5Append(&md5_state, first->data, (int)first->datalen);
|
||||
_cupsMD5Finish(&md5_state, md5_digest);
|
||||
cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest));
|
||||
|
||||
snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]);
|
||||
|
||||
@@ -1139,10 +1138,16 @@ _httpTLSRead(http_t *http, /* I - HTTP connection */
|
||||
*/
|
||||
|
||||
void
|
||||
_httpTLSSetOptions(int options) /* I - Options */
|
||||
_httpTLSSetOptions(int options, /* I - Options */
|
||||
int min_version, /* I - Minimum TLS version */
|
||||
int max_version) /* I - Maximum TLS version */
|
||||
{
|
||||
if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0)
|
||||
tls_options = options;
|
||||
{
|
||||
tls_options = options;
|
||||
tls_min_version = min_version;
|
||||
tls_max_version = max_version;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1174,7 +1179,7 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting defaults.");
|
||||
_cupsSetDefaults();
|
||||
DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
|
||||
DEBUG_printf(("4_httpTLSStart: tls_options=%x, tls_min_version=%d, tls_max_version=%d", tls_options, tls_min_version, tls_max_version));
|
||||
}
|
||||
|
||||
#ifdef HAVE_SECKEYCHAINOPEN
|
||||
@@ -1217,22 +1222,23 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
|
||||
if (!error)
|
||||
{
|
||||
SSLProtocol minProtocol;
|
||||
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
minProtocol = kTLSProtocol11;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
minProtocol = kSSLProtocol3;
|
||||
else
|
||||
minProtocol = kTLSProtocol1;
|
||||
|
||||
error = SSLSetProtocolVersionMin(http->tls, minProtocol);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin(%d), error=%d", minProtocol, (int)error));
|
||||
|
||||
if (!error && (tls_options & _HTTP_TLS_ONLY_TLS10))
|
||||
static const SSLProtocol protocols[] = /* Min/max protocol versions */
|
||||
{
|
||||
error = SSLSetProtocolVersionMax(http->tls, kTLSProtocol1);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMax(kTLSProtocol1), error=%d", (int)error));
|
||||
kSSLProtocol3,
|
||||
kTLSProtocol1,
|
||||
kTLSProtocol11,
|
||||
kTLSProtocol12,
|
||||
kTLSProtocol12, /* TODO: update to 1.3 when 1.3 is supported */
|
||||
kTLSProtocol12 /* TODO: update to 1.3 when 1.3 is supported */
|
||||
};
|
||||
|
||||
error = SSLSetProtocolVersionMin(http->tls, protocols[tls_min_version]);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin(%d), error=%d", protocols[tls_min_version], (int)error));
|
||||
|
||||
if (!error)
|
||||
{
|
||||
error = SSLSetProtocolVersionMax(http->tls, protocols[tls_max_version]);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMax(%d), error=%d", protocols[tls_max_version], (int)error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1532,7 +1538,28 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
|
||||
if (!error)
|
||||
{
|
||||
int done = 0; /* Are we done yet? */
|
||||
int done = 0; /* Are we done yet? */
|
||||
double old_timeout; /* Old timeout value */
|
||||
http_timeout_cb_t old_cb; /* Old timeout callback */
|
||||
void *old_data; /* Old timeout data */
|
||||
|
||||
/*
|
||||
* Enforce a minimum timeout of 10 seconds for the TLS handshake...
|
||||
*/
|
||||
|
||||
old_timeout = http->timeout_value;
|
||||
old_cb = http->timeout_cb;
|
||||
old_data = http->timeout_data;
|
||||
|
||||
if (!old_cb || old_timeout < 10.0)
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting timeout to 10 seconds.");
|
||||
httpSetTimeout(http, 10.0, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do the TLS handshake...
|
||||
*/
|
||||
|
||||
while (!error && !done)
|
||||
{
|
||||
@@ -1653,6 +1680,12 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Restore the previous timeout settings...
|
||||
*/
|
||||
|
||||
httpSetTimeout(http, old_timeout, old_cb, old_data);
|
||||
}
|
||||
|
||||
if (error)
|
||||
@@ -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
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* TLS support code for CUPS using GNU TLS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -35,7 +35,9 @@ static char *tls_keypath = NULL;
|
||||
/* Server cert keychain path */
|
||||
static _cups_mutex_t tls_mutex = _CUPS_MUTEX_INITIALIZER;
|
||||
/* Mutex for keychain/certs */
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
static int tls_options = -1,/* Options for TLS connections */
|
||||
tls_min_version = _HTTP_TLS_1_0,
|
||||
tls_max_version = _HTTP_TLS_MAX;
|
||||
|
||||
|
||||
/*
|
||||
@@ -397,7 +399,7 @@ httpCredentialsAreValidForName(
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
rserial_size = sizeof(rserial);
|
||||
if (!gnutls_x509_crl_get_crt_serial(tls_crl, (unsigned)i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, rserial_size))
|
||||
if (!gnutls_x509_crl_get_crt_serial(tls_crl, (unsigned)i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, (int)rserial_size))
|
||||
{
|
||||
result = 0;
|
||||
break;
|
||||
@@ -646,7 +648,6 @@ httpCredentialsString(
|
||||
char name[256]; /* Common name associated with cert */
|
||||
size_t namelen; /* Length of name */
|
||||
time_t expiration; /* Expiration date of cert */
|
||||
_cups_md5_state_t md5_state; /* MD5 state */
|
||||
unsigned char md5_digest[16]; /* MD5 result */
|
||||
|
||||
namelen = sizeof(name) - 1;
|
||||
@@ -657,9 +658,7 @@ httpCredentialsString(
|
||||
|
||||
expiration = gnutls_x509_crt_get_expiration_time(cert);
|
||||
|
||||
_cupsMD5Init(&md5_state);
|
||||
_cupsMD5Append(&md5_state, first->data, (int)first->datalen);
|
||||
_cupsMD5Finish(&md5_state, md5_digest);
|
||||
cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest));
|
||||
|
||||
snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]);
|
||||
|
||||
@@ -1094,7 +1093,7 @@ http_gnutls_read(
|
||||
|
||||
http = (http_t *)ptr;
|
||||
|
||||
if (!http->blocking)
|
||||
if (!http->blocking || http->timeout_value > 0.0)
|
||||
{
|
||||
/*
|
||||
* Make sure we have data before we read...
|
||||
@@ -1224,10 +1223,16 @@ _httpTLSSetCredentials(http_t *http) /* I - Connection to server */
|
||||
*/
|
||||
|
||||
void
|
||||
_httpTLSSetOptions(int options) /* I - Options */
|
||||
_httpTLSSetOptions(int options, /* I - Options */
|
||||
int min_version, /* I - Minimum TLS version */
|
||||
int max_version) /* I - Maximum TLS version */
|
||||
{
|
||||
if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0)
|
||||
tls_options = options;
|
||||
{
|
||||
tls_options = options;
|
||||
tls_min_version = min_version;
|
||||
tls_max_version = max_version;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1245,6 +1250,19 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
/* TLS credentials */
|
||||
char priority_string[2048];
|
||||
/* Priority string */
|
||||
int version; /* Current version */
|
||||
double old_timeout; /* Old timeout value */
|
||||
http_timeout_cb_t old_cb; /* Old timeout callback */
|
||||
void *old_data; /* Old timeout data */
|
||||
static const char * const versions[] =/* SSL/TLS versions */
|
||||
{
|
||||
"VERS-SSL3.0",
|
||||
"VERS-TLS1.0",
|
||||
"VERS-TLS1.1",
|
||||
"VERS-TLS1.2",
|
||||
"VERS-TLS1.3",
|
||||
"VERS-TLS-ALL"
|
||||
};
|
||||
|
||||
|
||||
DEBUG_printf(("3_httpTLSStart(http=%p)", http));
|
||||
@@ -1506,14 +1524,40 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
|
||||
strlcpy(priority_string, "NORMAL", sizeof(priority_string));
|
||||
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL:-VERS-TLS1.0:-VERS-SSL3.0", sizeof(priority_string));
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_max_version < _HTTP_TLS_MAX)
|
||||
{
|
||||
/*
|
||||
* Require specific TLS versions...
|
||||
*/
|
||||
|
||||
strlcat(priority_string, ":-VERS-TLS-ALL", sizeof(priority_string));
|
||||
for (version = tls_min_version; version <= tls_max_version; version ++)
|
||||
{
|
||||
strlcat(priority_string, ":+", sizeof(priority_string));
|
||||
strlcat(priority_string, versions[version], sizeof(priority_string));
|
||||
}
|
||||
}
|
||||
else if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
{
|
||||
/*
|
||||
* Allow all versions of TLS and SSL/3.0...
|
||||
*/
|
||||
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL:+VERS-SSL3.0", sizeof(priority_string));
|
||||
else if (tls_options & _HTTP_TLS_ONLY_TLS10)
|
||||
strlcat(priority_string, ":-VERS-TLS-ALL:-VERS-SSL3.0:+VERS-TLS1.0", sizeof(priority_string));
|
||||
}
|
||||
else
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL:-VERS-SSL3.0", sizeof(priority_string));
|
||||
{
|
||||
/*
|
||||
* Require a minimum version...
|
||||
*/
|
||||
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL", sizeof(priority_string));
|
||||
for (version = 0; version < tls_min_version; version ++)
|
||||
{
|
||||
strlcat(priority_string, ":-", sizeof(priority_string));
|
||||
strlcat(priority_string, versions[version], sizeof(priority_string));
|
||||
}
|
||||
}
|
||||
|
||||
if (tls_options & _HTTP_TLS_ALLOW_RC4)
|
||||
strlcat(priority_string, ":+ARCFOUR-128", sizeof(priority_string));
|
||||
@@ -1543,6 +1587,24 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
#endif /* HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION */
|
||||
gnutls_transport_set_push_function(http->tls, http_gnutls_write);
|
||||
|
||||
/*
|
||||
* Enforce a minimum timeout of 10 seconds for the TLS handshake...
|
||||
*/
|
||||
|
||||
old_timeout = http->timeout_value;
|
||||
old_cb = http->timeout_cb;
|
||||
old_data = http->timeout_data;
|
||||
|
||||
if (!old_cb || old_timeout < 10.0)
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting timeout to 10 seconds.");
|
||||
httpSetTimeout(http, 10.0, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do the TLS handshake...
|
||||
*/
|
||||
|
||||
while ((status = gnutls_handshake(http->tls)) != GNUTLS_E_SUCCESS)
|
||||
{
|
||||
DEBUG_printf(("5_httpStartTLS: gnutls_handshake returned %d (%s)",
|
||||
@@ -1560,10 +1622,18 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
free(credentials);
|
||||
http->tls = NULL;
|
||||
|
||||
httpSetTimeout(http, old_timeout, old_cb, old_data);
|
||||
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Restore the previous timeout settings...
|
||||
*/
|
||||
|
||||
httpSetTimeout(http, old_timeout, old_cb, old_data);
|
||||
|
||||
http->tls_credentials = credentials;
|
||||
|
||||
return (0);
|
||||
|
||||
+27
-18
@@ -2,7 +2,7 @@
|
||||
* TLS support for CUPS on Windows using the Security Support Provider
|
||||
* Interface (SSPI).
|
||||
*
|
||||
* Copyright 2010-2017 by Apple Inc.
|
||||
* Copyright 2010-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -52,7 +52,9 @@
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
static int tls_options = -1,/* Options for TLS connections */
|
||||
tls_min_version = _HTTP_TLS_1_0,
|
||||
tls_max_version = _HTTP_TLS_MAX;
|
||||
|
||||
|
||||
/*
|
||||
@@ -351,7 +353,6 @@ httpCredentialsString(
|
||||
SYSTEMTIME systime; /* System time */
|
||||
struct tm tm; /* UNIX date/time */
|
||||
time_t expiration; /* Expiration date of cert */
|
||||
_cups_md5_state_t md5_state; /* MD5 state */
|
||||
unsigned char md5_digest[16]; /* MD5 result */
|
||||
|
||||
FileTimeToSystemTime(&(cert->pCertInfo->NotAfter), &systime);
|
||||
@@ -378,9 +379,7 @@ httpCredentialsString(
|
||||
else
|
||||
strlcpy(cert_name, "unknown", sizeof(cert_name));
|
||||
|
||||
_cupsMD5Init(&md5_state);
|
||||
_cupsMD5Append(&md5_state, first->data, (int)first->datalen);
|
||||
_cupsMD5Finish(&md5_state, md5_digest);
|
||||
cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest));
|
||||
|
||||
snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", cert_name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]);
|
||||
|
||||
@@ -911,10 +910,16 @@ _httpTLSRead(http_t *http, /* I - HTTP connection */
|
||||
*/
|
||||
|
||||
void
|
||||
_httpTLSSetOptions(int options) /* I - Options */
|
||||
_httpTLSSetOptions(int options, /* I - Options */
|
||||
int min_version, /* I - Minimum TLS version */
|
||||
int max_version) /* I - Maximum TLS version */
|
||||
{
|
||||
if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0)
|
||||
tls_options = options;
|
||||
{
|
||||
tls_options = options;
|
||||
tls_min_version = min_version;
|
||||
tls_max_version = max_version;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1762,34 +1767,38 @@ http_sspi_find_credentials(
|
||||
#ifdef SP_PROT_TLS1_2_SERVER
|
||||
if (http->mode == _HTTP_MODE_SERVER)
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER | SP_PROT_SSL3_SERVER;
|
||||
else
|
||||
else if (tls_min_version == _HTTP_TLS_1_0)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER;
|
||||
else if (tls_min_version == _HTTP_TLS_1_1)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT | SP_PROT_SSL3_CLIENT;
|
||||
else
|
||||
else if (tls_min_version == _HTTP_TLS_1_0)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT;
|
||||
else if (tls_min_version == _HTTP_TLS_1_1)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT;
|
||||
}
|
||||
|
||||
#else
|
||||
if (http->mode == _HTTP_MODE_SERVER)
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_SERVER;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_min_version == _HTTP_TLS_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT;
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
* Include platform-specific TLS code...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
|
||||
+6
-3
@@ -54,6 +54,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
int af = AF_UNSPEC, /* Address family */
|
||||
tls_options = _HTTP_TLS_NONE,
|
||||
/* TLS options */
|
||||
tls_min_version = _HTTP_TLS_1_0,
|
||||
tls_max_version = _HTTP_TLS_MAX,
|
||||
verbose = 0; /* Verbosity */
|
||||
ipp_t *request, /* IPP Get-Printer-Attributes request */
|
||||
*response; /* IPP Get-Printer-Attributes response */
|
||||
@@ -88,11 +90,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
}
|
||||
else if (!strcmp(argv[i], "--no-tls10"))
|
||||
{
|
||||
tls_options |= _HTTP_TLS_DENY_TLS10;
|
||||
tls_min_version = _HTTP_TLS_1_1;
|
||||
}
|
||||
else if (!strcmp(argv[i], "--tls10"))
|
||||
{
|
||||
tls_options |= _HTTP_TLS_ONLY_TLS10;
|
||||
tls_min_version = _HTTP_TLS_1_0;
|
||||
tls_max_version = _HTTP_TLS_1_0;
|
||||
}
|
||||
else if (!strcmp(argv[i], "--rc4"))
|
||||
{
|
||||
@@ -148,7 +151,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
if (!port)
|
||||
port = 631;
|
||||
|
||||
_httpTLSSetOptions(tls_options);
|
||||
_httpTLSSetOptions(tls_options, tls_min_version, tls_max_version);
|
||||
|
||||
http = httpConnect2(server, port, NULL, af, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL);
|
||||
if (!http)
|
||||
|
||||
+38
-12
@@ -54,7 +54,9 @@
|
||||
typedef struct _cups_client_conf_s /**** client.conf config data ****/
|
||||
{
|
||||
#ifdef HAVE_SSL
|
||||
int ssl_options; /* SSLOptions values */
|
||||
int ssl_options, /* SSLOptions values */
|
||||
ssl_min_version,/* Minimum SSL/TLS version */
|
||||
ssl_max_version;/* Maximum SSL/TLS version */
|
||||
#endif /* HAVE_SSL */
|
||||
int trust_first, /* Trust on first use? */
|
||||
any_root, /* Allow any (e.g., self-signed) root */
|
||||
@@ -957,7 +959,7 @@ _cupsSetDefaults(void)
|
||||
cg->validate_certs = cc.validate_certs;
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
_httpTLSSetOptions(cc.ssl_options | _HTTP_TLS_SET_DEFAULT);
|
||||
_httpTLSSetOptions(cc.ssl_options | _HTTP_TLS_SET_DEFAULT, cc.ssl_min_version, cc.ssl_max_version);
|
||||
#endif /* HAVE_SSL */
|
||||
}
|
||||
|
||||
@@ -1164,11 +1166,15 @@ cups_init_client_conf(
|
||||
|
||||
memset(cc, 0, sizeof(_cups_client_conf_t));
|
||||
|
||||
cc->encryption = (http_encryption_t)-1;
|
||||
cc->trust_first = -1;
|
||||
cc->any_root = -1;
|
||||
cc->expired_certs = -1;
|
||||
cc->validate_certs = -1;
|
||||
#ifdef HAVE_SSL
|
||||
cc->ssl_min_version = _HTTP_TLS_1_0;
|
||||
cc->ssl_max_version = _HTTP_TLS_MAX;
|
||||
#endif /* HAVE_SSL */
|
||||
cc->encryption = (http_encryption_t)-1;
|
||||
cc->trust_first = -1;
|
||||
cc->any_root = -1;
|
||||
cc->expired_certs = -1;
|
||||
cc->validate_certs = -1;
|
||||
|
||||
/*
|
||||
* Load settings from the org.cups.PrintingPrefs plist (which trump
|
||||
@@ -1336,7 +1342,9 @@ cups_set_ssl_options(
|
||||
* SSLOptions [AllowRC4] [AllowSSL3] [AllowDH] [DenyTLS1.0] [None]
|
||||
*/
|
||||
|
||||
int options = _HTTP_TLS_NONE; /* SSL/TLS options */
|
||||
int options = _HTTP_TLS_NONE, /* SSL/TLS options */
|
||||
min_version = _HTTP_TLS_1_0, /* Minimum SSL/TLS version */
|
||||
max_version = _HTTP_TLS_MAX; /* Maximum SSL/TLS version */
|
||||
char temp[256], /* Copy of value */
|
||||
*start, /* Start of option */
|
||||
*end; /* End of option */
|
||||
@@ -1364,20 +1372,38 @@ cups_set_ssl_options(
|
||||
if (!_cups_strcasecmp(start, "AllowRC4"))
|
||||
options |= _HTTP_TLS_ALLOW_RC4;
|
||||
else if (!_cups_strcasecmp(start, "AllowSSL3"))
|
||||
options |= _HTTP_TLS_ALLOW_SSL3;
|
||||
min_version = _HTTP_TLS_SSL3;
|
||||
else if (!_cups_strcasecmp(start, "AllowDH"))
|
||||
options |= _HTTP_TLS_ALLOW_DH;
|
||||
else if (!_cups_strcasecmp(start, "DenyCBC"))
|
||||
options |= _HTTP_TLS_DENY_CBC;
|
||||
else if (!_cups_strcasecmp(start, "DenyTLS1.0"))
|
||||
options |= _HTTP_TLS_DENY_TLS10;
|
||||
min_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.0"))
|
||||
max_version = _HTTP_TLS_1_0;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.1"))
|
||||
max_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.2"))
|
||||
max_version = _HTTP_TLS_1_2;
|
||||
else if (!_cups_strcasecmp(start, "MaxTLS1.3"))
|
||||
max_version = _HTTP_TLS_1_3;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.0"))
|
||||
min_version = _HTTP_TLS_1_0;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.1"))
|
||||
min_version = _HTTP_TLS_1_1;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.2"))
|
||||
min_version = _HTTP_TLS_1_2;
|
||||
else if (!_cups_strcasecmp(start, "MinTLS1.3"))
|
||||
min_version = _HTTP_TLS_1_3;
|
||||
else if (!_cups_strcasecmp(start, "None"))
|
||||
options = _HTTP_TLS_NONE;
|
||||
}
|
||||
|
||||
cc->ssl_options = options;
|
||||
cc->ssl_options = options;
|
||||
cc->ssl_max_version = max_version;
|
||||
cc->ssl_min_version = min_version;
|
||||
|
||||
DEBUG_printf(("4cups_set_ssl_options(cc=%p, value=\"%s\") options=%x", (void *)cc, value, options));
|
||||
DEBUG_printf(("4cups_set_ssl_options(cc=%p, value=\"%s\") options=%x, min_version=%d, max_version=%d", (void *)cc, value, options, min_version, max_version));
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
|
||||
+3
-1
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* API versioning definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -71,6 +71,7 @@
|
||||
# define _CUPS_API_2_0 AVAILABLE_MAC_OS_X_VERSION_10_10_AND_LATER
|
||||
# define _CUPS_API_2_2 AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER
|
||||
# define _CUPS_API_2_2_4 AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
|
||||
# define _CUPS_API_2_2_7
|
||||
# else
|
||||
# define _CUPS_API_1_1_19
|
||||
# define _CUPS_API_1_1_20
|
||||
@@ -84,6 +85,7 @@
|
||||
# define _CUPS_API_2_0
|
||||
# define _CUPS_API_2_2
|
||||
# define _CUPS_API_2_2_4
|
||||
# define _CUPS_API_2_2_7
|
||||
# endif /* __APPLE__ && !_CUPS_SOURCE */
|
||||
|
||||
/*
|
||||
|
||||
Arquivo binário não exibido.
@@ -6125,12 +6125,12 @@ are server-oriented...</p>
|
||||
<tr><th>HTTP_STATUS_ERROR </th> <td class="description">An error response from httpXxxx()</td></tr>
|
||||
<tr><th>HTTP_STATUS_EXPECTATION_FAILED </th> <td class="description">The expectation given in an Expect header field was not met</td></tr>
|
||||
<tr><th>HTTP_STATUS_FORBIDDEN </th> <td class="description">Forbidden to access this URI</td></tr>
|
||||
<tr><th>HTTP_STATUS_FOUND </th> <td class="description">Document was found at a different URI</td></tr>
|
||||
<tr><th>HTTP_STATUS_GATEWAY_TIMEOUT </th> <td class="description">Gateway connection timed out</td></tr>
|
||||
<tr><th>HTTP_STATUS_GONE </th> <td class="description">Server has gone away</td></tr>
|
||||
<tr><th>HTTP_STATUS_LENGTH_REQUIRED </th> <td class="description">A content length or encoding is required</td></tr>
|
||||
<tr><th>HTTP_STATUS_METHOD_NOT_ALLOWED </th> <td class="description">Method is not allowed</td></tr>
|
||||
<tr><th>HTTP_STATUS_MOVED_PERMANENTLY </th> <td class="description">Document has moved permanently</td></tr>
|
||||
<tr><th>HTTP_STATUS_MOVED_TEMPORARILY </th> <td class="description">Document has moved temporarily</td></tr>
|
||||
<tr><th>HTTP_STATUS_MULTIPLE_CHOICES </th> <td class="description">Multiple files match request</td></tr>
|
||||
<tr><th>HTTP_STATUS_NONE <span class="info"> CUPS 1.7/macOS 10.9 </span></th> <td class="description">No Expect value </td></tr>
|
||||
<tr><th>HTTP_STATUS_NOT_ACCEPTABLE </th> <td class="description">Not Acceptable</td></tr>
|
||||
@@ -6149,10 +6149,11 @@ are server-oriented...</p>
|
||||
<tr><th>HTTP_STATUS_REQUEST_TIMEOUT </th> <td class="description">Request timed out</td></tr>
|
||||
<tr><th>HTTP_STATUS_REQUEST_TOO_LARGE </th> <td class="description">Request entity too large</td></tr>
|
||||
<tr><th>HTTP_STATUS_RESET_CONTENT </th> <td class="description">Content was reset/recreated</td></tr>
|
||||
<tr><th>HTTP_STATUS_SEE_OTHER </th> <td class="description">See this other link...</td></tr>
|
||||
<tr><th>HTTP_STATUS_SEE_OTHER </th> <td class="description">See this other link</td></tr>
|
||||
<tr><th>HTTP_STATUS_SERVER_ERROR </th> <td class="description">Internal server error</td></tr>
|
||||
<tr><th>HTTP_STATUS_SERVICE_UNAVAILABLE </th> <td class="description">Service is unavailable</td></tr>
|
||||
<tr><th>HTTP_STATUS_SWITCHING_PROTOCOLS </th> <td class="description">HTTP upgrade to TLS/SSL</td></tr>
|
||||
<tr><th>HTTP_STATUS_TEMPORARY_REDIRECT </th> <td class="description">Temporary redirection</td></tr>
|
||||
<tr><th>HTTP_STATUS_UNAUTHORIZED </th> <td class="description">Unauthorized to access host</td></tr>
|
||||
<tr><th>HTTP_STATUS_UNSUPPORTED_MEDIATYPE </th> <td class="description">The requested media type is unsupported</td></tr>
|
||||
<tr><th>HTTP_STATUS_UPGRADE_REQUIRED </th> <td class="description">Upgrade to SSL/TLS required</td></tr>
|
||||
|
||||
@@ -44,8 +44,10 @@ CUPS adds the remote hostname ("name@server.example.com") for you. The default n
|
||||
<dd style="margin-left: 5.0em"><dt><b>SSLOptions None</b>
|
||||
<dd style="margin-left: 5.0em">Sets encryption options (only in /etc/cups/client.conf).
|
||||
By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites.
|
||||
The <i>AllowDH</i> option enables cipher suites using plain Diffie-Hellman key negotiation.
|
||||
The <i>AllowRC4</i> option enables the 128-bit RC4 cipher suites, which are required for some older clients that do not implement newer ones.
|
||||
Security is reduced when <i>Allow</i> options are used.
|
||||
Security is enhanced when <i>Deny</i> options are used.
|
||||
The <i>AllowDH</i> option enables cipher suites using plain Diffie-Hellman key negotiation (not supported on systems using GNU TLS).
|
||||
The <i>AllowRC4</i> option enables the 128-bit RC4 cipher suites, which are required for some older clients.
|
||||
The <i>AllowSSL3</i> option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0.
|
||||
The <i>DenyCBC</i> option disables all CBC cipher suites.
|
||||
The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
|
||||
|
||||
@@ -95,10 +95,6 @@ The <i>kind</i> strings are:
|
||||
<dt><b>permissions</b>
|
||||
<dd style="margin-left: 5.0em">Bad startup file permissions are fatal, for example shared TLS certificate and key files with world-read permissions.
|
||||
</div>
|
||||
<dt><a name="FileDevice"></a><b>FileDevice Yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>FileDevice No</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether the file pseudo-device can be used for new printer queues.
|
||||
The URI "file:///dev/null" is always allowed.
|
||||
<dt><a name="Group"></a><b>Group </b><i>group-name-or-number</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the group name or ID that will be used when executing external programs.
|
||||
The default group is operating system specific but is usually "lp" or "nobody".
|
||||
@@ -162,6 +158,13 @@ The default is "lp".
|
||||
<h3><a name="DEPRECATED_DIRECTIVES">Deprecated Directives</a></h3>
|
||||
The following directives are deprecated and will be removed from a future version of CUPS:
|
||||
<dl class="man">
|
||||
<dt><a name="FileDevice"></a><b>FileDevice Yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>FileDevice No</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether the file pseudo-device can be used for new printer queues.
|
||||
The URI "file:///dev/null" is always allowed.
|
||||
File devices cannot be used with "raw" print queues - a PPD file is required.
|
||||
The specified file is overwritten for every print job.
|
||||
Writing to directories is not supported.
|
||||
<dt><a name="FontPath"></a><b>FontPath </b><i>directory[:...:directoryN]</i>
|
||||
<dd style="margin-left: 5.0em">Specifies a colon separated list of directories where fonts can be found.
|
||||
On Linux the
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
@@ -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
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+128
-106
@@ -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: Don’t know what to do.";
|
||||
"%s: Error - %s" = "%s: Error - %s";
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"." = "%s: Error - %s environment variable names non-existent destination “%s”.";
|
||||
"%s: Error - add '/version=1.1' to server name." = "%s: Error - add ‘/version=1.1’ to server name.";
|
||||
"%s: Error - bad job ID." = "%s: Error - bad job ID.";
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// Shared message catalog class for the CUPS PPD Compiler.
|
||||
//
|
||||
// Copyright 2007-2016 by Apple Inc.
|
||||
// Copyright 2007-2017 by Apple Inc.
|
||||
// Copyright 2002-2006 by Easy Software Products.
|
||||
//
|
||||
// These coded instructions, statements, and computer programs are the
|
||||
@@ -58,7 +58,7 @@ ppdcCatalog::ppdcCatalog(const char *l, // I - Locale
|
||||
filename = new ppdcString(f);
|
||||
messages = new ppdcArray();
|
||||
|
||||
if (l)
|
||||
if (l && strcmp(l, "en"))
|
||||
{
|
||||
// Try loading the base messages for this locale...
|
||||
char pofile[1024]; // Message catalog file
|
||||
|
||||
@@ -143,6 +143,7 @@ Version "2.1"
|
||||
Throughput 8
|
||||
ManualCopies Yes
|
||||
ColorDevice No
|
||||
Attribute "cupsSNMPSupplies" "" "false"
|
||||
|
||||
HWMargins 2 14.9 2 14.9
|
||||
|
||||
@@ -437,6 +438,7 @@ Version "2.1"
|
||||
ModelNumber $INTELLITECH_PCL
|
||||
Throughput 8
|
||||
ColorDevice No
|
||||
Attribute "cupsSNMPSupplies" "" "false"
|
||||
|
||||
HWMargins 0 5.76 0 5.76
|
||||
VariablePaperSize Yes
|
||||
@@ -588,6 +590,7 @@ Version "2.1"
|
||||
DriverType label
|
||||
Throughput 8
|
||||
ColorDevice False
|
||||
Attribute "cupsSNMPSupplies" "" "false"
|
||||
|
||||
// Zebra CPCL Label Printer
|
||||
{
|
||||
|
||||
+14
-6
@@ -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
@@ -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
@@ -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")
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* created from driver information files, and dynamically generated PPD files
|
||||
* using driver helper programs.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -2404,7 +2404,7 @@ load_ppds(const char *d, /* I - Actual directory */
|
||||
{
|
||||
fprintf(stderr, "ERROR: [cups-driverd] Skipping \"%s\": loop detected!\n",
|
||||
d);
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2619,7 +2619,7 @@ load_ppds_dat(char *filename, /* I - Filename buffer */
|
||||
unsigned ppdsync; /* Sync word */
|
||||
int num_ppds; /* Number of PPDs */
|
||||
|
||||
if (cupsFileRead(fp, (char *)&ppdsync, sizeof(ppdsync)) == sizeof(ppdsync) &&
|
||||
if ((size_t)cupsFileRead(fp, (char *)&ppdsync, sizeof(ppdsync)) == sizeof(ppdsync) &&
|
||||
ppdsync == PPD_SYNC &&
|
||||
!stat(filename, &fileinfo) &&
|
||||
(((size_t)fileinfo.st_size - sizeof(ppdsync)) % sizeof(ppd_rec_t)) == 0 &&
|
||||
@@ -2728,7 +2728,7 @@ read_tar(cups_file_t *fp, /* I - Archive to read */
|
||||
tar_rec_t record; /* Record from file */
|
||||
|
||||
|
||||
while (cupsFileRead(fp, (char *)&record, sizeof(record)) == sizeof(record))
|
||||
while ((size_t)cupsFileRead(fp, (char *)&record, sizeof(record)) == sizeof(record))
|
||||
{
|
||||
/*
|
||||
* Check for a valid tar header...
|
||||
|
||||
+11
-10
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Directory services routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -698,20 +698,21 @@ dnssdDeregisterInstance(
|
||||
|
||||
DNSServiceRefDeallocate(*srv);
|
||||
|
||||
*srv = NULL;
|
||||
|
||||
# else /* HAVE_AVAHI */
|
||||
if (!from_callback)
|
||||
avahi_threaded_poll_lock(DNSSDMaster);
|
||||
|
||||
if (*srv)
|
||||
{
|
||||
if (!from_callback)
|
||||
avahi_threaded_poll_lock(DNSSDMaster);
|
||||
|
||||
avahi_entry_group_free(*srv);
|
||||
|
||||
if (!from_callback)
|
||||
avahi_threaded_poll_unlock(DNSSDMaster);
|
||||
*srv = NULL;
|
||||
}
|
||||
# endif /* HAVE_DNSSD */
|
||||
|
||||
*srv = NULL;
|
||||
if (!from_callback)
|
||||
avahi_threaded_poll_unlock(DNSSDMaster);
|
||||
# endif /* HAVE_DNSSD */
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -960,7 +960,7 @@ cupsdLogPage(cupsd_job_t *job, /* I - Job being printed */
|
||||
*bufptr = '\0';
|
||||
|
||||
#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
|
||||
if (!strcmp(ErrorLog, "syslog"))
|
||||
if (!strcmp(PageLog, "syslog"))
|
||||
{
|
||||
static const char * const job_states[] =
|
||||
{ /* job-state strings */
|
||||
@@ -1157,7 +1157,7 @@ cupsdLogRequest(cupsd_client_t *con, /* I - Request to log */
|
||||
}
|
||||
|
||||
#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
|
||||
if (!strcmp(ErrorLog, "syslog"))
|
||||
if (!strcmp(AccessLog, "syslog"))
|
||||
{
|
||||
sd_journal_print(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s", con->http->hostname, con->username[0] != '\0' ? con->username : "-", states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-");
|
||||
return (1);
|
||||
|
||||
+1
-1
@@ -893,7 +893,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
* Write dirty config/state files...
|
||||
*/
|
||||
|
||||
if (DirtyCleanTime && current_time >= DirtyCleanTime && cupsArrayCount(Clients) == 0)
|
||||
if (DirtyCleanTime && current_time >= DirtyCleanTime)
|
||||
cupsdCleanDirty();
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
@@ -5,6 +5,7 @@ Documentation=man:cupsd(8)
|
||||
[Service]
|
||||
ExecStart=@sbindir@/cupsd -l
|
||||
Type=simple
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
Also=org.cups.cupsd.socket org.cups.cupsd.path
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* "cupsaccept", "cupsdisable", "cupsenable", and "cupsreject" commands for
|
||||
* CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -83,11 +83,11 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
switch (*opt)
|
||||
{
|
||||
case 'E' : /* Encrypt */
|
||||
#ifdef HAVE_SSL
|
||||
#ifdef HAVE_SSL
|
||||
cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
|
||||
#else
|
||||
#else
|
||||
_cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), command);
|
||||
#endif /* HAVE_SSL */
|
||||
#endif /* HAVE_SSL */
|
||||
break;
|
||||
|
||||
case 'U' : /* Username */
|
||||
|
||||
+4
-27
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "lp" command for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -586,33 +586,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (printer == NULL)
|
||||
{
|
||||
val = NULL;
|
||||
|
||||
if ((printer = getenv("LPDEST")) == NULL)
|
||||
{
|
||||
if ((printer = getenv("PRINTER")) != NULL)
|
||||
{
|
||||
if (!strcmp(printer, "lp"))
|
||||
printer = NULL;
|
||||
else
|
||||
val = "PRINTER";
|
||||
}
|
||||
}
|
||||
if (!cupsGetNamedDest(NULL, NULL, NULL) && cupsLastError() == IPP_STATUS_ERROR_NOT_FOUND)
|
||||
_cupsLangPrintf(stderr, _("%s: Error - %s"), argv[0], cupsLastErrorString());
|
||||
else
|
||||
val = "LPDEST";
|
||||
|
||||
if (printer && !cupsGetNamedDest(NULL, printer, NULL))
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - %s environment variable names "
|
||||
"non-existent destination \"%s\"."), argv[0], val,
|
||||
printer);
|
||||
else if (cupsLastError() == IPP_NOT_FOUND)
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - no default destination available."),
|
||||
argv[0]);
|
||||
else
|
||||
_cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."),
|
||||
argv[0]);
|
||||
_cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."), argv[0]);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
+78
-28
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* "lpadmin" command for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -33,7 +33,7 @@ static int delete_printer_from_class(http_t *http, char *printer,
|
||||
static int delete_printer_option(http_t *http, char *printer,
|
||||
char *option);
|
||||
static int enable_printer(http_t *http, char *printer);
|
||||
static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize);
|
||||
static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize, int *num_options, cups_option_t **options);
|
||||
static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri,
|
||||
size_t urisize);
|
||||
static int set_printer_options(http_t *http, char *printer,
|
||||
@@ -46,23 +46,22 @@ static int validate_name(const char *name);
|
||||
* 'main()' - Parse options and configure the scheduler.
|
||||
*/
|
||||
|
||||
int
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* Connection to server */
|
||||
char *printer, /* Destination printer */
|
||||
*pclass, /* Printer class name */
|
||||
*opt, /* Option pointer */
|
||||
*val; /* Pointer to allow/deny value */
|
||||
int num_options; /* Number of options */
|
||||
cups_option_t *options; /* Options */
|
||||
char *file, /* New PPD file */
|
||||
evefile[1024] = "";
|
||||
/* IPP Everywhere PPD */
|
||||
const char *ppd_name, /* ppd-name value */
|
||||
*device_uri; /* device-uri value */
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* Connection to server */
|
||||
char *printer, /* Destination printer */
|
||||
*pclass, /* Printer class name */
|
||||
*opt, /* Option pointer */
|
||||
*val; /* Pointer to allow/deny value */
|
||||
int num_options; /* Number of options */
|
||||
cups_option_t *options; /* Options */
|
||||
char *file, /* New PPD file */
|
||||
evefile[1024] = ""; /* IPP Everywhere PPD */
|
||||
const char *ppd_name, /* ppd-name value */
|
||||
*device_uri; /* device-uri value */
|
||||
|
||||
|
||||
_cupsSetLocale(argv);
|
||||
@@ -218,6 +217,25 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
file = argv[i];
|
||||
}
|
||||
|
||||
if (*opt == 'i')
|
||||
{
|
||||
/*
|
||||
* Check to see that the specified file is, in fact, a PPD...
|
||||
*/
|
||||
|
||||
cups_file_t *fp = cupsFileOpen(file, "r");
|
||||
char line[256];
|
||||
|
||||
if (!cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "*PPD-Adobe", 10))
|
||||
{
|
||||
_cupsLangPuts(stderr, _("lpadmin: System V interface scripts are no longer supported for security reasons."));
|
||||
cupsFileClose(fp);
|
||||
return (1);
|
||||
}
|
||||
|
||||
cupsFileClose(fp);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'E' : /* Enable the printer/enable encryption */
|
||||
@@ -591,9 +609,19 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Set options as needed...
|
||||
*/
|
||||
|
||||
if ((ppd_name = cupsGetOption("ppd-name", num_options, options)) != NULL && !strcmp(ppd_name, "everywhere") && (device_uri = cupsGetOption("device-uri", num_options, options)) != NULL)
|
||||
ppd_name = cupsGetOption("ppd-name", num_options, options);
|
||||
device_uri = cupsGetOption("device-uri", num_options, options);
|
||||
|
||||
if (ppd_name && !strcmp(ppd_name, "raw"))
|
||||
{
|
||||
if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile))) == NULL)
|
||||
_cupsLangPuts(stderr, _("lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS."));
|
||||
|
||||
if (device_uri && (!strncmp(device_uri, "ipp://", 6) || !strncmp(device_uri, "ipps://", 7)) && strstr(device_uri, "/printers/"))
|
||||
_cupsLangPuts(stderr, _("lpadmin: Use the 'everywhere' model for shared printers."));
|
||||
}
|
||||
else if (ppd_name && !strcmp(ppd_name, "everywhere") && device_uri)
|
||||
{
|
||||
if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile), &num_options, &options)) == NULL)
|
||||
return (1);
|
||||
|
||||
num_options = cupsRemoveOption("ppd-name", num_options, &options);
|
||||
@@ -1144,20 +1172,31 @@ enable_printer(http_t *http, /* I - Server connection */
|
||||
* 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
|
||||
*/
|
||||
|
||||
static char * /* O - Filename or NULL */
|
||||
get_printer_ppd(const char *uri, /* I - Printer URI */
|
||||
char *buffer, /* I - Filename buffer */
|
||||
size_t bufsize) /* I - Size of filename buffer */
|
||||
static char * /* O - Filename or NULL */
|
||||
get_printer_ppd(
|
||||
const char *uri, /* I - Printer URI */
|
||||
char *buffer, /* I - Filename buffer */
|
||||
size_t bufsize, /* I - Size of filename buffer */
|
||||
int *num_options, /* IO - Number of options */
|
||||
cups_option_t **options) /* IO - Options */
|
||||
{
|
||||
http_t *http; /* Connection to printer */
|
||||
ipp_t *request, /* Get-Printer-Attributes request */
|
||||
*response; /* Get-Printer-Attributes response */
|
||||
ipp_attribute_t *attr; /* Attribute from response */
|
||||
char resolved[1024], /* Resolved URI */
|
||||
scheme[32], /* URI scheme */
|
||||
userpass[256], /* Username:password */
|
||||
host[256], /* Hostname */
|
||||
resource[256]; /* Resource path */
|
||||
int port; /* Port number */
|
||||
static const char * const pattrs[] = /* Attributes to use */
|
||||
{
|
||||
"job-template",
|
||||
"printer-defaults",
|
||||
"printer-description",
|
||||
"media-col-database"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -1198,9 +1237,21 @@ get_printer_ppd(const char *uri, /* I - Printer URI */
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs);
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
|
||||
if (!_ppdCreateFromIPP(buffer, bufsize, response))
|
||||
if (_ppdCreateFromIPP(buffer, bufsize, response))
|
||||
{
|
||||
if (!cupsGetOption("printer-geo-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-geo-location", IPP_TAG_URI)) != NULL)
|
||||
*num_options = cupsAddOption("printer-geo-location", ippGetString(attr, 0, NULL), *num_options, options);
|
||||
|
||||
if (!cupsGetOption("printer-info", *num_options, *options) && (attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL)
|
||||
*num_options = cupsAddOption("printer-info", ippGetString(attr, 0, NULL), *num_options, options);
|
||||
|
||||
if (!cupsGetOption("printer-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-location", IPP_TAG_TEXT)) != NULL)
|
||||
*num_options = cupsAddOption("printer-location", ippGetString(attr, 0, NULL), *num_options, options);
|
||||
}
|
||||
else
|
||||
_cupsLangPrintf(stderr, _("%s: Unable to create PPD file: %s"), "lpadmin", strerror(errno));
|
||||
|
||||
ippDelete(response);
|
||||
@@ -1572,8 +1623,7 @@ validate_name(const char *name) /* I - Name to check */
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if (*ptr == '@')
|
||||
break;
|
||||
else if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' ||
|
||||
*ptr == '#')
|
||||
else if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '\\' || *ptr == '?' || *ptr == '\'' || *ptr == '\"' || *ptr == '#')
|
||||
return (0);
|
||||
|
||||
/*
|
||||
|
||||
+20
-1
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "lpinfo" command for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -454,6 +454,25 @@ show_models(
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
|
||||
/*
|
||||
* Show the "everywhere" model, which is handled by the lpadmin command...
|
||||
*/
|
||||
|
||||
if ((!include_schemes || strstr(include_schemes, "everywhere")) && (!exclude_schemes || !strstr(exclude_schemes, "everywhere")))
|
||||
{
|
||||
if (long_status)
|
||||
{
|
||||
_cupsLangPrintf(stdout,
|
||||
_("Model: name = %s\n"
|
||||
" natural_language = %s\n"
|
||||
" make-and-model = %s\n"
|
||||
" device-id = %s"),
|
||||
"everywhere", cupsLangDefault()->language, "IPP Everywhere", "CMD:PwgRaster");
|
||||
}
|
||||
else
|
||||
_cupsLangPuts(stdout, "everywhere IPP Everywhere");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+871
-866
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
@@ -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
@@ -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
@@ -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"
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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>
|
||||
@@ -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">
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário