Comparar commits

...

54 Commits

Autor SHA1 Mensagem Data
Michael R Sweet 1539283f98 Bump version to 2.3b6, changelog. 2018-06-05 14:46:51 -04:00
Michael R Sweet a6dd739c02 Make sure all incoming value tags are treated the same as freed values. 2018-06-05 14:46:50 -04:00
Michael R Sweet 929486aa64 Fix link to CUPS Programming Manual. 2018-06-05 14:46:50 -04:00
Michael R Sweet 579a5525e8 Update versions in README and INSTALL 2018-06-05 14:46:50 -04:00
Michael R Sweet f66b1d85f8 Update documentation and localization files for 2.3b5 release. 2018-06-05 14:46:50 -04:00
Michael R Sweet 2c4c9ada65 Changelog. 2018-06-05 14:46:50 -04:00
Michael R Sweet e1ac3f36d0 Fix a parsing bug in the pstops filter (Issue #5321) 2018-06-05 14:46:49 -04:00
Michael R Sweet c95282ef08 Changelog. 2018-06-05 14:46:49 -04:00
Michael R Sweet 9e838da3db Add a USB quirks rule for the HP LaserJet P1102 (Issue #5310) 2018-06-05 14:46:49 -04:00
Michael R Sweet 0d92ec1c6f Fix local privilege escalation to root and sandbox bypasses in scheduler
(rdar://37836779, rdar://37836995, rdar://37837252, rdar://37837581)
2018-06-05 14:46:49 -04:00
Michael R Sweet beb37da67b Validate notify-recipient-uri values. 2018-06-05 14:46:49 -04:00
Michael R Sweet fd32084d40 Block invalid group tags when parsing IPP messages. 2018-06-05 14:46:49 -04:00
Nils Van Zuijlen ac9e295f23 Correct typos for French_France 2018-06-05 14:46:48 -04:00
Michael R Sweet 778759a48f Add smb test URI. 2018-06-05 14:46:48 -04:00
Michael R Sweet ac79576a7f Add more URI validation for scheme. 2018-06-05 14:46:48 -04:00
Michael R Sweet 76d2c4481f Save work. 2018-05-18 17:10:36 -07:00
Michael R Sweet 1660d61202 Update xform_setup. 2018-05-18 14:46:34 -07:00
Michael R Sweet 3eb5ec664f Fix compile errors. 2018-05-18 12:53:46 -07:00
Michael R Sweet a17ce1d474 Save work. 2018-05-18 08:36:39 -07:00
Michael R Sweet 1e01455aeb Save initial work on private xform API. 2018-05-14 17:03:24 -07:00
Michael R Sweet 5c2c2ab6a3 Fix cupsJobPassword documentation. 2018-05-14 10:26:55 -07:00
Michael R Sweet 06a5a4d332 Mark cupsGetDevices as deprecated.
Update CUPS Programming Manual.

Update CUPS Admin API documentation.

Update CUPS PPD documentation.
2018-05-14 10:21:51 -07:00
Michael R Sweet 4cadd6202f Mirror validation changes from 2.2 branch. 2018-05-11 12:10:32 -07:00
Michael R Sweet 2de7c5f81c Update changelog, copyright... 2018-05-11 10:25:39 -07:00
Michael R Sweet 8127ebd190 Merge pull request #5312 from hansmi/mailtowait1
mailto: Wait for server opening message
2018-05-11 10:19:47 -07:00
Michael R Sweet e5fee178d9 Always use Negotiate or PeerCred for Kerberized printing. 2018-05-10 16:35:37 -04:00
Michael Hanselmann 077bd665bd mailto: Wait for server opening message
A subset of all mailserver configurations reject SMTP sessions where the
client sends anything before the server sent its opening message. This
is the case with Exim on Ubuntu Artful, for example:

  SMTP protocol synchronization error (input sent without waiting for
  greeting)

Not waiting for the opening message is a violation of the session
initiation described in RFC5321 (section 3.1). Update the mailto
notifier to wait for a non-error status code from the server before
proceeding to start the mail transaction.
2018-05-09 01:26:21 +02:00
Michael R Sweet dfe5f3b95c Changelog. 2018-05-01 08:38:41 -04:00
Michael R Sweet 616f3f56dd Merge pull request #5306 from speachy/master
Fix typo in example (cupsCommand -> cupsCommands)
2018-05-01 08:36:28 -04:00
Solomon Peachy f594a3db6d Fix typo in example (cupsCommand -> cupsCommands) 2018-04-30 19:09:41 -04:00
Michael R Sweet d3ab37abea Use -m everywhere for manual sharing. 2018-04-24 20:44:54 -04:00
Michael R Sweet 619d6d95eb Fix 360dpi typo (Issue #5300) 2018-04-24 20:34:10 -04:00
Michael R Sweet b95156db4c Update ErrorPolicy in cupsd.conf man page (Issue #5301) 2018-04-24 20:28:36 -04:00
Michael R Sweet ff82ce17bf Fix GNU TLS httpCertString changes. 2018-04-24 18:22:41 -04:00
Michael R Sweet af62b316e7 Extend GNU TLS certificate string. 2018-04-24 18:04:52 -04:00
Michael R Sweet 073b3929a1 Add issuer and signature algorithm to certificate string, show it in tlscheck output. 2018-04-24 17:46:58 -04:00
Michael R Sweet 17cc92f131 Add resource and system object/state values. 2018-04-24 16:17:21 -04:00
Michael R Sweet bd4b5b3ee1 Changelog. 2018-04-18 08:51:07 -04:00
Michael R Sweet c77dede2ed Merge pull request #5297 from FedericoYundt/patch-1
Allow cupsd daemon to exit on idle (restart=on-failure instead of always)
2018-04-18 08:48:46 -04:00
FedericoYundt 4e02be68c1 Allow cupsd daemon to exit on idle
When using socket activation cups daemon can safely exit on idle and be automatically started when it's needed. Using Restart=always prevent this behavior and causes cups daemon constantly restarting itself instead of exiting. Users reported[1] that Restart=on-failure was enough to fix issues[2] so Restart=always may be unnecessary and harmful.

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861470
[2] https://github.com/apple/cups/issues/5263
2018-04-18 08:40:59 +01:00
Michael R Sweet 0873f681e4 Fix policy limits using All (Issue #5296) 2018-04-17 16:54:24 -04:00
Michael R Sweet c1de912d13 Map , to p in phone numbers. 2018-04-17 14:22:16 -04:00
Michael R Sweet fbcc927ded Add support for pause and wait characters in fax numbers (rdar://39212256) 2018-04-17 12:47:00 -04:00
Michael R Sweet 4feb1fe2e5 - Added a workaround for certain web browsers that do not support multiple
authentication schemes in a single response header (Issue #5289)
2018-04-16 17:16:31 -04:00
Michael R Sweet c944b62ba8 Fix cups_auth_find for schemes without parameters. 2018-04-11 22:03:47 -04:00
Michael R Sweet 44cb0dd233 Fix a parsing bug in the new authentication code. 2018-04-11 13:10:24 -04:00
Michael R Sweet 3581e03de5 Update lpoptions man page (Issue #5286) 2018-04-10 15:43:24 -04:00
Michael R Sweet 56f0cbeb27 Merge pull request #5286 from Kohlrabi/master
Remove mentions of non-implemented -U option from lpoptions manpage (still need to update date)
2018-04-10 15:36:58 -04:00
Michael R Sweet 656c109a1c Fix another CUPS-Create-Local-Printer crash (Issue #5290) 2018-04-09 15:31:56 -04:00
Michael R Sweet 159e027902 Changelog. 2018-04-09 09:52:07 -04:00
Michael R Sweet 7271db11d2 Use cupsGetNamedDest for legacy printing APIs (Issue #5288) 2018-04-09 09:50:50 -04:00
Michael R Sweet d07cb8d5dc The ipptool program no longer checks for duplicate attributes when running in
list or CSV mode (Issue #5278)
2018-04-05 20:12:39 -04:00
Michael R Sweet 15fe2ddc7f Fix ippfind _regtype 2018-04-05 17:25:31 -04:00
Christoph Terasa df59b110ad Remove mentions of non-implemented -U option from lpoptions manpage 2018-04-03 16:30:16 +02:00
82 arquivos alterados com 6225 adições e 943 exclusões
+36 -1
Ver Arquivo
@@ -1,6 +1,41 @@
CHANGES - 2.3b4 - 2018-03-23
CHANGES - 2.3b6 - 2018-06-05
============================
Changes in CUPS v2.3b6
----------------------
- Fixed a memory leak for some IPP (extension) syntaxes.
Changes in CUPS v2.3b5
----------------------
- The `ipptool` program no longer checks for duplicate attributes when running
in list or CSV mode (Issue #5278)
- The `cupsCreateJob`, `cupsPrintFile2`, and `cupsPrintFiles2` APIs did not use
the supplied HTTP connection (Issue #5288)
- Fixed another crash in the scheduler when adding an IPP Everywhere printer
(Issue #5290)
- Added a workaround for certain web browsers that do not support multiple
authentication schemes in a single response header (Issue #5289)
- Fixed policy limits containing the `All` operation (Issue #5296)
- The scheduler was always restarted after idle-exit with systemd (Issue #5297)
- Added a USB quirks rule for the HP LaserJet P1102 (Issue #5310)
- The mailto notifier did not wait for the welcome message (Issue #5312)
- Fixed a parsing bug in the pstops filter (Issue #5321)
- Documentation updates (Issue #5299, Issue #5301, Issue #5306)
- Localization updates (Issue #5317)
- The scheduler allowed environment variables to be specified in the
`cupsd.conf` file (rdar://37836779, rdar://37836995, rdar://37837252,
rdar://37837581)
- Fax queues did not support pause (p) or wait-for-dialtone (w) characters
(rdar://39212256)
- The scheduler did not validate notify-recipient-uri values properly
(rdar://40068936)
- The IPP parser allowed invalid group tags (rdar://40442124)
- Fixed a parsing bug in the new authentication code.
Changes in CUPS v2.3b4
----------------------
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
INSTALL - CUPS v2.3b4 - 2018-03-22
INSTALL - CUPS v2.3b5 - 2018-06-05
==================================
This file describes how to compile and install CUPS from source code. For more
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
README - CUPS v2.3b4 - 2018-03-22
README - CUPS v2.3b5 - 2018-06-05
=================================
Looking for compile instructions? Read the file `INSTALL.md` instead...
+4 -2
Ver Arquivo
@@ -2780,7 +2780,7 @@ new_request(
char phone[1024], /* Phone number string */
*ptr, /* Pointer into string */
tel_uri[1024]; /* tel: URI */
static const char * const allowed = "0123456789#*-+.()";
static const char * const allowed = "0123456789#*-+.()pw";
/* Allowed characters */
destination = ippNew();
@@ -2793,7 +2793,9 @@ new_request(
_httpDecodeURI(phone, keyword, sizeof(phone));
for (ptr = phone; *ptr;)
{
if (!strchr(allowed, *ptr))
if (*ptr == ',')
*ptr = 'p';
else if (!strchr(allowed, *ptr))
_cups_strcpy(ptr, ptr + 1);
else
ptr ++;
+3
Ver Arquivo
@@ -281,3 +281,6 @@
# Lexmark Optra E310 (Issue #5259)
0x043d 0x000c no-reattach
# HP LaserJet P1102 (Issue #5310)
0x03F0 0x002A no-reattach
externo
+10 -10
Ver Arquivo
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.68 for CUPS 2.3b4.
# Generated by GNU Autoconf 2.68 for CUPS 2.3b6.
#
# Report bugs to <https://github.com/apple/cups/issues>.
#
@@ -560,8 +560,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='CUPS'
PACKAGE_TARNAME='cups'
PACKAGE_VERSION='2.3b4'
PACKAGE_STRING='CUPS 2.3b4'
PACKAGE_VERSION='2.3b6'
PACKAGE_STRING='CUPS 2.3b6'
PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
PACKAGE_URL='https://www.cups.org/'
@@ -1455,7 +1455,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.3b4 to adapt to many kinds of systems.
\`configure' configures CUPS 2.3b6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1520,7 +1520,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of CUPS 2.3b4:";;
short | recursive ) echo "Configuration of CUPS 2.3b6:";;
esac
cat <<\_ACEOF
@@ -1697,7 +1697,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
CUPS configure 2.3b4
CUPS configure 2.3b6
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2161,7 +2161,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.3b4, which was
It was created by CUPS $as_me 2.3b6, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2636,7 +2636,7 @@ fi
ac_config_headers="$ac_config_headers config.h"
CUPS_VERSION="2.3b4"
CUPS_VERSION="2.3b6"
CUPS_REVISION=""
CUPS_BUILD="cups-$CUPS_VERSION"
@@ -10586,7 +10586,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.3b4, which was
This file was extended by CUPS $as_me 2.3b6, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -10649,7 +10649,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.3b4
CUPS config.status 2.3b6
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
+1 -1
Ver Arquivo
@@ -12,7 +12,7 @@ dnl We need at least autoconf 2.60...
AC_PREREQ(2.60)
dnl Package name and version...
AC_INIT([CUPS], [2.3b4], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
AC_INIT([CUPS], [2.3b6], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
sinclude(config-scripts/cups-opsys.m4)
sinclude(config-scripts/cups-common.m4)
+16 -1
Ver Arquivo
@@ -74,6 +74,8 @@ IMAGEOBJS = \
error.o \
interpret.o \
raster.o
XFORMOBJS = \
xform.o
TESTOBJS = \
rasterbench.o \
testadmin.o \
@@ -99,6 +101,7 @@ TESTOBJS = \
OBJS = \
$(LIBOBJS) \
$(IMAGEOBJS) \
$(XFORMOBJS) \
$(TESTOBJS)
@@ -148,7 +151,8 @@ LIBTARGETS = \
$(LIBCUPSIMAGE) \
$(LIBCUPSSTATIC) \
$(LIBCUPS) \
libcupsimage.a
libcupsimage.a \
libcupsxform.a
UNITTARGETS = \
rasterbench \
@@ -453,6 +457,17 @@ libcupsimage.a: $(IMAGEOBJS)
$(RANLIB) $@
#
# libcupsxform.a
#
libcupsxform.a: $(XFORMOBJS)
echo Archiving $@...
$(RM) $@
$(AR) $(ARFLAGS) $@ $(XFORMOBJS)
$(RANLIB) $@
#
# rasterbench
#
+1 -1
Ver Arquivo
@@ -77,7 +77,7 @@ extern ipp_status_t cupsGetDevices(http_t *http, int timeout,
const char *include_schemes,
const char *exclude_schemes,
cups_device_cb_t callback,
void *user_data) _CUPS_API_1_4;
void *user_data) _CUPS_DEPRECATED;
# ifdef __cplusplus
+2 -2
Ver Arquivo
@@ -1,7 +1,7 @@
<!--
PPD API introduction for CUPS.
Copyright © 2007-2012 by Apple Inc.
Copyright © 2007-2018 by Apple Inc.
Copyright © 1997-2006 by Easy Software Products, all rights reserved.
Licensed under Apache License v2.0. See the file "LICENSE" for more
@@ -10,7 +10,7 @@
<h2 class='title'><a name='OVERVIEW'>Overview</a></h2>
<blockquote>The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the <a href="api-cups.html">CUPS API</a> documentation. These functions will be removed in a future release of CUPS.</blockquote>
<blockquote>The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the <a href="cupspm.html">CUPS API</a> documentation. These functions will be removed in a future release of CUPS.</blockquote>
<p>The CUPS PPD API provides read-only access the data in PostScript Printer
Description ("PPD") files which are used for all printers with a driver. With
+3 -3
Ver Arquivo
@@ -212,7 +212,7 @@ cupsDoAuthentication(
if (!cg->lang_default)
cg->lang_default = cupsLangDefault();
if (cups_auth_param(scheme, "username", default_username, sizeof(default_username)))
if (cups_auth_param(schemedata, "username", default_username, sizeof(default_username)))
cupsSetUser(default_username);
snprintf(prompt, sizeof(prompt), _cupsLangString(cg->lang_default, _("Password for %s on %s? ")), cupsUser(), http->hostname[0] == '/' ? "localhost" : http->hostname);
@@ -614,7 +614,7 @@ cups_auth_find(const char *www_authenticate, /* I - Pointer into WWW-Authenticat
* 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]))
if (!strncmp(www_authenticate, scheme, schemelen) && (isspace(www_authenticate[schemelen] & 255) || www_authenticate[schemelen] == ',' || !www_authenticate[schemelen]))
{
/*
* Yes, this is the start of the scheme-specific information...
@@ -795,7 +795,7 @@ cups_auth_scheme(const char *www_authenticate, /* I - Pointer into WWW-Authentic
* Parse the scheme name or param="value" string...
*/
for (sptr = scheme, start = www_authenticate, param = 0; *www_authenticate && !isspace(*www_authenticate & 255); www_authenticate ++)
for (sptr = scheme, start = www_authenticate, param = 0; *www_authenticate && *www_authenticate != ',' && !isspace(*www_authenticate & 255); www_authenticate ++)
{
if (*www_authenticate == '=')
param = 1;
+4 -1
Ver Arquivo
@@ -23,7 +23,10 @@
* parameters provide comma-delimited lists of backends to include or omit from
* the request respectively.
*
* @since CUPS 1.4/macOS 10.6@
* This function is deprecated with the IPP printer discovery functionality
* being provided by the @link cupsEnumDests@ and @cupsGetDests@ functions.
*
* @deprecated@
*/
ipp_status_t /* O - Request status - @code IPP_OK@ on success. */
+4 -3
Ver Arquivo
@@ -1,10 +1,11 @@
/*
* HTTP support routines for CUPS.
*
* Copyright 2007-2017 by Apple Inc.
* Copyright 2007-2018 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
@@ -1026,7 +1027,7 @@ httpSeparateURI(
*ptr = '\0';
if (*uri != ':')
if (*uri != ':' || *scheme == '.' || !*scheme)
{
*scheme = '\0';
return (HTTP_URI_STATUS_BAD_SCHEME);
+38 -42
Ver Arquivo
@@ -616,7 +616,21 @@ static const char * const ipp_document_states[] =
{ /* printer-state enums */
"idle",
"processing",
"stopped",
"stopped"
},
* const ipp_resource_states[] =
{ /* resource-state enums */
"pending",
"available",
"installed",
"canceled",
"aborted"
},
* const ipp_system_states[] =
{ /* system-state enums */
"idle",
"processing",
"stopped"
};
@@ -1923,59 +1937,31 @@ ippEnumString(const char *attrname, /* I - Attribute name */
* Check for standard enum values...
*/
if (!strcmp(attrname, "document-state") &&
enumvalue >= 3 &&
enumvalue < (3 + (int)(sizeof(ipp_document_states) /
sizeof(ipp_document_states[0]))))
if (!strcmp(attrname, "document-state") && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_document_states) / sizeof(ipp_document_states[0]))))
return (ipp_document_states[enumvalue - 3]);
else if (!strcmp(attrname, "finishings") ||
!strcmp(attrname, "finishings-actual") ||
!strcmp(attrname, "finishings-default") ||
!strcmp(attrname, "finishings-ready") ||
!strcmp(attrname, "finishings-supported") ||
!strcmp(attrname, "job-finishings") ||
!strcmp(attrname, "job-finishings-default") ||
!strcmp(attrname, "job-finishings-supported"))
else if (!strcmp(attrname, "finishings") || !strcmp(attrname, "finishings-actual") || !strcmp(attrname, "finishings-default") || !strcmp(attrname, "finishings-ready") || !strcmp(attrname, "finishings-supported") || !strcmp(attrname, "job-finishings") || !strcmp(attrname, "job-finishings-default") || !strcmp(attrname, "job-finishings-supported"))
{
if (enumvalue >= 3 &&
enumvalue < (3 + (int)(sizeof(ipp_finishings) /
sizeof(ipp_finishings[0]))))
if (enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_finishings) / sizeof(ipp_finishings[0]))))
return (ipp_finishings[enumvalue - 3]);
else if (enumvalue >= 0x40000000 &&
enumvalue <= (0x40000000 + (int)(sizeof(ipp_finishings_vendor) /
sizeof(ipp_finishings_vendor[0]))))
else if (enumvalue >= 0x40000000 && enumvalue <= (0x40000000 + (int)(sizeof(ipp_finishings_vendor) / sizeof(ipp_finishings_vendor[0]))))
return (ipp_finishings_vendor[enumvalue - 0x40000000]);
}
else if ((!strcmp(attrname, "job-collation-type") ||
!strcmp(attrname, "job-collation-type-actual")) &&
enumvalue >= 3 &&
enumvalue < (3 + (int)(sizeof(ipp_job_collation_types) /
sizeof(ipp_job_collation_types[0]))))
else if ((!strcmp(attrname, "job-collation-type") || !strcmp(attrname, "job-collation-type-actual")) && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_job_collation_types) / sizeof(ipp_job_collation_types[0]))))
return (ipp_job_collation_types[enumvalue - 3]);
else if (!strcmp(attrname, "job-state") &&
enumvalue >= IPP_JSTATE_PENDING && enumvalue <= IPP_JSTATE_COMPLETED)
else if (!strcmp(attrname, "job-state") && enumvalue >= IPP_JSTATE_PENDING && enumvalue <= IPP_JSTATE_COMPLETED)
return (ipp_job_states[enumvalue - IPP_JSTATE_PENDING]);
else if (!strcmp(attrname, "operations-supported"))
return (ippOpString((ipp_op_t)enumvalue));
else if ((!strcmp(attrname, "orientation-requested") ||
!strcmp(attrname, "orientation-requested-actual") ||
!strcmp(attrname, "orientation-requested-default") ||
!strcmp(attrname, "orientation-requested-supported")) &&
enumvalue >= 3 &&
enumvalue < (3 + (int)(sizeof(ipp_orientation_requesteds) /
sizeof(ipp_orientation_requesteds[0]))))
else if ((!strcmp(attrname, "orientation-requested") || !strcmp(attrname, "orientation-requested-actual") || !strcmp(attrname, "orientation-requested-default") || !strcmp(attrname, "orientation-requested-supported")) && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_orientation_requesteds) / sizeof(ipp_orientation_requesteds[0]))))
return (ipp_orientation_requesteds[enumvalue - 3]);
else if ((!strcmp(attrname, "print-quality") ||
!strcmp(attrname, "print-quality-actual") ||
!strcmp(attrname, "print-quality-default") ||
!strcmp(attrname, "print-quality-supported")) &&
enumvalue >= 3 &&
enumvalue < (3 + (int)(sizeof(ipp_print_qualities) /
sizeof(ipp_print_qualities[0]))))
else if ((!strcmp(attrname, "print-quality") || !strcmp(attrname, "print-quality-actual") || !strcmp(attrname, "print-quality-default") || !strcmp(attrname, "print-quality-supported")) && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_print_qualities) / sizeof(ipp_print_qualities[0]))))
return (ipp_print_qualities[enumvalue - 3]);
else if (!strcmp(attrname, "printer-state") &&
enumvalue >= IPP_PSTATE_IDLE && enumvalue <= IPP_PSTATE_STOPPED)
else if (!strcmp(attrname, "printer-state") && enumvalue >= IPP_PSTATE_IDLE && enumvalue <= IPP_PSTATE_STOPPED)
return (ipp_printer_states[enumvalue - IPP_PSTATE_IDLE]);
else if (!strcmp(attrname, "resource-state") && enumvalue >= IPP_RSTATE_PENDING && enumvalue <= IPP_RSTATE_ABORTED)
return (ipp_resource_states[enumvalue - IPP_RSTATE_PENDING]);
else if (!strcmp(attrname, "system-state") && enumvalue >= IPP_SSTATE_IDLE && enumvalue <= IPP_SSTATE_STOPPED)
return (ipp_system_states[enumvalue - IPP_SSTATE_IDLE]);
/*
* Not a standard enum value, just return the decimal equivalent...
@@ -2067,6 +2053,16 @@ ippEnumValue(const char *attrname, /* I - Attribute name */
num_strings = (int)(sizeof(ipp_printer_states) / sizeof(ipp_printer_states[0]));
strings = ipp_printer_states;
}
else if (!strcmp(attrname, "resource-state"))
{
num_strings = (int)(sizeof(ipp_resource_states) / sizeof(ipp_resource_states[0]));
strings = ipp_resource_states;
}
else if (!strcmp(attrname, "system-state"))
{
num_strings = (int)(sizeof(ipp_system_states) / sizeof(ipp_system_states[0]));
strings = ipp_system_states;
}
else
return (-1);
+33 -6
Ver Arquivo
@@ -1,10 +1,11 @@
/*
* Internet Printing Protocol functions for CUPS.
*
* Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
@@ -3083,6 +3084,13 @@ ippReadIO(void *src, /* I - Data source */
ipp->state = IPP_STATE_DATA;
break;
}
else if (tag == IPP_TAG_ZERO || (tag == IPP_TAG_OPERATION && ipp->curtag != IPP_TAG_ZERO))
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid group tag."), 1);
DEBUG_printf(("1ippReadIO: bad tag 0x%02x.", tag));
_cupsBufferRelease((char *)buffer);
return (IPP_STATE_ERROR);
}
else if (tag < IPP_TAG_UNSUPPORTED_VALUE)
{
/*
@@ -3380,7 +3388,10 @@ ippReadIO(void *src, /* I - Data source */
value->boolean = (char)buffer[0];
break;
case IPP_TAG_NOVALUE :
case IPP_TAG_UNSUPPORTED_VALUE :
case IPP_TAG_DEFAULT :
case IPP_TAG_UNKNOWN :
case IPP_TAG_NOVALUE :
case IPP_TAG_NOTSETTABLE :
case IPP_TAG_DELETEATTR :
case IPP_TAG_ADMINDEFINE :
@@ -3400,6 +3411,7 @@ ippReadIO(void *src, /* I - Data source */
case IPP_TAG_TEXT :
case IPP_TAG_NAME :
case IPP_TAG_RESERVED_STRING :
case IPP_TAG_KEYWORD :
case IPP_TAG_URI :
case IPP_TAG_URISCHEME :
@@ -5017,9 +5029,16 @@ ippValidateAttribute(
}
else if (*ptr & 0x80)
break;
else if ((*ptr < ' ' && *ptr != '\n' && *ptr != '\r' && *ptr != '\t') || *ptr == 0x7f)
break;
}
if (*ptr)
if (*ptr < ' ' || *ptr == 0x7f)
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."), attr->name, attr->values[i].string.text);
return (0);
}
else if (*ptr)
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text);
return (0);
@@ -5068,9 +5087,16 @@ ippValidateAttribute(
}
else if (*ptr & 0x80)
break;
else if (*ptr < ' ' || *ptr == 0x7f)
break;
}
if (*ptr)
if (*ptr < ' ' || *ptr == 0x7f)
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."), attr->name, attr->values[i].string.text);
return (0);
}
else if (*ptr)
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text);
return (0);
@@ -6361,6 +6387,7 @@ ipp_free_values(ipp_attribute_t *attr, /* I - Attribute to free values from */
}
break;
case IPP_TAG_UNSUPPORTED_VALUE :
case IPP_TAG_DEFAULT :
case IPP_TAG_UNKNOWN :
case IPP_TAG_NOVALUE :
+16
Ver Arquivo
@@ -490,6 +490,22 @@ typedef enum ipp_res_e /**** Resolution units ****/
IPP_RES_PER_CM /* Pixels per centimeter */
} ipp_res_t;
typedef enum ipp_rstate_e /**** resource-state values ****/
{
IPP_RSTATE_PENDING = 3, /* Resource is created but has no data yet. */
IPP_RSTATE_AVAILABLE, /* Resource is available for installation. */
IPP_RSTATE_INSTALLED, /* Resource is installed. */
IPP_RSTATE_CANCELED, /* Resource has been canceled and is pending deletion. */
IPP_RSTATE_ABORTED /* Resource has been aborted and is pending deletion. */
} ipp_rstate_t;
typedef enum ipp_sstate_e /**** system-state values ****/
{
IPP_SSTATE_IDLE = 3, /* At least one printer is idle and none are processing a job. */
IPP_SSTATE_PROCESSING, /* At least one printer is processing a job. */
IPP_SSTATE_STOPPED /* All printers are stopped. */
} ipp_sstate_t;
typedef enum ipp_state_e /**** ipp_t state values ****/
{
IPP_STATE_ERROR = -1, /* An error occurred */
+13 -3
Ver Arquivo
@@ -1,10 +1,11 @@
/*
* HTTP test program for CUPS.
*
* Copyright 2007-2014 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2006 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
@@ -114,6 +115,9 @@ static uri_test_t uri_tests[] = /* URI test data */
{ HTTP_URI_STATUS_OK, "ipp://%22%23%2F%3A%3C%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D/",
"ipp", "", "\"#/:<>?@[\\]^`{|}", "/", 631, 0,
HTTP_URI_CODING_MOST },
{ HTTP_URI_STATUS_UNKNOWN_SCHEME, "smb://server/Some%20Printer",
"smb", "", "server", "/Some Printer", 0, 0,
HTTP_URI_CODING_ALL },
/* Missing scheme */
{ HTTP_URI_STATUS_MISSING_SCHEME, "/path/to/file/index.html",
@@ -142,6 +146,9 @@ static uri_test_t uri_tests[] = /* URI test data */
HTTP_URI_CODING_MOST },
/* Bad scheme */
{ HTTP_URI_STATUS_BAD_SCHEME, "://server/ipp",
"", "", "", "", 0, 0,
HTTP_URI_CODING_MOST },
{ HTTP_URI_STATUS_BAD_SCHEME, "bad_scheme://server/resource",
"", "", "", "", 0, 0,
HTTP_URI_CODING_MOST },
@@ -174,6 +181,9 @@ static uri_test_t uri_tests[] = /* URI test data */
HTTP_URI_CODING_MOST },
/* Bad resource */
{ HTTP_URI_STATUS_BAD_RESOURCE, "mailto:\r\nbla",
"mailto", "", "", "", 0, 0,
HTTP_URI_CODING_MOST },
{ HTTP_URI_STATUS_BAD_RESOURCE, "http://server/index.html%",
"http", "", "server", "", 80, 0,
HTTP_URI_CODING_MOST },
+1 -1
Ver Arquivo
@@ -738,7 +738,7 @@ main(int argc, /* I - Number of command-line arguments */
if (state != IPP_STATE_DATA)
{
printf("Error reading IPP message from \"%s\".\n", argv[i]);
printf("Error reading IPP message from \"%s\": %s\n", argv[i], cupsLastErrorString());
status = 1;
ippDelete(request);
+68 -7
Ver Arquivo
@@ -800,24 +800,85 @@ httpCredentialsString(
if ((first = (http_credential_t *)cupsArrayFirst(credentials)) != NULL &&
(secCert = http_cdsa_create_credential(first)) != NULL)
{
CFStringRef cf_name; /* CF common name string */
char name[256]; /* Common name associated with cert */
/*
* Copy certificate (string) values from the SecCertificateRef and produce
* a one-line summary. The API for accessing certificate values like the
* issuer name is, um, "interesting"...
*/
CFStringRef cf_string; /* CF string */
CFDictionaryRef cf_dict; /* Dictionary for certificate */
char commonName[256],/* Common name associated with cert */
issuer[256], /* Issuer name */
sigalg[256]; /* Signature algorithm */
time_t expiration; /* Expiration date of cert */
unsigned char md5_digest[16]; /* MD5 result */
if ((cf_name = SecCertificateCopySubjectSummary(secCert)) != NULL)
if (SecCertificateCopyCommonName(secCert, &cf_string) == noErr)
{
CFStringGetCString(cf_name, name, (CFIndex)sizeof(name), kCFStringEncodingUTF8);
CFRelease(cf_name);
CFStringGetCString(cf_string, commonName, (CFIndex)sizeof(commonName), kCFStringEncodingUTF8);
CFRelease(cf_string);
}
else
strlcpy(name, "unknown", sizeof(name));
{
strlcpy(commonName, "unknown", sizeof(commonName));
}
strlcpy(issuer, "unknown", sizeof(issuer));
strlcpy(sigalg, "UnknownSignature", sizeof(sigalg));
if ((cf_dict = SecCertificateCopyValues(secCert, NULL, NULL)) != NULL)
{
CFDictionaryRef cf_issuer = CFDictionaryGetValue(cf_dict, kSecOIDX509V1IssuerName);
CFDictionaryRef cf_sigalg = CFDictionaryGetValue(cf_dict, kSecOIDX509V1SignatureAlgorithm);
if (cf_issuer)
{
CFArrayRef cf_values = CFDictionaryGetValue(cf_issuer, kSecPropertyKeyValue);
CFIndex i, count = CFArrayGetCount(cf_values);
CFDictionaryRef cf_value;
for (i = 0; i < count; i ++)
{
cf_value = CFArrayGetValueAtIndex(cf_values, i);
if (!CFStringCompare(CFDictionaryGetValue(cf_value, kSecPropertyKeyLabel), kSecOIDOrganizationName, kCFCompareCaseInsensitive))
CFStringGetCString(CFDictionaryGetValue(cf_value, kSecPropertyKeyValue), issuer, (CFIndex)sizeof(issuer), kCFStringEncodingUTF8);
}
}
if (cf_sigalg)
{
CFArrayRef cf_values = CFDictionaryGetValue(cf_sigalg, kSecPropertyKeyValue);
CFIndex i, count = CFArrayGetCount(cf_values);
CFDictionaryRef cf_value;
for (i = 0; i < count; i ++)
{
cf_value = CFArrayGetValueAtIndex(cf_values, i);
if (!CFStringCompare(CFDictionaryGetValue(cf_value, kSecPropertyKeyLabel), CFSTR("Algorithm"), kCFCompareCaseInsensitive))
{
CFStringRef cf_algorithm = CFDictionaryGetValue(cf_value, kSecPropertyKeyValue);
if (!CFStringCompare(cf_algorithm, CFSTR("1.2.840.113549.1.1.5"), kCFCompareCaseInsensitive))
strlcpy(sigalg, "SHA1WithRSAEncryption", sizeof(sigalg));
else if (!CFStringCompare(cf_algorithm, CFSTR("1.2.840.113549.1.1.11"), kCFCompareCaseInsensitive))
strlcpy(sigalg, "SHA256WithRSAEncryption", sizeof(sigalg));
else if (!CFStringCompare(cf_algorithm, CFSTR("1.2.840.113549.1.1.4"), kCFCompareCaseInsensitive))
strlcpy(sigalg, "MD5WithRSAEncryption", sizeof(sigalg));
}
}
}
CFRelease(cf_dict);
}
expiration = (time_t)(SecCertificateNotValidAfter(secCert) + kCFAbsoluteTimeIntervalSince1970);
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]);
snprintf(buffer, bufsize, "%s (issued by %s) / %s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", commonName, issuer, httpGetDateString(expiration), sigalg, 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]);
CFRelease(secCert);
}
+17 -7
Ver Arquivo
@@ -4,7 +4,8 @@
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/**** This file is included from tls.c ****/
@@ -639,22 +640,31 @@ httpCredentialsString(
if ((first = (http_credential_t *)cupsArrayFirst(credentials)) != NULL &&
(cert = http_gnutls_create_credential(first)) != NULL)
{
char name[256]; /* Common name associated with cert */
size_t namelen; /* Length of name */
char name[256], /* Common name associated with cert */
issuer[256]; /* Issuer associated with cert */
size_t len; /* Length of string */
time_t expiration; /* Expiration date of cert */
int sigalg; /* Signature algorithm */
unsigned char md5_digest[16]; /* MD5 result */
namelen = sizeof(name) - 1;
if (gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COMMON_NAME, 0, 0, name, &namelen) >= 0)
name[namelen] = '\0';
len = sizeof(name) - 1;
if (gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COMMON_NAME, 0, 0, name, &len) >= 0)
name[len] = '\0';
else
strlcpy(name, "unknown", sizeof(name));
len = sizeof(issuer) - 1;
if (gnutls_x509_crt_get_issuer_dn_by_oid(cert, GNUTLS_OID_X520_ORGANIZATION_NAME, 0, 0, issuer, &len) >= 0)
issuer[len] = '\0';
else
strlcpy(issuer, "unknown", sizeof(issuer));
expiration = gnutls_x509_crt_get_expiration_time(cert);
sigalg = gnutls_x509_crt_get_signature_algorithm(cert);
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]);
snprintf(buffer, bufsize, "%s (issued by %s) / %s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", name, issuer, httpGetDateString(expiration), gnutls_sign_get_name(sigalg), 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]);
gnutls_x509_crt_deinit(cert);
}
+15
Ver Arquivo
@@ -37,6 +37,8 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* HTTP connection */
const char *server = NULL; /* Hostname from command-line */
int port = 0; /* Port number */
cups_array_t *creds; /* Server credentials */
char creds_str[2048]; /* Credentials string */
const char *cipherName = "UNKNOWN";/* Cipher suite name */
int dhBits = 0; /* Diffie-Hellman bits */
int tlsVersion = 0; /* TLS version number */
@@ -154,6 +156,16 @@ main(int argc, /* I - Number of command-line arguments */
return (1);
}
if (httpCopyCredentials(http, &creds))
{
strlcpy(creds_str, "Unable to get server X.509 credentials.", sizeof(creds_str));
}
else
{
httpCredentialsString(creds, creds_str, sizeof(creds_str));
httpFreeCredentials(creds);
}
#ifdef __APPLE__
SSLProtocol protocol;
SSLCipherSuite cipher;
@@ -691,6 +703,8 @@ main(int argc, /* I - Number of command-line arguments */
else
printf("%s: OK (TLS: %d.%d, %s)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName);
printf(" %s\n", creds_str);
if (verbose)
{
httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipps", NULL, host, port, resource);
@@ -714,6 +728,7 @@ main(int argc, /* I - Number of command-line arguments */
}
ippDelete(response);
puts("");
}
httpClose(http);
+10 -49
Ver Arquivo
@@ -1,10 +1,11 @@
/*
* Printing utilities for CUPS.
*
* Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2006 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
@@ -21,19 +22,6 @@
#endif /* WIN32 || __EMX__ */
/*
* Enumeration data and callback...
*/
typedef struct _cups_createdata_s
{
const char *name; /* Destination name */
cups_dest_t *dest; /* Matching destination */
} _cups_createdata_t;
static int cups_create_cb(_cups_createdata_t *data, unsigned flags, cups_dest_t *dest);
/*
* 'cupsCancelJob()' - Cancel a print job on the default server.
*
@@ -168,7 +156,7 @@ cupsCreateJob(
{
int job_id = 0; /* job-id value */
ipp_status_t status; /* Create-Job status */
_cups_createdata_t data; /* Enumeration data */
cups_dest_t *dest; /* Destination */
cups_dinfo_t *info; /* Destination information */
@@ -188,12 +176,7 @@ cupsCreateJob(
* Lookup the destination...
*/
data.name = name;
data.dest = NULL;
cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_create_cb, &data);
if (!data.dest)
if ((dest = cupsGetNamedDest(http, name, NULL)) == NULL)
{
DEBUG_puts("1cupsCreateJob: Destination not found.");
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
@@ -205,18 +188,18 @@ cupsCreateJob(
*/
DEBUG_puts("1cupsCreateJob: Querying destination info.");
if ((info = cupsCopyDestInfo(http, data.dest)) == NULL)
if ((info = cupsCopyDestInfo(http, dest)) == NULL)
{
DEBUG_puts("1cupsCreateJob: Query failed.");
cupsFreeDests(1, data.dest);
cupsFreeDests(1, dest);
return (0);
}
status = cupsCreateDestJob(http, data.dest, info, &job_id, title, num_options, options);
status = cupsCreateDestJob(http, dest, info, &job_id, title, num_options, options);
DEBUG_printf(("1cupsCreateJob: cupsCreateDestJob returned %04x (%s)", status, ippErrorString(status)));
cupsFreeDestInfo(info);
cupsFreeDests(1, data.dest);
cupsFreeDests(1, dest);
/*
* Return the job...
@@ -968,25 +951,3 @@ cupsStartDocument(
return (status);
}
/*
* 'cups_create_cb()' - Find the destination for printing.
*/
static int /* O - 0 on match */
cups_create_cb(
_cups_createdata_t *data, /* I - Data from cupsCreateJob call */
unsigned flags, /* I - Enumeration flags */
cups_dest_t *dest) /* I - Destination */
{
DEBUG_printf(("2cups_create_cb(data=%p(%s), flags=%08x, dest=%p(%s))", (void *)data, data->name, flags, (void *)dest, dest->name));
(void)flags;
if (dest->instance || strcasecmp(data->name, dest->name))
return (1);
cupsCopyDest(dest, 0, &data->dest);
return (0);
}
+68
Ver Arquivo
@@ -0,0 +1,68 @@
/* Simple ordered dither threshold matrix */
const unsigned char threshold[64][64] =
{
{ 0, 235, 138, 22, 45, 98, 217, 2, 45, 98, 7, 185, 45, 97, 6, 192, 110, 37, 110, 37, 97, 45, 18, 148, 109, 37, 97, 45, 7, 185, 45, 97, 6, 192, 109, 37, 57, 82, 165, 12, 26, 130, 190, 6, 119, 31, 97, 45, 179, 8, 109, 37, 97, 45, 140, 22, 109, 37, 57, 82, 9, 177, 24, 135 },
{ 109, 37, 57, 82, 20, 143, 57, 82, 146, 19, 57, 82, 15, 158, 87, 53, 20, 144, 13, 162, 138, 22, 53, 87, 162, 13, 138, 22, 57, 82, 22, 140, 57, 82, 153, 16, 119, 31, 109, 37, 109, 37, 57, 81, 19, 147, 213, 2, 53, 87, 21, 142, 13, 164, 53, 87, 187, 6, 152, 17, 119, 32, 110, 37 },
{ 24, 135, 12, 167, 97, 45, 17, 151, 45, 97, 32, 119, 26, 130, 119, 32, 81, 58, 30, 121, 81, 58, 181, 8, 119, 32, 97, 45, 17, 151, 45, 97, 161, 14, 45, 97, 213, 2, 135, 24, 7, 183, 138, 22, 109, 37, 58, 81, 121, 30, 109, 37, 58, 81, 30, 121, 58, 81, 127, 27, 58, 81, 165, 12 },
{ 58, 81, 31, 119, 5, 197, 58, 81, 9, 175, 206, 3, 58, 81, 10, 174, 222, 1, 45, 97, 206, 3, 124, 29, 58, 81, 4, 200, 58, 81, 2, 217, 58, 81, 27, 127, 108, 37, 58, 81, 30, 121, 58, 81, 167, 12, 25, 132, 15, 158, 5, 197, 135, 24, 206, 3, 142, 21, 45, 97, 203, 3, 119, 32 },
{ 6, 190, 108, 38, 97, 45, 143, 20, 108, 38, 97, 45, 148, 18, 108, 38, 58, 81, 148, 18, 119, 32, 97, 45, 16, 153, 97, 45, 143, 20, 46, 97, 32, 119, 6, 187, 25, 132, 13, 164, 46, 97, 1, 222, 119, 32, 108, 38, 108, 38, 108, 38, 108, 38, 108, 38, 58, 81, 8, 179, 123, 29, 97, 46 },
{ 58, 81, 161, 14, 147, 19, 53, 87, 22, 138, 14, 159, 87, 53, 22, 138, 14, 159, 108, 38, 87, 53, 177, 9, 53, 87, 14, 161, 58, 81, 22, 137, 12, 167, 108, 38, 108, 38, 81, 58, 153, 16, 123, 29, 53, 87, 187, 6, 162, 13, 132, 25, 11, 168, 25, 132, 12, 165, 119, 32, 81, 58, 14, 161 },
{ 140, 22, 108, 38, 81, 58, 8, 181, 108, 38, 97, 46, 8, 181, 58, 81, 31, 119, 7, 185, 147, 19, 58, 81, 127, 27, 97, 46, 8, 179, 108, 38, 58, 81, 21, 142, 13, 162, 5, 194, 108, 38, 58, 81, 15, 156, 87, 53, 30, 121, 108, 38, 108, 38, 58, 81, 127, 27, 97, 46, 16, 153, 97, 46 },
{ 58, 81, 2, 217, 123, 29, 36, 111, 1, 227, 138, 22, 97, 46, 4, 203, 108, 38, 108, 38, 97, 46, 23, 137, 222, 1, 112, 36, 58, 81, 6, 192, 137, 23, 53, 87, 30, 121, 58, 80, 23, 137, 183, 7, 36, 111, 26, 130, 59, 80, 0, 235, 130, 26, 192, 6, 46, 97, 222, 1, 53, 87, 194, 5 },
{ 17, 151, 46, 97, 172, 10, 59, 80, 27, 127, 59, 80, 18, 148, 59, 80, 172, 10, 24, 135, 4, 200, 80, 59, 36, 112, 167, 12, 137, 23, 108, 38, 97, 46, 0, 235, 46, 97, 144, 20, 46, 97, 127, 27, 53, 87, 3, 206, 147, 19, 108, 38, 108, 38, 80, 59, 151, 17, 80, 59, 27, 127, 96, 46 },
{ 58, 81, 126, 27, 96, 46, 15, 156, 46, 97, 172, 10, 46, 96, 14, 159, 119, 32, 59, 80, 32, 119, 156, 15, 53, 87, 27, 127, 59, 80, 21, 142, 10, 172, 80, 59, 177, 9, 80, 59, 2, 213, 59, 80, 14, 161, 108, 38, 59, 79, 23, 137, 11, 168, 137, 23, 46, 96, 32, 119, 13, 164, 140, 22 },
{ 6, 190, 152, 17, 112, 36, 59, 79, 6, 187, 59, 79, 30, 121, 108, 38, 96, 46, 15, 156, 46, 96, 29, 123, 183, 7, 46, 96, 209, 3, 46, 96, 32, 118, 26, 130, 96, 46, 15, 158, 46, 96, 16, 153, 46, 96, 32, 118, 10, 172, 108, 38, 108, 38, 59, 79, 179, 8, 141, 21, 59, 79, 32, 119 },
{ 87, 53, 36, 112, 203, 4, 137, 23, 96, 46, 23, 137, 4, 200, 24, 135, 235, 0, 87, 53, 8, 179, 108, 38, 87, 53, 15, 156, 53, 87, 156, 15, 59, 79, 156, 15, 119, 32, 59, 79, 30, 121, 59, 79, 6, 190, 151, 17, 59, 79, 187, 6, 26, 130, 3, 206, 108, 38, 96, 46, 206, 3, 110, 37 },
{ 142, 21, 59, 79, 28, 126, 59, 79, 144, 20, 59, 79, 119, 32, 60, 79, 32, 118, 27, 129, 87, 53, 3, 209, 118, 32, 60, 79, 126, 28, 96, 46, 5, 194, 46, 96, 197, 5, 134, 24, 7, 183, 137, 23, 46, 96, 36, 112, 28, 126, 108, 38, 108, 38, 60, 79, 148, 18, 118, 32, 60, 79, 167, 12 },
{ 37, 109, 174, 10, 46, 95, 10, 174, 47, 95, 170, 11, 47, 95, 9, 177, 47, 95, 14, 159, 118, 32, 60, 79, 170, 11, 134, 24, 183, 7, 112, 36, 79, 60, 140, 22, 108, 38, 107, 38, 107, 39, 79, 60, 17, 149, 60, 79, 213, 2, 24, 135, 177, 9, 159, 14, 47, 95, 9, 175, 137, 23, 47, 95 },
{ 0, 235, 60, 79, 18, 149, 87, 53, 217, 2, 53, 87, 156, 15, 86, 53, 16, 153, 54, 86, 167, 12, 137, 23, 107, 39, 60, 79, 36, 112, 172, 10, 147, 19, 47, 95, 19, 147, 9, 175, 132, 25, 1, 227, 36, 110, 9, 175, 112, 36, 60, 79, 30, 121, 60, 79, 126, 28, 112, 36, 60, 79, 19, 147 },
{ 37, 109, 140, 22, 47, 95, 30, 121, 60, 78, 30, 121, 61, 78, 32, 118, 61, 78, 200, 4, 112, 36, 61, 78, 19, 147, 227, 1, 47, 95, 27, 129, 86, 54, 2, 217, 54, 86, 28, 126, 61, 78, 126, 28, 61, 78, 129, 26, 95, 47, 15, 158, 47, 95, 20, 144, 1, 222, 95, 47, 6, 190, 47, 95 },
{ 13, 164, 61, 78, 4, 200, 162, 13, 24, 134, 183, 7, 24, 134, 213, 2, 142, 21, 123, 29, 95, 47, 192, 6, 107, 39, 86, 54, 153, 16, 54, 86, 30, 121, 61, 78, 30, 121, 95, 47, 170, 11, 47, 95, 10, 172, 47, 94, 179, 8, 61, 78, 4, 200, 107, 39, 61, 78, 22, 140, 61, 78, 23, 137 },
{ 37, 109, 31, 120, 107, 39, 107, 39, 107, 39, 107, 39, 61, 78, 121, 30, 107, 39, 61, 78, 19, 146, 86, 54, 23, 137, 13, 164, 61, 77, 200, 4, 159, 14, 131, 25, 13, 164, 4, 200, 86, 54, 18, 148, 54, 86, 203, 4, 94, 47, 19, 146, 47, 94, 23, 137, 13, 161, 47, 94, 17, 151, 47, 94 },
{ 26, 131, 6, 187, 158, 15, 26, 131, 4, 203, 26, 131, 177, 9, 47, 94, 14, 159, 10, 174, 94, 47, 151, 17, 61, 77, 32, 118, 27, 129, 118, 32, 107, 39, 107, 39, 86, 54, 126, 28, 118, 32, 61, 77, 31, 120, 77, 61, 126, 28, 86, 54, 14, 161, 107, 39, 77, 61, 6, 190, 61, 77, 3, 206 },
{ 107, 39, 61, 77, 121, 30, 86, 54, 121, 30, 107, 39, 61, 77, 16, 153, 107, 39, 86, 54, 1, 222, 94, 47, 8, 179, 47, 94, 174, 10, 54, 86, 11, 168, 5, 194, 144, 20, 86, 54, 17, 152, 3, 209, 162, 13, 134, 24, 12, 167, 123, 29, 61, 77, 7, 185, 136, 23, 47, 94, 32, 118, 27, 127 },
{ 164, 13, 144, 20, 94, 47, 174, 10, 61, 77, 11, 170, 123, 29, 37, 110, 5, 194, 123, 29, 86, 54, 20, 143, 61, 77, 3, 206, 61, 77, 18, 148, 118, 32, 85, 54, 32, 118, 177, 9, 85, 55, 28, 126, 106, 39, 106, 39, 61, 77, 0, 235, 118, 32, 106, 39, 61, 77, 19, 147, 177, 9, 81, 58 },
{ 106, 39, 77, 61, 222, 1, 94, 47, 18, 149, 48, 93, 227, 1, 85, 55, 29, 123, 168, 11, 112, 36, 85, 55, 33, 117, 27, 129, 117, 33, 106, 39, 94, 47, 149, 18, 77, 61, 27, 129, 117, 33, 61, 77, 20, 144, 6, 190, 117, 33, 55, 85, 159, 14, 26, 131, 3, 209, 117, 32, 94, 47, 16, 153 },
{ 5, 194, 123, 29, 55, 85, 19, 146, 62, 77, 126, 28, 37, 110, 156, 15, 62, 77, 36, 112, 17, 151, 194, 5, 151, 17, 77, 62, 17, 152, 2, 217, 175, 9, 93, 47, 227, 0, 48, 93, 6, 192, 168, 11, 117, 33, 77, 62, 161, 14, 140, 22, 106, 39, 106, 39, 106, 39, 62, 77, 28, 126, 81, 58 },
{ 47, 94, 153, 16, 123, 29, 85, 55, 5, 197, 152, 17, 62, 77, 29, 123, 10, 174, 48, 93, 28, 126, 106, 39, 93, 48, 8, 181, 106, 39, 62, 77, 33, 117, 144, 20, 62, 77, 18, 148, 106, 39, 106, 39, 93, 48, 18, 147, 48, 93, 33, 117, 192, 6, 164, 13, 131, 26, 14, 158, 227, 1, 140, 22 },
{ 13, 164, 85, 55, 10, 174, 117, 33, 106, 39, 93, 48, 10, 172, 106, 39, 62, 77, 2, 209, 62, 77, 161, 14, 142, 21, 62, 77, 33, 117, 143, 20, 106, 39, 93, 48, 22, 138, 48, 93, 158, 15, 131, 26, 1, 217, 85, 55, 200, 4, 106, 39, 105, 39, 105, 40, 105, 40, 105, 40, 105, 40, 87, 53 },
{ 85, 55, 120, 31, 62, 77, 6, 187, 142, 21, 123, 29, 85, 55, 5, 194, 123, 29, 37, 110, 179, 8, 117, 33, 85, 55, 23, 136, 6, 192, 62, 77, 10, 174, 5, 197, 62, 77, 8, 179, 105, 40, 105, 40, 85, 55, 120, 31, 62, 77, 167, 12, 26, 131, 15, 158, 5, 194, 168, 11, 147, 19, 118, 32 },
{ 135, 24, 3, 209, 136, 23, 105, 40, 62, 76, 209, 3, 123, 29, 63, 76, 15, 155, 63, 76, 27, 129, 93, 48, 0, 235, 105, 40, 93, 48, 17, 151, 48, 93, 33, 116, 16, 155, 37, 110, 4, 203, 162, 13, 24, 134, 11, 168, 136, 23, 105, 40, 105, 40, 105, 40, 63, 76, 126, 28, 85, 55, 6, 190 },
{ 37, 109, 33, 117, 63, 76, 21, 142, 12, 165, 48, 93, 16, 155, 123, 29, 93, 48, 11, 170, 48, 93, 16, 155, 55, 85, 170, 11, 136, 23, 63, 76, 146, 19, 63, 76, 27, 129, 76, 63, 27, 129, 116, 33, 76, 63, 33, 117, 63, 76, 19, 147, 217, 2, 168, 11, 142, 21, 48, 93, 120, 31, 80, 59 },
{ 175, 9, 93, 49, 10, 172, 105, 40, 63, 76, 125, 28, 85, 55, 8, 179, 117, 33, 84, 55, 197, 5, 55, 84, 27, 129, 116, 33, 93, 49, 213, 2, 49, 93, 11, 170, 49, 93, 172, 10, 105, 40, 93, 49, 5, 194, 49, 93, 192, 6, 116, 33, 63, 76, 120, 31, 63, 76, 3, 206, 162, 13, 26, 131 },
{ 37, 109, 18, 149, 63, 76, 0, 235, 131, 26, 187, 6, 116, 33, 84, 55, 1, 222, 140, 22, 63, 76, 33, 116, 8, 179, 84, 55, 158, 15, 55, 84, 27, 129, 84, 55, 217, 2, 55, 84, 20, 144, 10, 174, 55, 84, 149, 18, 122, 29, 93, 49, 20, 143, 49, 93, 15, 158, 116, 33, 105, 40, 80, 59 },
{ 138, 22, 93, 49, 22, 138, 105, 40, 105, 40, 63, 76, 159, 14, 136, 23, 63, 75, 33, 116, 164, 13, 144, 20, 93, 49, 5, 194, 63, 75, 33, 116, 185, 7, 116, 33, 75, 63, 31, 120, 104, 40, 75, 63, 31, 120, 104, 41, 75, 63, 181, 8, 84, 55, 6, 192, 104, 41, 84, 55, 21, 142, 217, 2 },
{ 84, 55, 197, 5, 55, 84, 19, 146, 13, 164, 140, 22, 104, 41, 93, 49, 18, 149, 49, 93, 28, 125, 63, 75, 125, 28, 93, 49, 21, 141, 11, 168, 63, 75, 165, 12, 24, 134, 15, 158, 209, 3, 26, 131, 15, 158, 1, 227, 144, 20, 49, 93, 16, 153, 63, 75, 23, 136, 10, 172, 63, 75, 120, 30 },
{ 14, 161, 75, 63, 177, 8, 116, 33, 75, 63, 33, 116, 2, 213, 175, 9, 63, 75, 190, 6, 92, 49, 2, 213, 152, 17, 111, 36, 63, 75, 36, 112, 27, 129, 111, 36, 104, 41, 104, 41, 104, 41, 104, 41, 104, 41, 104, 41, 75, 63, 125, 28, 92, 49, 14, 161, 104, 41, 92, 49, 7, 185, 49, 92 },
{ 47, 94, 144, 20, 122, 30, 92, 49, 5, 197, 49, 92, 28, 125, 92, 49, 143, 20, 49, 92, 18, 149, 75, 63, 36, 112, 11, 168, 222, 1, 49, 92, 203, 4, 55, 84, 190, 6, 162, 13, 26, 130, 190, 6, 164, 13, 26, 130, 13, 162, 206, 3, 122, 30, 84, 55, 0, 235, 122, 30, 84, 55, 16, 152 },
{ 6, 192, 116, 33, 75, 63, 16, 155, 63, 74, 15, 156, 64, 74, 20, 143, 84, 55, 22, 138, 92, 49, 143, 20, 49, 92, 27, 129, 55, 84, 156, 15, 56, 84, 16, 155, 116, 33, 104, 41, 104, 41, 104, 41, 104, 41, 104, 41, 103, 41, 64, 74, 181, 8, 115, 33, 64, 74, 152, 17, 122, 30, 80, 59 },
{ 103, 41, 92, 49, 213, 2, 49, 92, 28, 125, 92, 49, 6, 185, 92, 49, 3, 206, 64, 74, 7, 185, 64, 74, 190, 6, 64, 74, 31, 120, 64, 74, 33, 117, 103, 41, 64, 74, 20, 144, 8, 181, 24, 134, 15, 158, 5, 197, 141, 21, 122, 30, 56, 84, 19, 146, 13, 164, 50, 91, 203, 4, 112, 36 },
{ 24, 134, 12, 167, 56, 84, 34, 115, 172, 10, 136, 23, 64, 74, 18, 149, 92, 49, 18, 149, 91, 49, 15, 156, 50, 91, 20, 144, 7, 183, 24, 134, 183, 7, 24, 134, 235, 0, 50, 91, 31, 120, 64, 74, 125, 28, 115, 34, 64, 74, 161, 14, 115, 34, 103, 41, 64, 74, 125, 28, 37, 110, 165, 12 },
{ 103, 41, 64, 74, 23, 136, 185, 7, 103, 41, 91, 50, 20, 143, 50, 91, 22, 138, 56, 84, 31, 120, 64, 74, 31, 120, 103, 41, 103, 41, 64, 74, 31, 120, 103, 41, 64, 74, 125, 28, 91, 50, 217, 2, 103, 41, 91, 50, 10, 174, 50, 91, 22, 140, 200, 4, 134, 24, 7, 183, 65, 74, 28, 126 },
{ 227, 1, 146, 19, 103, 41, 65, 74, 21, 142, 227, 1, 65, 74, 6, 190, 65, 74, 9, 175, 0, 235, 24, 134, 206, 3, 162, 13, 130, 26, 213, 2, 50, 91, 13, 162, 131, 26, 185, 7, 152, 17, 65, 74, 170, 11, 144, 20, 56, 84, 1, 222, 103, 41, 103, 41, 103, 41, 91, 50, 175, 9, 50, 91 },
{ 49, 93, 33, 116, 6, 187, 136, 23, 50, 91, 33, 116, 18, 149, 50, 91, 19, 147, 103, 41, 103, 41, 102, 41, 102, 42, 102, 42, 102, 42, 65, 74, 21, 141, 102, 42, 102, 42, 65, 74, 125, 28, 115, 34, 102, 42, 65, 74, 31, 119, 65, 74, 167, 12, 26, 130, 12, 165, 115, 34, 84, 56, 151, 17 },
{ 148, 18, 102, 42, 102, 42, 84, 56, 174, 10, 102, 42, 65, 74, 22, 140, 65, 74, 159, 14, 131, 26, 11, 168, 26, 131, 15, 158, 7, 185, 159, 14, 50, 91, 5, 197, 168, 11, 141, 21, 50, 91, 179, 8, 24, 134, 4, 203, 162, 13, 142, 21, 102, 42, 102, 42, 65, 74, 2, 217, 140, 22, 80, 59 },
{ 49, 92, 9, 175, 24, 133, 3, 209, 65, 74, 19, 146, 185, 7, 90, 50, 3, 209, 102, 42, 65, 74, 31, 120, 102, 42, 65, 74, 31, 120, 65, 73, 34, 115, 27, 129, 115, 34, 56, 84, 203, 4, 111, 36, 65, 73, 125, 28, 102, 42, 65, 73, 23, 136, 192, 6, 136, 23, 102, 42, 90, 50, 6, 187 },
{ 31, 119, 102, 42, 102, 42, 90, 50, 138, 22, 102, 42, 65, 73, 125, 28, 65, 73, 21, 141, 194, 5, 50, 90, 192, 6, 141, 21, 50, 90, 21, 141, 6, 187, 102, 42, 65, 73, 16, 155, 122, 30, 90, 50, 14, 161, 50, 90, 34, 115, 200, 4, 102, 42, 102, 42, 84, 56, 18, 149, 115, 34, 79, 59 },
{ 209, 3, 25, 133, 6, 187, 146, 19, 65, 73, 203, 4, 134, 24, 11, 168, 111, 36, 102, 42, 65, 73, 19, 147, 102, 42, 65, 73, 1, 227, 102, 42, 65, 73, 19, 146, 217, 2, 115, 34, 56, 84, 17, 152, 73, 65, 177, 9, 151, 17, 73, 65, 165, 12, 131, 26, 175, 9, 73, 65, 9, 174, 24, 134 },
{ 33, 117, 102, 42, 65, 73, 34, 115, 11, 170, 115, 34, 65, 73, 36, 111, 181, 7, 168, 11, 136, 23, 50, 90, 161, 14, 146, 19, 50, 90, 159, 14, 136, 23, 102, 42, 102, 42, 73, 65, 7, 183, 90, 50, 1, 227, 50, 90, 36, 111, 27, 129, 115, 34, 72, 65, 34, 115, 27, 127, 111, 36, 79, 59 },
{ 50, 90, 164, 13, 141, 21, 102, 42, 102, 42, 90, 50, 15, 156, 50, 90, 27, 127, 115, 34, 66, 72, 2, 217, 102, 42, 66, 72, 22, 138, 102, 42, 66, 72, 167, 12, 133, 25, 12, 165, 37, 110, 28, 125, 72, 66, 143, 20, 72, 66, 179, 8, 90, 50, 235, 0, 51, 90, 203, 4, 90, 50, 7, 183 },
{ 17, 152, 101, 42, 66, 72, 235, 0, 25, 133, 8, 181, 66, 72, 222, 1, 101, 43, 90, 50, 17, 152, 51, 90, 23, 136, 185, 7, 51, 90, 9, 175, 203, 4, 114, 34, 72, 66, 125, 28, 72, 66, 172, 10, 146, 19, 90, 51, 209, 3, 51, 90, 153, 16, 56, 84, 16, 155, 56, 84, 16, 155, 87, 53 },
{ 84, 56, 6, 192, 151, 17, 114, 35, 72, 66, 35, 114, 27, 127, 37, 110, 17, 152, 197, 5, 84, 56, 14, 161, 101, 43, 72, 66, 18, 149, 72, 66, 125, 28, 90, 51, 190, 6, 51, 90, 3, 206, 51, 90, 35, 114, 11, 170, 66, 72, 159, 14, 66, 72, 28, 125, 66, 72, 31, 119, 66, 72, 127, 27 },
{ 111, 36, 66, 72, 124, 28, 90, 51, 16, 155, 51, 90, 16, 155, 66, 72, 29, 124, 66, 72, 124, 29, 66, 72, 5, 192, 136, 23, 51, 90, 144, 19, 51, 90, 149, 18, 56, 83, 18, 149, 66, 72, 142, 20, 101, 43, 84, 56, 31, 119, 83, 56, 35, 114, 170, 10, 25, 133, 183, 7, 133, 25, 1, 222 },
{ 172, 10, 141, 21, 51, 90, 170, 11, 83, 56, 4, 200, 89, 51, 11, 170, 52, 89, 21, 141, 183, 7, 114, 35, 101, 43, 66, 72, 2, 213, 66, 72, 8, 179, 66, 72, 22, 140, 52, 89, 147, 19, 52, 89, 203, 4, 133, 25, 8, 181, 25, 133, 4, 200, 101, 43, 66, 72, 114, 35, 83, 56, 36, 111 },
{ 28, 126, 66, 72, 3, 206, 37, 110, 29, 124, 72, 66, 31, 119, 71, 66, 4, 203, 101, 43, 67, 71, 167, 12, 25, 133, 12, 165, 52, 89, 29, 124, 89, 52, 0, 235, 52, 89, 177, 9, 56, 83, 11, 170, 114, 35, 67, 71, 35, 114, 101, 43, 67, 71, 35, 114, 2, 213, 52, 89, 177, 9, 79, 59 },
{ 51, 90, 15, 156, 122, 30, 67, 71, 8, 181, 133, 25, 185, 7, 141, 21, 52, 89, 16, 155, 114, 35, 101, 43, 101, 43, 67, 71, 36, 111, 165, 12, 136, 23, 56, 83, 31, 119, 67, 71, 35, 114, 127, 27, 89, 52, 15, 156, 52, 89, 167, 12, 133, 25, 12, 165, 83, 56, 16, 155, 89, 52, 15, 156 },
{ 6, 192, 101, 43, 89, 52, 148, 18, 101, 43, 101, 43, 101, 43, 67, 71, 124, 29, 67, 71, 0, 235, 25, 133, 200, 4, 133, 25, 183, 7, 101, 43, 67, 71, 19, 146, 187, 6, 133, 25, 217, 2, 67, 71, 8, 181, 67, 71, 1, 222, 114, 35, 101, 43, 67, 71, 31, 119, 67, 71, 31, 119, 79, 59 },
{ 51, 90, 23, 135, 10, 172, 67, 71, 24, 135, 222, 1, 26, 130, 15, 158, 10, 174, 114, 35, 100, 43, 67, 71, 31, 119, 67, 70, 35, 114, 21, 141, 5, 194, 114, 35, 100, 43, 100, 43, 89, 52, 16, 155, 52, 89, 27, 127, 122, 30, 56, 83, 197, 5, 132, 25, 8, 181, 25, 133, 206, 3, 137, 23 },
{ 18, 149, 100, 43, 89, 52, 194, 5, 100, 43, 100, 43, 100, 43, 100, 43, 68, 70, 7, 185, 26, 131, 175, 9, 52, 88, 11, 170, 100, 43, 100, 43, 100, 43, 68, 70, 21, 141, 12, 165, 111, 36, 68, 70, 35, 113, 16, 155, 56, 83, 16, 155, 113, 35, 68, 70, 35, 113, 68, 70, 113, 35, 79, 59 },
{ 52, 88, 227, 1, 135, 24, 68, 70, 167, 12, 26, 130, 13, 162, 209, 3, 135, 24, 100, 43, 100, 43, 83, 56, 18, 148, 56, 83, 1, 222, 162, 13, 132, 25, 12, 167, 52, 88, 35, 113, 7, 183, 25, 133, 4, 203, 56, 83, 175, 9, 122, 30, 88, 52, 15, 156, 52, 88, 168, 11, 52, 88, 181, 8 },
{ 27, 129, 113, 35, 88, 52, 20, 143, 100, 43, 100, 43, 100, 43, 99, 43, 68, 70, 19, 146, 5, 194, 113, 35, 68, 70, 35, 113, 29, 124, 99, 44, 99, 44, 68, 70, 2, 213, 68, 70, 29, 124, 99, 44, 68, 70, 31, 119, 99, 44, 70, 68, 177, 9, 70, 68, 227, 1, 83, 56, 16, 153, 56, 83 },
{ 170, 11, 70, 68, 10, 174, 68, 70, 19, 146, 197, 5, 158, 15, 130, 26, 175, 9, 113, 35, 56, 83, 21, 140, 3, 209, 152, 17, 56, 83, 21, 141, 4, 197, 122, 30, 88, 52, 16, 153, 52, 88, 165, 12, 132, 25, 183, 7, 25, 132, 213, 2, 88, 52, 143, 20, 52, 88, 119, 31, 68, 70, 32, 118 },
{ 88, 52, 19, 147, 88, 52, 213, 2, 99, 44, 99, 44, 99, 44, 99, 44, 99, 44, 68, 70, 161, 14, 111, 36, 99, 44, 68, 70, 7, 183, 99, 44, 70, 68, 16, 153, 122, 30, 70, 68, 5, 197, 113, 35, 68, 70, 35, 113, 68, 70, 35, 113, 29, 124, 68, 70, 24, 135, 187, 6, 25, 132, 3, 209 },
{ 31, 119, 70, 68, 124, 29, 82, 57, 21, 141, 13, 164, 132, 25, 187, 6, 25, 132, 217, 2, 122, 30, 70, 68, 18, 148, 122, 30, 37, 110, 16, 153, 122, 30, 56, 82, 10, 172, 113, 35, 99, 44, 88, 52, 0, 235, 52, 88, 14, 159, 52, 88, 17, 152, 5, 194, 99, 44, 99, 44, 99, 44, 79, 60 },
{ 13, 162, 200, 4, 167, 11, 111, 36, 68, 70, 119, 31, 68, 70, 119, 31, 98, 44, 98, 45, 87, 52, 6, 190, 53, 87, 9, 177, 57, 82, 30, 122, 8, 179, 113, 35, 69, 68, 7, 185, 132, 25, 12, 164, 57, 82, 17, 152, 69, 69, 177, 9, 69, 69, 35, 113, 165, 12, 26, 130, 11, 168, 132, 25 },
{ 37, 109, 69, 69, 36, 111, 17, 151, 190, 6, 53, 87, 1, 227, 53, 87, 10, 174, 130, 26, 14, 159, 69, 69, 20, 143, 69, 69, 206, 3, 98, 45, 69, 69, 1, 227, 142, 21, 98, 45, 98, 45, 69, 69, 124, 29, 37, 110, 5, 197, 87, 53, 20, 143, 53, 87, 29, 124, 98, 45, 98, 45, 79, 60 },
{ 26, 130, 14, 159, 53, 87, 29, 124, 82, 57, 18, 148, 82, 57, 18, 148, 98, 45, 98, 45, 87, 53, 138, 22, 53, 87, 124, 29, 37, 110, 165, 12, 142, 21, 98, 45, 69, 69, 24, 135, 3, 209, 132, 25, 181, 8, 82, 57, 27, 127, 113, 35, 82, 57, 177, 9, 57, 82, 213, 2, 25, 132, 6, 187 },
{ 37, 109, 61, 78, 8, 179, 61, 78, 20, 143, 66, 72, 22, 138, 66, 72, 24, 135, 4, 200, 175, 9, 72, 66, 1, 227, 151, 17, 72, 66, 29, 124, 68, 70, 24, 135, 181, 8, 98, 45, 98, 45, 98, 45, 68, 70, 18, 148, 70, 68, 17, 151, 222, 1, 70, 68, 18, 148, 112, 35, 98, 45, 78, 61 }
};
+127
Ver Arquivo
@@ -0,0 +1,127 @@
/*
* Private transform API definitions for CUPS.
*
* Copyright © 2016-2018 by Apple Inc.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
#ifndef _CUPS_XFORM_PRIVATE_H_
# define _CUPS_XFORM_PRIVATE_H_
/*
* Include necessary headers...
*/
# include <cups/cups.h>
# include <cups/raster.h>
/*
* C++ magic...
*/
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* Constants...
*/
/**** Input/Output MIME media types ****/
# define XFORM_FORMAT_APPLE_RASTER "image/urf"
# define XFORM_FORMAT_JPEG "image/jpeg"
# define XFORM_FORMAT_PCL "application/vnd.hp-pcl"
# define XFORM_FORMAT_PDF "application/pdf"
# define XFORM_FORMAT_PNG "image/png"
# define XFORM_FORMAT_POSTSCRIPT "application/postscript"
# define XFORM_FORMAT_PWG_RASTER "image/pwg-raster"
# define XFORM_FORMAT_TEXT "text/plain"
typedef enum xform_duplex_e /**** 2-Sided Capabilities ****/
{
XFORM_DUPLEX_NONE, /* No 2-sided support */
XFORM_DUPLEX_NORMAL, /* 2-sided support, normal back side orientation ('normal') */
XFORM_DUPLEX_LONG_TUMBLE, /* 2-sided support, rotate back side 180 degrees for long edge ('manual-tumble') */
XFORM_DUPLEX_SHORT_TUMBLE, /* 2-sided support, rotate back side 180 degrees for short edge ('rotated') */
XFORM_DUPLEX_MIRRORED /* 2-sided support, mirror back side ('flippped') */
} xform_duplex_t;
typedef enum xform_loglevel_e /**** Logging Levels ****/
{
XFORM_LOGLEVEL_DEBUG, /* Debugging message */
XFORM_LOGLEVEL_INFO, /* Informational message */
XFORM_LOGLEVEL_ERROR, /* Error message */
XFORM_LOGLEVEL_ATTR /* Attribute message */
} xform_loglevel_t;
/*
* Local types...
*/
typedef struct xform_margins_s /**** Output margins ****/
{
int bottom, /* Bottom margin in hundredths of millimeters */
left, /* Left margin in hundredths of millimeters */
right, /* Right margin in hundredths of millimeters */
top; /* Top margin in hundredths of millimeters */
} xform_margins_t;
typedef struct xform_size_s /**** Output size ****/
{
int width, /* Width in hundredths of millimeters */
length; /* Length in hundredths of millimeters */
} xform_size_t;
typedef struct xform_capabilities_s /**** Output Capabilities ****/
{
int mixed; /* Supports pages with different colorspaces and sizes? */
cups_cspace_t color, /* Colorspace for printing color documents */
monochrome, /* Colorspace for printing B&W documents */
photo; /* Colorspace for printing photos */
unsigned draft_bits, /* Bits per color for printing draft quality */
normal_bits, /* Bits per color for printing normal quality */
high_bits; /* Bits per color for printing high/best/photo quality */
unsigned draft_resolution[2], /* Draft resolution */
normal_resolution[2], /* Normal resolution */
high_resolution[2]; /* High/best/photo resolution */
xform_duplex_t duplex; /* 2-sided capabilities */
xform_margins_t margins; /* Default margins */
xform_size_t size; /* Default size */
xform_margins_t max_margins; /* Maximum margins */
xform_size_t max_size; /* Maximum size */
xform_margins_t min_margins; /* Minimum margins */
xform_size_t min_size; /* Minimum size */
} xform_caps_t;
typedef struct _xform_ctx_s xform_ctx_t;/**** Transform context ****/
typedef void (*xform_logcb_t)(void *user_data, xform_loglevel_t level, const char *message);
/**** Logging callback ****/
typedef ssize_t (*xform_writecb_t)(void *user_data, const unsigned char *buffer, size_t length);
/**** Output callback ****/
/*
* Functions...
*/
extern void xformDelete(xform_ctx_t *ctx);
extern int xformInitCapabilities(xform_caps_t *caps, ipp_t *supported);
extern xform_ctx_t *xformNew(const char *outformat, xform_caps_t *outcaps);
extern int xformRun(xform_ctx_t *ctx, const char *infile, const char *informat);
extern void xformSetLogCallback(xform_ctx_t *ctx, xform_logcb_t logcb, void *logdata);
extern void xformSetOptions(xform_ctx_t *ctx, int num_options, cups_option_t *options);
extern void xformSetWriteCallback(xform_ctx_t *ctx, xform_writecb_t writecb, void *writedata);
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_XFORM_PRIVATE_H_ */
+3526
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+5 -2
Ver Arquivo
@@ -657,7 +657,7 @@ int cupsAdminSetServerSettings(http_t *http, int num_settings, cups_option_t *se
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
<p class="description">1 on success, 0 on failure</p>
<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsGetDevices">cupsGetDevices</a></h3>
<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsGetDevices">cupsGetDevices</a></h3>
<p class="description">Get available printer devices.</p>
<p class="code">
ipp_status_t cupsGetDevices(http_t *http, int timeout, const char *include_schemes, const char *exclude_schemes, <a href="#cups_device_cb_t">cups_device_cb_t</a> callback, void *user_data);</p>
@@ -683,7 +683,10 @@ ipp_status_t cupsGetDevices(http_t *http, int timeout, const char *include_schem
devices to the specified callback function. The &quot;timeout&quot; parameter controls
how long the request lasts, while the &quot;include_schemes&quot; and &quot;exclude_schemes&quot;
parameters provide comma-delimited lists of backends to include or omit from
the request respectively.
the request respectively.<br>
<br>
This function is deprecated with the IPP printer discovery functionality
being provided by the <a href="#cupsEnumDests"><code>cupsEnumDests</code></a> and @cupsGetDests@ functions.
</p>
<h2 class="title"><a id="TYPES">Data Types</a></h2>
+76 -62
Ver Arquivo
@@ -563,6 +563,7 @@ h3.title {
</ul></li>
<li><a href="#ENUMERATIONS">Enumerations</a><ul class="subcontents">
<li><a href="#ppd_conform_e">ppd_conform_e</a></li>
<li><a href="#ppd_cptype_e">ppd_cptype_e</a></li>
<li><a href="#ppd_cs_e">ppd_cs_e</a></li>
<li><a href="#ppd_section_e">ppd_section_e</a></li>
<li><a href="#ppd_status_e">ppd_status_e</a></li>
@@ -574,7 +575,7 @@ h3.title {
<!--
PPD API introduction for CUPS.
Copyright © 2007-2012 by Apple Inc.
Copyright © 2007-2018 by Apple Inc.
Copyright © 1997-2006 by Easy Software Products, all rights reserved.
Licensed under Apache License v2.0. See the file "LICENSE" for more
@@ -583,7 +584,7 @@ h3.title {
<h2 class='title'><a name='OVERVIEW'>Overview</a></h2>
<blockquote>The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the <a href="api-cups.html">CUPS API</a> documentation. These functions will be removed in a future release of CUPS.</blockquote>
<blockquote>The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the <a href="cupspm.html">CUPS API</a> documentation. These functions will be removed in a future release of CUPS.</blockquote>
<p>The CUPS PPD API provides read-only access the data in PostScript Printer
Description ("PPD") files which are used for all printers with a driver. With
@@ -1513,103 +1514,103 @@ float ppdPageWidth(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);
<h4 class="returnvalue">Return Value</h4>
<p class="description">Width of page in points or 0.0</p>
<h2 class="title"><a id="TYPES">Data Types</a></h2>
<h3 class="typedef"><a id="ppd_attr_t"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_attr_t</a></h3>
<h3 class="typedef"><a id="ppd_attr_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_attr_t</a></h3>
<p class="description">PPD Attribute Structure </p>
<p class="code">
typedef struct <a href="#ppd_attr_s">ppd_attr_s</a> ppd_attr_t;
</p>
<h3 class="typedef"><a id="ppd_choice_t">ppd_choice_t</a></h3>
<p class="description">Option choices</p>
<h3 class="typedef"><a id="ppd_choice_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_choice_t</a></h3>
<p class="description">Option choices </p>
<p class="code">
typedef struct <a href="#ppd_choice_s">ppd_choice_s</a> ppd_choice_t;
</p>
<h3 class="typedef"><a id="ppd_conform_t"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_conform_t</a></h3>
<h3 class="typedef"><a id="ppd_conform_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_conform_t</a></h3>
<p class="description">Conformance Levels </p>
<p class="code">
typedef enum <a href="#ppd_conform_e">ppd_conform_e</a> ppd_conform_t;
</p>
<h3 class="typedef"><a id="ppd_const_t">ppd_const_t</a></h3>
<p class="description">Constraints</p>
<h3 class="typedef"><a id="ppd_const_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_const_t</a></h3>
<p class="description">Constraints </p>
<p class="code">
typedef struct <a href="#ppd_const_s">ppd_const_s</a> ppd_const_t;
</p>
<h3 class="typedef"><a id="ppd_coption_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_coption_t</a></h3>
<h3 class="typedef"><a id="ppd_coption_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_coption_t</a></h3>
<p class="description">Custom Option </p>
<p class="code">
typedef struct <a href="#ppd_coption_s">ppd_coption_s</a> ppd_coption_t;
</p>
<h3 class="typedef"><a id="ppd_cparam_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cparam_t</a></h3>
<h3 class="typedef"><a id="ppd_cparam_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cparam_t</a></h3>
<p class="description">Custom Parameter </p>
<p class="code">
typedef struct <a href="#ppd_cparam_s">ppd_cparam_s</a> ppd_cparam_t;
</p>
<h3 class="typedef"><a id="ppd_cplimit_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cplimit_t</a></h3>
<h3 class="typedef"><a id="ppd_cplimit_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cplimit_t</a></h3>
<p class="description">Custom Parameter Limit </p>
<p class="code">
typedef union <a href="#ppd_cplimit_u">ppd_cplimit_u</a> ppd_cplimit_t;
</p>
<h3 class="typedef"><a id="ppd_cptype_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cptype_t</a></h3>
<h3 class="typedef"><a id="ppd_cptype_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cptype_t</a></h3>
<p class="description">Custom Parameter Type </p>
<p class="code">
typedef enum ppd_cptype_e ppd_cptype_t;
typedef enum <a href="#ppd_cptype_e">ppd_cptype_e</a> ppd_cptype_t;
</p>
<h3 class="typedef"><a id="ppd_cpvalue_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cpvalue_t</a></h3>
<h3 class="typedef"><a id="ppd_cpvalue_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cpvalue_t</a></h3>
<p class="description">Custom Parameter Value </p>
<p class="code">
typedef union <a href="#ppd_cpvalue_u">ppd_cpvalue_u</a> ppd_cpvalue_t;
</p>
<h3 class="typedef"><a id="ppd_cs_t">ppd_cs_t</a></h3>
<p class="description">Colorspaces</p>
<h3 class="typedef"><a id="ppd_cs_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cs_t</a></h3>
<p class="description">Colorspaces </p>
<p class="code">
typedef enum <a href="#ppd_cs_e">ppd_cs_e</a> ppd_cs_t;
</p>
<h3 class="typedef"><a id="ppd_emul_t">ppd_emul_t</a></h3>
<p class="description">Emulators</p>
<h3 class="typedef"><a id="ppd_emul_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_emul_t</a></h3>
<p class="description">Emulators </p>
<p class="code">
typedef struct <a href="#ppd_emul_s">ppd_emul_s</a> ppd_emul_t;
</p>
<h3 class="typedef"><a id="ppd_file_t">ppd_file_t</a></h3>
<p class="description">PPD File</p>
<h3 class="typedef"><a id="ppd_file_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_file_t</a></h3>
<p class="description">PPD File </p>
<p class="code">
typedef struct <a href="#ppd_file_s">ppd_file_s</a> ppd_file_t;
</p>
<h3 class="typedef"><a id="ppd_group_t">ppd_group_t</a></h3>
<p class="description">Groups</p>
<h3 class="typedef"><a id="ppd_group_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_group_t</a></h3>
<p class="description">Groups </p>
<p class="code">
typedef struct <a href="#ppd_group_s">ppd_group_s</a> ppd_group_t;
</p>
<h3 class="typedef"><a id="ppd_option_t">ppd_option_t</a></h3>
<p class="description">Options</p>
<h3 class="typedef"><a id="ppd_option_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_option_t</a></h3>
<p class="description">Options </p>
<p class="code">
typedef struct <a href="#ppd_option_s">ppd_option_s</a> ppd_option_t;
</p>
<h3 class="typedef"><a id="ppd_profile_t">ppd_profile_t</a></h3>
<p class="description">sRGB Color Profiles</p>
<h3 class="typedef"><a id="ppd_profile_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_profile_t</a></h3>
<p class="description">sRGB Color Profiles </p>
<p class="code">
typedef struct <a href="#ppd_profile_s">ppd_profile_s</a> ppd_profile_t;
</p>
<h3 class="typedef"><a id="ppd_section_t">ppd_section_t</a></h3>
<p class="description">Order dependency sections</p>
<h3 class="typedef"><a id="ppd_section_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_section_t</a></h3>
<p class="description">Order dependency sections </p>
<p class="code">
typedef enum <a href="#ppd_section_e">ppd_section_e</a> ppd_section_t;
</p>
<h3 class="typedef"><a id="ppd_size_t">ppd_size_t</a></h3>
<p class="description">Page Sizes</p>
<h3 class="typedef"><a id="ppd_size_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_size_t</a></h3>
<p class="description">Page Sizes </p>
<p class="code">
typedef struct <a href="#ppd_size_s">ppd_size_s</a> ppd_size_t;
</p>
<h3 class="typedef"><a id="ppd_status_t"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_status_t</a></h3>
<h3 class="typedef"><a id="ppd_status_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_status_t</a></h3>
<p class="description">Status Codes </p>
<p class="code">
typedef enum <a href="#ppd_status_e">ppd_status_e</a> ppd_status_t;
</p>
<h3 class="typedef"><a id="ppd_ui_t">ppd_ui_t</a></h3>
<p class="description">UI Types</p>
<h3 class="typedef"><a id="ppd_ui_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_ui_t</a></h3>
<p class="description">UI Types </p>
<p class="code">
typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
</p>
<h2 class="title"><a id="STRUCTURES">Structures</a></h2>
<h3 class="struct"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ppd_attr_s">ppd_attr_s</a></h3>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_attr_s">ppd_attr_s</a></h3>
<p class="description">PPD Attribute Structure </p>
<p class="code">struct ppd_attr_s {<br>
&#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
@@ -1628,8 +1629,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>value </th>
<td class="description">Value string</td></tr>
</tbody></table>
<h3 class="struct"><a id="ppd_choice_s">ppd_choice_s</a></h3>
<p class="description">Option choices</p>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_choice_s">ppd_choice_s</a></h3>
<p class="description">Option choices </p>
<p class="code">struct ppd_choice_s {<br>
&#160;&#160;&#160;&#160;char choice[PPD_MAX_NAME];<br>
&#160;&#160;&#160;&#160;char *code;<br>
@@ -1650,8 +1651,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>text[PPD_MAX_TEXT] </th>
<td class="description">Human-readable option name</td></tr>
</tbody></table>
<h3 class="struct"><a id="ppd_const_s">ppd_const_s</a></h3>
<p class="description">Constraints</p>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_const_s">ppd_const_s</a></h3>
<p class="description">Constraints </p>
<p class="code">struct ppd_const_s {<br>
&#160;&#160;&#160;&#160;char choice1[PPD_MAX_NAME];<br>
&#160;&#160;&#160;&#160;char choice2[PPD_MAX_NAME];<br>
@@ -1669,7 +1670,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>option2[PPD_MAX_NAME] </th>
<td class="description">Second keyword</td></tr>
</tbody></table>
<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_coption_s">ppd_coption_s</a></h3>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_coption_s">ppd_coption_s</a></h3>
<p class="description">Custom Option </p>
<p class="code">struct ppd_coption_s {<br>
&#160;&#160;&#160;&#160;char keyword[PPD_MAX_NAME];<br>
@@ -1688,7 +1689,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>params </th>
<td class="description">Parameters</td></tr>
</tbody></table>
<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cparam_s">ppd_cparam_s</a></h3>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_cparam_s">ppd_cparam_s</a></h3>
<p class="description">Custom Parameter </p>
<p class="code">struct ppd_cparam_s {<br>
&#160;&#160;&#160;&#160;<a href="#ppd_cpvalue_t">ppd_cpvalue_t</a> current;<br>
@@ -1713,8 +1714,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>type </th>
<td class="description">Parameter type</td></tr>
</tbody></table>
<h3 class="struct"><a id="ppd_emul_s">ppd_emul_s</a></h3>
<p class="description">Emulators</p>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_emul_s">ppd_emul_s</a></h3>
<p class="description">Emulators </p>
<p class="code">struct ppd_emul_s {<br>
&#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
&#160;&#160;&#160;&#160;char *start;<br>
@@ -1729,8 +1730,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>stop </th>
<td class="description">Code to stop this emulation</td></tr>
</tbody></table>
<h3 class="struct"><a id="ppd_file_s">ppd_file_s</a></h3>
<p class="description">PPD File</p>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_file_s">ppd_file_s</a></h3>
<p class="description">PPD File </p>
<p class="code">struct ppd_file_s {<br>
&#160;&#160;&#160;&#160;int accurate_screens;<br>
&#160;&#160;&#160;&#160;int color_device;<br>
@@ -1862,8 +1863,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>variable_sizes </th>
<td class="description">1 = supports variable sizes, 0 = doesn't</td></tr>
</tbody></table>
<h3 class="struct"><a id="ppd_group_s">ppd_group_s</a></h3>
<p class="description">Groups</p>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_group_s">ppd_group_s</a></h3>
<p class="description">Groups </p>
<p class="code">struct ppd_group_s {<br>
&#160;&#160;&#160;&#160;char text[PPD_MAX_TEXT - PPD_MAX_NAME];<br>
&#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
@@ -1887,8 +1888,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>subgroups </th>
<td class="description">Sub-groups (max depth = 1)</td></tr>
</tbody></table>
<h3 class="struct"><a id="ppd_option_s">ppd_option_s</a></h3>
<p class="description">Options</p>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_option_s">ppd_option_s</a></h3>
<p class="description">Options </p>
<p class="code">struct ppd_option_s {<br>
&#160;&#160;&#160;&#160;<a href="#ppd_choice_t">ppd_choice_t</a> *choices;<br>
&#160;&#160;&#160;&#160;char conflicted;<br>
@@ -1921,8 +1922,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>ui </th>
<td class="description">Type of UI option</td></tr>
</tbody></table>
<h3 class="struct"><a id="ppd_profile_s">ppd_profile_s</a></h3>
<p class="description">sRGB Color Profiles</p>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_profile_s">ppd_profile_s</a></h3>
<p class="description">sRGB Color Profiles </p>
<p class="code">struct ppd_profile_s {<br>
&#160;&#160;&#160;&#160;float density;<br>
&#160;&#160;&#160;&#160;float gamma;<br>
@@ -1943,8 +1944,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>resolution[PPD_MAX_NAME] </th>
<td class="description">Resolution or &quot;-&quot;</td></tr>
</tbody></table>
<h3 class="struct"><a id="ppd_size_s">ppd_size_s</a></h3>
<p class="description">Page Sizes</p>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_size_s">ppd_size_s</a></h3>
<p class="description">Page Sizes </p>
<p class="code">struct ppd_size_s {<br>
&#160;&#160;&#160;&#160;float bottom;<br>
&#160;&#160;&#160;&#160;float left;<br>
@@ -1975,7 +1976,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<td class="description">Width of media in points</td></tr>
</tbody></table>
<h2 class="title"><a id="UNIONS">Unions</a></h2>
<h3 class="union"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cplimit_u">ppd_cplimit_u</a></h3>
<h3 class="union"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_cplimit_u">ppd_cplimit_u</a></h3>
<p class="description">Custom Parameter Limit </p>
<p class="code">union ppd_cplimit_u {<br>
&#160;&#160;&#160;&#160;float custom_curve;<br>
@@ -2006,7 +2007,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>custom_string </th>
<td class="description">String length</td></tr>
</tbody></table>
<h3 class="union"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cpvalue_u">ppd_cpvalue_u</a></h3>
<h3 class="union"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_cpvalue_u">ppd_cpvalue_u</a></h3>
<p class="description">Custom Parameter Value </p>
<p class="code">union ppd_cpvalue_u {<br>
&#160;&#160;&#160;&#160;float custom_curve;<br>
@@ -2038,15 +2039,28 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<td class="description">String value</td></tr>
</tbody></table>
<h2 class="title"><a id="ENUMERATIONS">Constants</a></h2>
<h3 class="enumeration"><a id="ppd_conform_e"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_conform_e</a></h3>
<h3 class="enumeration"><a id="ppd_conform_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_conform_e</a></h3>
<p class="description">Conformance Levels </p>
<h4 class="constants">Constants</h4>
<table class="list"><tbody>
<tr><th>PPD_CONFORM_RELAXED </th> <td class="description">Relax whitespace and control char</td></tr>
<tr><th>PPD_CONFORM_STRICT </th> <td class="description">Require strict conformance</td></tr>
</tbody></table>
<h3 class="enumeration"><a id="ppd_cs_e">ppd_cs_e</a></h3>
<p class="description">Colorspaces</p>
<h3 class="enumeration"><a id="ppd_cptype_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cptype_e</a></h3>
<p class="description">Custom Parameter Type </p>
<h4 class="constants">Constants</h4>
<table class="list"><tbody>
<tr><th>PPD_CUSTOM_CURVE </th> <td class="description">Curve value for f(x) = x^value</td></tr>
<tr><th>PPD_CUSTOM_INT </th> <td class="description">Integer number value</td></tr>
<tr><th>PPD_CUSTOM_INVCURVE </th> <td class="description">Curve value for f(x) = x^(1/value)</td></tr>
<tr><th>PPD_CUSTOM_PASSCODE </th> <td class="description">String of (hidden) numbers</td></tr>
<tr><th>PPD_CUSTOM_PASSWORD </th> <td class="description">String of (hidden) characters</td></tr>
<tr><th>PPD_CUSTOM_POINTS </th> <td class="description">Measurement value in points</td></tr>
<tr><th>PPD_CUSTOM_REAL </th> <td class="description">Real number value</td></tr>
<tr><th>PPD_CUSTOM_STRING </th> <td class="description">String of characters</td></tr>
</tbody></table>
<h3 class="enumeration"><a id="ppd_cs_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cs_e</a></h3>
<p class="description">Colorspaces </p>
<h4 class="constants">Constants</h4>
<table class="list"><tbody>
<tr><th>PPD_CS_CMY </th> <td class="description">CMY colorspace</td></tr>
@@ -2056,8 +2070,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>PPD_CS_RGB </th> <td class="description">RGB colorspace</td></tr>
<tr><th>PPD_CS_RGBK </th> <td class="description">RGBK (K = gray) colorspace</td></tr>
</tbody></table>
<h3 class="enumeration"><a id="ppd_section_e">ppd_section_e</a></h3>
<p class="description">Order dependency sections</p>
<h3 class="enumeration"><a id="ppd_section_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_section_e</a></h3>
<p class="description">Order dependency sections </p>
<h4 class="constants">Constants</h4>
<table class="list"><tbody>
<tr><th>PPD_ORDER_ANY </th> <td class="description">Option code can be anywhere in the file</td></tr>
@@ -2067,7 +2081,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>PPD_ORDER_PAGE </th> <td class="description">... must be in the PageSetup section</td></tr>
<tr><th>PPD_ORDER_PROLOG </th> <td class="description">... must be in the Prolog section</td></tr>
</tbody></table>
<h3 class="enumeration"><a id="ppd_status_e"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_status_e</a></h3>
<h3 class="enumeration"><a id="ppd_status_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_status_e</a></h3>
<p class="description">Status Codes </p>
<h4 class="constants">Constants</h4>
<table class="list"><tbody>
@@ -2096,8 +2110,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<tr><th>PPD_NULL_FILE </th> <td class="description">NULL PPD file pointer</td></tr>
<tr><th>PPD_OK </th> <td class="description">OK</td></tr>
</tbody></table>
<h3 class="enumeration"><a id="ppd_ui_e">ppd_ui_e</a></h3>
<p class="description">UI Types</p>
<h3 class="enumeration"><a id="ppd_ui_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_ui_e</a></h3>
<p class="description">UI Types </p>
<h4 class="constants">Constants</h4>
<table class="list"><tbody>
<tr><th>PPD_UI_BOOLEAN </th> <td class="description">True or False option</td></tr>
Arquivo binário não exibido.
+32
Ver Arquivo
@@ -475,6 +475,8 @@ h3.title {
<li><a href="#ipp_pstate_t">ipp_pstate_t</a></li>
<li><a href="#ipp_quality_t">ipp_quality_t</a></li>
<li><a href="#ipp_res_t">ipp_res_t</a></li>
<li><a href="#ipp_rstate_t">ipp_rstate_t</a></li>
<li><a href="#ipp_sstate_t">ipp_sstate_t</a></li>
<li><a href="#ipp_state_t">ipp_state_t</a></li>
<li><a href="#ipp_t">ipp_t</a></li>
</ul></li>
@@ -502,6 +504,8 @@ h3.title {
<li><a href="#ipp_pstate_e">ipp_pstate_e</a></li>
<li><a href="#ipp_quality_e">ipp_quality_e</a></li>
<li><a href="#ipp_res_e">ipp_res_e</a></li>
<li><a href="#ipp_rstate_e">ipp_rstate_e</a></li>
<li><a href="#ipp_sstate_e">ipp_sstate_e</a></li>
<li><a href="#ipp_state_e">ipp_state_e</a></li>
<li><a href="#ipp_status_e">ipp_status_e</a></li>
<li><a href="#ipp_tag_e">ipp_tag_e</a></li>
@@ -5936,6 +5940,16 @@ typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
<p class="description">Resolution units</p>
<p class="code">
typedef enum <a href="#ipp_res_e">ipp_res_e</a> ipp_res_t;
</p>
<h3 class="typedef"><a id="ipp_rstate_t">ipp_rstate_t</a></h3>
<p class="description">resource-state values</p>
<p class="code">
typedef enum <a href="#ipp_rstate_e">ipp_rstate_e</a> ipp_rstate_t;
</p>
<h3 class="typedef"><a id="ipp_sstate_t">ipp_sstate_t</a></h3>
<p class="description">system-state values</p>
<p class="code">
typedef enum <a href="#ipp_sstate_e">ipp_sstate_e</a> ipp_sstate_t;
</p>
<h3 class="typedef"><a id="ipp_state_t">ipp_state_t</a></h3>
<p class="description">ipp_t state values</p>
@@ -6445,6 +6459,24 @@ are server-oriented...</p>
<table class="list"><tbody>
<tr><th>IPP_RES_PER_CM </th> <td class="description">Pixels per centimeter</td></tr>
<tr><th>IPP_RES_PER_INCH </th> <td class="description">Pixels per inch</td></tr>
</tbody></table>
<h3 class="enumeration"><a id="ipp_rstate_e">ipp_rstate_e</a></h3>
<p class="description">resource-state values</p>
<h4 class="constants">Constants</h4>
<table class="list"><tbody>
<tr><th>IPP_RSTATE_ABORTED </th> <td class="description">Resource has been aborted and is pending deletion.</td></tr>
<tr><th>IPP_RSTATE_AVAILABLE </th> <td class="description">Resource is available for installation.</td></tr>
<tr><th>IPP_RSTATE_CANCELED </th> <td class="description">Resource has been canceled and is pending deletion.</td></tr>
<tr><th>IPP_RSTATE_INSTALLED </th> <td class="description">Resource is installed.</td></tr>
<tr><th>IPP_RSTATE_PENDING </th> <td class="description">Resource is created but has no data yet.</td></tr>
</tbody></table>
<h3 class="enumeration"><a id="ipp_sstate_e">ipp_sstate_e</a></h3>
<p class="description">system-state values</p>
<h4 class="constants">Constants</h4>
<table class="list"><tbody>
<tr><th>IPP_SSTATE_IDLE </th> <td class="description">At least one printer is idle and none are processing a job.</td></tr>
<tr><th>IPP_SSTATE_PROCESSING </th> <td class="description">At least one printer is processing a job.</td></tr>
<tr><th>IPP_SSTATE_STOPPED </th> <td class="description">All printers are stopped.</td></tr>
</tbody></table>
<h3 class="enumeration"><a id="ipp_state_e">ipp_state_e</a></h3>
<p class="description">ipp_t state values</p>
+2 -2
Ver Arquivo
@@ -95,10 +95,10 @@ The default value is "30".
The default is typically the server's ".local" hostname.
<dt><a name="ErrorPolicy"></a><b>ErrorPolicy abort-job</b>
<dd style="margin-left: 5.0em">Specifies that a failed print job should be aborted (discarded) unless otherwise specified for the printer.
<dt><b>ErrorPolicy retry-current-job</b>
<dd style="margin-left: 5.0em">Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
<dt><b>ErrorPolicy retry-job</b>
<dd style="margin-left: 5.0em">Specifies that a failed print job should be retried at a later time unless otherwise specified for the printer.
<dt><b>ErrorPolicy retry-this-job</b>
<dd style="margin-left: 5.0em">Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
<dt><b>ErrorPolicy stop-printer</b>
<dd style="margin-left: 5.0em">Specifies that a failed print job should stop the printer unless otherwise specified for the printer. The 'stop-printer' error policy is the default.
<dt><a name="FilterLimit"></a><b>FilterLimit </b><i>limit</i>
-14
Ver Arquivo
@@ -14,9 +14,6 @@ lpoptions - display or set printer options and defaults
[
<b>-E</b>
] [
<b>-U</b>
<i>username</i>
] [
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
]
<b>-d </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -28,9 +25,6 @@ lpoptions - display or set printer options and defaults
[
<b>-E</b>
] [
<b>-U</b>
<i>username</i>
] [
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
] [
<b>-p </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -41,9 +35,6 @@ lpoptions - display or set printer options and defaults
[
<b>-E</b>
] [
<b>-U</b>
<i>username</i>
] [
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
] [
<b>-p </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -55,9 +46,6 @@ lpoptions - display or set printer options and defaults
[
<b>-E</b>
] [
<b>-U</b>
<i>username</i>
] [
<b>-h </b><i>server</i>[<b>:</b><i>port</i>]
]
<b>-x </b><i>destination</i>[<b>/</b><i>instance</i>]
@@ -78,8 +66,6 @@ Otherwise, the per-user defaults are managed in the <i>~/.cups/lpoptions</i> fil
<dl class="man">
<dt><b>-E</b>
<dd style="margin-left: 5.0em">Enables encryption when communicating with the CUPS server.
<dt><b>-U </b><i>username</i>
<dd style="margin-left: 5.0em">Uses an alternate username.
<dt><b>-d </b><i>destination</i>[<b>/</b><i>instance</i>]
<dd style="margin-left: 5.0em">Sets the user default printer to <i>destination</i>.
If <i>instance</i> is supplied then that particular instance is used.
-19
Ver Arquivo
@@ -546,24 +546,5 @@ lpr -o mirror filename
<P>This is typically used when printing on T-shirt transfer
media or sometimes on transparencies.</P>
<H3><A NAME="RAW">Raw or Unfiltered Output</A></H3>
<P>The <CODE>-o raw</CODE> option allows you to send files
directly to a printer without filtering. This is sometimes
required when printing from applications that provide their own
"printer drivers" for your printer:</P>
<PRE CLASS="command">
lp -o raw filename
lpr -o raw filename
</PRE>
<P>The <CODE>-l</CODE> option can also be used with the
<B>lpr</B> command to send files directly to a printer:</P>
<PRE CLASS="command">
lpr -l filename
</PRE>
</BODY>
</HTML>
+1 -1
Ver Arquivo
@@ -99,7 +99,7 @@ each remote queue by hand using the <a href="man-lpadmin.html">lpadmin(8)</a>
command:</p>
<pre class='command'>
lpadmin -p <em>printer</em> -E -v ipp://<em>server</em>/printers/<em>printer</em>
lpadmin -p <em>printer</em> -E -v ipp://<em>server</em>/printers/<em>printer</em> -m everywhere
</pre>
<p>The <var>printer</var> name is the name of the printer on the server machine.
+2 -2
Ver Arquivo
@@ -10,7 +10,7 @@
<!--
CUPS command file format specification for CUPS.
Copyright © 2007-2011 by Apple Inc.
Copyright © 2007-2018 by Apple Inc.
Copyright © 1997-2006 by Easy Software Products.
Licensed under Apache License v2.0. See the file "LICENSE" for more
@@ -40,7 +40,7 @@ files by checking the <code>printer-type</code> attribute for the
commands separated by spaces, for example:</p>
<pre class='command'>
*cupsCommand: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"
*cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"
</pre>
<p>If no <code>cupsCommands</code> keyword is provided, the command filter
+8 -4
Ver Arquivo
@@ -2189,7 +2189,7 @@ PPD file extensions was used. Currently it must be the string
<h2 class='title'><a name='MACOSX'>macOS Attributes</a></h2>
<h3><span class='info'>macOS 10.3</span><a name='APDialogExtension'>APDialogExtension</a></h3>
<h3><span class='info'>Deprecated</span><a name='APDialogExtension'>APDialogExtension</a></h3>
<p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
@@ -2201,9 +2201,13 @@ plug-ins.</p>
<blockquote><b>Note:</b>
<p>Starting with macOS 10.5, each plug-in must be compiled "4-way fat"
(32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled
in order to be usable with all applications.</p>
<p>Since 2010, AirPrint has enabled the printing of full quality photos and
documents from the Mac without requiring driver software. Starting with macOS
10.12, system level security features prevent print dialog plug-ins from being
loaded into applications that have enabled the library validation security
feature. As of macOS 10.14 the <code>APDialogExtension</code> attribute used to
create macOS print drivers is deprecated. All new printer models should support
AirPrint moving forward.</p>
</blockquote>
+997
Ver Arquivo
@@ -0,0 +1,997 @@
/*
* Utility for converting PDF and JPEG files to raster data, PCL, PDF, or PS.
*
* Copyright © 2016-2018 by Apple Inc..
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
* Include necessayr headers...
*/
#include <cups/xform-private.h>
/*
* 'main()' - Main entry for transform utility.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line args */
char *argv[]) /* I - Command-line arguments */
{
#if 0
int i; /* Looping var */
const char *filename = NULL, /* File to transform */
*content_type, /* Source content type */
*device_uri, /* Destination URI */
*output_type, /* Destination content type */
*resolutions, /* pwg-raster-document-resolution-supported */
*sheet_back, /* pwg-raster-document-sheet-back */
*types, /* pwg-raster-document-type-supported */
*opt; /* Option character */
int num_options; /* Number of options */
cups_option_t *options; /* Options */
int fd = 1; /* Output file/socket */
http_t *http = NULL; /* Output HTTP connection */
void *write_ptr = &fd; /* Pointer to file/socket/HTTP connection */
char resource[1024]; /* URI resource path */
xform_write_cb_t write_cb = (xform_write_cb_t)write_fd;
/* Write callback */
int status = 0; /* Exit status */
_cups_thread_t monitor = 0; /* Monitoring thread ID */
/*
* Process the command-line...
*/
num_options = load_env_options(&options);
content_type = getenv("CONTENT_TYPE");
device_uri = getenv("DEVICE_URI");
output_type = getenv("OUTPUT_TYPE");
resolutions = getenv("PWG_RASTER_DOCUMENT_RESOLUTION_SUPPORTED");
sheet_back = getenv("PWG_RASTER_DOCUMENT_SHEET_BACK");
types = getenv("PWG_RASTER_DOCUMENT_TYPE_SUPPORTED");
if ((opt = getenv("SERVER_LOGLEVEL")) != NULL)
{
if (!strcmp(opt, "debug"))
Verbosity = 2;
else if (!strcmp(opt, "info"))
Verbosity = 1;
}
for (i = 1; i < argc; i ++)
{
if (!strncmp(argv[i], "--", 2))
{
if (!strcmp(argv[i], "--help"))
{
usage(0);
}
else if (!strcmp(argv[i], "--version"))
{
puts(CUPS_SVERSION);
}
else
{
fprintf(stderr, "ERROR: Unknown option '%s'.\n", argv[i]);
usage(1);
}
}
else if (argv[i][0] == '-')
{
for (opt = argv[i] + 1; *opt; opt ++)
{
switch (*opt)
{
case 'd' :
i ++;
if (i >= argc)
usage(1);
device_uri = argv[i];
break;
case 'i' :
i ++;
if (i >= argc)
usage(1);
content_type = argv[i];
break;
case 'm' :
i ++;
if (i >= argc)
usage(1);
output_type = argv[i];
break;
case 'o' :
i ++;
if (i >= argc)
usage(1);
num_options = cupsParseOptions(argv[i], num_options, &options);
break;
case 'r' : /* pwg-raster-document-resolution-supported values */
i ++;
if (i >= argc)
usage(1);
resolutions = argv[i];
break;
case 's' : /* pwg-raster-document-sheet-back value */
i ++;
if (i >= argc)
usage(1);
sheet_back = argv[i];
break;
case 't' : /* pwg-raster-document-type-supported values */
i ++;
if (i >= argc)
usage(1);
types = argv[i];
break;
case 'v' : /* Be verbose... */
Verbosity ++;
break;
default :
fprintf(stderr, "ERROR: Unknown option '-%c'.\n", *opt);
usage(1);
break;
}
}
}
else if (!filename)
filename = argv[i];
else
usage(1);
}
/*
* Check that we have everything we need...
*/
if (!filename)
usage(1);
if (!content_type)
{
if ((opt = strrchr(filename, '.')) != NULL)
{
if (!strcmp(opt, ".pdf"))
content_type = "application/pdf";
else if (!strcmp(opt, ".jpg") || !strcmp(opt, ".jpeg"))
content_type = "image/jpeg";
}
}
if (!content_type)
{
fprintf(stderr, "ERROR: Unknown format for \"%s\", please specify with '-i' option.\n", filename);
usage(1);
}
else if (strcmp(content_type, "application/pdf") && strcmp(content_type, "image/jpeg"))
{
fprintf(stderr, "ERROR: Unsupported format \"%s\" for \"%s\".\n", content_type, filename);
usage(1);
}
if (!output_type)
{
fputs("ERROR: Unknown output format, please specify with '-m' option.\n", stderr);
usage(1);
}
else if (strcmp(output_type, "application/vnd.hp-pcl") && strcmp(output_type, "image/pwg-raster") && strcmp(output_type, "image/urf"))
{
fprintf(stderr, "ERROR: Unsupported output format \"%s\".\n", output_type);
usage(1);
}
if (!resolutions)
resolutions = "300dpi";
if (!sheet_back)
sheet_back = "normal";
if (!types)
types = "sgray_8";
/*
* If the device URI is specified, open the connection...
*/
if (device_uri)
{
char scheme[32], /* URI scheme */
userpass[256], /* URI user:pass */
host[256], /* URI host */
service[32]; /* Service port */
int port; /* URI port number */
http_addrlist_t *list; /* Address list for socket */
if (httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
{
fprintf(stderr, "ERROR: Invalid device URI \"%s\".\n", device_uri);
usage(1);
}
if (strcmp(scheme, "socket") && strcmp(scheme, "ipp") && strcmp(scheme, "ipps"))
{
fprintf(stderr, "ERROR: Unsupported device URI scheme \"%s\".\n", scheme);
usage(1);
}
snprintf(service, sizeof(service), "%d", port);
if ((list = httpAddrGetList(host, AF_UNSPEC, service)) == NULL)
{
fprintf(stderr, "ERROR: Unable to lookup device URI host \"%s\": %s\n", host, cupsLastErrorString());
return (1);
}
if (!strcmp(scheme, "socket"))
{
/*
* AppSocket connection...
*/
if (!httpAddrConnect2(list, &fd, 30000, NULL))
{
fprintf(stderr, "ERROR: Unable to connect to \"%s\" on port %d: %s\n", host, port, cupsLastErrorString());
return (1);
}
}
else
{
http_encryption_t encryption; /* Encryption mode */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* operations-supported */
int create_job = 0; /* Support for Create-Job/Send-Document? */
const char *job_name; /* Title of job */
const char *media; /* Value of "media" option */
const char *sides; /* Value of "sides" option */
/*
* Connect to the IPP/IPPS printer...
*/
if (port == 443 || !strcmp(scheme, "ipps"))
encryption = HTTP_ENCRYPTION_ALWAYS;
else
encryption = HTTP_ENCRYPTION_IF_REQUESTED;
if ((http = httpConnect2(host, port, list, AF_UNSPEC, encryption, 1, 30000, NULL)) == NULL)
{
fprintf(stderr, "ERROR: Unable to connect to \"%s\" on port %d: %s\n", host, port, cupsLastErrorString());
return (1);
}
/*
* See if it supports Create-Job + Send-Document...
*/
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, device_uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "operations-supported");
response = cupsDoRequest(http, request, resource);
if (cupsLastError() > IPP_STATUS_OK_EVENTS_COMPLETE)
{
fprintf(stderr, "ERROR: Unable to get printer capabilities: %s\n", cupsLastErrorString());
return (1);
}
if ((attr = ippFindAttribute(response, "operations-supported", IPP_TAG_ENUM)) == NULL)
{
fputs("ERROR: Unable to get list of supported operations from printer.\n", stderr);
return (1);
}
create_job = ippContainsInteger(attr, IPP_OP_CREATE_JOB) && ippContainsInteger(attr, IPP_OP_SEND_DOCUMENT);
ippDelete(response);
/*
* Create the job and start printing...
*/
if ((job_name = getenv("IPP_JOB_NAME")) == NULL)
{
if ((job_name = strrchr(filename, '/')) != NULL)
job_name ++;
else
job_name = filename;
}
if (create_job)
{
int job_id = 0; /* Job ID */
request = ippNewRequest(IPP_OP_CREATE_JOB);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, device_uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, job_name);
response = cupsDoRequest(http, request, resource);
if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) != NULL)
job_id = ippGetInteger(attr, 0);
ippDelete(response);
if (cupsLastError() > IPP_STATUS_OK_EVENTS_COMPLETE)
{
fprintf(stderr, "ERROR: Unable to create print job: %s\n", cupsLastErrorString());
return (1);
}
else if (job_id <= 0)
{
fputs("ERROR: No job-id for created print job.\n", stderr);
return (1);
}
request = ippNewRequest(IPP_OP_SEND_DOCUMENT);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, device_uri);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, output_type);
ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", 1);
}
else
{
request = ippNewRequest(IPP_OP_PRINT_JOB);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, device_uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, output_type);
}
if ((media = cupsGetOption("media", num_options, options)) != NULL)
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "media", NULL, media);
if ((sides = cupsGetOption("sides", num_options, options)) != NULL)
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, sides);
if (cupsSendRequest(http, request, resource, 0) != HTTP_STATUS_CONTINUE)
{
fprintf(stderr, "ERROR: Unable to send print data: %s\n", cupsLastErrorString());
return (1);
}
ippDelete(request);
write_cb = (xform_write_cb_t)httpWrite2;
write_ptr = http;
monitor = _cupsThreadCreate((_cups_thread_func_t)monitor_ipp, (void *)device_uri);
}
httpAddrFreeList(list);
}
/*
* Do transform...
*/
status = xform_document(filename, content_type, output_type, resolutions, sheet_back, types, num_options, options, write_cb, write_ptr);
if (http)
{
ippDelete(cupsGetResponse(http, resource));
if (cupsLastError() > IPP_STATUS_OK_EVENTS_COMPLETE)
{
fprintf(stderr, "ERROR: Unable to send print data: %s\n", cupsLastErrorString());
status = 1;
}
httpClose(http);
}
else if (fd != 1)
close(fd);
if (monitor)
_cupsThreadCancel(monitor);
return (status);
#endif /* 0 */
(void)argc;
(void)argv;
return (0);
}
/*
* 'pcl_end_job()' - End a PCL "job".
*/
static void
pcl_end_job(xform_raster_t *ras, /* I - Raster information */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
(void)ras;
/*
* Send a PCL reset sequence.
*/
(*cb)(ctx, (const unsigned char *)"\033E", 2);
}
/*
* 'pcl_end_page()' - End of PCL page.
*/
static void
pcl_end_page(xform_raster_t *ras, /* I - Raster information */
unsigned page, /* I - Current page */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
/*
* End graphics...
*/
(*cb)(ctx, (const unsigned char *)"\033*r0B", 5);
/*
* Formfeed as needed...
*/
if (!(ras->header.Duplex && (page & 1)))
(*cb)(ctx, (const unsigned char *)"\014", 1);
/*
* Free the output buffer...
*/
free(ras->out_buffer);
ras->out_buffer = NULL;
}
/*
* 'pcl_init()' - Initialize callbacks for PCL output.
*/
static void
pcl_init(xform_raster_t *ras) /* I - Raster information */
{
ras->end_job = pcl_end_job;
ras->end_page = pcl_end_page;
ras->start_job = pcl_start_job;
ras->start_page = pcl_start_page;
ras->write_line = pcl_write_line;
}
/*
* 'pcl_printf()' - Write a formatted string.
*/
static void
pcl_printf(xform_write_cb_t cb, /* I - Write callback */
void *ctx, /* I - Write context */
const char *format, /* I - Printf-style format string */
...) /* I - Additional arguments as needed */
{
va_list ap; /* Argument pointer */
char buffer[8192]; /* Buffer */
va_start(ap, format);
vsnprintf(buffer, sizeof(buffer), format, ap);
va_end(ap);
(*cb)(ctx, (const unsigned char *)buffer, strlen(buffer));
}
/*
* 'pcl_start_job()' - Start a PCL "job".
*/
static void
pcl_start_job(xform_raster_t *ras, /* I - Raster information */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
(void)ras;
/*
* Send a PCL reset sequence.
*/
(*cb)(ctx, (const unsigned char *)"\033E", 2);
}
/*
* 'pcl_start_page()' - Start a PCL page.
*/
static void
pcl_start_page(xform_raster_t *ras, /* I - Raster information */
unsigned page, /* I - Current page */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
/*
* Setup margins to be 1/6" top and bottom and 1/4" or .135" on the
* left and right.
*/
ras->top = ras->header.HWResolution[1] / 6;
ras->bottom = ras->header.cupsHeight - ras->header.HWResolution[1] / 6 - 1;
if (ras->header.PageSize[1] == 842)
{
/* A4 gets special side margins to expose an 8" print area */
ras->left = (ras->header.cupsWidth - 8 * ras->header.HWResolution[0]) / 2;
ras->right = ras->left + 8 * ras->header.HWResolution[0] - 1;
}
else
{
/* All other sizes get 1/4" margins */
ras->left = ras->header.HWResolution[0] / 4;
ras->right = ras->header.cupsWidth - ras->header.HWResolution[0] / 4 - 1;
}
if (!ras->header.Duplex || (page & 1))
{
/*
* Set the media size...
*/
pcl_printf(cb, ctx, "\033&l12D\033&k12H");
/* Set 12 LPI, 10 CPI */
pcl_printf(cb, ctx, "\033&l0O"); /* Set portrait orientation */
switch (ras->header.PageSize[1])
{
case 540 : /* Monarch Envelope */
pcl_printf(cb, ctx, "\033&l80A");
break;
case 595 : /* A5 */
pcl_printf(cb, ctx, "\033&l25A");
break;
case 624 : /* DL Envelope */
pcl_printf(cb, ctx, "\033&l90A");
break;
case 649 : /* C5 Envelope */
pcl_printf(cb, ctx, "\033&l91A");
break;
case 684 : /* COM-10 Envelope */
pcl_printf(cb, ctx, "\033&l81A");
break;
case 709 : /* B5 Envelope */
pcl_printf(cb, ctx, "\033&l100A");
break;
case 756 : /* Executive */
pcl_printf(cb, ctx, "\033&l1A");
break;
case 792 : /* Letter */
pcl_printf(cb, ctx, "\033&l2A");
break;
case 842 : /* A4 */
pcl_printf(cb, ctx, "\033&l26A");
break;
case 1008 : /* Legal */
pcl_printf(cb, ctx, "\033&l3A");
break;
case 1191 : /* A3 */
pcl_printf(cb, ctx, "\033&l27A");
break;
case 1224 : /* Tabloid */
pcl_printf(cb, ctx, "\033&l6A");
break;
}
/*
* Set top margin and turn off perforation skip...
*/
pcl_printf(cb, ctx, "\033&l%uE\033&l0L", 12 * ras->top / ras->header.HWResolution[1]);
if (ras->header.Duplex)
{
int mode = ras->header.Duplex ? 1 + ras->header.Tumble != 0 : 0;
pcl_printf(cb, ctx, "\033&l%dS", mode);
/* Set duplex mode */
}
}
else if (ras->header.Duplex)
pcl_printf(cb, ctx, "\033&a2G"); /* Print on back side */
/*
* Set graphics mode...
*/
pcl_printf(cb, ctx, "\033*t%uR", ras->header.HWResolution[0]);
/* Set resolution */
pcl_printf(cb, ctx, "\033*r%uS", ras->right - ras->left + 1);
/* Set width */
pcl_printf(cb, ctx, "\033*r%uT", ras->bottom - ras->top + 1);
/* Set height */
pcl_printf(cb, ctx, "\033&a0H\033&a%uV", 720 * ras->top / ras->header.HWResolution[1]);
/* Set position */
pcl_printf(cb, ctx, "\033*b2M"); /* Use PackBits compression */
pcl_printf(cb, ctx, "\033*r1A"); /* Start graphics */
/*
* Allocate the output buffer...
*/
ras->out_blanks = 0;
ras->out_length = (ras->right - ras->left + 8) / 8;
ras->out_buffer = malloc(ras->out_length);
ras->comp_buffer = malloc(2 * ras->out_length + 2);
}
/*
* 'pcl_write_line()' - Write a line of raster data.
*/
static void
pcl_write_line(
xform_raster_t *ras, /* I - Raster information */
unsigned y, /* I - Line number */
const unsigned char *line, /* I - Pixels on line */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
unsigned x; /* Column number */
unsigned char bit, /* Current bit */
byte, /* Current byte */
*outptr, /* Pointer into output buffer */
*outend, /* End of output buffer */
*start, /* Start of sequence */
*compptr; /* Pointer into compression buffer */
unsigned count; /* Count of bytes for output */
if (line[0] == 255 && !memcmp(line, line + 1, ras->right - ras->left))
{
/*
* Skip blank line...
*/
ras->out_blanks ++;
return;
}
/*
* Dither the line into the output buffer...
*/
y &= 63;
for (x = ras->left, bit = 128, byte = 0, outptr = ras->out_buffer; x <= ras->right; x ++, line ++)
{
if (*line <= threshold[x & 63][y])
byte |= bit;
if (bit == 1)
{
*outptr++ = byte;
byte = 0;
bit = 128;
}
else
bit >>= 1;
}
if (bit != 128)
*outptr++ = byte;
/*
* Apply compression...
*/
compptr = ras->comp_buffer;
outend = outptr;
outptr = ras->out_buffer;
while (outptr < outend)
{
if ((outptr + 1) >= outend)
{
/*
* Single byte on the end...
*/
*compptr++ = 0x00;
*compptr++ = *outptr++;
}
else if (outptr[0] == outptr[1])
{
/*
* Repeated sequence...
*/
outptr ++;
count = 2;
while (outptr < (outend - 1) &&
outptr[0] == outptr[1] &&
count < 127)
{
outptr ++;
count ++;
}
*compptr++ = (unsigned char)(257 - count);
*compptr++ = *outptr++;
}
else
{
/*
* Non-repeated sequence...
*/
start = outptr;
outptr ++;
count = 1;
while (outptr < (outend - 1) &&
outptr[0] != outptr[1] &&
count < 127)
{
outptr ++;
count ++;
}
*compptr++ = (unsigned char)(count - 1);
memcpy(compptr, start, count);
compptr += count;
}
}
/*
* Output the line...
*/
if (ras->out_blanks > 0)
{
/*
* Skip blank lines first...
*/
pcl_printf(cb, ctx, "\033*b%dY", ras->out_blanks);
ras->out_blanks = 0;
}
pcl_printf(cb, ctx, "\033*b%dW", (int)(compptr - ras->comp_buffer));
(*cb)(ctx, ras->comp_buffer, (size_t)(compptr - ras->comp_buffer));
}
/*
* 'raster_end_job()' - End a raster "job".
*/
static void
raster_end_job(xform_raster_t *ras, /* I - Raster information */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
(void)cb;
(void)ctx;
cupsRasterClose(ras->ras);
}
/*
* 'raster_end_page()' - End of raster page.
*/
static void
raster_end_page(xform_raster_t *ras, /* I - Raster information */
unsigned page, /* I - Current page */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
(void)page;
(void)cb;
(void)ctx;
if (ras->header.cupsBitsPerPixel == 1)
{
free(ras->out_buffer);
ras->out_buffer = NULL;
}
}
/*
* 'raster_init()' - Initialize callbacks for raster output.
*/
static void
raster_init(xform_raster_t *ras) /* I - Raster information */
{
ras->end_job = raster_end_job;
ras->end_page = raster_end_page;
ras->start_job = raster_start_job;
ras->start_page = raster_start_page;
ras->write_line = raster_write_line;
}
/*
* 'raster_start_job()' - Start a raster "job".
*/
static void
raster_start_job(xform_raster_t *ras, /* I - Raster information */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
ras->ras = cupsRasterOpenIO((cups_raster_iocb_t)cb, ctx, !strcmp(ras->format, "image/pwg-raster") ? CUPS_RASTER_WRITE_PWG : CUPS_RASTER_WRITE_APPLE);
}
/*
* 'raster_start_page()' - Start a raster page.
*/
static void
raster_start_page(xform_raster_t *ras,/* I - Raster information */
unsigned page,/* I - Current page */
xform_write_cb_t cb, /* I - Write callback */
void *ctx)/* I - Write context */
{
(void)cb;
(void)ctx;
ras->left = 0;
ras->top = 0;
ras->right = ras->header.cupsWidth - 1;
ras->bottom = ras->header.cupsHeight - 1;
if (ras->header.Duplex && !(page & 1))
cupsRasterWriteHeader2(ras->ras, &ras->back_header);
else
cupsRasterWriteHeader2(ras->ras, &ras->header);
if (ras->header.cupsBitsPerPixel == 1)
{
ras->out_length = ras->header.cupsBytesPerLine;
ras->out_buffer = malloc(ras->header.cupsBytesPerLine);
}
}
/*
* 'raster_write_line()' - Write a line of raster data.
*/
static void
raster_write_line(
xform_raster_t *ras, /* I - Raster information */
unsigned y, /* I - Line number */
const unsigned char *line, /* I - Pixels on line */
xform_write_cb_t cb, /* I - Write callback */
void *ctx) /* I - Write context */
{
(void)cb;
(void)ctx;
if (ras->header.cupsBitsPerPixel == 1)
{
/*
* Dither the line into the output buffer...
*/
unsigned x; /* Column number */
unsigned char bit, /* Current bit */
byte, /* Current byte */
*outptr; /* Pointer into output buffer */
y &= 63;
if (ras->header.cupsColorSpace == CUPS_CSPACE_SW)
{
for (x = ras->left, bit = 128, byte = 0, outptr = ras->out_buffer; x <= ras->right; x ++, line ++)
{
if (*line > threshold[x % 25][y])
byte |= bit;
if (bit == 1)
{
*outptr++ = byte;
byte = 0;
bit = 128;
}
else
bit >>= 1;
}
}
else
{
for (x = ras->left, bit = 128, byte = 0, outptr = ras->out_buffer; x <= ras->right; x ++, line ++)
{
if (*line <= threshold[x & 63][y])
byte |= bit;
if (bit == 1)
{
*outptr++ = byte;
byte = 0;
bit = 128;
}
else
bit >>= 1;
}
}
if (bit != 128)
*outptr++ = byte;
cupsRasterWritePixels(ras->ras, ras->out_buffer, ras->header.cupsBytesPerLine);
}
else
cupsRasterWritePixels(ras->ras, (unsigned char *)line, ras->header.cupsBytesPerLine);
}
/*
* 'write_fd()' - Write to a file/socket.
*/
static ssize_t /* O - Number of bytes written or -1 on error */
write_fd(int *fd, /* I - File descriptor */
const unsigned char *buffer, /* I - Buffer */
size_t bytes) /* I - Number of bytes to write */
{
ssize_t temp, /* Temporary byte count */
total = 0; /* Total bytes written */
while (bytes > 0)
{
if ((temp = write(*fd, buffer, bytes)) < 0)
{
if (errno == EINTR || errno == EAGAIN)
continue;
else
return (-1);
}
total += temp;
bytes -= (size_t)temp;
buffer += temp;
}
return (total);
}
+5 -4
Ver Arquivo
@@ -1,10 +1,11 @@
/*
* PostScript filter for CUPS.
*
* Copyright 2007-2015 by Apple Inc.
* Copyright 1993-2007 by Easy Software Products.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1993-2007 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
@@ -2229,7 +2230,7 @@ parse_text(const char *start, /* I - Start of text value */
bufptr = buffer;
bufend = buffer + bufsize - 1;
while (bufptr < bufend)
while (*start && bufptr < bufend)
{
if (isspace(*start & 255) && !level)
break;
+22 -5
Ver Arquivo
@@ -1338,7 +1338,20 @@ http://www.vendor.com/help"
<p class='summary'>*cupsJobPassword: "format"</p>
<p>This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.</p>
<p>This keyword defines the format of the "job-password" IPP attribute, if supported by the printer. The following format characters are supported:</p>
<ul>
<li><code>1</code>: US ASCII digits.</li>
<li><code>A</code>: US ASCII letters.</li>
<li><code>C</code>: US ASCII letters, numbers, and punctuation.</li>
<li><code>.</code>: Any US ASCII printable character (0x20 to 0x7e).</li>
<li><code>N</code>: Any Unicode digit character.</li>
<li><code>U</code>: Any Unicode letter character.</li>
<li><code>*</code>: Any Unicode (utf-8) character.</li>
</ul>
<p>The format characters are repeated to indicate the length of the
password string. For example, "1111" indicated a 4-digit US ASCII PIN code.</p>
<p>Example:</p>
@@ -1632,7 +1645,7 @@ PPD file extensions was used. Currently it must be the string
<h2 class='title'><a name='MACOSX'>macOS Attributes</a></h2>
<h3><span class='info'>macOS 10.3</span><a name='APDialogExtension'>APDialogExtension</a></h3>
<h3><span class='info'>Deprecated</span><a name='APDialogExtension'>APDialogExtension</a></h3>
<p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
@@ -1644,9 +1657,13 @@ plug-ins.</p>
<blockquote><b>Note:</b>
<p>Starting with macOS 10.5, each plug-in must be compiled "4-way fat"
(32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled
in order to be usable with all applications.</p>
<p>Since 2010, AirPrint has enabled the printing of full quality photos and
documents from the Mac without requiring driver software. Starting with macOS
10.12, system level security features prevent print dialog plug-ins from being
loaded into applications that have enabled the library validation security
feature. As of macOS 10.14 the <code>APDialogExtension</code> attribute used to
create macOS print drivers is deprecated. All new printer models should support
AirPrint moving forward.</p>
</blockquote>
+417 -389
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+6
Ver Arquivo
@@ -329,6 +329,7 @@
"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad characters (RFC 8011 section 5.1.10).";
"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad length %d (RFC 8011 section 5.1.10).";
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.3).";
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)." = "“%s”: Bad name value “%s” - bad control character (PWG 5100.14 section 8.1).";
"\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad length %d (RFC 8011 section 5.1.3).";
"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad characters (RFC 8011 section 5.1.9).";
"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad length %d (RFC 8011 section 5.1.9).";
@@ -338,6 +339,7 @@
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16).";
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16).";
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.2).";
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)." = "“%s”: Bad text value “%s” - bad control character (PWG 5100.14 section 8.3).";
"\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad length %d (RFC 8011 section 5.1.2).";
"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad characters (RFC 8011 section 5.1.7).";
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad length %d (RFC 8011 section 5.1.7).";
@@ -702,6 +704,7 @@
"B8" = "B8";
"B9" = "B9";
"Bad \"printer-id\" value %d." = "Bad “printer-id” value %d.";
"Bad '%s' value." = "Bad %s value.";
"Bad 'document-format' value \"%s\"." = "Bad document-format value “%s”.";
"Bad NULL dests pointer" = "Bad NULL dests pointer";
"Bad OpenGroup" = "Bad OpenGroup";
@@ -731,6 +734,7 @@
"Bad job-uri \"%s\"." = "Bad job-uri “%s”.";
"Bad notify-pull-method \"%s\"." = "Bad notify-pull-method “%s”.";
"Bad notify-recipient-uri \"%s\"." = "Bad notify-recipient-uri “%s”.";
"Bad notify-user-data \"%s\"." = "Bad notify-user-data “%s”.";
"Bad number-up value %d." = "Bad number-up value %d.";
"Bad option + choice on line %d." = "Bad option + choice on line %d.";
"Bad page-ranges values %d-%d." = "Bad page-ranges values %d-%d.";
@@ -952,6 +956,7 @@
"Internet Postage 2-Part" = "Internet Postage 2-Part";
"Internet Postage 3-Part" = "Internet Postage 3-Part";
"Internet Printing Protocol" = "Internet Printing Protocol";
"Invalid group tag." = "Invalid group tag.";
"Invalid media name arguments." = "Invalid media name arguments.";
"Invalid media size." = "Invalid media size.";
"Invalid ppd-name value." = "Invalid ppd-name value.";
@@ -1378,6 +1383,7 @@
"Unknown version option value: \"%s\"." = "Unknown version option value: “%s”.";
"Unsupported 'compression' value \"%s\"." = "Unsupported compression value “%s”.";
"Unsupported 'document-format' value \"%s\"." = "Unsupported document-format value “%s”.";
"Unsupported 'job-hold-until' value." = "Unsupported job-hold-until value.";
"Unsupported 'job-name' value." = "Unsupported job-name value.";
"Unsupported character set \"%s\"." = "Unsupported character set “%s”.";
"Unsupported compression \"%s\"." = "Unsupported compression “%s”.";
+27 -1
Ver Arquivo
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2012-09-29 11:21+0200\n"
"Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
@@ -1458,6 +1458,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1508,6 +1514,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2725,6 +2737,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
@@ -2823,6 +2839,10 @@ msgstr "La notify-pull-method «%s» és incorrecta."
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "La notify-recipient-uri «%s» és incorrecta."
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "El valor de number-up %d és incorrecte."
@@ -3538,6 +3558,9 @@ msgstr "Franqueig per Internet en 3 parts"
msgid "Internet Printing Protocol"
msgstr "Protocol d'impressió per Internet"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr ""
@@ -4955,6 +4978,9 @@ msgstr ""
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr ""
+27 -1
Ver Arquivo
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2012-09-14 10:26+0100\n"
"Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
"Language-Team: Czech\n"
@@ -1282,6 +1282,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1332,6 +1338,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2534,6 +2546,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
@@ -2632,6 +2648,10 @@ msgstr ""
msgid "Bad notify-recipient-uri \"%s\"."
msgstr ""
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "Chybná hodnota %d."
@@ -3334,6 +3354,9 @@ msgstr "Internet Postage 3-Part"
msgid "Internet Printing Protocol"
msgstr "Internetový tiskový protokol"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr ""
@@ -4706,6 +4729,9 @@ msgstr ""
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr ""
+29 -3
Ver Arquivo
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2016-06-26 21:17+0100\n"
"Last-Translator: Juan Pablo González Riopedre <jpgriopedre@yahoo.es>\n"
"Language-Team: Spanish\n"
@@ -1502,6 +1502,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1552,6 +1558,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2769,6 +2781,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "Valor 'document-format' \"%s\" incorrecto."
@@ -2867,6 +2883,10 @@ msgstr "notify-pull-method \"%s\" incorrecto."
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "notify-recipient-uri \"%s\" incorrecto."
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "Valor number-up (páginas por hoja) %d incorrecto."
@@ -3579,6 +3599,9 @@ msgstr "Correo por Internet Parte-3"
msgid "Internet Printing Protocol"
msgstr "Protocolo de Impresión de Internet IPP"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr "Argumentos del nombre del papel no válidos."
@@ -5002,6 +5025,9 @@ msgstr "Valor 'compression' \"%s\" no implementado."
msgid "Unsupported 'document-format' value \"%s\"."
msgstr "Valor 'document-format' \"%s\" no implementado."
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr "Valor 'job-name' no implementado."
@@ -5098,8 +5124,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"
+27 -1
Ver Arquivo
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2012-12-12 11:12+0100\n"
"Last-Translator: Stéphane Blondon <stephane.blondon@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1342,6 +1342,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1392,6 +1398,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2594,6 +2606,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
@@ -2692,6 +2708,10 @@ msgstr ""
msgid "Bad notify-recipient-uri \"%s\"."
msgstr ""
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "Valeur de number-up %d incorrecte."
@@ -3396,6 +3416,9 @@ msgstr "Affranchissement Internet en 3 parties"
msgid "Internet Printing Protocol"
msgstr "Internet Printing Protocol"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr ""
@@ -4773,6 +4796,9 @@ msgstr ""
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr ""
+27 -1
Ver Arquivo
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2013-07-14 12:00+0200\n"
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
"Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
@@ -1485,6 +1485,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1535,6 +1541,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2753,6 +2765,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "Il valore di 'document-format' non è valido \"%s\"."
@@ -2851,6 +2867,10 @@ msgstr "Il valore di notify-pull-method \"%s\" non è valido."
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "Il valore di notify-recipient-uri \"%s\" non è valido."
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "Il valore di number-up %d non è valido."
@@ -3565,6 +3585,9 @@ msgstr "Internet Postage 3-Part"
msgid "Internet Printing Protocol"
msgstr "Internet Printing Protocol"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr "Gli argomenti del nome del supporto non sono validi."
@@ -4977,6 +5000,9 @@ msgstr "Valore di 'compressione' non supportato \"%s\"."
msgid "Unsupported 'document-format' value \"%s\"."
msgstr "Valore di 'document-format' non supportato \"%s\"."
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr "Valore di 'job-name' non supportato."
+27 -1
Ver Arquivo
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2014-11-15 19:27+0900\n"
"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
"Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
@@ -1461,6 +1461,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1511,6 +1517,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2723,6 +2735,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "誤った 'document-format' の値です \"%s\"。"
@@ -2821,6 +2837,10 @@ msgstr "\"%s\" は無効な notify-pull-method です。"
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "URI \"%s\" は不正な notify-recipient-uri です。"
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "%d は不正な number-up 値です。"
@@ -3539,6 +3559,9 @@ msgstr "Internet Postage 3-Part"
msgid "Internet Printing Protocol"
msgstr "インターネット印刷プロトコル"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr "無効なメディア名引数です。"
@@ -4930,6 +4953,9 @@ msgstr "\"%s\" はサポートされていない 'compression' の値です。"
msgid "Unsupported 'document-format' value \"%s\"."
msgstr "\"%s\" はサポートされていない 'document-format' の値です。"
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr "サポートされていない 'job-name' の値です。"
+27 -1
Ver Arquivo
@@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2016-01-31 16:45-0200\n"
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
"Language-Team: Brazilian Portuguese <traducao-cups-pt-br@googlegroups.com>\n"
@@ -1493,6 +1493,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1543,6 +1549,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2756,6 +2768,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "Valor de \"document-format\" inválido \"%s\"."
@@ -2854,6 +2870,10 @@ msgstr "notify-pull-method inválido \"%s\"."
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "notify-recipient-uri inválido \"%s\"."
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "Valor de number-up inválido %d."
@@ -3567,6 +3587,9 @@ msgstr "Internet Postage Parte-3"
msgid "Internet Printing Protocol"
msgstr "Protocolo de Impressão para Internet"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr "Argumentos de nome de mídia inválidos."
@@ -4982,6 +5005,9 @@ msgstr "Não suporte a \"compression\" com valor \"%s\"."
msgid "Unsupported 'document-format' value \"%s\"."
msgstr "Não há suporte a \"document-format\" com valor \"%s\"."
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr "Não há suporte ao valor de \"job-name\"."
+27 -1
Ver Arquivo
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2015-01-28 12:00-0800\n"
"Last-Translator: Aleksandr Proklov\n"
"Language-Team: PuppyRus Linux Team\n"
@@ -1439,6 +1439,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1489,6 +1495,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2708,6 +2720,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
@@ -2806,6 +2822,10 @@ msgstr "Неверное значение notify-pull-method \"%s\"."
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "Неверный notify-recipient-uri \"%s\"."
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "Неверное значение number-up %d."
@@ -3513,6 +3533,9 @@ msgstr "Наклейки Internet Postage 3-Part"
msgid "Internet Printing Protocol"
msgstr "Протокол интернет-печати"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr "Неверные аргументы имени бумаги."
@@ -4906,6 +4929,9 @@ msgstr "Неподдерживаемое значение 'compression' \"%s\"."
msgid "Unsupported 'document-format' value \"%s\"."
msgstr "Неподдерживаемое значение'document-format' \"%s\"."
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr "Неподдерживаемое значение 'job-name'."
+27 -1
Ver Arquivo
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-03-19 18:43-0400\n"
"POT-Creation-Date: 2018-06-05 11:58-0400\n"
"PO-Revision-Date: 2017-06-11 12:38+0800\n"
"Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n"
"Language-Team: \n"
@@ -1416,6 +1416,12 @@ msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section "
"8.1)."
msgstr ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
@@ -1466,6 +1472,12 @@ msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section "
"8.3)."
msgstr ""
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
@@ -2668,6 +2680,10 @@ msgstr "B9"
msgid "Bad \"printer-id\" value %d."
msgstr ""
#, c-format
msgid "Bad '%s' value."
msgstr ""
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "无效的“document-format”值“%s”。"
@@ -2766,6 +2782,10 @@ msgstr "无效的 notify-pull-method 值“%s”。"
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "无效的 notify-recipient-uri 值“%s”。"
#, c-format
msgid "Bad notify-user-data \"%s\"."
msgstr ""
#, c-format
msgid "Bad number-up value %d."
msgstr "无效的 number-up 值 %d。"
@@ -3478,6 +3498,9 @@ msgstr "网邮 3 部"
msgid "Internet Printing Protocol"
msgstr "互联网打印协议"
msgid "Invalid group tag."
msgstr ""
msgid "Invalid media name arguments."
msgstr "无效的媒体名称参数。"
@@ -4855,6 +4878,9 @@ msgstr "不支持的“compression”值“%s”。"
msgid "Unsupported 'document-format' value \"%s\"."
msgstr "不支持的“document-format”值“%s”。"
msgid "Unsupported 'job-hold-until' value."
msgstr ""
msgid "Unsupported 'job-name' value."
msgstr "不支持的“job-name”值。"
+10
Ver Arquivo
@@ -153,6 +153,11 @@ The server name may be included in filenames using the string "%s", for example:
.fi
The default is "/var/log/cups/page_log".
.\"#PassEnv
.TP 5
\fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
Passes the specified environment variable(s) to child processes.
Note: the standard CUPS filter and backend environment variables cannot be overridden using this directive.
.\"#RemoteRoot
.TP 5
\fBRemoteRoot \fIusername\fR
@@ -187,6 +192,11 @@ macOS uses its keychain database to store certificates and keys while other plat
\fBServerRoot \fIdirectory\fR
Specifies the directory containing the server configuration files.
The default is "/etc/cups".
.\"#SetEnv
.TP 5
\fBSetEnv \fIvariable value\fR
Set the specified environment variable to be passed to child processes.
Note: the standard CUPS filter and backend environment variables cannot be overridden using this directive.
.\"#StateDir
.TP 5
\fBStateDir \fIdirectory\fR
+4 -12
Ver Arquivo
@@ -6,7 +6,7 @@
.\"
.\" Licensed under Apache License v2.0. See the file "LICENSE" for more information.
.\"
.TH cupsd.conf 5 "CUPS" "9 November 2017" "Apple Inc."
.TH cupsd.conf 5 "CUPS" "24 April 2018" "Apple Inc."
.SH NAME
cupsd.conf \- server configuration file for cups
.SH DESCRIPTION
@@ -139,12 +139,12 @@ The default is typically the server's ".local" hostname.
\fBErrorPolicy abort-job\fR
Specifies that a failed print job should be aborted (discarded) unless otherwise specified for the printer.
.TP 5
\fBErrorPolicy retry-current-job\fR
Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
.TP 5
\fBErrorPolicy retry-job\fR
Specifies that a failed print job should be retried at a later time unless otherwise specified for the printer.
.TP 5
\fBErrorPolicy retry-this-job\fR
Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
.TP 5
\fBErrorPolicy stop-printer\fR
Specifies that a failed print job should stop the printer unless otherwise specified for the printer. The 'stop-printer' error policy is the default.
.\"#FilterLimit
@@ -349,10 +349,6 @@ The default is "1048576" (1MB).
\fBMultipleOperationTimeout \fIseconds\fR
Specifies the maximum amount of time to allow between files in a multiple file print job.
The default is "300" (5 minutes).
.\"#PassEnv
.TP 5
\fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
Passes the specified environment variable(s) to child processes.
.\"#Policy
.TP 5
\fB<Policy \fIname\fB> \fR... \fB</Policy>\fR
@@ -433,10 +429,6 @@ Specifies what information is included in the Server header of HTTP responses.
command.
"Full" reports "CUPS 2.0.0 (UNAME) IPP/2.0".
The default is "Minimal".
.\"#SetEnv
.TP 5
\fBSetEnv \fIvariable value\fR
Set the specified environment variable to be passed to child processes.
.\"#SSLListen
.TP 5
\fBSSLListen \fIipv4-address\fB:\fIport\fR
+3 -18
Ver Arquivo
@@ -1,12 +1,12 @@
.\"
.\" lpoptions man page for CUPS.
.\"
.\" Copyright 2007-2014 by Apple Inc.
.\" Copyright 1997-2006 by Easy Software Products.
.\" Copyright © 2007-2018 by Apple Inc.
.\" Copyright © 1997-2006 by Easy Software Products.
.\"
.\" Licensed under Apache License v2.0. See the file "LICENSE" for more information.
.\"
.TH lpoptions 1 "CUPS" "12 June 2014" "Apple Inc."
.TH lpoptions 1 "CUPS" "10 April 2018" "Apple Inc."
.SH NAME
lpoptions \- display or set printer options and defaults
.SH SYNOPSIS
@@ -14,9 +14,6 @@ lpoptions \- display or set printer options and defaults
[
.B \-E
] [
.B \-U
.I username
] [
\fB\-h \fIserver\fR[\fB:\fIport\fR]
]
\fB\-d \fIdestination\fR[\fB/\fIinstance\fR]
@@ -28,9 +25,6 @@ lpoptions \- display or set printer options and defaults
[
.B \-E
] [
.B \-U
.I username
] [
\fB\-h \fIserver\fR[\fB:\fIport\fR]
] [
\fB\-p \fIdestination\fR[\fB/\fIinstance\fR]
@@ -41,9 +35,6 @@ lpoptions \- display or set printer options and defaults
[
.B \-E
] [
.B \-U
.I username
] [
\fB\-h \fIserver\fR[\fB:\fIport\fR]
] [
\fB\-p \fIdestination\fR[\fB/\fIinstance\fR]
@@ -55,9 +46,6 @@ lpoptions \- display or set printer options and defaults
[
.B \-E
] [
.B \-U
.I username
] [
\fB\-h \fIserver\fR[\fB:\fIport\fR]
]
\fB\-x \fIdestination\fR[\fB/\fIinstance\fR]
@@ -82,9 +70,6 @@ Otherwise, the per-user defaults are managed in the \fI~/.cups/lpoptions\fR file
.B \-E
Enables encryption when communicating with the CUPS server.
.TP 5
\fB\-U \fIusername\fR
Uses an alternate username.
.TP 5
\fB\-d \fIdestination\fR[\fB/\fIinstance\fR]
Sets the user default printer to \fIdestination\fR.
If \fIinstance\fR is supplied then that particular instance is used.
+11 -5
Ver Arquivo
@@ -1,10 +1,11 @@
/*
* "mailto" notifier for CUPS.
*
* Copyright 2007-2011 by Apple Inc.
* Copyright 1997-2005 by Easy Software Products.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2005 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
@@ -32,8 +33,7 @@ char mailtoSendmail[1024]; /* Sendmail program to use */
* Local functions...
*/
void email_message(const char *to, const char *subject,
const char *text);
void email_message(const char *to, const char *subject, const char *text);
int load_configuration(void);
cups_file_t *pipe_sendmail(const char *to);
void print_attributes(ipp_t *ipp, int indent);
@@ -229,7 +229,9 @@ email_message(const char *to, /* I - Recipient of message */
if (strchr(mailtoSMTPServer, ':'))
{
fp = cupsFileOpen(mailtoSMTPServer, "s");
}
else
{
char spec[1024]; /* Host:service spec */
@@ -248,6 +250,10 @@ email_message(const char *to, /* I - Recipient of message */
fprintf(stderr, "DEBUG: Connected to \"%s\"...\n", mailtoSMTPServer);
if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500)
goto smtp_error;
fprintf(stderr, "DEBUG: <<< %s\n", response);
cupsFilePrintf(fp, "HELO %s\r\n",
httpGetHostname(NULL, hostbuf, sizeof(hostbuf)));
fprintf(stderr, "DEBUG: >>> HELO %s\n", hostbuf);
+22 -8
Ver Arquivo
@@ -1,13 +1,14 @@
/*
* Client routines for the CUPS scheduler.
*
* Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* This file contains Kerberos support code, copyright 2006 by
* Jelmer Vernooij.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
@@ -813,6 +814,18 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
if (status == HTTP_STATUS_OK)
{
/*
* Record whether the client is a web browser. "Mozilla" was the original
* and it seems that every web browser in existence now uses that as the
* prefix with additional information identifying *which* browser.
*
* Chrome (at least) has problems with multiple WWW-Authenticate values in
* a single header, so we only report Basic or Negotiate to web browsers and
* leave the multiple choices to the native CUPS client...
*/
con->is_browser = !strncmp(httpGetField(con->http, HTTP_FIELD_USER_AGENT), "Mozilla/", 8);
if (httpGetField(con->http, HTTP_FIELD_ACCEPT_LANGUAGE)[0])
{
/*
@@ -2092,19 +2105,20 @@ cupsdSendHeader(
auth_str[0] = '\0';
if (auth_type == CUPSD_AUTH_BASIC)
{
strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str));
}
else if (auth_type == CUPSD_AUTH_NEGOTIATE)
{
#ifdef AF_LOCAL
#if defined(SO_PEERCRED) && defined(AF_LOCAL)
if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str));
strlcpy(auth_str, "PeerCred", sizeof(auth_str));
else
#endif /* AF_LOCAL */
#endif /* SO_PEERCRED && AF_LOCAL */
strlcpy(auth_str, "Negotiate", sizeof(auth_str));
}
if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE &&
!_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE && !con->is_browser && !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
{
/*
* Add a "trc" (try root certification) parameter for local non-Kerberos
+5 -3
Ver Arquivo
@@ -1,10 +1,11 @@
/*
* Client definitions for the CUPS scheduler.
*
* Copyright 2007-2016 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
#ifdef HAVE_AUTHORIZATION_H
@@ -26,6 +27,7 @@ struct cupsd_client_s
struct timeval start; /* Request start time */
http_state_t operation; /* Request operation */
off_t bytes; /* Bytes transferred for this request */
int is_browser; /* Is the client a web browser? */
int type; /* AuthType for username */
char username[HTTP_MAX_VALUE],
/* Username from Authorization: line */
+150 -90
Ver Arquivo
@@ -1,10 +1,11 @@
/*
* Configuration routines for the CUPS scheduler.
*
* Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
* Copyright © 2007-2018 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
*/
/*
@@ -1481,13 +1482,25 @@ cupsdReadConfiguration(void)
}
}
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: NumPolicies=%d",
cupsArrayCount(Policies));
for (i = 0, p = (cupsd_policy_t *)cupsArrayFirst(Policies);
p;
i ++, p = (cupsd_policy_t *)cupsArrayNext(Policies))
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"cupsdReadConfiguration: Policies[%d]=\"%s\"", i, p->name);
if (LogLevel >= CUPSD_LOG_DEBUG2)
{
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: NumPolicies=%d",
cupsArrayCount(Policies));
for (i = 0, p = (cupsd_policy_t *)cupsArrayFirst(Policies);
p;
i ++, p = (cupsd_policy_t *)cupsArrayNext(Policies))
{
int j; /* Looping var */
cupsd_location_t *loc; /* Current location */
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: Policies[%d]=\"%s\"", i, p->name);
for (j = 0, loc = (cupsd_location_t *)cupsArrayFirst(p->ops); loc; j ++, loc = (cupsd_location_t *)cupsArrayNext(p->ops))
{
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: ops[%d]=%s", j, ippOpString(loc->op));
}
}
}
/*
* If we are doing a full reload or the server root has changed, flush
@@ -2916,13 +2929,10 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
/* Line from file */
temp[HTTP_MAX_BUFFER],
/* Temporary buffer for value */
*value, /* Pointer to value */
*valueptr; /* Pointer into value */
*value; /* Pointer to value */
int valuelen; /* Length of value */
http_addrlist_t *addrlist, /* Address list */
*addr; /* Current address */
cups_file_t *incfile; /* Include file */
char incname[1024]; /* Include filename */
/*
@@ -2937,28 +2947,7 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
* Decode the directive...
*/
if (!_cups_strcasecmp(line, "Include") && value)
{
/*
* Include filename
*/
if (value[0] == '/')
strlcpy(incname, value, sizeof(incname));
else
snprintf(incname, sizeof(incname), "%s/%s", ServerRoot, value);
if ((incfile = cupsFileOpen(incname, "rb")) == NULL)
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to include config file \"%s\" - %s",
incname, strerror(errno));
else
{
read_cupsd_conf(incfile);
cupsFileClose(incfile);
}
}
else if (!_cups_strcasecmp(line, "<Location") && value)
if (!_cups_strcasecmp(line, "<Location") && value)
{
/*
* <Location path>
@@ -3354,31 +3343,6 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
cupsdLogMessage(CUPSD_LOG_WARN, "Unknown ServerTokens %s on line %d of %s.",
value, linenum, ConfigurationFile);
}
else if (!_cups_strcasecmp(line, "PassEnv") && value)
{
/*
* PassEnv variable [... variable]
*/
for (; *value;)
{
for (valuelen = 0; value[valuelen]; valuelen ++)
if (_cups_isspace(value[valuelen]) || value[valuelen] == ',')
break;
if (value[valuelen])
{
value[valuelen] = '\0';
valuelen ++;
}
cupsdSetEnv(value, NULL);
for (value += valuelen; *value; value ++)
if (!_cups_isspace(*value) || *value != ',')
break;
}
}
else if (!_cups_strcasecmp(line, "ServerAlias") && value)
{
/*
@@ -3407,30 +3371,6 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
break;
}
}
else if (!_cups_strcasecmp(line, "SetEnv") && value)
{
/*
* SetEnv variable value
*/
for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++);
if (*valueptr)
{
/*
* Found a value...
*/
while (isspace(*valueptr & 255))
*valueptr++ = '\0';
cupsdSetEnv(value, valueptr);
}
else
cupsdLogMessage(CUPSD_LOG_ERROR,
"Missing value for SetEnv directive on line %d of %s.",
linenum, ConfigurationFile);
}
else if (!_cups_strcasecmp(line, "AccessLog") ||
!_cups_strcasecmp(line, "CacheDir") ||
!_cups_strcasecmp(line, "ConfigFilePerm") ||
@@ -3444,6 +3384,7 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
!_cups_strcasecmp(line, "LogFilePerm") ||
!_cups_strcasecmp(line, "LPDConfigFile") ||
!_cups_strcasecmp(line, "PageLog") ||
!_cups_strcasecmp(line, "PassEnv") ||
!_cups_strcasecmp(line, "Printcap") ||
!_cups_strcasecmp(line, "PrintcapFormat") ||
!_cups_strcasecmp(line, "RemoteRoot") ||
@@ -3453,6 +3394,7 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
!_cups_strcasecmp(line, "ServerKey") ||
!_cups_strcasecmp(line, "ServerKeychain") ||
!_cups_strcasecmp(line, "ServerRoot") ||
!_cups_strcasecmp(line, "SetEnv") ||
!_cups_strcasecmp(line, "SMBConfigFile") ||
!_cups_strcasecmp(line, "StateDir") ||
!_cups_strcasecmp(line, "SystemGroup") ||
@@ -3482,10 +3424,49 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
static int /* O - 1 on success, 0 on failure */
read_cups_files_conf(cups_file_t *fp) /* I - File to read from */
{
int linenum; /* Current line number */
int i, /* Looping var */
linenum; /* Current line number */
char line[HTTP_MAX_BUFFER], /* Line from file */
*value; /* Value from line */
struct group *group; /* Group */
static const char * const prohibited_env[] =
{ /* Prohibited environment variables */
"APPLE_LANGUAGE",
"AUTH_DOMAIN",
"AUTH_INFO_REQUIRED",
"AUTH_NEGOTIATE",
"AUTH_PASSWORD",
"AUTH_UID",
"AUTH_USERNAME",
"CHARSET",
"CLASS",
"CLASSIFICATION",
"CONTENT_TYPE",
"CUPS_CACHEDIR",
"CUPS_DATADIR",
"CUPS_DOCROOT",
"CUPS_FILETYPE",
"CUPS_FONTPATH",
"CUPS_MAX_MESSAGE",
"CUPS_REQUESTROOT",
"CUPS_SERVERBIN",
"CUPS_SERVERROOT",
"CUPS_STATEDIR",
"DEVICE_URI",
"FINAL_CONTENT_TYPE",
"HOME",
"LANG",
"PPD",
"PRINTER",
"PRINTER_INFO",
"PRINTER_LOCATION",
"PRINTER_STATE_REASONS",
"RIP_CACHE",
"SERVER_ADMIN",
"SOFTWARE",
"TMPDIR",
"USER"
};
/*
@@ -3523,6 +3504,47 @@ read_cups_files_conf(cups_file_t *fp) /* I - File to read from */
}
}
}
else if (!_cups_strcasecmp(line, "PassEnv") && value)
{
/*
* PassEnv variable [... variable]
*/
int valuelen; /* Length of variable name */
for (; *value;)
{
for (valuelen = 0; value[valuelen]; valuelen ++)
if (_cups_isspace(value[valuelen]) || value[valuelen] == ',')
break;
if (value[valuelen])
{
value[valuelen] = '\0';
valuelen ++;
}
for (i = 0; i < (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])); i ++)
{
if (!strcmp(value, prohibited_env[i]))
{
cupsdLogMessage(CUPSD_LOG_ERROR, "Environment variable \"%s\" cannot be passed through on line %d of %s.", value, linenum, CupsFilesFile);
if (FatalErrors & CUPSD_FATAL_CONFIG)
return (0);
else
break;
}
}
if (i >= (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])))
cupsdSetEnv(value, NULL);
for (value += valuelen; *value; value ++)
if (!_cups_isspace(*value) || *value != ',')
break;
}
}
else if (!_cups_strcasecmp(line, "PrintcapFormat") && value)
{
/*
@@ -3568,6 +3590,46 @@ read_cups_files_conf(cups_file_t *fp) /* I - File to read from */
return (0);
}
}
else if (!_cups_strcasecmp(line, "SetEnv") && value)
{
/*
* SetEnv variable value
*/
char *valueptr; /* Pointer to environment variable value */
for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++);
if (*valueptr)
{
/*
* Found a value...
*/
while (isspace(*valueptr & 255))
*valueptr++ = '\0';
for (i = 0; i < (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])); i ++)
{
if (!strcmp(value, prohibited_env[i]))
{
cupsdLogMessage(CUPSD_LOG_ERROR, "Environment variable \"%s\" cannot be set on line %d of %s.", value, linenum, CupsFilesFile);
if (FatalErrors & CUPSD_FATAL_CONFIG)
return (0);
else
break;
}
}
if (i >= (int)(sizeof(prohibited_env) / sizeof(prohibited_env[0])))
cupsdSetEnv(value, valueptr);
}
else
cupsdLogMessage(CUPSD_LOG_ERROR,
"Missing value for SetEnv directive on line %d of %s.",
linenum, ConfigurationFile);
}
else if (!_cups_strcasecmp(line, "SystemGroup") && value)
{
/*
@@ -3853,11 +3915,9 @@ read_policy(cups_file_t *fp, /* I - Configuration file */
if (num_ops < (int)(sizeof(ops) / sizeof(ops[0])))
{
if (!_cups_strcasecmp(value, "All"))
ops[num_ops] = IPP_ANY_OPERATION;
ops[num_ops ++] = IPP_ANY_OPERATION;
else if ((ops[num_ops] = ippOpValue(value)) == IPP_BAD_OPERATION)
cupsdLogMessage(CUPSD_LOG_ERROR,
"Bad IPP operation name \"%s\" on line %d of %s.",
value, linenum, ConfigurationFile);
cupsdLogMessage(CUPSD_LOG_ERROR, "Bad IPP operation name \"%s\" on line %d of %s.", value, linenum, ConfigurationFile);
else
num_ops ++;
}
+80 -90
Ver Arquivo
@@ -2032,7 +2032,7 @@ add_job_subscriptions(
snprintf(notifier, sizeof(notifier), "%s/notifier/%s", ServerBin,
scheme);
if (access(notifier, X_OK))
if (access(notifier, X_OK) || !strcmp(scheme, ".") || !strcmp(scheme, ".."))
{
send_ipp_status(con, IPP_NOT_POSSIBLE,
_("notify-recipient-uri URI \"%s\" uses unknown "
@@ -5335,6 +5335,8 @@ create_local_bg_thread(
if (_ppdCreateFromIPP(fromppd, sizeof(fromppd), response))
{
_cupsRWLockWrite(&printer->lock);
if ((!printer->info || !*(printer->info)) && (attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL)
cupsdSetString(&printer->info, ippGetString(attr, 0, NULL));
@@ -5344,6 +5346,8 @@ create_local_bg_thread(
if ((!printer->geo_location || !*(printer->geo_location)) && (attr = ippFindAttribute(response, "printer-geo-location", IPP_TAG_URI)) != NULL)
cupsdSetString(&printer->geo_location, ippGetString(attr, 0, NULL));
_cupsRWUnlock(&printer->lock);
if ((from = cupsFileOpen(fromppd, "r")) == NULL)
{
cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to read generated PPD: %s", printer->name, strerror(errno));
@@ -5844,7 +5848,26 @@ create_subscriptions(
}
if (recipient)
{
cupsdLogMessage(CUPSD_LOG_DEBUG, "recipient=\"%s\"", recipient);
if (!strncmp(recipient, "mailto:", 7) && user_data)
{
char temp[64]; /* Temporary string */
memcpy(temp, user_data->values[0].unknown.data, user_data->values[0].unknown.length);
temp[user_data->values[0].unknown.length] = '\0';
if (httpSeparateURI(HTTP_URI_CODING_ALL, temp, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_OK)
{
send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad notify-user-data \"%s\"."), temp);
ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES);
return;
}
}
}
if (pullmethod)
cupsdLogMessage(CUPSD_LOG_DEBUG, "pullmethod=\"%s\"", pullmethod);
cupsdLogMessage(CUPSD_LOG_DEBUG, "notify-lease-duration=%d", lease);
@@ -7955,13 +7978,16 @@ hold_job(cupsd_client_t *con, /* I - Client connection */
* Hold the job and return...
*/
if ((attr = ippFindAttribute(con->request, "job-hold-until",
IPP_TAG_KEYWORD)) == NULL)
attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_NAME);
if (attr)
if ((attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_ZERO)) != NULL)
{
when = attr->values[0].string.text;
if ((ippGetValueTag(attr) != IPP_TAG_KEYWORD && ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG) || ippGetCount(attr) != 1 || !ippValidateAttribute(attr))
{
send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Unsupported 'job-hold-until' value."));
ippCopyAttribute(con->response, attr, 0);
return;
}
when = ippGetString(attr, 0, NULL);
cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, cupsdFindDest(job->dest), job,
"Job job-hold-until value changed by user.");
@@ -10325,7 +10351,39 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
continue;
}
if (!strcmp(attr->name, "job-priority"))
if (!ippValidateAttribute(attr))
{
send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Bad '%s' value."), attr->name);
ippCopyAttribute(con->response, attr, 0);
return;
}
if (!strcmp(attr->name, "job-hold-until"))
{
const char *when = ippGetString(attr, 0, NULL);
/* job-hold-until value */
if ((ippGetValueTag(attr) != IPP_TAG_KEYWORD && ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG) || ippGetCount(attr) != 1)
{
send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Unsupported 'job-hold-until' value."));
ippCopyAttribute(con->response, attr, 0);
return;
}
cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-hold-until to %s", when);
cupsdSetJobHoldUntil(job, when, 0);
if (!strcmp(when, "no-hold"))
{
cupsdReleaseJob(job);
check_jobs = 1;
}
else
cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT, "Job held by \"%s\".", username);
event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE;
}
else if (!strcmp(attr->name, "job-priority"))
{
/*
* Change the job priority...
@@ -10445,28 +10503,6 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
*/
ippCopyAttribute(job->attrs, attr, 0);
/*
* See if the job-name or job-hold-until is being changed.
*/
if (!strcmp(attr->name, "job-hold-until"))
{
cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-hold-until to %s",
attr->values[0].string.text);
cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0);
if (!strcmp(attr->values[0].string.text, "no-hold"))
{
cupsdReleaseJob(job);
check_jobs = 1;
}
else
cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT,
"Job held by \"%s\".", username);
event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE;
}
}
else if (attr->value_tag == IPP_TAG_DELETEATTR)
{
@@ -11284,81 +11320,35 @@ validate_job(cupsd_client_t *con, /* I - Client connection */
}
}
/*
* Is the job-hold-until value valid?
*/
if ((attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_ZERO)) != NULL && ((ippGetValueTag(attr) != IPP_TAG_KEYWORD && ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG) || ippGetCount(attr) != 1 || !ippValidateAttribute(attr)))
{
send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Unsupported 'job-hold-until' value."));
ippCopyAttribute(con->response, attr, 0);
return;
}
/*
* Is the job-name valid?
*/
if ((name = ippFindAttribute(con->request, "job-name", IPP_TAG_ZERO)) != NULL)
{
int bad_name = 0; /* Is the job-name value bad? */
if ((name->value_tag != IPP_TAG_NAME && name->value_tag != IPP_TAG_NAMELANG) ||
name->num_values != 1)
{
bad_name = 1;
}
else
{
/*
* Validate that job-name conforms to RFC 5198 (Network Unicode) and
* IPP Everywhere requirements for "name" values...
*/
const unsigned char *nameptr; /* Pointer into "job-name" attribute */
for (nameptr = (unsigned char *)name->values[0].string.text;
*nameptr;
nameptr ++)
{
if (*nameptr < ' ' && *nameptr != '\t')
break;
else if (*nameptr == 0x7f)
break;
else if ((*nameptr & 0xe0) == 0xc0)
{
if ((nameptr[1] & 0xc0) != 0x80)
break;
nameptr ++;
}
else if ((*nameptr & 0xf0) == 0xe0)
{
if ((nameptr[1] & 0xc0) != 0x80 ||
(nameptr[2] & 0xc0) != 0x80)
break;
nameptr += 2;
}
else if ((*nameptr & 0xf8) == 0xf0)
{
if ((nameptr[1] & 0xc0) != 0x80 ||
(nameptr[2] & 0xc0) != 0x80 ||
(nameptr[3] & 0xc0) != 0x80)
break;
nameptr += 3;
}
else if (*nameptr & 0x80)
break;
}
if (*nameptr)
bad_name = 1;
}
if (bad_name)
name->num_values != 1 || !ippValidateAttribute(name))
{
if (StrictConformance)
{
send_ipp_status(con, IPP_ATTRIBUTES,
_("Unsupported 'job-name' value."));
send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Unsupported 'job-name' value."));
ippCopyAttribute(con->response, name, 0);
return;
}
else
{
cupsdLogMessage(CUPSD_LOG_WARN,
"Unsupported 'job-name' value, deleting from request.");
cupsdLogMessage(CUPSD_LOG_WARN, "Unsupported 'job-name' value, deleting from request.");
ippDeleteAttribute(con->request, name);
}
}
+12
Ver Arquivo
@@ -4779,6 +4779,18 @@ start_job(cupsd_job_t *job, /* I - Job ID */
job->profile = cupsdCreateProfile(job->id, 0);
job->bprofile = cupsdCreateProfile(job->id, 1);
#ifdef HAVE_SANDBOX_H
if ((!job->profile || !job->bprofile) && UseSandboxing && Sandboxing != CUPSD_SANDBOXING_OFF)
{
/*
* Failure to create the sandbox profile means something really bad has
* happened and we need to shutdown immediately.
*/
return;
}
#endif /* HAVE_SANDBOX_H */
/*
* Create the status pipes and buffer...
*/
+1 -1
Ver Arquivo
@@ -5,7 +5,7 @@ Documentation=man:cupsd(8)
[Service]
ExecStart=@sbindir@/cupsd -l
Type=simple
Restart=always
Restart=on-failure
[Install]
Also=org.cups.cupsd.socket org.cups.cupsd.path
+10 -6
Ver Arquivo
@@ -98,9 +98,13 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
if ((fp = cupsTempFile2(profile, sizeof(profile))) == NULL)
{
/*
* This should never happen, and is fatal when sandboxing is enabled.
*/
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d, allow_networking=%d) = NULL", job_id, allow_networking);
cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create security profile: %s",
strerror(errno));
cupsdLogMessage(CUPSD_LOG_EMERG, "Unable to create security profile: %s", strerror(errno));
kill(getpid(), SIGTERM);
return (NULL);
}
@@ -197,10 +201,8 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
" #\"^%s/\"" /* TempDir/... */
" #\"^%s$\"" /* CacheDir */
" #\"^%s/\"" /* CacheDir/... */
" #\"^%s$\"" /* StateDir */
" #\"^%s/\"" /* StateDir/... */
"))\n",
temp, temp, cache, cache, state, state);
temp, temp, cache, cache);
/* Read common folders */
cupsFilePrintf(fp,
"(allow file-read-data file-read-metadata\n"
@@ -242,8 +244,10 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
" #\"^%s/\"" /* ServerBin/... */
" #\"^%s$\"" /* ServerRoot */
" #\"^%s/\"" /* ServerRoot/... */
" #\"^%s$\"" /* StateDir */
" #\"^%s/\"" /* StateDir/... */
"))\n",
request, request, bin, bin, root, root);
request, request, bin, bin, root, root, state, state);
if (Sandboxing == CUPSD_SANDBOXING_RELAXED)
{
/* Limited write access to /Library/Printers/... */
+18 -6
Ver Arquivo
@@ -33,18 +33,30 @@ static int started = 0; /* Did we start the server already? */
void
cupsdStartServer(void)
{
/*
* Start color management (as needed)...
*/
cupsdStartColor();
/*
* Create the default security profile...
*/
DefaultProfile = cupsdCreateProfile(0, 1);
#ifdef HAVE_SANDBOX_H
if (!DefaultProfile && UseSandboxing && Sandboxing != CUPSD_SANDBOXING_OFF)
{
/*
* Failure to create the sandbox profile means something really bad has
* happened and we need to shutdown immediately.
*/
return;
}
#endif /* HAVE_SANDBOX_H */
/*
* Start color management (as needed)...
*/
cupsdStartColor();
/*
* Startup all the networking stuff...
*/
+1 -1
Ver Arquivo
@@ -8,7 +8,7 @@
<TR>
<TH CLASS="label">Nom:</TH>
<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
<SMALL>(Peux contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
<SMALL>(Peut contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
</TR>
<TR>
<TH CLASS="label">Description:</TH>
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
<TR>
<TH CLASS="label">Nom\:</TH>
<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127" VALUE="{?template_name}"><BR>
<SMALL>(Peux contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
<SMALL>(Peut contenir n'importe quel caract&egrave;re sauf "/", "#", et espace)</SMALL></TD>
</TR>
<TR>
<TH CLASS="label">Description:</TH>
+4 -4
Ver Arquivo
@@ -27,8 +27,8 @@
<P>
<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server"><INPUT TYPE="SUBMIT" VALUE="Éditer le fichier de configuration"></FORM>
<FORM ACTION="/admin/log/access_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Visualiser Access Log"></FORM>
<FORM ACTION="/admin/log/error_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Visualiser Error Log"></FORM>
<FORM ACTION="/admin/log/access_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Visualiser le journal d'accès"></FORM>
<FORM ACTION="/admin/log/error_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Visualiser le journal d'erreur"></FORM>
<FORM ACTION="/admin/log/page_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Visualiser Page Log"></FORM>
</P>
@@ -52,9 +52,9 @@
{have_gssapi?<INPUT TYPE="CHECKBOX" NAME="KERBEROS" ID="KERBEROS" {?kerberos}><LABEL FOR="KERBEROS"> Utiliser l'authentification Kerberos (<A HREF="/help/kerberos.html?TOPIC=Getting+Started">FAQ</A>)</LABEL><BR>:}
<INPUT TYPE="CHECKBOX" NAME="USER_CANCEL_ANY" ID="USER_CANCEL_ANY" {?user_cancel_any}><LABEL FOR="USER_CANCEL_ANY"> Autoriser les utilisateurs &agrave; annuler n'importe quelle t&acirc;che (Pas seulement les leurs)</LABEL><BR>
<INPUT TYPE="CHECKBOX" NAME="PRESERVE_JOBS" ID="PRESERVE_JOBS" {?preserve_jobs}><LABEL FOR="PRESERVE_JOBS"> Conserver l'historique des t&acirc;ches</LABEL><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maximum jobs (0 for no limit)\:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nombre maximum de t&acirc;ches (0 pour aucune limite)\:
<INPUT TYPE="TEXT" NAME="MAX_JOBS" VALUE="{?max_jobs}" SIZE="6"><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conserver les meta-donn&eacute;es\:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conserver les m&eacute;ta-donn&eacute;es\:
<INPUT TYPE="TEXT" NAME="PRESERVE_JOB_HISTORY" VALUE="{?preserve_job_history}" SIZE="6"><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conserver les documents\:
<INPUT TYPE="TEXT" NAME="PRESERVE_JOB_FILES" VALUE="{?preserve_job_files}" SIZE="6"><BR>
+2 -2
Ver Arquivo
@@ -21,7 +21,7 @@ VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
</TD>
</TR>
<TR>
<TH CLASS="label">Imprimantes r&eacute;seaux d&eacute;couvertes\:</TH>
<TH CLASS="label">Imprimantes r&eacute;seau d&eacute;couvertes\:</TH>
<TD>
{[device_uri]{device_class=network?{device_uri~[a-z]+://?<INPUT TYPE="RADIO" NAME="DEVICE_URI" ID="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}"
VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
@@ -31,7 +31,7 @@ VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
</TR>
<TR>
<TR>
<TH CLASS="label">Autres imprimantes r&eacute;seaux\:</TH>
<TH CLASS="label">Autres imprimantes r&eacute;seau\:</TH>
<TD>
{[device_uri]{device_class=network?{device_uri~[a-z]+://?:<INPUT TYPE="RADIO" NAME="DEVICE_URI" ID="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}"
VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
+2 -2
Ver Arquivo
@@ -28,7 +28,7 @@
<TR>
<TH CLASS="label">Partage:</TH>
<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_IS_SHARED" VALUE="{?printer_is_shared}">
{?printer_is_shared=?Ne pas:{?printer_is_shared=0?Do Not:}} partager cette imprimante</TD>
{?printer_is_shared=?Ne pas p:{?printer_is_shared=0?Ne pas p:P}}artager cette imprimante</TD>
</TR>
<TR>
<TH CLASS="label">Marque:</TH>
@@ -38,7 +38,7 @@
<TH CLASS="label">Modèle:</TH>
<TD>
<SELECT NAME="PPD_NAME" SIZE="10">
{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Pilote courant - {current_make_and_model}</OPTION>:}
{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Pilote actuel - {current_make_and_model}</OPTION>:}
{[ppd_name]<OPTION VALUE="{ppd_name}" {op=modify-printer?:{?current_make_and_model={ppd_make_and_model}?SELECTED:}}>{ppd_make_and_model} ({ppd_natural_language})
}</SELECT>
</TD>
+1 -1
Ver Arquivo
@@ -27,7 +27,7 @@
socket://hostname:9100
</PRE>
<P>Voir <A HREF="/help/network.html" TARGET="_blank">"Imprimantes réseaux"</A> pour construire l'URI à employée avec votre imprimante.</P>
<P>Voir <A HREF="/help/network.html" TARGET="_blank">"Imprimantes réseaux"</A> pour construire l'URI à employer avec votre imprimante.</P>
</TD>
</TR>
+1 -1
Ver Arquivo
@@ -1,6 +1,6 @@
<H2 CLASS="title">Supprimer la classe {printer_name}</H2>
<P><B>Attention:</B> Etes-vous sur(e) de vouloir supprimer la classe
<P><B>Attention:</B> Êtes-vous sur(e) de vouloir supprimer la classe
{printer_name}?</P>
<P ALIGN="CENTER"><FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="op" VALUE="delete-class"><INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}"><INPUT TYPE="SUBMIT" NAME="confirm" VALUE="Supprimer la classe"></FORM></P>
+4 -4
Ver Arquivo
@@ -1,7 +1,7 @@
<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arr&ecirc;t&eacute;}},
({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arr&ecirc;t&eacute;e}},
{printer_is_accepting_jobs=0?rejette les t&acirc;ches:accepte les t&acirc;ches},
{server_is_sharing_printers=0?Non:{printer_is_shared=0?Non:}} partag&eacute;e{default_name={printer_name}?, imprimante par d&eacute;faut:})</H2>
{server_is_sharing_printers=0?Non p:{printer_is_shared=0?Non p:P}}artag&eacute;e{default_name={printer_name}?, imprimante par d&eacute;faut:})</H2>
<FORM METHOD="POST" ACTION="{printer_uri_supported}" NAME="maintenance">
<INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}">
@@ -13,7 +13,7 @@
<OPTION VALUE="move-jobs">Transf&eacute;rer toutes les t&acirc;ches</OPTION>
<OPTION VALUE="purge-jobs">Annuler toutes les t&acirc;ches</OPTION>
</SELECT>
<INPUT TYPE="SUBMIT" VALUE="Go" STYLE="display: none;">
<INPUT TYPE="SUBMIT" VALUE="Valider" STYLE="display: none;">
</FORM>
<FORM METHOD="POST" ACTION="{admin_uri}" NAME="administration">
@@ -28,7 +28,7 @@
<OPTION VALUE="set-as-default">D&eacute;finir par d&eacute;faut</OPTION>
<OPTION VALUE="set-allowed-users">D&eacute;finir les autorisations</OPTION>
</SELECT>
<INPUT TYPE="SUBMIT" VALUE="Go" STYLE="display: none;">
<INPUT TYPE="SUBMIT" VALUE="Valider" STYLE="display: none;">
</FORM>
<TABLE SUMMARY="{printer_name}">
+1 -1
Ver Arquivo
@@ -1 +1 @@
<P ALIGN="CENTER">{total=0?Pas de classes:Affichage de {#printer_name} sur {total} classe{total=1?:es}}.</P>
<P ALIGN="CENTER">{total=0?Pas de classes:Affichage de {#printer_name} sur {total} classe{total=1?:s}}.</P>
+1 -1
Ver Arquivo
@@ -5,7 +5,7 @@
</THEAD>
<TBODY>
{[printer_name]
<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{?member_uris=?Aucun:{member_uris}}</TD><TD>{printer_state=3?Inoccup&eacute;:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{?member_uris=?Aucun:{member_uris}}</TD><TD>{printer_state=3?Inoccup&eacute;e:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
}
</TBODY>
</TABLE></DIV>}
+11 -11
Ver Arquivo
@@ -1,8 +1,8 @@
<FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
{TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
<P ALIGN="CENTER"><B>Search in
{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}:</B> <INPUT
<P ALIGN="CENTER"><B>Rechercher dans
{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:Tous les documents}}:</B> <INPUT
TYPE="SEARCH" NAME="QUERY" VALUE="{?QUERY}" SIZE="40" PLACEHOLDER=""
AUTOSAVE="org.cups.help" RESULTS="20">
<INPUT TYPE="SUBMIT" NAME="SEARCH" VALUE="Search">
@@ -14,9 +14,9 @@ AUTOSAVE="org.cups.help" RESULTS="20">
<DIV CLASS="sidebar"><TABLE CLASS="inset" SUMMARY="Contents">
<TR><TD>
<H3 CLASS="title">Online Help Documents</H3>
<H3 CLASS="title">Documentation en ligne</H3>
<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">All Documents</A></P>
<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">Tous les documents</A></P>
<HR>
{[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
@@ -24,18 +24,18 @@ AUTOSAVE="org.cups.help" RESULTS="20">
</TD></TR>
</TABLE></DIV>
{QUERY?<P>Search Results in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}\:</P>
{QUERY?<P>sultats de la recherche dans {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:Tous les documents}}\:</P>
{QTEXT?<UL>
{[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
{QTEXT?</UL>:}
:<P>No matches found.</P>}
:<P>Aucun résultat.</P>}
<HR NOSHADE>:}
{HELPTITLE?<FORM ACTION="/help/{?HELPFILE}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="PRINTABLE" VALUE="YES"><INPUT TYPE="SUBMIT" VALUE="View Printable Version"></FORM>:
{HELPTITLE?<FORM ACTION="/help/{?HELPFILE}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="PRINTABLE" VALUE="YES"><INPUT TYPE="SUBMIT" VALUE="Voir la version imprimable"></FORM>:
<H1>Online Help</H1>
<H1>Aide en ligne</H1>
<P>This is the CUPS online help interface. Enter search words above or click on any of the documentation links to display online help information.</P>
<P>Ceci est l'interface d'aide en ligne de CUPS. Entrez vos termes de recherch ci-dessus ou cliquez sur un des liens vers la documentation pour voir les informations d'aide en ligne.</P>
<P>If you are new to CUPS, read the "<a href="/help/overview.html">Overview of CUPS</a>" page.</P>
<P>Si vous êtes un nouvel utilisateur de CUPS, lisez la page "<a href="/help/overview.html">Aperçu de CUPS</a>".</P>
<P>The <A HREF="http://www.cups.org/">CUPS home page</A> also provides many resources including user discussion forums, answers to frequently-asked questions, and a form for submitting bug reports and feature requests.</P>}
<P>La <A HREF="http://www.cups.org/">page d'accueil CUPS</A> procure aussi beaucoup de ressources dont des forums, des FAQ, et un formulaire pour les rapports de bugs et les demandes de fonctionnalités.</P>}
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
<H2 CLASS="title">{job_id?Transf&eacute;rer la t&acirc;che {job_id}:Transf&eacute;rer toutes les t&acirc;ches}</H2>
<P>{job_id?<A HREF="/jobs/{job_id}">Job {job_id}</A>:Toutes les t&acirc;ches} transf&eacute;r&eacute;e(s) vers
<P>{job_id?<A HREF="/jobs/{job_id}">T&acirc;che {job_id}</A>:Toutes les t&acirc;ches} transf&eacute;r&eacute;e(s) vers
<A HREF="/{is_class?classes:printers}/{job_printer_name}">{job_printer_name}</A>.</P>
+1 -1
Ver Arquivo
@@ -2,4 +2,4 @@
{?which_jobs=completed?:<FORM ACTION="{?printer_name=?/jobs:{printer_uri_supported}}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="which_jobs" VALUE="completed"><INPUT TYPE="SUBMIT" VALUE="Affichage des t&acirc;ches termin&eacute;es"></FORM>}
{?which_jobs=all?:<FORM ACTION="{?printer_name=?/jobs:{printer_uri_supported}}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="which_jobs" VALUE="all"><INPUT TYPE="SUBMIT" VALUE="Affichage de toutes les t&acirc;ches"></FORM>}
<P ALIGN="CENTER">{?which_jobs=?Affichage des tâches dans l'ordre d'impression; les tâches maintenues apparraissent en premier.:{which_jobs=Affichage des tâches dans l'ordre croissant.?:Affichage des tâches dans l'ordre décroissant.}}</P>
<P ALIGN="CENTER">{?which_jobs=?Affichage des tâches dans l'ordre d'impression; les tâches maintenues apparaissent en premier.:{which_jobs=Affichage des tâches dans l'ordre croissant.?:Affichage des tâches dans l'ordre décroissant.}}</P>
+4 -4
Ver Arquivo
@@ -8,12 +8,12 @@
<TR VALIGN="TOP">
<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id}{?phone? ({phone}):}&nbsp;</TD>
<TD>{?job_name=?Inconnu:{job_name}}&nbsp;</TD>
<TD>{?job_originating_user_name=?Withheld:{job_originating_user_name}}&nbsp;</TD>
<TD>{?job_originating_user_name=?Caché:{job_originating_user_name}}&nbsp;</TD>
<TD>{job_k_octets}k&nbsp;</TD>
<TD>{job_impressions_completed=0?Inconnu:{?job_impressions_completed}}&nbsp;</TD>
<TD>{job_state=3?en attente depuis<BR>{?time_at_creation=?Unknown:{time_at_creation}}:{job_state=4?retenu depuis le<BR>{?time_at_creation=?Unknown:{time_at_creation}}:
{job_state=5?en cours d'impression depuis<BR>{?time_at_processing=?Unknown:{time_at_processing}}:{job_state=6?arr&ecirc;t&eacute;:
{job_state=7?annul&eacute; depuis<BR>{?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?annul&eacute;:termin&eacute; depuis<BR>{?time_at_completed=?Unknown:{time_at_completed}}}}}}}}&nbsp;{job_printer_state_message?<BR>
<TD>{job_state=3?en attente depuis<BR>{?time_at_creation=?Inconnu:{time_at_creation}}:{job_state=4?retenu depuis le<BR>{?time_at_creation=?Inconnu:{time_at_creation}}:
{job_state=5?en cours d'impression depuis<BR>{?time_at_processing=?Inconnu:{time_at_processing}}:{job_state=6?arr&ecirc;t&eacute;:
{job_state=7?annul&eacute; depuis<BR>{?time_at_completed=?Inconnu:{time_at_completed}}:{job_state=8?annul&eacute;:termin&eacute; depuis<BR>{?time_at_completed=?Inconnu:{time_at_completed}}}}}}}}&nbsp;{job_printer_state_message?<BR>
<EM>"{job_printer_state_message}"</EM>:}</TD>
<TD>
{job_preserved>0?{job_state>5?
+2 -2
Ver Arquivo
@@ -1,8 +1,8 @@
<H2 CLASS="title">D&eacute;finir {is_class?la classe:l'imprimante} {printer_name} comme imprimante par d&eacute;faut</H2>
<H2 CLASS="title">D&eacute;finir {is_class?la classe:l'imprimante} {printer_name} comme {is_class?classe:imprimante} par d&eacute;faut</H2>
<P>{is_class?La classe:L'imprimante} <A
HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
a &eacute;t&eacute; d&eacute;finie comme imprimante par d&eacute;faut du serveur.</P>
a &eacute;t&eacute; d&eacute;finie comme {is_class?classe:imprimante} par d&eacute;faut du serveur.</P>
<BLOCKQUOTE><B>Note:</B> Tout param&egrave;tre utilisateur d&eacute;fini via la commande <TT>lpoptions</TT> sera prioritaire sur le param&egrave;tre d&eacute;fini i&ccedil;i.
</BLOCKQUOTE>
+1 -1
Ver Arquivo
@@ -1,6 +1,6 @@
<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
({printer_state=3?Inoccupée:{printer_state=4?En cours d'impression:En pause}},
{printer_is_accepting_jobs=0?Rejette les tâches:accepte les tâches},
{printer_is_accepting_jobs=0?Rejette les tâches:Accepte les tâches},
{server_is_sharing_printers=0?non:{printer_is_shared=0?non:}} partagée{default_name={printer_name}?, imprimante par défaut:})</H2>
<FORM METHOD="POST" ACTION="{printer_uri_supported}" NAME="maintenance">
+1 -1
Ver Arquivo
@@ -156,7 +156,7 @@ INCLUDE "ipp-2.0.test"
EXPECT pwg-raster-document-resolution-supported WITH-VALUE 150dpi DEFINE-MATCH HAVE_150DPI
EXPECT pwg-raster-document-resolution-supported WITH-VALUE 180dpi DEFINE-MATCH HAVE_180DPI
EXPECT pwg-raster-document-resolution-supported WITH-VALUE 300dpi DEFINE-MATCH HAVE_300DPI
EXPECT pwg-raster-document-resolution-supported WITH-VALUE 3600dpi DEFINE-MATCH HAVE_360DPI
EXPECT pwg-raster-document-resolution-supported WITH-VALUE 360dpi DEFINE-MATCH HAVE_360DPI
EXPECT pwg-raster-document-resolution-supported WITH-VALUE 600dpi DEFINE-MATCH HAVE_600DPI
EXPECT pwg-raster-document-resolution-supported WITH-VALUE 720dpi DEFINE-MATCH HAVE_720DPI
+12 -1
Ver Arquivo
@@ -1194,7 +1194,12 @@ main(int argc, /* I - Number of command-line args */
*domain; /* Domain, if any */
strlcpy(buf, search, sizeof(buf));
if ((regtype = strstr(buf, "._")) != NULL)
if (!strncmp(buf, "_http._", 7) || !strncmp(buf, "_https._", 8) || !strncmp(buf, "_ipp._", 6) || !strncmp(buf, "_ipps._", 7))
{
regtype = buf;
}
else if ((regtype = strstr(buf, "._")) != NULL)
{
if (strcmp(regtype, "._tcp"))
{
@@ -1249,6 +1254,9 @@ main(int argc, /* I - Number of command-line args */
service = get_service(services, name, regtype, domain);
if (getenv("IPPFIND_DEBUG"))
fprintf(stderr, "Resolving name=\"%s\", regtype=\"%s\", domain=\"%s\"\n", name, regtype, domain);
#ifdef HAVE_DNSSD
service->ref = dnssd_ref;
err = DNSServiceResolve(&(service->ref),
@@ -1274,6 +1282,9 @@ main(int argc, /* I - Number of command-line args */
* Browse for services of the given type...
*/
if (getenv("IPPFIND_DEBUG"))
fprintf(stderr, "Browsing for regtype=\"%s\", domain=\"%s\"\n", regtype, domain);
#ifdef HAVE_DNSSD
DNSServiceRef ref; /* Browse reference */
+1 -1
Ver Arquivo
@@ -1269,7 +1269,7 @@ do_test(_ipp_file_t *f, /* I - IPP data file */
if (ippGetName(attrptr))
{
if (cupsArrayFind(a, (void *)ippGetName(attrptr)))
if (cupsArrayFind(a, (void *)ippGetName(attrptr)) && data->output < _CUPS_OUTPUT_LIST)
add_stringf(data->errors, "Duplicate \"%s\" attribute in %s group",
ippGetName(attrptr), ippTagString(group));
+6 -5
Ver Arquivo
@@ -489,11 +489,6 @@ StrictConformance Yes
Browsing Off
Listen localhost:$port
Listen $BASE/sock
PassEnv DYLD_LIBRARY_PATH
PassEnv LD_LIBRARY_PATH
PassEnv LD_PRELOAD
PassEnv LOCALEDIR
PassEnv SHLIB_PATH
MaxSubscriptions 3
MaxLogSize 0
AccessLogLevel actions
@@ -529,6 +524,12 @@ TempDir $BASE/spool/temp
AccessLog $BASE/log/access_log
ErrorLog $BASE/log/error_log
PageLog $BASE/log/page_log
PassEnv DYLD_LIBRARY_PATH
PassEnv LD_LIBRARY_PATH
PassEnv LD_PRELOAD
PassEnv LOCALEDIR
PassEnv SHLIB_PATH
EOF
if test $ssltype != 0 -a `uname` = Darwin; then
+5 -1
Ver Arquivo
@@ -7299,7 +7299,7 @@
72BF96371333042100B1EAD7 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0930;
LastUpgradeCheck = 1000;
ORGANIZATIONNAME = "Apple Inc.";
TargetAttributes = {
270695FD1CADF3E200FFE5FB = {
@@ -11368,10 +11368,12 @@
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
@@ -11415,10 +11417,12 @@
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;