Comparar commits
73 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 82e3ee0e32 | |||
| 1f2a315c2b | |||
| 9183329049 | |||
| 2ed9e648a7 | |||
| 7a672d0bdc | |||
| d42bc1c4f9 | |||
| 9c2b03c1f7 | |||
| 40a6b95e55 | |||
| ed181c24e4 | |||
| dbdf8a2a45 | |||
| b018978c27 | |||
| bb640280b6 | |||
| 0f98a48497 | |||
| a00d9eaecf | |||
| f937322154 | |||
| 2cfb7357e2 | |||
| 71023b1700 | |||
| 5d2ac21a00 | |||
| 81d8eb3af3 | |||
| b4f9e3f7ba | |||
| 7a2be9facf | |||
| 5ea07c61ba | |||
| e8378539e0 | |||
| 9240cd70a2 | |||
| e90a53ab8d | |||
| e6330cabb8 | |||
| eb03b2d232 | |||
| 1a3915dded | |||
| d6ec252e9b | |||
| 2bae6fc518 | |||
| 6f7bd716e6 | |||
| fd8e2bdb2d | |||
| 56ba2f5122 | |||
| b1f4c1e664 | |||
| b2b97b71f1 | |||
| f4a99aeb02 | |||
| f950947148 | |||
| b31d4ca525 | |||
| 6d391f7705 | |||
| e2eb28cfcf | |||
| 3ff5a8e393 | |||
| bea505c32e | |||
| 93df3887e0 | |||
| 986daa034e | |||
| 5129a91c54 | |||
| 025b8ce8f6 | |||
| 45f72738bb | |||
| 397eefaa69 | |||
| 9e82c53ebc | |||
| 7454512be9 | |||
| 3c985bae7f | |||
| ec8beb8952 | |||
| 4c793ee9ce | |||
| e35d176c54 | |||
| 2a06655e5c | |||
| 692b157d0c | |||
| 13e6d13ea4 | |||
| fca9a9818d | |||
| 771e64526d | |||
| 5b835597f3 | |||
| 99c3e9f3f2 | |||
| 2b47f09162 | |||
| 6936a1222d | |||
| dc407006a7 | |||
| cfaaa07a19 | |||
| eff8c82f6a | |||
| 3ba95ec48d | |||
| f8688d733b | |||
| 1e01995a1c | |||
| 68dc110f52 | |||
| 998a43a0dd | |||
| bc5060a1dd | |||
| eda46e3aac |
+1
-8
@@ -65,6 +65,7 @@ cups/testppd
|
||||
cups/testpwg
|
||||
cups/testraster
|
||||
cups/testsnmp
|
||||
cups/testthreads
|
||||
cups/tlscheck
|
||||
desktop/cups.desktop
|
||||
doc/index.html
|
||||
@@ -79,14 +80,6 @@ filter/rastertopwg
|
||||
locale/checkpo
|
||||
locale/po2strings
|
||||
locale/strings2po
|
||||
man/client.conf.man
|
||||
man/cups-files.conf.man
|
||||
man/cups-lpd.man
|
||||
man/cups-snmp.man
|
||||
man/cupsaddsmb.man
|
||||
man/cupsd.conf.man
|
||||
man/cupsd.man
|
||||
man/lpoptions.man
|
||||
man/mantohtml
|
||||
monitor/bcp
|
||||
monitor/tbcp
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
queries:
|
||||
- exclude: cpp/integer-multiplication-cast-to-long
|
||||
- exclude: cpp/missing-header-guard
|
||||
- exclude: cpp/short-global-name
|
||||
+55
-1
@@ -1,6 +1,60 @@
|
||||
CHANGES - 2.3.0 - 2019-08-23
|
||||
CHANGES - 2.3.3 - 2020-04-24
|
||||
============================
|
||||
|
||||
Changes in CUPS v2.3.3
|
||||
----------------------
|
||||
|
||||
- CVE-2020-3898: The `ppdOpen` function did not handle invalid UI
|
||||
constraint. `ppdcSource::get_resolution` function did not handle
|
||||
invalid resolution strings.
|
||||
- CVE-2019-8842: The `ippReadIO` function may under-read an extension
|
||||
field.
|
||||
- Fixed WARNING_OPTIONS support for GCC 9.x
|
||||
|
||||
Changes in CUPS v2.3.2
|
||||
----------------------
|
||||
|
||||
- Localization updates.
|
||||
|
||||
|
||||
Changes in CUPS v2.3.1
|
||||
----------------------
|
||||
|
||||
- Documentation updates (Issue #5661, #5674, #5682)
|
||||
- CVE-2019-2228: The `ippSetValuetag` function did not validate the default
|
||||
language value.
|
||||
- Fixed a crash bug in the web interface (Issue #5621)
|
||||
- The PPD cache code now looks up page sizes using their dimensions
|
||||
(Issue #5633)
|
||||
- PPD files containing "custom" option keywords did not work (Issue #5639)
|
||||
- Added a workaround for the scheduler's systemd support (Issue #5640)
|
||||
- On Windows, TLS certificates generated on February 29 would likely fail
|
||||
(Issue #5643)
|
||||
- Added a DigestOptions directive for the `client.conf` file to control whether
|
||||
MD5-based Digest authentication is allowed (Issue #5647)
|
||||
- Fixed a bug in the handling of printer resource files (Issue #5652)
|
||||
- The libusb-based USB backend now reports an error when the distribution
|
||||
permissions are wrong (Issue #5658)
|
||||
- Added paint can labels to Dymo driver (Issue #5662)
|
||||
- The `ippeveprinter` program now supports authentication (Issue #5665)
|
||||
- The `ippeveprinter` program now advertises DNS-SD services on the correct
|
||||
interfaces, and provides a way to turn them off (Issue #5666)
|
||||
- The `--with-dbusdir` option was ignored by the configure script (Issue #5671)
|
||||
- Sandboxed applications were not able to get the default printer (Issue #5676)
|
||||
- Log file access controls were not preserved by `cupsctl` (Issue #5677)
|
||||
- Default printers set with `lpoptions` did not work in all cases (Issue #5681,
|
||||
Issue #5683, Issue #5684)
|
||||
- Fixed an error in the jobs web interface template (Issue #5694)
|
||||
- Fixed an off-by-one error in `ippEnumString` (Issue #5695)
|
||||
- Fixed some new compiler warnings (Issue #5700)
|
||||
- Fixed a few issues with the Apple Raster support (rdar://55301114)
|
||||
- The IPP backend did not detect all cases where a job should be retried using
|
||||
a raster format (rdar://56021091)
|
||||
- Fixed spelling of "fold-accordion".
|
||||
- Fixed the default common name for TLS certificates used by `ippeveprinter`.
|
||||
- Fixed the option names used for IPP Everywhere finishing options.
|
||||
- Added support for the second roll of the DYMO Twin/DUO label printers.
|
||||
|
||||
|
||||
Changes in CUPS v2.3.0
|
||||
----------------------
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
INSTALL - CUPS v2.3.0 - 2019-08-21
|
||||
INSTALL - CUPS v2.3.3 - 2020-04-24
|
||||
==================================
|
||||
|
||||
This file describes how to compile and install CUPS from source code. For more
|
||||
|
||||
+5
-5
@@ -1,4 +1,4 @@
|
||||
README - CUPS v2.3.0 - 2019-08-21
|
||||
README - CUPS v2.3.3 - 2020-04-24
|
||||
=================================
|
||||
|
||||
INTRODUCTION
|
||||
@@ -65,11 +65,11 @@ in your browser to access the printer administration tools:
|
||||
|
||||
*Do not* use the hostname for your machine - it will not work with the default
|
||||
CUPS configuration. To enable administration access on other addresses, check
|
||||
the `Allow Remote Administration` box and click on the `Change Settings button.
|
||||
the `Allow Remote Administration` box and click on the `Change Settings` button.
|
||||
|
||||
You will be asked for the administration password (root or any other user in the
|
||||
sys/system/root/admin/lpadmin group on your system) when performing any
|
||||
administrative function.
|
||||
"sys", "system", "root", "admin", or "lpadmin" group on your system) when
|
||||
performing any administrative function.
|
||||
|
||||
|
||||
SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE
|
||||
@@ -79,7 +79,7 @@ CUPS currently uses PPD (PostScript Printer Description) files that describe
|
||||
printer capabilities and driver programs needed for each printer. The
|
||||
`everywhere` PPD is used for nearly all modern networks printers sold since
|
||||
about 2009. For example, the following command creates a print queue for a
|
||||
printer at address 11.22.33.44:
|
||||
printer at address "11.22.33.44":
|
||||
|
||||
lpadmin -p printername -E -v ipp://11.22.33.44/ipp/print -m everywhere
|
||||
|
||||
|
||||
+19
-11
@@ -233,7 +233,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
int waitjob, /* Wait for job complete? */
|
||||
waitjob_tries = 0, /* Number of times we've waited */
|
||||
waitprinter; /* Wait for printer ready? */
|
||||
time_t waittime; /* Wait time for held jobs */
|
||||
_cups_monitor_t monitor; /* Monitoring data */
|
||||
ipp_attribute_t *job_id_attr; /* job-id attribute */
|
||||
int job_id; /* job-id value */
|
||||
@@ -1450,6 +1449,8 @@ main(int argc, /* I - Number of command-line args */
|
||||
monitor.printer_state = IPP_PSTATE_IDLE;
|
||||
monitor.retryable = argc == 6 && document_format && strcmp(document_format, "image/pwg-raster") && strcmp(document_format, "image/urf");
|
||||
|
||||
fprintf(stderr, "DEBUG: retryable=%d\n", monitor.retryable);
|
||||
|
||||
if (create_job)
|
||||
{
|
||||
monitor.job_name = argv[3];
|
||||
@@ -1867,21 +1868,29 @@ main(int argc, /* I - Number of command-line args */
|
||||
response = cupsGetResponse(http, resource);
|
||||
ippDelete(request);
|
||||
|
||||
fprintf(stderr, "DEBUG: Send-Document: %s (%s)\n",
|
||||
ippErrorString(cupsLastError()), cupsLastErrorString());
|
||||
fprintf(stderr, "DEBUG: Send-Document: %s (%s)\n", ippErrorString(cupsLastError()), cupsLastErrorString());
|
||||
debug_attributes(response);
|
||||
ippDelete(response);
|
||||
|
||||
if (cupsLastError() > IPP_STATUS_OK_CONFLICTING && !job_canceled)
|
||||
{
|
||||
ipp_attribute_t *reasons = ippFindAttribute(response, "job-state-reasons", IPP_TAG_KEYWORD);
|
||||
/* job-state-reasons values */
|
||||
|
||||
ipp_status = cupsLastError();
|
||||
|
||||
_cupsLangPrintFilter(stderr, "ERROR",
|
||||
_("Unable to add document to print job."));
|
||||
if (ippContainsString(reasons, "document-format-error"))
|
||||
ipp_status = IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR;
|
||||
else if (ippContainsString(reasons, "document-unprintable"))
|
||||
ipp_status = IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE;
|
||||
|
||||
ippDelete(response);
|
||||
_cupsLangPrintFilter(stderr, "ERROR", _("Unable to add document to print job."));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
ippDelete(response);
|
||||
|
||||
password_tries = 0;
|
||||
|
||||
if (num_files == 0 || fd < 0)
|
||||
@@ -1898,7 +1907,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
fprintf(stderr, "PAGE: 1 %d\n", copies_sup ? atoi(argv[4]) : 1);
|
||||
copies_remaining --;
|
||||
}
|
||||
else if ((ipp_status == IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED || ipp_status == IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE) &&
|
||||
else if ((ipp_status == IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED || ipp_status == IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR || ipp_status == IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE) &&
|
||||
argc == 6 &&
|
||||
document_format && strcmp(document_format, "image/pwg-raster") && strcmp(document_format, "image/urf"))
|
||||
{
|
||||
@@ -1999,7 +2008,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
_cupsLangPrintFilter(stderr, "INFO", _("Waiting for job to complete."));
|
||||
|
||||
for (delay = _cupsNextDelay(0, &prev_delay), waittime = time(NULL) + 30; !job_canceled;)
|
||||
for (delay = _cupsNextDelay(0, &prev_delay); !job_canceled;)
|
||||
{
|
||||
/*
|
||||
* Check for side-channel requests...
|
||||
@@ -2114,11 +2123,10 @@ main(int argc, /* I - Number of command-line args */
|
||||
job_sheets->values[0].integer);
|
||||
|
||||
/*
|
||||
* Stop polling if the job is finished or pending-held for 30 seconds...
|
||||
* Stop polling if the job is finished or pending-held...
|
||||
*/
|
||||
|
||||
if (job_state->values[0].integer > IPP_JSTATE_STOPPED ||
|
||||
(job_state->values[0].integer == IPP_JSTATE_HELD && time(NULL) > waittime))
|
||||
if (job_state->values[0].integer > IPP_JSTATE_STOPPED || job_state->values[0].integer == IPP_JSTATE_HELD)
|
||||
{
|
||||
ippDelete(response);
|
||||
break;
|
||||
|
||||
+8
-4
@@ -71,7 +71,11 @@ static int abort_job = 0; /* Non-zero if we get SIGTERM */
|
||||
*/
|
||||
|
||||
static int cups_rresvport(int *port, int family);
|
||||
static int lpd_command(int lpd_fd, char *format, ...);
|
||||
static int lpd_command(int lpd_fd, char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
static int lpd_queue(const char *hostname, http_addrlist_t *addrlist, const char *printer, int print_fd, int snmp_fd, int mode, const char *user, const char *title, int copies, int banner, int format, int order, int reserve, int manual_copies, int timeout, int contimeout, const char *orighost) _CUPS_NONNULL((1,2,3,7,8,17));
|
||||
static ssize_t lpd_write(int lpd_fd, char *buffer, size_t length);
|
||||
static void sigterm_handler(int sig);
|
||||
@@ -1042,7 +1046,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
* Send the control file...
|
||||
*/
|
||||
|
||||
if (lpd_command(fd, "\002%d cfA%03.3d%.15s\n", strlen(control),
|
||||
if (lpd_command(fd, "\002%d cfA%03d%.15s\n", (int)strlen(control),
|
||||
(int)getpid() % 1000, localhost))
|
||||
{
|
||||
close(fd);
|
||||
@@ -1092,7 +1096,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
* Send the print file...
|
||||
*/
|
||||
|
||||
if (lpd_command(fd, "\003" CUPS_LLFMT " dfA%03.3d%.15s\n",
|
||||
if (lpd_command(fd, "\003" CUPS_LLFMT " dfA%03d%.15s\n",
|
||||
CUPS_LLCAST filestats.st_size, (int)getpid() % 1000,
|
||||
localhost))
|
||||
{
|
||||
@@ -1175,7 +1179,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
* Send control file...
|
||||
*/
|
||||
|
||||
if (lpd_command(fd, "\002%d cfA%03.3d%.15s\n", strlen(control),
|
||||
if (lpd_command(fd, "\002%d cfA%03d%.15s\n", (int)strlen(control),
|
||||
(int)getpid() % 1000, localhost))
|
||||
{
|
||||
close(fd);
|
||||
|
||||
@@ -826,8 +826,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
err = libusb_init(NULL);
|
||||
if (err)
|
||||
{
|
||||
fprintf(stderr, "DEBUG: Unable to initialize USB access via libusb, "
|
||||
"libusb error %i\n", (int)err);
|
||||
fprintf(stderr, "ERROR: Unable to initialize USB access via libusb, libusb error %i (%s)\n", (int)err, libusb_strerror((int)err));
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -879,7 +878,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
protocol = 0;
|
||||
|
||||
for (altset = 0, altptr = ifaceptr->altsetting;
|
||||
altset < ifaceptr->num_altsetting;
|
||||
altset < ifaceptr->num_altsetting; // lgtm [cpp/comparison-with-wider-type]
|
||||
altset ++, altptr ++)
|
||||
{
|
||||
/*
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "lpr" command for CUPS.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
@@ -445,9 +445,9 @@ usage(void)
|
||||
" Specify 2-sided portrait printing"));
|
||||
_cupsLangPuts(stdout, _("-o sides=two-sided-short-edge\n"
|
||||
" Specify 2-sided landscape printing"));
|
||||
_cupsLangPuts(stdout, _("-P destination Specify the destination"));
|
||||
_cupsLangPuts(stdout, _("-q Specify the job should be held for printing"));
|
||||
_cupsLangPuts(stdout, _("-r Remove the file(s) after submission"));
|
||||
_cupsLangPuts(stdout, _("-P destination Specify the destination"));
|
||||
_cupsLangPuts(stdout, _("-T title Specify the job title"));
|
||||
_cupsLangPuts(stdout, _("-U username Specify the username to use for authentication"));
|
||||
|
||||
|
||||
+4
-1
@@ -170,6 +170,9 @@ cgiGetArray(const char *name, /* I - Name of array variable */
|
||||
if (element < 0 || element >= var->nvalues)
|
||||
return (NULL);
|
||||
|
||||
if (var->values[element] == NULL)
|
||||
return (NULL);
|
||||
|
||||
return (strdup(var->values[element]));
|
||||
}
|
||||
|
||||
@@ -980,7 +983,7 @@ cgi_initialize_post(void)
|
||||
*/
|
||||
|
||||
length = (size_t)strtol(content_length, NULL, 10);
|
||||
data = malloc(length + 1);
|
||||
data = malloc(length + 1); // lgtm [cpp/uncontrolled-allocation-size]
|
||||
|
||||
if (data == NULL)
|
||||
return (0);
|
||||
|
||||
@@ -293,14 +293,14 @@ fi
|
||||
LIBS="$SAVELIBS"
|
||||
|
||||
dnl Check for DBUS support
|
||||
AC_ARG_ENABLE(dbus, [ --disable-dbus build without DBUS support])
|
||||
AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ],
|
||||
DBUSDIR="$withval")
|
||||
|
||||
DBUSDIR=""
|
||||
DBUS_NOTIFIER=""
|
||||
DBUS_NOTIFIERLIBS=""
|
||||
|
||||
AC_ARG_ENABLE(dbus, [ --disable-dbus build without DBUS support])
|
||||
AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ],
|
||||
DBUSDIR="$withval")
|
||||
|
||||
if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdarwin; then
|
||||
AC_MSG_CHECKING(for DBUS)
|
||||
if $PKGCONFIG --exists dbus-1; then
|
||||
@@ -317,7 +317,7 @@ if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdar
|
||||
AC_CHECK_FUNC(dbus_threads_init,
|
||||
AC_DEFINE(HAVE_DBUS_THREADS_INIT))
|
||||
LIBS="$SAVELIBS"
|
||||
if test -d /etc/dbus-1; then
|
||||
if test -d /etc/dbus-1 -a "x$DBUSDIR" = x; then
|
||||
DBUSDIR="/etc/dbus-1"
|
||||
fi
|
||||
else
|
||||
|
||||
@@ -175,10 +175,8 @@ if test -n "$GCC"; then
|
||||
# doesn't trigger...
|
||||
gccversion=`$CC --version | head -1 | awk '{print $NF}'`
|
||||
case "$gccversion" in
|
||||
1.* | 2.* | 3.* | 4.* | 5.* | 6.* | \(clang-*)
|
||||
;;
|
||||
*)
|
||||
WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-format-overflow -Wno-tautological-compare"
|
||||
7.* | 8.*)
|
||||
WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-tautological-compare"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
@@ -58,7 +58,6 @@ if test x$enable_ssl != xno; then
|
||||
|
||||
SAVELIBS="$LIBS"
|
||||
LIBS="$LIBS $SSLLIBS"
|
||||
AC_CHECK_FUNC(gnutls_fips140_set_mode, AC_DEFINE(HAVE_GNUTLS_FIPS140_SET_MODE))
|
||||
AC_CHECK_FUNC(gnutls_transport_set_pull_timeout_function, AC_DEFINE(HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION))
|
||||
AC_CHECK_FUNC(gnutls_priority_set_direct, AC_DEFINE(HAVE_GNUTLS_PRIORITY_SET_DIRECT))
|
||||
LIBS="$SAVELIBS"
|
||||
|
||||
@@ -301,13 +301,6 @@
|
||||
#undef HAVE_SSL
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the gnutls_fips140_set_mode function?
|
||||
*/
|
||||
|
||||
#undef HAVE_GNUTLS_FIPS140_SET_MODE
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the gnutls_transport_set_pull_timeout_function function?
|
||||
*/
|
||||
|
||||
externo
+16
-24
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for CUPS 2.3.0.
|
||||
# Generated by GNU Autoconf 2.69 for CUPS 2.3.3.
|
||||
#
|
||||
# Report bugs to <https://github.com/apple/cups/issues>.
|
||||
#
|
||||
@@ -580,8 +580,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='CUPS'
|
||||
PACKAGE_TARNAME='cups'
|
||||
PACKAGE_VERSION='2.3.0'
|
||||
PACKAGE_STRING='CUPS 2.3.0'
|
||||
PACKAGE_VERSION='2.3.3'
|
||||
PACKAGE_STRING='CUPS 2.3.3'
|
||||
PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
|
||||
PACKAGE_URL='https://www.cups.org/'
|
||||
|
||||
@@ -1467,7 +1467,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.3.0 to adapt to many kinds of systems.
|
||||
\`configure' configures CUPS 2.3.3 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1532,7 +1532,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of CUPS 2.3.0:";;
|
||||
short | recursive ) echo "Configuration of CUPS 2.3.3:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1713,7 +1713,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
CUPS configure 2.3.0
|
||||
CUPS configure 2.3.3
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -2177,7 +2177,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.3.0, which was
|
||||
It was created by CUPS $as_me 2.3.3, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -2694,7 +2694,7 @@ done
|
||||
ac_config_headers="$ac_config_headers config.h"
|
||||
|
||||
|
||||
CUPS_VERSION="2.3.0"
|
||||
CUPS_VERSION="2.3.3"
|
||||
CUPS_REVISION=""
|
||||
CUPS_BUILD="cups-$CUPS_VERSION"
|
||||
|
||||
@@ -5775,6 +5775,10 @@ fi
|
||||
fi
|
||||
LIBS="$SAVELIBS"
|
||||
|
||||
DBUSDIR=""
|
||||
DBUS_NOTIFIER=""
|
||||
DBUS_NOTIFIERLIBS=""
|
||||
|
||||
# Check whether --enable-dbus was given.
|
||||
if test "${enable_dbus+set}" = set; then :
|
||||
enableval=$enable_dbus;
|
||||
@@ -5787,10 +5791,6 @@ if test "${with_dbusdir+set}" = set; then :
|
||||
fi
|
||||
|
||||
|
||||
DBUSDIR=""
|
||||
DBUS_NOTIFIER=""
|
||||
DBUS_NOTIFIERLIBS=""
|
||||
|
||||
if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdarwin; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5
|
||||
$as_echo_n "checking for DBUS... " >&6; }
|
||||
@@ -5818,7 +5818,7 @@ if test "x$ac_cv_func_dbus_threads_init" = xyes; then :
|
||||
fi
|
||||
|
||||
LIBS="$SAVELIBS"
|
||||
if test -d /etc/dbus-1; then
|
||||
if test -d /etc/dbus-1 -a "x$DBUSDIR" = x; then
|
||||
DBUSDIR="/etc/dbus-1"
|
||||
fi
|
||||
else
|
||||
@@ -6911,9 +6911,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
# doesn't trigger...
|
||||
gccversion=`$CC --version | head -1 | awk '{print $NF}'`
|
||||
case "$gccversion" in
|
||||
1.* | 2.* | 3.* | 4.* | 5.* | 6.* | \(clang-*)
|
||||
;;
|
||||
*)
|
||||
7.* | 8.* | 9.*)
|
||||
WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-format-overflow -Wno-tautological-compare"
|
||||
;;
|
||||
esac
|
||||
@@ -8308,12 +8306,6 @@ fi
|
||||
|
||||
SAVELIBS="$LIBS"
|
||||
LIBS="$LIBS $SSLLIBS"
|
||||
ac_fn_c_check_func "$LINENO" "gnutls_fips140_set_mode" "ac_cv_func_gnutls_fips140_set_mode"
|
||||
if test "x$ac_cv_func_gnutls_fips140_set_mode" = xyes; then :
|
||||
$as_echo "#define HAVE_GNUTLS_FIPS140_SET_MODE 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
ac_fn_c_check_func "$LINENO" "gnutls_transport_set_pull_timeout_function" "ac_cv_func_gnutls_transport_set_pull_timeout_function"
|
||||
if test "x$ac_cv_func_gnutls_transport_set_pull_timeout_function" = xyes; then :
|
||||
$as_echo "#define HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION 1" >>confdefs.h
|
||||
@@ -10393,7 +10385,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.3.0, which was
|
||||
This file was extended by CUPS $as_me 2.3.3, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -10456,7 +10448,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.3.0
|
||||
CUPS config.status 2.3.3
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
||||
+1
-1
@@ -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.3.0], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
|
||||
AC_INIT([CUPS], [2.3.3], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
|
||||
|
||||
sinclude(config-scripts/cups-opsys.m4)
|
||||
sinclude(config-scripts/cups-common.m4)
|
||||
|
||||
+5
-2
@@ -188,7 +188,7 @@ tls.o: tls.c cups-private.h string-private.h ../config.h \
|
||||
ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \
|
||||
pwg.h http-private.h ../cups/language.h ../cups/http.h \
|
||||
language-private.h ../cups/transcode.h pwg-private.h thread-private.h \
|
||||
debug-internal.h debug-private.h tls-darwin.c
|
||||
debug-internal.h debug-private.h tls-darwin.c tls-darwin.h
|
||||
transcode.o: transcode.c cups-private.h string-private.h ../config.h \
|
||||
../cups/versioning.h array-private.h ../cups/array.h versioning.h \
|
||||
ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \
|
||||
@@ -214,7 +214,7 @@ adminutil.o: adminutil.c cups-private.h string-private.h ../config.h \
|
||||
language-private.h ../cups/transcode.h pwg-private.h thread-private.h \
|
||||
debug-internal.h debug-private.h ppd.h cups.h raster.h adminutil.h
|
||||
backchannel.o: backchannel.c cups.h file.h versioning.h ipp.h http.h \
|
||||
array.h language.h pwg.h
|
||||
array.h language.h pwg.h sidechannel.h
|
||||
backend.o: backend.c cups-private.h string-private.h ../config.h \
|
||||
../cups/versioning.h array-private.h ../cups/array.h versioning.h \
|
||||
ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \
|
||||
@@ -401,6 +401,9 @@ testsnmp.o: testsnmp.c cups-private.h string-private.h ../config.h \
|
||||
pwg.h http-private.h ../cups/language.h ../cups/http.h \
|
||||
language-private.h ../cups/transcode.h pwg-private.h thread-private.h \
|
||||
snmp-private.h
|
||||
testthreads.o: testthreads.c ../cups/cups.h file.h versioning.h ipp.h \
|
||||
http.h array.h language.h pwg.h ../cups/thread-private.h ../config.h \
|
||||
../cups/versioning.h
|
||||
tlscheck.o: tlscheck.c cups-private.h string-private.h ../config.h \
|
||||
../cups/versioning.h array-private.h ../cups/array.h versioning.h \
|
||||
ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \
|
||||
|
||||
@@ -106,6 +106,7 @@ TESTOBJS = \
|
||||
testpwg.o \
|
||||
testraster.o \
|
||||
testsnmp.o \
|
||||
testthreads.o \
|
||||
tlscheck.o
|
||||
OBJS = \
|
||||
$(LIBOBJS) \
|
||||
@@ -191,6 +192,7 @@ UNITTARGETS = \
|
||||
testpwg \
|
||||
testraster \
|
||||
testsnmp \
|
||||
testthreads \
|
||||
tlscheck
|
||||
|
||||
TARGETS = \
|
||||
@@ -700,6 +702,16 @@ testsnmp: testsnmp.o $(LIBCUPSSTATIC)
|
||||
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
|
||||
|
||||
|
||||
#
|
||||
# testthreads (dependency on static CUPS library is intentional)
|
||||
#
|
||||
|
||||
testthreads: testthreads.o $(LIBCUPSSTATIC)
|
||||
echo Linking $@...
|
||||
$(LD_CC) $(ALL_LDFLAGS) -o $@ testthreads.o $(LINKCUPSSTATIC)
|
||||
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
|
||||
|
||||
|
||||
#
|
||||
# tlscheck (dependency on static CUPS library is intentional)
|
||||
#
|
||||
|
||||
+3
-7
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Administration utility API definitions for CUPS.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 2001-2007 by Easy Software Products.
|
||||
*
|
||||
* Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
@@ -738,13 +738,9 @@ cupsAdminSetServerSettings(
|
||||
{
|
||||
if (!wrote_browsing)
|
||||
{
|
||||
int new_share_printers = (share_printers > 0 ||
|
||||
(share_printers == -1 &&
|
||||
old_share_printers > 0));
|
||||
|
||||
wrote_browsing = 1;
|
||||
|
||||
if (new_share_printers)
|
||||
if (share_printers)
|
||||
{
|
||||
const char *localp = cupsGetOption("BrowseLocalProtocols",
|
||||
num_settings, settings);
|
||||
@@ -989,7 +985,7 @@ cupsAdminSetServerSettings(
|
||||
|
||||
in_cancel_job = 0;
|
||||
}
|
||||
else if ((((in_admin_location || in_conf_location || in_root_location) &&
|
||||
else if ((((in_admin_location || in_conf_location || in_root_location || in_log_location) &&
|
||||
(remote_admin >= 0 || remote_any >= 0)) ||
|
||||
(in_root_location && share_printers >= 0)) &&
|
||||
(!_cups_strcasecmp(line, "Allow") || !_cups_strcasecmp(line, "Deny") ||
|
||||
|
||||
+1
-1
@@ -289,7 +289,7 @@ cupsDoAuthentication(
|
||||
|
||||
if (_httpSetDigestAuthString(http, nonce, method, resource))
|
||||
{
|
||||
DEBUG_puts("2cupsDoAuthentication: Using Basic.");
|
||||
DEBUG_puts("2cupsDoAuthentication: Using Digest.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,12 @@ typedef struct _cups_raster_error_s /**** Error buffer structure ****/
|
||||
*end; /* End of buffer */
|
||||
} _cups_raster_error_t;
|
||||
|
||||
typedef enum _cups_digestoptions_e /**** Digest Options values */
|
||||
{
|
||||
_CUPS_DIGESTOPTIONS_NONE, /* No Digest authentication options */
|
||||
_CUPS_DIGESTOPTIONS_DENYMD5 /* Do not use MD5 hashes for digest */
|
||||
} _cups_digestoptions_t;
|
||||
|
||||
typedef enum _cups_uatokens_e /**** UserAgentTokens values */
|
||||
{
|
||||
_CUPS_UATOKENS_NONE, /* Do not send User-Agent */
|
||||
@@ -76,6 +82,7 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
|
||||
*cups_serverroot,
|
||||
/* CUPS_SERVERROOT environment var */
|
||||
*cups_statedir, /* CUPS_STATEDIR environment var */
|
||||
*home, /* HOME environment var */
|
||||
*localedir; /* LOCALDIR environment var */
|
||||
|
||||
/* adminutil.c */
|
||||
@@ -157,6 +164,7 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
|
||||
char tempfile[1024]; /* cupsTempFd/File buffer */
|
||||
|
||||
/* usersys.c */
|
||||
_cups_digestoptions_t digestoptions; /* DigestOptions setting */
|
||||
_cups_uatokens_t uatokens; /* UserAgentTokens setting */
|
||||
http_encryption_t encryption; /* Encryption setting */
|
||||
char user[65], /* User name */
|
||||
|
||||
+2
-2
@@ -42,10 +42,10 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 2.0300
|
||||
# define CUPS_VERSION 2.0303
|
||||
# define CUPS_VERSION_MAJOR 2
|
||||
# define CUPS_VERSION_MINOR 3
|
||||
# define CUPS_VERSION_PATCH 0
|
||||
# define CUPS_VERSION_PATCH 3
|
||||
|
||||
# define CUPS_BC_FD 3
|
||||
/* Back-channel file descriptor for
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
title: CUPS Programming Manual
|
||||
author: Michael R Sweet
|
||||
copyright: Copyright © 2007-2019 by Apple Inc. All Rights Reserved.
|
||||
version: 2.3.0
|
||||
version: 2.3.3
|
||||
...
|
||||
|
||||
> Please [file issues on Github](https://github.com/apple/cups/issues) to
|
||||
@@ -108,7 +108,7 @@ to the file. Build and run (CMD+R) to see the list of destinations.
|
||||
|
||||
### Compiling with GCC
|
||||
|
||||
From the command-line, create a file called `sample.c` using your favorite
|
||||
From the command-line, create a file called `simple.c` using your favorite
|
||||
editor, copy the example to this file, and save. Then run the following command
|
||||
to compile it with GCC and run it:
|
||||
|
||||
|
||||
+45
-45
@@ -1748,7 +1748,6 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
cups_dest_t *dest; /* Destination */
|
||||
char filename[1024], /* Path to lpoptions */
|
||||
defname[256]; /* Default printer name */
|
||||
const char *home = getenv("HOME"); /* Home directory */
|
||||
int set_as_default = 0; /* Set returned destination as default */
|
||||
ipp_op_t op = IPP_OP_GET_PRINTER_ATTRIBUTES;
|
||||
/* IPP operation to get server ops */
|
||||
@@ -1780,13 +1779,13 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
else
|
||||
instance = NULL;
|
||||
}
|
||||
else if (home)
|
||||
else if (cg->home)
|
||||
{
|
||||
/*
|
||||
* No default in the environment, try the user's lpoptions files...
|
||||
*/
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", cg->home);
|
||||
|
||||
dest_name = cups_get_default(filename, defname, sizeof(defname), &instance);
|
||||
|
||||
@@ -1892,9 +1891,9 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
||||
cups_get_dests(filename, dest_name, instance, 0, 1, 1, &dest);
|
||||
|
||||
if (home)
|
||||
if (cg->home)
|
||||
{
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", cg->home);
|
||||
|
||||
cups_get_dests(filename, dest_name, instance, 0, 1, 1, &dest);
|
||||
}
|
||||
@@ -2032,9 +2031,6 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
cups_option_t *option; /* Current option */
|
||||
_ipp_option_t *match; /* Matching attribute for option */
|
||||
FILE *fp; /* File pointer */
|
||||
#ifndef _WIN32
|
||||
const char *home; /* HOME environment variable */
|
||||
#endif /* _WIN32 */
|
||||
char filename[1024]; /* lpoptions file */
|
||||
int num_temps; /* Number of temporary destinations */
|
||||
cups_dest_t *temps = NULL, /* Temporary destinations */
|
||||
@@ -2068,27 +2064,18 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
||||
|
||||
#ifndef _WIN32
|
||||
if (getuid())
|
||||
if (cg->home)
|
||||
{
|
||||
/*
|
||||
* Point to user defaults...
|
||||
* Create ~/.cups subdirectory...
|
||||
*/
|
||||
|
||||
if ((home = getenv("HOME")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Create ~/.cups subdirectory...
|
||||
*/
|
||||
snprintf(filename, sizeof(filename), "%s/.cups", cg->home);
|
||||
if (access(filename, 0))
|
||||
mkdir(filename, 0700);
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/.cups", home);
|
||||
if (access(filename, 0))
|
||||
mkdir(filename, 0700);
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
|
||||
}
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", cg->home);
|
||||
}
|
||||
#endif /* !_WIN32 */
|
||||
|
||||
/*
|
||||
* Try to open the file...
|
||||
@@ -2269,7 +2256,7 @@ _cupsUserDefault(char *name, /* I - Name buffer */
|
||||
* system preferences...
|
||||
*/
|
||||
|
||||
if ((locprinter = _cupsAppleCopyDefaultPrinter()) != NULL)
|
||||
if (!getenv("CUPS_NO_APPLE_DEFAULT") && (locprinter = _cupsAppleCopyDefaultPrinter()) != NULL)
|
||||
{
|
||||
CFStringGetCString(locprinter, name, (CFIndex)namesize, kCFStringEncodingUTF8);
|
||||
CFRelease(locprinter);
|
||||
@@ -3392,10 +3379,9 @@ cups_enum_dests(
|
||||
int i, j, /* Looping vars */
|
||||
num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests = NULL, /* Destinations */
|
||||
*dest, /* Current destination */
|
||||
*user_dest; /* User destination */
|
||||
*dest; /* Current destination */
|
||||
cups_option_t *option; /* Current option */
|
||||
char *user_default; /* User default printer */
|
||||
const char *user_default; /* Default printer from environment */
|
||||
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
|
||||
int count, /* Number of queries started */
|
||||
completed, /* Number of completed queries */
|
||||
@@ -3426,7 +3412,6 @@ cups_enum_dests(
|
||||
#else
|
||||
_cups_getdata_t data; /* Data for callback */
|
||||
#endif /* HAVE_DNSSD || HAVE_AVAHI */
|
||||
const char *home; /* HOME environment variable */
|
||||
char filename[1024]; /* Local lpoptions file */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
|
||||
|
||||
@@ -3451,13 +3436,35 @@ cups_enum_dests(
|
||||
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
if ((user_default = _cupsUserDefault(data.def_name, sizeof(data.def_name))) == NULL)
|
||||
{
|
||||
const char *defprinter = cupsGetDefault2(http);
|
||||
/* Server default, if any */
|
||||
user_default = _cupsUserDefault(data.def_name, sizeof(data.def_name));
|
||||
|
||||
if (defprinter)
|
||||
strlcpy(data.def_name, defprinter, sizeof(data.def_name));
|
||||
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
||||
data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests);
|
||||
|
||||
if (cg->home)
|
||||
{
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", cg->home);
|
||||
|
||||
data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests);
|
||||
}
|
||||
|
||||
if (!user_default && (dest = cupsGetDest(NULL, NULL, data.num_dests, data.dests)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Use an lpoptions default printer...
|
||||
*/
|
||||
|
||||
if (dest->instance)
|
||||
snprintf(data.def_name, sizeof(data.def_name), "%s/%s", dest->name, dest->instance);
|
||||
else
|
||||
strlcpy(data.def_name, dest->name, sizeof(data.def_name));
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *default_printer; /* Server default printer */
|
||||
|
||||
if ((default_printer = cupsGetDefault2(http)) != NULL)
|
||||
strlcpy(data.def_name, default_printer, sizeof(data.def_name));
|
||||
}
|
||||
|
||||
if (data.def_name[0])
|
||||
@@ -3472,16 +3479,6 @@ cups_enum_dests(
|
||||
|
||||
DEBUG_printf(("1cups_enum_dests: def_name=\"%s\", def_instance=\"%s\"", data.def_name, data.def_instance));
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
||||
data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests);
|
||||
|
||||
if ((home = getenv("HOME")) != NULL)
|
||||
{
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
|
||||
|
||||
data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get ready to enumerate...
|
||||
*/
|
||||
@@ -3519,8 +3516,9 @@ cups_enum_dests(
|
||||
i > 0 && (!cancel || !*cancel);
|
||||
i --, dest ++)
|
||||
{
|
||||
cups_dest_t *user_dest; /* Destination from lpoptions */
|
||||
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
|
||||
const char *device_uri; /* Device URI */
|
||||
const char *device_uri; /* Device URI */
|
||||
#endif /* HAVE_DNSSD || HAVE_AVAHI */
|
||||
|
||||
if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
|
||||
@@ -3789,6 +3787,8 @@ cups_enum_dests(
|
||||
|
||||
if ((device->type & mask) == type)
|
||||
{
|
||||
cups_dest_t *user_dest; /* Destination from lpoptions */
|
||||
|
||||
dest = &device->dest;
|
||||
|
||||
if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
|
||||
|
||||
+1
-1
@@ -523,7 +523,7 @@ _cupsEncodeOption(
|
||||
|
||||
quote = *sep;
|
||||
}
|
||||
else if (*sep == ',' && count > 1)
|
||||
else if (*sep == ',')
|
||||
break;
|
||||
else if (*sep == '\\' && sep[1])
|
||||
{
|
||||
|
||||
+24
-3
@@ -1,10 +1,11 @@
|
||||
/*
|
||||
* Global variable access routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright © 2007-2019 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -12,6 +13,9 @@
|
||||
*/
|
||||
|
||||
#include "cups-private.h"
|
||||
#ifndef _WIN32
|
||||
# include <pwd.h>
|
||||
#endif /* !_WIN32 */
|
||||
|
||||
|
||||
/*
|
||||
@@ -269,6 +273,8 @@ cups_globals_alloc(void)
|
||||
if ((cg->localedir = getenv("LOCALEDIR")) == NULL)
|
||||
cg->localedir = localedir;
|
||||
|
||||
cg->home = getenv("HOME");
|
||||
|
||||
#else
|
||||
# ifdef HAVE_GETEUID
|
||||
if ((geteuid() != getuid() && getuid()) || getegid() != getgid())
|
||||
@@ -307,6 +313,21 @@ cups_globals_alloc(void)
|
||||
|
||||
if ((cg->localedir = getenv("LOCALEDIR")) == NULL)
|
||||
cg->localedir = CUPS_LOCALEDIR;
|
||||
|
||||
cg->home = getenv("HOME");
|
||||
|
||||
# ifdef __APPLE__ /* Sandboxing now exposes the container as the home directory */
|
||||
if (cg->home && strstr(cg->home, "/Library/Containers/"))
|
||||
cg->home = NULL;
|
||||
# endif /* !__APPLE__ */
|
||||
}
|
||||
|
||||
if (!cg->home)
|
||||
{
|
||||
struct passwd *pw; /* User info */
|
||||
|
||||
if ((pw = getpwuid(getuid())) != NULL)
|
||||
cg->home = _cupsStrAlloc(pw->pw_dir);
|
||||
}
|
||||
#endif /* _WIN32 */
|
||||
|
||||
|
||||
+20
-23
@@ -16,6 +16,7 @@
|
||||
# include <CommonCrypto/CommonDigest.h>
|
||||
#elif defined(HAVE_GNUTLS)
|
||||
# include <gnutls/crypto.h>
|
||||
# include "md5-internal.h"
|
||||
#else
|
||||
# include "md5-internal.h"
|
||||
#endif /* __APPLE__ */
|
||||
@@ -186,14 +187,23 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
size_t tempsize = 0; /* Truncate to this size? */
|
||||
|
||||
|
||||
# ifdef HAVE_GNUTLS_FIPS140_SET_MODE
|
||||
unsigned oldmode = gnutls_fips140_mode_enabled();
|
||||
|
||||
gnutls_fips140_set_mode(GNUTLS_FIPS140_LAX, GNUTLS_FIPS140_SET_MODE_THREAD);
|
||||
# endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
|
||||
|
||||
if (!strcmp(algorithm, "md5"))
|
||||
alg = GNUTLS_DIG_MD5;
|
||||
{
|
||||
/*
|
||||
* Some versions of GNU TLS disable MD5 without warning...
|
||||
*/
|
||||
|
||||
_cups_md5_state_t state; /* MD5 state info */
|
||||
|
||||
if (hashsize < 16)
|
||||
goto too_small;
|
||||
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, data, datalen);
|
||||
_cupsMD5Finish(&state, hash);
|
||||
|
||||
return (16);
|
||||
}
|
||||
else if (!strcmp(algorithm, "sha"))
|
||||
alg = GNUTLS_DIG_SHA1;
|
||||
else if (!strcmp(algorithm, "sha2-224"))
|
||||
@@ -229,10 +239,6 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
gnutls_hash_fast(alg, data, datalen, temp);
|
||||
memcpy(hash, temp, tempsize);
|
||||
|
||||
# ifdef HAVE_GNUTLS_FIPS140_SET_MODE
|
||||
gnutls_fips140_set_mode(oldmode, GNUTLS_FIPS140_SET_MODE_THREAD);
|
||||
# endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
|
||||
|
||||
return ((ssize_t)tempsize);
|
||||
}
|
||||
|
||||
@@ -241,17 +247,9 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
|
||||
gnutls_hash_fast(alg, data, datalen, hash);
|
||||
|
||||
# ifdef HAVE_GNUTLS_FIPS140_SET_MODE
|
||||
gnutls_fips140_set_mode(oldmode, GNUTLS_FIPS140_SET_MODE_THREAD);
|
||||
# endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
|
||||
|
||||
return ((ssize_t)gnutls_hash_get_len(alg));
|
||||
}
|
||||
|
||||
# ifdef HAVE_GNUTLS_FIPS140_SET_MODE
|
||||
gnutls_fips140_set_mode(oldmode, GNUTLS_FIPS140_SET_MODE_THREAD);
|
||||
# endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
|
||||
|
||||
#else
|
||||
/*
|
||||
* No hash support beyond MD5 without CommonCrypto or GNU TLS...
|
||||
@@ -261,6 +259,9 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
{
|
||||
_cups_md5_state_t state; /* MD5 state info */
|
||||
|
||||
if (hashsize < 16)
|
||||
goto too_small;
|
||||
|
||||
_cupsMD5Init(&state);
|
||||
_cupsMD5Append(&state, data, datalen);
|
||||
_cupsMD5Finish(&state, hash);
|
||||
@@ -285,10 +286,6 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
|
||||
too_small:
|
||||
|
||||
#ifdef HAVE_GNUTLS_FIPS140_SET_MODE
|
||||
gnutls_fips140_set_mode(oldmode, GNUTLS_FIPS140_SET_MODE_THREAD);
|
||||
#endif /* HAVE_GNUTLS_FIPS140_SET_MODE */
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Hash buffer too small."), 1);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
+12
-7
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* HTTP support routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 2007-2019 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
|
||||
@@ -799,14 +799,12 @@ httpGetDateString2(time_t t, /* I - Time in seconds */
|
||||
char *s, /* I - String buffer */
|
||||
int slen) /* I - Size of string buffer */
|
||||
{
|
||||
struct tm *tdate; /* UNIX date/time data */
|
||||
struct tm tdate; /* UNIX date/time data */
|
||||
|
||||
|
||||
tdate = gmtime(&t);
|
||||
if (tdate)
|
||||
snprintf(s, (size_t)slen, "%s, %02d %s %d %02d:%02d:%02d GMT", http_days[tdate->tm_wday], tdate->tm_mday, http_months[tdate->tm_mon], tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec);
|
||||
else
|
||||
s[0] = '\0';
|
||||
gmtime_r(&t, &tdate);
|
||||
|
||||
snprintf(s, (size_t)slen, "%s, %02d %s %d %02d:%02d:%02d GMT", http_days[tdate.tm_wday], tdate.tm_mday, http_months[tdate.tm_mon], tdate.tm_year + 1900, tdate.tm_hour, tdate.tm_min, tdate.tm_sec);
|
||||
|
||||
return (s);
|
||||
}
|
||||
@@ -1321,6 +1319,7 @@ _httpSetDigestAuthString(
|
||||
digest[1024]; /* Digest auth data */
|
||||
unsigned char hash[32]; /* Hash buffer */
|
||||
size_t hashsize; /* Size of hash */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Per-thread globals */
|
||||
|
||||
|
||||
DEBUG_printf(("2_httpSetDigestAuthString(http=%p, nonce=\"%s\", method=\"%s\", resource=\"%s\")", (void *)http, nonce, method, resource));
|
||||
@@ -1363,6 +1362,12 @@ _httpSetDigestAuthString(
|
||||
* RFC 2617 Digest with MD5
|
||||
*/
|
||||
|
||||
if (cg->digestoptions == _CUPS_DIGESTOPTIONS_DENYMD5)
|
||||
{
|
||||
DEBUG_puts("3_httpSetDigestAuthString: MD5 Digest is disabled.");
|
||||
return (0);
|
||||
}
|
||||
|
||||
hashalg = "md5";
|
||||
}
|
||||
else if (!_cups_strcasecmp(http->algorithm, "SHA-256"))
|
||||
|
||||
+1
-1
@@ -1733,7 +1733,7 @@ httpPeek(http_t *http, /* I - HTTP connection */
|
||||
|
||||
if (http->used > 0 && ((z_stream *)http->stream)->avail_in < HTTP_MAX_BUFFER)
|
||||
{
|
||||
size_t buflen = buflen = HTTP_MAX_BUFFER - ((z_stream *)http->stream)->avail_in;
|
||||
size_t buflen = HTTP_MAX_BUFFER - ((z_stream *)http->stream)->avail_in;
|
||||
/* Number of bytes to copy */
|
||||
|
||||
if (((z_stream *)http->stream)->avail_in > 0 &&
|
||||
|
||||
@@ -460,7 +460,7 @@ static const char * const ipp_document_states[] =
|
||||
"punch-multiple-top", /* IPP Finishings 2.1/Canon */
|
||||
"punch-multiple-right",/* IPP Finishings 2.1/Canon */
|
||||
"punch-multiple-bottom",/* IPP Finishings 2.1/Canon */
|
||||
"fold-accordian", /* IPP Finishings 2.0 */
|
||||
"fold-accordion", /* IPP Finishings 2.0 */
|
||||
"fold-double-gate", /* IPP Finishings 2.0 */
|
||||
"fold-gate", /* IPP Finishings 2.0 */
|
||||
"fold-half", /* IPP Finishings 2.0 */
|
||||
@@ -571,7 +571,7 @@ static const char * const ipp_document_states[] =
|
||||
"0x40000057",
|
||||
"0x40000058",
|
||||
"0x40000059",
|
||||
"cups-fold-accordian",
|
||||
"cups-fold-accordion",
|
||||
"cups-fold-double-gate",
|
||||
"cups-fold-gate",
|
||||
"cups-fold-half",
|
||||
@@ -2093,7 +2093,7 @@ ippEnumString(const char *attrname, /* I - Attribute name */
|
||||
{
|
||||
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]))))
|
||||
|
||||
+12
-12
@@ -2956,7 +2956,7 @@ ippReadIO(void *src, /* I - Data source */
|
||||
* Read 32-bit "extension" tag...
|
||||
*/
|
||||
|
||||
if ((*cb)(src, buffer, 4) < 1)
|
||||
if ((*cb)(src, buffer, 4) < 4)
|
||||
{
|
||||
DEBUG_puts("1ippReadIO: Callback returned EOF/error");
|
||||
_cupsBufferRelease((char *)buffer);
|
||||
@@ -4565,7 +4565,7 @@ ippSetValueTag(
|
||||
return (0);
|
||||
|
||||
if (ipp->attrs && ipp->attrs->next && ipp->attrs->next->name &&
|
||||
!strcmp(ipp->attrs->next->name, "attributes-natural-language"))
|
||||
!strcmp(ipp->attrs->next->name, "attributes-natural-language") && (ipp->attrs->next->value_tag & IPP_TAG_CUPS_MASK) == IPP_TAG_LANGUAGE)
|
||||
{
|
||||
/*
|
||||
* Use the language code from the IPP message...
|
||||
@@ -4659,7 +4659,7 @@ ippSetVersion(ipp_t *ipp, /* I - IPP message */
|
||||
const ipp_uchar_t * /* O - RFC-2579 date/time data */
|
||||
ippTimeToDate(time_t t) /* I - Time in seconds */
|
||||
{
|
||||
struct tm *unixdate; /* UNIX unixdate/time info */
|
||||
struct tm unixdate; /* UNIX unixdate/time info */
|
||||
ipp_uchar_t *date = _cupsGlobals()->ipp_date;
|
||||
/* RFC-2579 date/time data */
|
||||
|
||||
@@ -4681,16 +4681,16 @@ ippTimeToDate(time_t t) /* I - Time in seconds */
|
||||
* 10 UTC minutes (0 to 59)
|
||||
*/
|
||||
|
||||
unixdate = gmtime(&t);
|
||||
unixdate->tm_year += 1900;
|
||||
gmtime_r(&t, &unixdate);
|
||||
unixdate.tm_year += 1900;
|
||||
|
||||
date[0] = (ipp_uchar_t)(unixdate->tm_year >> 8);
|
||||
date[1] = (ipp_uchar_t)(unixdate->tm_year);
|
||||
date[2] = (ipp_uchar_t)(unixdate->tm_mon + 1);
|
||||
date[3] = (ipp_uchar_t)unixdate->tm_mday;
|
||||
date[4] = (ipp_uchar_t)unixdate->tm_hour;
|
||||
date[5] = (ipp_uchar_t)unixdate->tm_min;
|
||||
date[6] = (ipp_uchar_t)unixdate->tm_sec;
|
||||
date[0] = (ipp_uchar_t)(unixdate.tm_year >> 8);
|
||||
date[1] = (ipp_uchar_t)(unixdate.tm_year);
|
||||
date[2] = (ipp_uchar_t)(unixdate.tm_mon + 1);
|
||||
date[3] = (ipp_uchar_t)unixdate.tm_mday;
|
||||
date[4] = (ipp_uchar_t)unixdate.tm_hour;
|
||||
date[5] = (ipp_uchar_t)unixdate.tm_min;
|
||||
date[6] = (ipp_uchar_t)unixdate.tm_sec;
|
||||
date[7] = 0;
|
||||
date[8] = '+';
|
||||
date[9] = 0;
|
||||
|
||||
+10
-8
@@ -145,11 +145,11 @@ typedef enum ipp_finishings_e /**** Finishings values ****/
|
||||
IPP_FINISHINGS_PUNCH_QUAD_TOP, /* Punch 4 holes top edge */
|
||||
IPP_FINISHINGS_PUNCH_QUAD_RIGHT, /* Punch 4 holes right side */
|
||||
IPP_FINISHINGS_PUNCH_QUAD_BOTTOM, /* Punch 4 holes bottom edge */
|
||||
IPP_FINISHINGS_PUNCH_MULTIPLE_LEFT, /* Pucnh multiple holes left side */
|
||||
IPP_FINISHINGS_PUNCH_MULTIPLE_TOP, /* Pucnh multiple holes top edge */
|
||||
IPP_FINISHINGS_PUNCH_MULTIPLE_RIGHT, /* Pucnh multiple holes right side */
|
||||
IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM, /* Pucnh multiple holes bottom edge */
|
||||
IPP_FINISHINGS_FOLD_ACCORDIAN = 90, /* Accordian-fold the paper vertically into four sections */
|
||||
IPP_FINISHINGS_PUNCH_MULTIPLE_LEFT, /* Punch multiple holes left side */
|
||||
IPP_FINISHINGS_PUNCH_MULTIPLE_TOP, /* Punch multiple holes top edge */
|
||||
IPP_FINISHINGS_PUNCH_MULTIPLE_RIGHT, /* Punch multiple holes right side */
|
||||
IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM, /* Punch multiple holes bottom edge */
|
||||
IPP_FINISHINGS_FOLD_ACCORDION = 90, /* Accordion-fold the paper vertically into four sections */
|
||||
IPP_FINISHINGS_FOLD_DOUBLE_GATE, /* Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically */
|
||||
IPP_FINISHINGS_FOLD_GATE, /* Fold the top and bottom quarters of the paper towards the midline */
|
||||
IPP_FINISHINGS_FOLD_HALF, /* Fold the paper in half vertically */
|
||||
@@ -184,8 +184,8 @@ typedef enum ipp_finishings_e /**** Finishings values ****/
|
||||
IPP_FINISHINGS_CUPS_PUNCH_QUAD_RIGHT, /* Punch 4 holes right side @exclude all@ */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_QUAD_BOTTOM,/* Punch 4 holes bottom edge @exclude all@ */
|
||||
|
||||
IPP_FINISHINGS_CUPS_FOLD_ACCORDIAN = 0x4000005A,
|
||||
/* Accordian-fold the paper vertically into four sections @exclude all@ */
|
||||
IPP_FINISHINGS_CUPS_FOLD_ACCORDION = 0x4000005A,
|
||||
/* Accordion-fold the paper vertically into four sections @exclude all@ */
|
||||
IPP_FINISHINGS_CUPS_FOLD_DOUBLE_GATE, /* Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically @exclude all@ */
|
||||
IPP_FINISHINGS_CUPS_FOLD_GATE, /* Fold the top and bottom quarters of the paper towards the midline @exclude all@ */
|
||||
IPP_FINISHINGS_CUPS_FOLD_HALF, /* Fold the paper in half vertically @exclude all@ */
|
||||
@@ -198,8 +198,10 @@ typedef enum ipp_finishings_e /**** Finishings values ****/
|
||||
IPP_FINISHINGS_CUPS_FOLD_Z /* Fold the paper vertically into three sections, forming a Z @exclude all@ */
|
||||
} ipp_finishings_t;
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_FINISHINGS_CUPS_FOLD_ACCORDIAN IPP_FINISHINGS_CUPS_FOLD_ACCORDION
|
||||
# define IPP_FINISHINGS_FOLD_ACCORDIAN IPP_FINISHINGS_FOLD_ACCORDION
|
||||
# define IPP_FINISHINGS_JOB_OFFSET IPP_FINISHINGS_JOG_OFFSET
|
||||
/* Long-time misspelling... */
|
||||
/* Long-time misspellings... */
|
||||
typedef enum ipp_finishings_e ipp_finish_t;
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
|
||||
|
||||
+2
-2
@@ -43,7 +43,7 @@
|
||||
#include "md5-internal.h"
|
||||
#include "string-private.h"
|
||||
|
||||
#if !defined(__APPLE__) && !defined(HAVE_GNUTLS)
|
||||
#if !defined(__APPLE__)
|
||||
# define T1 0xd76aa478
|
||||
# define T2 0xe8c7b756
|
||||
# define T3 0x242070db
|
||||
@@ -338,4 +338,4 @@ _cupsMD5Finish(_cups_md5_state_t *pms, unsigned char digest[16])
|
||||
for (i = 0; i < 16; ++i)
|
||||
digest[i] = (unsigned char)(pms->abcd[i >> 2] >> ((i & 3) << 3));
|
||||
}
|
||||
#endif /* !__APPLE__ && !HAVE_GNUTLS */
|
||||
#endif /* !__APPLE__ */
|
||||
|
||||
+203
-15
@@ -1075,7 +1075,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
* Convert the PPD size name to the corresponding PWG keyword name.
|
||||
*/
|
||||
|
||||
if ((pwg_media = pwgMediaForPPD(ppd_size->name)) != NULL)
|
||||
if ((pwg_media = pwgMediaForSize(PWG_FROM_POINTS(ppd_size->width), PWG_FROM_POINTS(ppd_size->length))) != NULL)
|
||||
{
|
||||
/*
|
||||
* Standard name, do we have conflicts?
|
||||
@@ -3983,7 +3983,25 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
if ((attr = ippFindAttribute(response, "finishings-supported", IPP_TAG_ENUM)) != NULL)
|
||||
{
|
||||
int value; /* Enum value */
|
||||
const char *ppd_keyword; /* PPD keyword for enum */
|
||||
cups_array_t *names; /* Names we've added */
|
||||
static const char * const base_keywords[] =
|
||||
{ /* Base STD 92 keywords */
|
||||
NULL, /* none */
|
||||
"SingleAuto", /* staple */
|
||||
"SingleAuto", /* punch */
|
||||
NULL, /* cover */
|
||||
"BindAuto", /* bind */
|
||||
"SaddleStitch", /* saddle-stitch */
|
||||
"EdgeStitchAuto", /* edge-stitch */
|
||||
"Auto", /* fold */
|
||||
NULL, /* trim */
|
||||
NULL, /* bale */
|
||||
NULL, /* booklet-maker */
|
||||
NULL, /* jog-offset */
|
||||
NULL, /* coat */
|
||||
NULL /* laminate */
|
||||
};
|
||||
|
||||
count = ippGetCount(attr);
|
||||
names = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
|
||||
@@ -4004,6 +4022,33 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
|
||||
if (i < count)
|
||||
{
|
||||
static const char * const staple_keywords[] =
|
||||
{ /* StapleLocation keywords */
|
||||
"SinglePortrait",
|
||||
"SingleRevLandscape",
|
||||
"SingleLandscape",
|
||||
"SingleRevPortrait",
|
||||
"EdgeStitchPortrait",
|
||||
"EdgeStitchLandscape",
|
||||
"EdgeStitchRevPortrait",
|
||||
"EdgeStitchRevLandscape",
|
||||
"DualPortrait",
|
||||
"DualLandscape",
|
||||
"DualRevPortrait",
|
||||
"DualRevLandscape",
|
||||
"TriplePortrait",
|
||||
"TripleLandscape",
|
||||
"TripleRevPortrait",
|
||||
"TripleRevLandscape"
|
||||
};
|
||||
static const char * const bind_keywords[] =
|
||||
{ /* StapleLocation binding keywords */
|
||||
"BindPortrait",
|
||||
"BindLandscape",
|
||||
"BindRevPortrait",
|
||||
"BindRevLandscape"
|
||||
};
|
||||
|
||||
cupsArrayAdd(fin_options, "*StapleLocation");
|
||||
|
||||
cupsFilePuts(fp, "*OpenUI *StapleLocation: PickOne\n");
|
||||
@@ -4031,9 +4076,21 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
if ((msgstr = _cupsMessageLookup(strings, msgid)) == msgid)
|
||||
msgstr = keyword;
|
||||
|
||||
cupsFilePrintf(fp, "*StapleLocation %s: \"\"\n", keyword);
|
||||
cupsFilePrintf(fp, "*%s.StapleLocation %s/%s: \"\"\n", lang->language, keyword, msgstr);
|
||||
cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*StapleLocation %s\"\n", value, keyword, keyword);
|
||||
if (value >= IPP_FINISHINGS_NONE && value <= IPP_FINISHINGS_LAMINATE)
|
||||
ppd_keyword = base_keywords[value - IPP_FINISHINGS_NONE];
|
||||
else if (value >= IPP_FINISHINGS_STAPLE_TOP_LEFT && value <= IPP_FINISHINGS_STAPLE_TRIPLE_BOTTOM)
|
||||
ppd_keyword = staple_keywords[value - IPP_FINISHINGS_STAPLE_TOP_LEFT];
|
||||
else if (value >= IPP_FINISHINGS_BIND_LEFT && value <= IPP_FINISHINGS_BIND_BOTTOM)
|
||||
ppd_keyword = bind_keywords[value - IPP_FINISHINGS_BIND_LEFT];
|
||||
else
|
||||
ppd_keyword = NULL;
|
||||
|
||||
if (!ppd_keyword)
|
||||
continue;
|
||||
|
||||
cupsFilePrintf(fp, "*StapleLocation %s: \"\"\n", ppd_keyword);
|
||||
cupsFilePrintf(fp, "*%s.StapleLocation %s/%s: \"\"\n", lang->language, ppd_keyword, msgstr);
|
||||
cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*StapleLocation %s\"\n", value, keyword, ppd_keyword);
|
||||
}
|
||||
|
||||
cupsFilePuts(fp, "*CloseUI: *StapleLocation\n");
|
||||
@@ -4048,12 +4105,28 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
value = ippGetInteger(attr, i);
|
||||
keyword = ippEnumString("finishings", value);
|
||||
|
||||
if (!strncmp(keyword, "fold-", 5))
|
||||
if (!strncmp(keyword, "cups-fold-", 10) || !strcmp(keyword, "fold") || !strncmp(keyword, "fold-", 5))
|
||||
break;
|
||||
}
|
||||
|
||||
if (i < count)
|
||||
{
|
||||
static const char * const fold_keywords[] =
|
||||
{ /* FoldType keywords */
|
||||
"Accordion",
|
||||
"DoubleGate",
|
||||
"Gate",
|
||||
"Half",
|
||||
"HalfZ",
|
||||
"LeftGate",
|
||||
"Letter",
|
||||
"Parallel",
|
||||
"XFold",
|
||||
"RightGate",
|
||||
"ZFold",
|
||||
"EngineeringZ"
|
||||
};
|
||||
|
||||
cupsArrayAdd(fin_options, "*FoldType");
|
||||
|
||||
cupsFilePuts(fp, "*OpenUI *FoldType: PickOne\n");
|
||||
@@ -4068,7 +4141,9 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
value = ippGetInteger(attr, i);
|
||||
keyword = ippEnumString("finishings", value);
|
||||
|
||||
if (strncmp(keyword, "fold-", 5))
|
||||
if (!strncmp(keyword, "cups-fold-", 10))
|
||||
keyword += 5;
|
||||
else if (strcmp(keyword, "fold") && strncmp(keyword, "fold-", 5))
|
||||
continue;
|
||||
|
||||
if (cupsArrayFind(names, (char *)keyword))
|
||||
@@ -4081,9 +4156,21 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
if ((msgstr = _cupsMessageLookup(strings, msgid)) == msgid)
|
||||
msgstr = keyword;
|
||||
|
||||
cupsFilePrintf(fp, "*FoldType %s: \"\"\n", keyword);
|
||||
cupsFilePrintf(fp, "*%s.FoldType %s/%s: \"\"\n", lang->language, keyword, msgstr);
|
||||
cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*FoldType %s\"\n", value, keyword, keyword);
|
||||
if (value >= IPP_FINISHINGS_NONE && value <= IPP_FINISHINGS_LAMINATE)
|
||||
ppd_keyword = base_keywords[value - IPP_FINISHINGS_NONE];
|
||||
else if (value >= IPP_FINISHINGS_FOLD_ACCORDION && value <= IPP_FINISHINGS_FOLD_ENGINEERING_Z)
|
||||
ppd_keyword = fold_keywords[value - IPP_FINISHINGS_FOLD_ACCORDION];
|
||||
else if (value >= IPP_FINISHINGS_CUPS_FOLD_ACCORDION && value <= IPP_FINISHINGS_CUPS_FOLD_Z)
|
||||
ppd_keyword = fold_keywords[value - IPP_FINISHINGS_CUPS_FOLD_ACCORDION];
|
||||
else
|
||||
ppd_keyword = NULL;
|
||||
|
||||
if (!ppd_keyword)
|
||||
continue;
|
||||
|
||||
cupsFilePrintf(fp, "*FoldType %s: \"\"\n", ppd_keyword);
|
||||
cupsFilePrintf(fp, "*%s.FoldType %s/%s: \"\"\n", lang->language, ppd_keyword, msgstr);
|
||||
cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*FoldType %s\"\n", value, keyword, ppd_keyword);
|
||||
}
|
||||
|
||||
cupsFilePuts(fp, "*CloseUI: *FoldType\n");
|
||||
@@ -4098,12 +4185,36 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
value = ippGetInteger(attr, i);
|
||||
keyword = ippEnumString("finishings", value);
|
||||
|
||||
if (!strncmp(keyword, "punch-", 6))
|
||||
if (!strncmp(keyword, "cups-punch-", 11) || !strncmp(keyword, "punch-", 6))
|
||||
break;
|
||||
}
|
||||
|
||||
if (i < count)
|
||||
{
|
||||
static const char * const punch_keywords[] =
|
||||
{ /* PunchMedia keywords */
|
||||
"SinglePortrait",
|
||||
"SingleRevLandscape",
|
||||
"SingleLandscape",
|
||||
"SingleRevPortrait",
|
||||
"DualPortrait",
|
||||
"DualLandscape",
|
||||
"DualRevPortrait",
|
||||
"DualRevLandscape",
|
||||
"TriplePortrait",
|
||||
"TripleLandscape",
|
||||
"TripleRevPortrait",
|
||||
"TripleRevLandscape",
|
||||
"QuadPortrait",
|
||||
"QuadLandscape",
|
||||
"QuadRevPortrait",
|
||||
"QuadRevLandscape",
|
||||
"MultiplePortrait",
|
||||
"MultipleLandscape",
|
||||
"MultipleRevPortrait",
|
||||
"MultipleRevLandscape"
|
||||
};
|
||||
|
||||
cupsArrayAdd(fin_options, "*PunchMedia");
|
||||
|
||||
cupsFilePuts(fp, "*OpenUI *PunchMedia: PickOne\n");
|
||||
@@ -4118,7 +4229,9 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
value = ippGetInteger(attr, i);
|
||||
keyword = ippEnumString("finishings", value);
|
||||
|
||||
if (strncmp(keyword, "punch-", 6))
|
||||
if (!strncmp(keyword, "cups-punch-", 11))
|
||||
keyword += 5;
|
||||
else if (strncmp(keyword, "punch-", 6))
|
||||
continue;
|
||||
|
||||
if (cupsArrayFind(names, (char *)keyword))
|
||||
@@ -4131,9 +4244,21 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
if ((msgstr = _cupsMessageLookup(strings, msgid)) == msgid)
|
||||
msgstr = keyword;
|
||||
|
||||
cupsFilePrintf(fp, "*PunchMedia %s: \"\"\n", keyword);
|
||||
cupsFilePrintf(fp, "*%s.PunchMedia %s/%s: \"\"\n", lang->language, keyword, msgstr);
|
||||
cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*PunchMedia %s\"\n", value, keyword, keyword);
|
||||
if (value >= IPP_FINISHINGS_NONE && value <= IPP_FINISHINGS_LAMINATE)
|
||||
ppd_keyword = base_keywords[value - IPP_FINISHINGS_NONE];
|
||||
else if (value >= IPP_FINISHINGS_PUNCH_TOP_LEFT && value <= IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM)
|
||||
ppd_keyword = punch_keywords[value - IPP_FINISHINGS_PUNCH_TOP_LEFT];
|
||||
else if (value >= IPP_FINISHINGS_CUPS_PUNCH_TOP_LEFT && value <= IPP_FINISHINGS_CUPS_PUNCH_QUAD_BOTTOM)
|
||||
ppd_keyword = punch_keywords[value - IPP_FINISHINGS_CUPS_PUNCH_TOP_LEFT];
|
||||
else
|
||||
ppd_keyword = NULL;
|
||||
|
||||
if (!ppd_keyword)
|
||||
continue;
|
||||
|
||||
cupsFilePrintf(fp, "*PunchMedia %s: \"\"\n", ppd_keyword);
|
||||
cupsFilePrintf(fp, "*%s.PunchMedia %s/%s: \"\"\n", lang->language, ppd_keyword, msgstr);
|
||||
cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*PunchMedia %s\"\n", value, keyword, ppd_keyword);
|
||||
}
|
||||
|
||||
cupsFilePuts(fp, "*CloseUI: *PunchMedia\n");
|
||||
@@ -4157,6 +4282,69 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
cupsFilePuts(fp, "*CloseUI: *Booklet\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* CutMedia
|
||||
*/
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
value = ippGetInteger(attr, i);
|
||||
keyword = ippEnumString("finishings", value);
|
||||
|
||||
if (!strcmp(keyword, "trim") || !strncmp(keyword, "trim-", 5))
|
||||
break;
|
||||
}
|
||||
|
||||
if (i < count)
|
||||
{
|
||||
static const char * const trim_keywords[] =
|
||||
{ /* CutMedia keywords */
|
||||
"EndOfPage",
|
||||
"EndOfDoc",
|
||||
"EndOfSet",
|
||||
"EndOfJob"
|
||||
};
|
||||
|
||||
cupsArrayAdd(fin_options, "*CutMedia");
|
||||
|
||||
cupsFilePuts(fp, "*OpenUI *CutMedia: PickOne\n");
|
||||
cupsFilePuts(fp, "*OrderDependency: 10 AnySetup *CutMedia\n");
|
||||
cupsFilePrintf(fp, "*%s.Translation CutMedia/%s: \"\"\n", lang->language, _cupsLangString(lang, _("Cut")));
|
||||
cupsFilePuts(fp, "*DefaultCutMedia: None\n");
|
||||
cupsFilePuts(fp, "*CutMedia None: \"\"\n");
|
||||
cupsFilePrintf(fp, "*%s.CutMedia None/%s: \"\"\n", lang->language, _cupsLangString(lang, _("None")));
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
value = ippGetInteger(attr, i);
|
||||
keyword = ippEnumString("finishings", value);
|
||||
|
||||
if (strcmp(keyword, "trim") && strncmp(keyword, "trim-", 5))
|
||||
continue;
|
||||
|
||||
if (cupsArrayFind(names, (char *)keyword))
|
||||
continue; /* Already did this finishing template */
|
||||
|
||||
cupsArrayAdd(names, (char *)keyword);
|
||||
|
||||
snprintf(msgid, sizeof(msgid), "finishings.%d", value);
|
||||
if ((msgstr = _cupsLangString(lang, msgid)) == msgid || !strcmp(msgid, msgstr))
|
||||
if ((msgstr = _cupsMessageLookup(strings, msgid)) == msgid)
|
||||
msgstr = keyword;
|
||||
|
||||
if (value == IPP_FINISHINGS_TRIM)
|
||||
ppd_keyword = "Auto";
|
||||
else
|
||||
ppd_keyword = trim_keywords[value - IPP_FINISHINGS_TRIM_AFTER_PAGES];
|
||||
|
||||
cupsFilePrintf(fp, "*CutMedia %s: \"\"\n", ppd_keyword);
|
||||
cupsFilePrintf(fp, "*%s.CutMedia %s/%s: \"\"\n", lang->language, ppd_keyword, msgstr);
|
||||
cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*CutMedia %s\"\n", value, keyword, ppd_keyword);
|
||||
}
|
||||
|
||||
cupsFilePuts(fp, "*CloseUI: *CutMedia\n");
|
||||
}
|
||||
|
||||
cupsArrayDelete(names);
|
||||
}
|
||||
|
||||
@@ -4184,7 +4372,7 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
if (!keyword || cupsArrayFind(templates, (void *)keyword))
|
||||
continue;
|
||||
|
||||
if (strncmp(keyword, "fold-", 5) && (strstr(keyword, "-bottom") || strstr(keyword, "-left") || strstr(keyword, "-right") || strstr(keyword, "-top")))
|
||||
if (!strcmp(keyword, "none"))
|
||||
continue;
|
||||
|
||||
cupsArrayAdd(templates, (void *)keyword);
|
||||
|
||||
+10
-11
@@ -1719,8 +1719,7 @@ _ppdOpen(
|
||||
constraint->choice1, constraint->option2,
|
||||
constraint->choice2))
|
||||
{
|
||||
case 0 : /* Error */
|
||||
case 1 : /* Error */
|
||||
default : /* Error */
|
||||
pg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
|
||||
@@ -1874,9 +1873,9 @@ _ppdOpen(
|
||||
{
|
||||
if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
|
||||
{
|
||||
pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
|
||||
|
||||
goto error;
|
||||
char cname[PPD_MAX_NAME]; /* Rewrite with a leading underscore */
|
||||
snprintf(cname, sizeof(cname), "_%s", name);
|
||||
strlcpy(name, cname, sizeof(name));
|
||||
}
|
||||
|
||||
if ((size = ppdPageSize(ppd, name)) == NULL)
|
||||
@@ -1903,9 +1902,9 @@ _ppdOpen(
|
||||
{
|
||||
if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
|
||||
{
|
||||
pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
|
||||
|
||||
goto error;
|
||||
char cname[PPD_MAX_NAME]; /* Rewrite with a leading underscore */
|
||||
snprintf(cname, sizeof(cname), "_%s", name);
|
||||
strlcpy(name, cname, sizeof(name));
|
||||
}
|
||||
|
||||
if ((size = ppdPageSize(ppd, name)) == NULL)
|
||||
@@ -1939,9 +1938,9 @@ _ppdOpen(
|
||||
|
||||
if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
|
||||
{
|
||||
pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
|
||||
|
||||
goto error;
|
||||
char cname[PPD_MAX_NAME]; /* Rewrite with a leading underscore */
|
||||
snprintf(cname, sizeof(cname), "_%s", name);
|
||||
strlcpy(name, cname, sizeof(name));
|
||||
}
|
||||
|
||||
if (!strcmp(keyword, "PageSize"))
|
||||
|
||||
+52
-8
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Raster file routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* This file is part of the CUPS Imaging library.
|
||||
@@ -32,6 +32,24 @@ typedef void (*_cups_copyfunc_t)(void *dst, const void *src, size_t bytes);
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static const char * const apple_media_types[] =
|
||||
{ /* media-type values for Apple Raster */
|
||||
"auto",
|
||||
"stationery",
|
||||
"transparency",
|
||||
"envelope",
|
||||
"cardstock",
|
||||
"labels",
|
||||
"stationery-letterhead",
|
||||
"disc",
|
||||
"photographic-matte",
|
||||
"photographic-satin",
|
||||
"photographic-semi-gloss",
|
||||
"photographic-glossy",
|
||||
"photographic-high-gloss",
|
||||
"other"
|
||||
};
|
||||
|
||||
#ifdef DEBUG
|
||||
static const char * const cups_modes[] =
|
||||
{ /* Open modes */
|
||||
@@ -638,7 +656,7 @@ _cupsRasterReadHeader(
|
||||
{
|
||||
CUPS_CSPACE_SW,
|
||||
CUPS_CSPACE_SRGB,
|
||||
CUPS_CSPACE_RGBW,
|
||||
CUPS_CSPACE_CIELab,
|
||||
CUPS_CSPACE_ADOBERGB,
|
||||
CUPS_CSPACE_W,
|
||||
CUPS_CSPACE_RGB,
|
||||
@@ -648,7 +666,7 @@ _cupsRasterReadHeader(
|
||||
{
|
||||
1,
|
||||
3,
|
||||
4,
|
||||
3,
|
||||
3,
|
||||
1,
|
||||
3,
|
||||
@@ -681,8 +699,21 @@ _cupsRasterReadHeader(
|
||||
r->header.cupsPageSize[1] = (float)(r->header.cupsHeight * 72.0 / r->header.HWResolution[1]);
|
||||
}
|
||||
|
||||
r->header.cupsInteger[0] = r->apple_page_count;
|
||||
r->header.cupsInteger[7] = 0xffffff;
|
||||
r->header.cupsInteger[CUPS_RASTER_PWG_TotalPageCount] = r->apple_page_count;
|
||||
r->header.cupsInteger[CUPS_RASTER_PWG_AlternatePrimary] = 0xffffff;
|
||||
r->header.cupsInteger[CUPS_RASTER_PWG_PrintQuality] = appleheader[3];
|
||||
|
||||
if (appleheader[2] >= 2)
|
||||
r->header.Duplex = 1;
|
||||
if (appleheader[2] == 2)
|
||||
r->header.Tumble = 1;
|
||||
|
||||
r->header.MediaPosition = appleheader[5];
|
||||
|
||||
if (appleheader[4] < (int)(sizeof(apple_media_types) / sizeof(apple_media_types[0])))
|
||||
strlcpy(r->header.MediaType, apple_media_types[appleheader[4]], sizeof(r->header.MediaType));
|
||||
else
|
||||
strlcpy(r->header.MediaType, "other", sizeof(r->header.MediaType));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1072,8 +1103,9 @@ _cupsRasterWriteHeader(
|
||||
* zeroed.
|
||||
*/
|
||||
|
||||
unsigned char appleheader[32]; /* Raw page header */
|
||||
unsigned height = r->header.cupsHeight * r->rowheight;
|
||||
int i; /* Looping var */
|
||||
unsigned char appleheader[32];/* Raw page header */
|
||||
unsigned height = r->header.cupsHeight * r->rowheight;
|
||||
/* Computed page height */
|
||||
|
||||
if (r->apple_page_count == 0xffffffffU)
|
||||
@@ -1101,11 +1133,14 @@ _cupsRasterWriteHeader(
|
||||
|
||||
appleheader[0] = (unsigned char)r->header.cupsBitsPerPixel;
|
||||
appleheader[1] = r->header.cupsColorSpace == CUPS_CSPACE_SRGB ? 1 :
|
||||
r->header.cupsColorSpace == CUPS_CSPACE_RGBW ? 2 :
|
||||
r->header.cupsColorSpace == CUPS_CSPACE_CIELab ? 2 :
|
||||
r->header.cupsColorSpace == CUPS_CSPACE_ADOBERGB ? 3 :
|
||||
r->header.cupsColorSpace == CUPS_CSPACE_W ? 4 :
|
||||
r->header.cupsColorSpace == CUPS_CSPACE_RGB ? 5 :
|
||||
r->header.cupsColorSpace == CUPS_CSPACE_CMYK ? 6 : 0;
|
||||
appleheader[2] = r->header.Duplex ? (r->header.Tumble ? 2 : 3) : 1;
|
||||
appleheader[3] = (unsigned char)(r->header.cupsInteger[CUPS_RASTER_PWG_PrintQuality]);
|
||||
appleheader[5] = (unsigned char)(r->header.MediaPosition);
|
||||
appleheader[12] = (unsigned char)(r->header.cupsWidth >> 24);
|
||||
appleheader[13] = (unsigned char)(r->header.cupsWidth >> 16);
|
||||
appleheader[14] = (unsigned char)(r->header.cupsWidth >> 8);
|
||||
@@ -1119,6 +1154,15 @@ _cupsRasterWriteHeader(
|
||||
appleheader[22] = (unsigned char)(r->header.HWResolution[0] >> 8);
|
||||
appleheader[23] = (unsigned char)(r->header.HWResolution[0]);
|
||||
|
||||
for (i = 0; i < (int)(sizeof(apple_media_types) / sizeof(apple_media_types[0])); i ++)
|
||||
{
|
||||
if (!strcmp(r->header.MediaType, apple_media_types[i]))
|
||||
{
|
||||
appleheader[4] = (unsigned char)i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader));
|
||||
}
|
||||
else
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
/*
|
||||
* Side-channel API code for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2006 by Easy Software Products.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -589,8 +590,8 @@ cupsSideChannelWrite(
|
||||
if ((buffer = _cupsBufferGet((size_t)datalen + 4)) == NULL)
|
||||
return (-1);
|
||||
|
||||
buffer[0] = command;
|
||||
buffer[1] = status;
|
||||
buffer[0] = (char)command;
|
||||
buffer[1] = (char)status;
|
||||
buffer[2] = (char)(datalen >> 8);
|
||||
buffer[3] = (char)(datalen & 255);
|
||||
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* SNMP functions for CUPS.
|
||||
*
|
||||
* Copyright © 2007-2014 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 2006-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
@@ -1167,7 +1167,7 @@ asn1_encode_snmp(unsigned char *buffer, /* I - Buffer */
|
||||
memcpy(bufptr, packet->community, commlen);
|
||||
bufptr += commlen;
|
||||
|
||||
*bufptr++ = packet->request_type; /* Get-Request-PDU/Get-Next-Request-PDU */
|
||||
*bufptr++ = (unsigned char)packet->request_type; /* Get-Request-PDU/Get-Next-Request-PDU */
|
||||
asn1_set_length(&bufptr, reqlen);
|
||||
|
||||
asn1_set_integer(&bufptr, (int)packet->request_id);
|
||||
|
||||
+4
-4
@@ -146,7 +146,7 @@ _cupsStrDate(char *buf, /* I - Buffer */
|
||||
size_t bufsize, /* I - Size of buffer */
|
||||
time_t timeval) /* I - Time value */
|
||||
{
|
||||
struct tm *dateval; /* Local date/time */
|
||||
struct tm date; /* Local date/time */
|
||||
char temp[1024]; /* Temporary buffer */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Per-thread globals */
|
||||
|
||||
@@ -154,15 +154,15 @@ _cupsStrDate(char *buf, /* I - Buffer */
|
||||
if (!cg->lang_default)
|
||||
cg->lang_default = cupsLangDefault();
|
||||
|
||||
dateval = localtime(&timeval);
|
||||
localtime_r(&timeval, &date);
|
||||
|
||||
if (cg->lang_default->encoding != CUPS_UTF8)
|
||||
{
|
||||
strftime(temp, sizeof(temp), "%c", dateval);
|
||||
strftime(temp, sizeof(temp), "%c", &date);
|
||||
cupsCharsetToUTF8((cups_utf8_t *)buf, temp, (int)bufsize, cg->lang_default->encoding);
|
||||
}
|
||||
else
|
||||
strftime(buf, bufsize, "%c", dateval);
|
||||
strftime(buf, bufsize, "%c", &date);
|
||||
|
||||
return (buf);
|
||||
}
|
||||
|
||||
+6
-3
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Raster test program routines for CUPS.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
@@ -22,8 +22,7 @@
|
||||
|
||||
static int do_ras_file(const char *filename);
|
||||
static int do_raster_tests(cups_mode_t mode);
|
||||
static void print_changes(cups_page_header2_t *header,
|
||||
cups_page_header2_t *expected);
|
||||
static void print_changes(cups_page_header2_t *header, cups_page_header2_t *expected);
|
||||
|
||||
|
||||
/*
|
||||
@@ -174,6 +173,8 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
|
||||
header.cupsPageSize[0] = 288.0f;
|
||||
header.cupsPageSize[1] = 288.0f;
|
||||
|
||||
strlcpy(header.MediaType, "auto", sizeof(header.MediaType));
|
||||
|
||||
if (page & 1)
|
||||
{
|
||||
header.cupsBytesPerLine *= 4;
|
||||
@@ -308,6 +309,8 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
|
||||
expected.PageSize[0] = 288;
|
||||
expected.PageSize[1] = 288;
|
||||
|
||||
strlcpy(expected.MediaType, "auto", sizeof(expected.MediaType));
|
||||
|
||||
if (mode != CUPS_RASTER_WRITE_PWG)
|
||||
{
|
||||
expected.cupsPageSize[0] = 288.0f;
|
||||
|
||||
@@ -0,0 +1,268 @@
|
||||
/*
|
||||
* Threaded test program for CUPS.
|
||||
*
|
||||
* Copyright © 2012-2019 by Apple Inc.
|
||||
*
|
||||
* Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
* information.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <cups/cups.h>
|
||||
#include <cups/thread-private.h>
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static int enum_dests_cb(void *_name, unsigned flags, cups_dest_t *dest);
|
||||
static void *run_query(cups_dest_t *dest);
|
||||
static void show_supported(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option, const char *value);
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Main entry.
|
||||
*/
|
||||
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
/*
|
||||
* Go through all the available destinations to find the requested one...
|
||||
*/
|
||||
|
||||
(void)argc;
|
||||
|
||||
cupsEnumDests(CUPS_DEST_FLAGS_NONE, -1, NULL, 0, 0, enum_dests_cb, argv[1]);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'enum_dests_cb()' - Destination enumeration function...
|
||||
*/
|
||||
|
||||
static int /* O - 1 to continue, 0 to stop */
|
||||
enum_dests_cb(void *_name, /* I - Printer name, if any */
|
||||
unsigned flags, /* I - Enumeration flags */
|
||||
cups_dest_t *dest) /* I - Found destination */
|
||||
{
|
||||
const char *name = (const char *)_name;
|
||||
/* Printer name */
|
||||
cups_dest_t *cdest; /* Copied destination */
|
||||
|
||||
|
||||
(void)flags;
|
||||
|
||||
/*
|
||||
* If a name was specified, compare it...
|
||||
*/
|
||||
|
||||
if (name && strcasecmp(name, dest->name))
|
||||
return (1); /* Continue */
|
||||
|
||||
/*
|
||||
* Copy the destination and run the query on a separate thread...
|
||||
*/
|
||||
|
||||
cupsCopyDest(dest, 0, &cdest);
|
||||
_cupsThreadWait(_cupsThreadCreate((_cups_thread_func_t)run_query, cdest));
|
||||
|
||||
cupsFreeDests(1, cdest);
|
||||
|
||||
/*
|
||||
* Continue if no name was specified or the name matches...
|
||||
*/
|
||||
|
||||
return (!name || !strcasecmp(name, dest->name));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'run_query()' - Query printer capabilities on a separate thread.
|
||||
*/
|
||||
|
||||
static void * /* O - Return value (not used) */
|
||||
run_query(cups_dest_t *dest) /* I - Destination to query */
|
||||
{
|
||||
http_t *http; /* Connection to destination */
|
||||
cups_dinfo_t *dinfo; /* Destination info */
|
||||
unsigned dflags = CUPS_DEST_FLAGS_NONE;
|
||||
/* Destination flags */
|
||||
|
||||
|
||||
if ((http = cupsConnectDest(dest, dflags, 300, NULL, NULL, 0, NULL, NULL)) == NULL)
|
||||
{
|
||||
printf("testthreads: Unable to connect to destination \"%s\": %s\n", dest->name, cupsLastErrorString());
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if ((dinfo = cupsCopyDestInfo(http, dest)) == NULL)
|
||||
{
|
||||
printf("testdest: Unable to get information for destination \"%s\": %s\n", dest->name, cupsLastErrorString());
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
printf("\n%s:\n", dest->name);
|
||||
|
||||
show_supported(http, dest, dinfo, NULL, NULL);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 'show_supported()' - Show supported options, values, etc.
|
||||
*/
|
||||
|
||||
static void
|
||||
show_supported(http_t *http, /* I - Connection to destination */
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
const char *option, /* I - Option, if any */
|
||||
const char *value) /* I - Value, if any */
|
||||
{
|
||||
ipp_attribute_t *attr; /* Attribute */
|
||||
int i, /* Looping var */
|
||||
count; /* Number of values */
|
||||
|
||||
|
||||
if (!option)
|
||||
{
|
||||
attr = cupsFindDestSupported(http, dest, dinfo, "job-creation-attributes");
|
||||
if (attr)
|
||||
{
|
||||
count = ippGetCount(attr);
|
||||
for (i = 0; i < count; i ++)
|
||||
show_supported(http, dest, dinfo, ippGetString(attr, i, NULL), NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
static const char * const options[] =
|
||||
{ /* List of standard options */
|
||||
CUPS_COPIES,
|
||||
CUPS_FINISHINGS,
|
||||
CUPS_MEDIA,
|
||||
CUPS_NUMBER_UP,
|
||||
CUPS_ORIENTATION,
|
||||
CUPS_PRINT_COLOR_MODE,
|
||||
CUPS_PRINT_QUALITY,
|
||||
CUPS_SIDES
|
||||
};
|
||||
|
||||
puts(" No job-creation-attributes-supported attribute, probing instead.");
|
||||
|
||||
for (i = 0; i < (int)(sizeof(options) / sizeof(options[0])); i ++)
|
||||
if (cupsCheckDestSupported(http, dest, dinfo, options[i], NULL))
|
||||
show_supported(http, dest, dinfo, options[i], NULL);
|
||||
}
|
||||
}
|
||||
else if (!value)
|
||||
{
|
||||
printf(" %s (%s - %s)\n", option, cupsLocalizeDestOption(http, dest, dinfo, option), cupsCheckDestSupported(http, dest, dinfo, option, NULL) ? "supported" : "not-supported");
|
||||
|
||||
if ((attr = cupsFindDestSupported(http, dest, dinfo, option)) != NULL)
|
||||
{
|
||||
count = ippGetCount(attr);
|
||||
|
||||
switch (ippGetValueTag(attr))
|
||||
{
|
||||
case IPP_TAG_INTEGER :
|
||||
for (i = 0; i < count; i ++)
|
||||
printf(" %d\n", ippGetInteger(attr, i));
|
||||
break;
|
||||
|
||||
case IPP_TAG_ENUM :
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
int val = ippGetInteger(attr, i);
|
||||
char valstr[256];
|
||||
|
||||
snprintf(valstr, sizeof(valstr), "%d", val);
|
||||
printf(" %s (%s)\n", ippEnumString(option, ippGetInteger(attr, i)), cupsLocalizeDestValue(http, dest, dinfo, option, valstr));
|
||||
}
|
||||
break;
|
||||
|
||||
case IPP_TAG_RANGE :
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
int upper, lower = ippGetRange(attr, i, &upper);
|
||||
|
||||
printf(" %d-%d\n", lower, upper);
|
||||
}
|
||||
break;
|
||||
|
||||
case IPP_TAG_RESOLUTION :
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
int xres, yres;
|
||||
ipp_res_t units;
|
||||
xres = ippGetResolution(attr, i, &yres, &units);
|
||||
|
||||
if (xres == yres)
|
||||
printf(" %d%s\n", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
|
||||
else
|
||||
printf(" %dx%d%s\n", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
|
||||
}
|
||||
break;
|
||||
|
||||
case IPP_TAG_KEYWORD :
|
||||
for (i = 0; i < count; i ++)
|
||||
printf(" %s (%s)\n", ippGetString(attr, i, NULL), cupsLocalizeDestValue(http, dest, dinfo, option, ippGetString(attr, i, NULL)));
|
||||
break;
|
||||
|
||||
case IPP_TAG_TEXTLANG :
|
||||
case IPP_TAG_NAMELANG :
|
||||
case IPP_TAG_TEXT :
|
||||
case IPP_TAG_NAME :
|
||||
case IPP_TAG_URI :
|
||||
case IPP_TAG_URISCHEME :
|
||||
case IPP_TAG_CHARSET :
|
||||
case IPP_TAG_LANGUAGE :
|
||||
case IPP_TAG_MIMETYPE :
|
||||
for (i = 0; i < count; i ++)
|
||||
printf(" %s\n", ippGetString(attr, i, NULL));
|
||||
break;
|
||||
|
||||
case IPP_TAG_STRING :
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
int j, len;
|
||||
unsigned char *data = ippGetOctetString(attr, i, &len);
|
||||
|
||||
fputs(" ", stdout);
|
||||
for (j = 0; j < len; j ++)
|
||||
{
|
||||
if (data[j] < ' ' || data[j] >= 0x7f)
|
||||
printf("<%02X>", data[j]);
|
||||
else
|
||||
putchar(data[j]);
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
break;
|
||||
|
||||
case IPP_TAG_BOOLEAN :
|
||||
break;
|
||||
|
||||
default :
|
||||
printf(" %s\n", ippTagString(ippGetValueTag(attr)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if (cupsCheckDestSupported(http, dest, dinfo, option, value))
|
||||
puts("YES");
|
||||
else
|
||||
puts("NO");
|
||||
}
|
||||
+4
-3
@@ -2002,7 +2002,8 @@ static const char * /* O - Keychain path */
|
||||
http_cdsa_default_path(char *buffer, /* I - Path buffer */
|
||||
size_t bufsize) /* I - Size of buffer */
|
||||
{
|
||||
const char *home = getenv("HOME"); /* HOME environment variable */
|
||||
_cups_globals_t *cg = _cupsGlobals();
|
||||
/* Pointer to library globals */
|
||||
|
||||
|
||||
/*
|
||||
@@ -2011,8 +2012,8 @@ http_cdsa_default_path(char *buffer, /* I - Path buffer */
|
||||
* 10.11.4 (!), so we need to create our own keychain just for CUPS.
|
||||
*/
|
||||
|
||||
if (getuid() && home)
|
||||
snprintf(buffer, bufsize, "%s/.cups/ssl.keychain", home);
|
||||
if (cg->home)
|
||||
snprintf(buffer, bufsize, "%s/.cups/ssl.keychain", cg->home);
|
||||
else
|
||||
strlcpy(buffer, "/etc/cups/ssl.keychain", bufsize);
|
||||
|
||||
|
||||
+5
-4
@@ -935,12 +935,13 @@ static const char * /* O - Path or NULL on error */
|
||||
http_gnutls_default_path(char *buffer,/* I - Path buffer */
|
||||
size_t bufsize)/* I - Size of path buffer */
|
||||
{
|
||||
const char *home = getenv("HOME"); /* HOME environment variable */
|
||||
_cups_globals_t *cg = _cupsGlobals();
|
||||
/* Pointer to library globals */
|
||||
|
||||
|
||||
if (getuid() && home)
|
||||
if (cg->home)
|
||||
{
|
||||
snprintf(buffer, bufsize, "%s/.cups", home);
|
||||
snprintf(buffer, bufsize, "%s/.cups", cg->home);
|
||||
if (access(buffer, 0))
|
||||
{
|
||||
DEBUG_printf(("1http_gnutls_default_path: Making directory \"%s\".", buffer));
|
||||
@@ -951,7 +952,7 @@ http_gnutls_default_path(char *buffer,/* I - Path buffer */
|
||||
}
|
||||
}
|
||||
|
||||
snprintf(buffer, bufsize, "%s/.cups/ssl", home);
|
||||
snprintf(buffer, bufsize, "%s/.cups/ssl", cg->home);
|
||||
if (access(buffer, 0))
|
||||
{
|
||||
DEBUG_printf(("1http_gnutls_default_path: Making directory \"%s\".", buffer));
|
||||
|
||||
@@ -1967,6 +1967,8 @@ http_sspi_make_credentials(
|
||||
|
||||
GetSystemTime(&et);
|
||||
et.wYear += years;
|
||||
if (et.wMonth == 2 && et.wDay == 29)
|
||||
et.wDay = 28; /* Avoid Feb 29th due to leap years */
|
||||
|
||||
ZeroMemory(&exts, sizeof(exts));
|
||||
|
||||
|
||||
+32
-12
@@ -40,6 +40,8 @@
|
||||
# define kCUPSPrintingPrefs CFSTR(".GlobalPreferences")
|
||||
# define kPREFIX "AirPrint"
|
||||
# endif /* TARGET_OS_OSX */
|
||||
# define kDigestOptionsKey CFSTR(kPREFIX "DigestOptions")
|
||||
# define kUserKey CFSTR(kPREFIX "User")
|
||||
# define kUserAgentTokensKey CFSTR(kPREFIX "UserAgentTokens")
|
||||
# define kAllowAnyRootKey CFSTR(kPREFIX "AllowAnyRoot")
|
||||
# define kAllowExpiredCertsKey CFSTR(kPREFIX "AllowExpiredCerts")
|
||||
@@ -63,6 +65,7 @@
|
||||
|
||||
typedef struct _cups_client_conf_s /**** client.conf config data ****/
|
||||
{
|
||||
_cups_digestoptions_t digestoptions; /* DigestOptions values */
|
||||
_cups_uatokens_t uatokens; /* UserAgentTokens values */
|
||||
#ifdef HAVE_SSL
|
||||
int ssl_options, /* SSLOptions values */
|
||||
@@ -97,6 +100,7 @@ static void cups_finalize_client_conf(_cups_client_conf_t *cc);
|
||||
static void cups_init_client_conf(_cups_client_conf_t *cc);
|
||||
static void cups_read_client_conf(cups_file_t *fp, _cups_client_conf_t *cc);
|
||||
static void cups_set_default_ipp_port(_cups_globals_t *cg);
|
||||
static void cups_set_digestoptions(_cups_client_conf_t *cc, const char *value);
|
||||
static void cups_set_encryption(_cups_client_conf_t *cc, const char *value);
|
||||
#ifdef HAVE_GSSAPI
|
||||
static void cups_set_gss_service_name(_cups_client_conf_t *cc, const char *value);
|
||||
@@ -967,7 +971,6 @@ void
|
||||
_cupsSetDefaults(void)
|
||||
{
|
||||
cups_file_t *fp; /* File */
|
||||
const char *home; /* Home directory of user */
|
||||
char filename[1024]; /* Filename */
|
||||
_cups_client_conf_t cc; /* client.conf values */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
|
||||
@@ -993,19 +996,13 @@ _cupsSetDefaults(void)
|
||||
cupsFileClose(fp);
|
||||
}
|
||||
|
||||
# ifdef HAVE_GETEUID
|
||||
if ((geteuid() == getuid() || !getuid()) && getegid() == getgid() && (home = getenv("HOME")) != NULL)
|
||||
# elif !defined(_WIN32)
|
||||
if (getuid() && (home = getenv("HOME")) != NULL)
|
||||
# else
|
||||
if ((home = getenv("HOME")) != NULL)
|
||||
# endif /* HAVE_GETEUID */
|
||||
if (cg->home)
|
||||
{
|
||||
/*
|
||||
* Look for ~/.cups/client.conf...
|
||||
*/
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/client.conf", home);
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/client.conf", cg->home);
|
||||
if ((fp = cupsFileOpen(filename, "r")) != NULL)
|
||||
{
|
||||
cups_read_client_conf(fp, &cc);
|
||||
@@ -1324,10 +1321,14 @@ cups_init_client_conf(
|
||||
cc->validate_certs = bval;
|
||||
# endif /* HAVE_SSL */
|
||||
|
||||
if (cups_apple_get_string(kDigestOptionsKey, sval, sizeof(sval)))
|
||||
cups_set_digestoptions(cc, sval);
|
||||
|
||||
if (cups_apple_get_string(kUserKey, sval, sizeof(sval)))
|
||||
strlcpy(cc->user, sval, sizeof(cc->user));
|
||||
|
||||
if (cups_apple_get_string(kUserAgentTokensKey, sval, sizeof(sval)))
|
||||
{
|
||||
cups_set_uatokens(cc, sval);
|
||||
}
|
||||
#endif /* __APPLE__ */
|
||||
}
|
||||
|
||||
@@ -1353,7 +1354,9 @@ cups_read_client_conf(
|
||||
linenum = 0;
|
||||
while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
|
||||
{
|
||||
if (!_cups_strcasecmp(line, "Encryption") && value)
|
||||
if (!_cups_strcasecmp(line, "DigestOptions") && value)
|
||||
cups_set_digestoptions(cc, value);
|
||||
else if (!_cups_strcasecmp(line, "Encryption") && value)
|
||||
cups_set_encryption(cc, value);
|
||||
#ifndef __APPLE__
|
||||
/*
|
||||
@@ -1408,6 +1411,23 @@ cups_set_default_ipp_port(
|
||||
cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_set_digestoptions()' - Set the DigestOptions value.
|
||||
*/
|
||||
|
||||
static void
|
||||
cups_set_digestoptions(
|
||||
_cups_client_conf_t *cc, /* I - client.conf values */
|
||||
const char *value) /* I - Value */
|
||||
{
|
||||
if (!_cups_strcasecmp(value, "DenyMD5"))
|
||||
cc->digestoptions = _CUPS_DIGESTOPTIONS_DENYMD5;
|
||||
else if (!_cups_strcasecmp(value, "None"))
|
||||
cc->digestoptions = _CUPS_DIGESTOPTIONS_NONE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_set_encryption()' - Set the Encryption value.
|
||||
*/
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Administration APIs</title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Unknown">
|
||||
<meta name="copyright" content="Unknown">
|
||||
<meta name="version" content="0.0">
|
||||
@@ -450,7 +450,6 @@ h3.title {
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<!--
|
||||
Administrative API header for CUPS.
|
||||
|
||||
@@ -482,7 +481,6 @@ h3.title {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Filter and Backend Programming</title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Unknown">
|
||||
<meta name="copyright" content="Unknown">
|
||||
<meta name="version" content="0.0">
|
||||
@@ -450,7 +450,6 @@ h3.title {
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<!--
|
||||
Filter and backend programming header for CUPS.
|
||||
|
||||
@@ -488,7 +487,6 @@ h3.title {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>PPD API (DEPRECATED)</title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Unknown">
|
||||
<meta name="copyright" content="Unknown">
|
||||
<meta name="version" content="0.0">
|
||||
@@ -450,7 +450,6 @@ h3.title {
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<!--
|
||||
PPD API header for CUPS.
|
||||
|
||||
@@ -487,7 +486,6 @@ h3.title {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Raster API</title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Unknown">
|
||||
<meta name="copyright" content="Unknown">
|
||||
<meta name="version" content="0.0">
|
||||
@@ -450,7 +450,6 @@ h3.title {
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<!--
|
||||
Raster API documentation for CUPS.
|
||||
|
||||
@@ -482,7 +481,6 @@ h3.title {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
|
||||
Arquivo binário não exibido.
+175
-231
@@ -5,62 +5,91 @@
|
||||
<title>CUPS Programming Manual</title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Michael R Sweet">
|
||||
<meta name="copyright" content="Copyright © 2007-2019 by Apple Inc. All Rights Reserved.">
|
||||
<meta name="version" content="2.3.0">
|
||||
<meta name="version" content="2.3.3">
|
||||
<style type="text/css"><!--
|
||||
body, p, h1, h2, h3, h4, h5, h6 {
|
||||
body, p, h1, h2, h3, h4 {
|
||||
font-family: sans-serif;
|
||||
line-height: 1.4;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: bold;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
h1 {
|
||||
div.body h1 {
|
||||
font-size: 250%;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
}
|
||||
h2 {
|
||||
div.body h2 {
|
||||
font-size: 250%;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
h3 {
|
||||
font-size: 200%;
|
||||
margin-bottom: 0.5em;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
h4 {
|
||||
div.body h3 {
|
||||
font-size: 150%;
|
||||
margin-bottom: 0.5em;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
h5 {
|
||||
font-size: 125%;
|
||||
margin-bottom: 0.5em;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
h6 {
|
||||
div.body h4 {
|
||||
font-size: 110%;
|
||||
margin-bottom: 0.5em;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
div.header h1, div.header p {
|
||||
text-align: center;
|
||||
div.body h5 {
|
||||
font-size: 100%;
|
||||
margin-bottom: 0.5em;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
div.contents, div.body, div.footer {
|
||||
page-break-before: always;
|
||||
div.contents {
|
||||
background: #e8e8e8;
|
||||
border: solid thin black;
|
||||
padding: 10px;
|
||||
}
|
||||
.class, .enumeration, .function, .struct, .typedef, .union {
|
||||
div.contents h1 {
|
||||
font-size: 110%;
|
||||
}
|
||||
div.contents h2 {
|
||||
font-size: 100%;
|
||||
}
|
||||
div.contents ul.contents {
|
||||
font-size: 80%;
|
||||
}
|
||||
.class {
|
||||
border-bottom: solid 2px gray;
|
||||
}
|
||||
.constants {
|
||||
}
|
||||
.description {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
.discussion {
|
||||
}
|
||||
.enumeration {
|
||||
border-bottom: solid 2px gray;
|
||||
}
|
||||
.function {
|
||||
border-bottom: solid 2px gray;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.members {
|
||||
}
|
||||
.method {
|
||||
}
|
||||
.parameters {
|
||||
}
|
||||
.returnvalue {
|
||||
}
|
||||
.struct {
|
||||
border-bottom: solid 2px gray;
|
||||
}
|
||||
.typedef {
|
||||
border-bottom: solid 2px gray;
|
||||
}
|
||||
.union {
|
||||
border-bottom: solid 2px gray;
|
||||
}
|
||||
.variable {
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
blockquote {
|
||||
border: solid thin gray;
|
||||
box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
|
||||
@@ -68,16 +97,20 @@ blockquote {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
p code, li code, p.code, pre, ul.code li {
|
||||
font-family: monospace;
|
||||
hyphens: manual;
|
||||
-webkit-hyphens: manual;
|
||||
}
|
||||
p.code, pre, ul.code li {
|
||||
background: rgba(127,127,127,0.1);
|
||||
border: thin dotted gray;
|
||||
padding: 10px;
|
||||
font-family: monospace;
|
||||
font-size: 90%;
|
||||
hyphens: manual;
|
||||
-webkit-hyphens: manual;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
p.code, pre, ul.code li {
|
||||
padding: 10px;
|
||||
}
|
||||
p code, li code {
|
||||
padding: 2px 5px;
|
||||
}
|
||||
a:link, a:visited {
|
||||
text-decoration: none;
|
||||
}
|
||||
@@ -90,7 +123,7 @@ span.info {
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
}
|
||||
h1 span.info, h2 span.info, h3 span.info, h4 span.info {
|
||||
h3 span.info, h4 span.info {
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
float: right;
|
||||
@@ -110,38 +143,13 @@ ul.contents > li {
|
||||
ul.contents li ul.code, ul.contents li ul.subcontents {
|
||||
padding-left: 2em;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
td {
|
||||
border: solid 1px #666;
|
||||
padding: 5px 10px;
|
||||
vertical-align: top;
|
||||
}
|
||||
td.left {
|
||||
text-align: left;
|
||||
}
|
||||
td.center {
|
||||
text-align: center;
|
||||
}
|
||||
td.right {
|
||||
text-align: right;
|
||||
}
|
||||
th {
|
||||
border-bottom: solid 2px #000;
|
||||
padding: 1px 5px;
|
||||
text-align: center;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
tr:nth-child(even) {
|
||||
background: rgba(127,127,127,0.1);n}
|
||||
table.list {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
table.list tr:nth-child(even) {
|
||||
background: rgba(127,127,127,0.1);]n}
|
||||
table.list th {
|
||||
border-bottom: none;
|
||||
border-right: 2px solid gray;
|
||||
font-family: monospace;
|
||||
padding: 5px 10px 5px 2px;
|
||||
@@ -149,22 +157,24 @@ table.list th {
|
||||
vertical-align: top;
|
||||
}
|
||||
table.list td {
|
||||
border: none;
|
||||
padding: 5px 2px 5px 10px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
h2.title, h3.title {
|
||||
h1.title {
|
||||
}
|
||||
h2.title {
|
||||
border-bottom: solid 2px black;
|
||||
}
|
||||
h3.title {
|
||||
border-bottom: solid 2px black;
|
||||
}
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1 class="title">CUPS Programming Manual</h1>
|
||||
<p>Michael R Sweet</p>
|
||||
<p>Copyright © 2007-2019 by Apple Inc. All Rights Reserved.</p>
|
||||
</div>
|
||||
<h1 class="title">CUPS Programming Manual</h1>
|
||||
<p>Michael R Sweet</p>
|
||||
<p>Copyright © 2007-2019 by Apple Inc. All Rights Reserved.</p>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
@@ -506,20 +516,16 @@ h2.title, h3.title {
|
||||
<blockquote>
|
||||
<p>Please <a href="https://github.com/apple/cups/issues">file issues on Github</a> to provide feedback on this document.</p>
|
||||
</blockquote>
|
||||
<h2 class="title" id="introduction">Introduction</h2>
|
||||
<h2><a id="introduction">Introduction</a></h2>
|
||||
<p>CUPS provides the "cups" library to talk to the different parts of CUPS and with Internet Printing Protocol (IPP) printers. The "cups" library functions are accessed by including the <code><cups/cups.h></code> header.</p>
|
||||
<p>CUPS is based on the Internet Printing Protocol ("IPP"), which allows clients (applications) to communicate with a server (the scheduler, printers, etc.) to get a list of destinations, send print jobs, and so forth. You identify which server you want to communicate with using a pointer to the opaque structure <code>http_t</code>. The <code>CUPS_HTTP_DEFAULT</code> constant can be used when you want to talk to the CUPS scheduler.</p>
|
||||
<h3 class="title" id="guidelines">Guidelines</h3>
|
||||
<h3><a id="guidelines">Guidelines</a></h3>
|
||||
<p>When writing software (other than printer drivers) that uses the "cups" library:</p>
|
||||
<ul>
|
||||
<li> <p>Do not use undocumented or deprecated APIs,</p>
|
||||
</li>
|
||||
<li> <p>Do not rely on pre-configured printers,</p>
|
||||
</li>
|
||||
<li> <p>Do not assume that printers support specific features or formats, and</p>
|
||||
</li>
|
||||
<li> <p>Do not rely on implementation details (PPDs, etc.)</p>
|
||||
</li>
|
||||
<li>Do not use undocumented or deprecated APIs,</li>
|
||||
<li>Do not rely on pre-configured printers,</li>
|
||||
<li>Do not assume that printers support specific features or formats, and</li>
|
||||
<li>Do not rely on implementation details (PPDs, etc.)</li>
|
||||
</ul>
|
||||
<p>CUPS is designed to insulate users and developers from the implementation details of printers and file formats. The goal is to allow an application to supply a print file in a standard format with the user intent ("print four copies, two-sided on A4 media, and staple each copy") and have the printing system manage the printer communication and format conversion needed.</p>
|
||||
<p>Similarly, printer and job management applications can use standard query operations to obtain the status information in a common, generic form and use standard management operations to control the state of those printers and jobs.</p>
|
||||
@@ -527,9 +533,9 @@ h2.title, h3.title {
|
||||
<p><strong>Note:</strong></p>
|
||||
<p>CUPS printer drivers necessarily depend on specific file formats and certain implementation details of the CUPS software. Please consult the Postscript and raster printer driver developer documentation on <a href="https://www.cups.org/documentation.html">CUPS.org</a> for more information.</p>
|
||||
</blockquote>
|
||||
<h3 class="title" id="terms-used-in-this-document">Terms Used in This Document</h3>
|
||||
<p>A <em>Destination</em> is a printer or print queue that accepts print jobs. A <em>Print Job</em> is a collection of one or more documents that are processed by a destination using options supplied when creating the job. A <em>Document</em> is a file (JPEG image, PDF file, etc.) suitable for printing. An <em>Option</em> controls some aspect of printing, such as the media used. <em>Media</em> is the sheets or roll that is printed on. An <em>Attribute</em> is an option encoded for an Internet Printing Protocol (IPP) request.</p>
|
||||
<h3 class="title" id="compiling-programs-that-use-the-cups-api">Compiling Programs That Use the CUPS API</h3>
|
||||
<h3><a id="terms-used-in-this-document">Terms Used in This Document</a></h3>
|
||||
<p>A <em>Destination</em> is a printer or print queue that accepts print jobs. A <em>Print</em> <em>Job</em> is a collection of one or more documents that are processed by a destination using options supplied when creating the job. A <em>Document</em> is a file (JPEG image, PDF file, etc.) suitable for printing. An <em>Option</em> controls some aspect of printing, such as the media used. <em>Media</em> is the sheets or roll that is printed on. An <em>Attribute</em> is an option encoded for an Internet Printing Protocol (IPP) request.</p>
|
||||
<h3><a id="compiling-programs-that-use-the-cups-api">Compiling Programs That Use the CUPS API</a></h3>
|
||||
<p>The CUPS libraries can be used from any C, C++, or Objective C program. The method of compiling against the libraries varies depending on the operating system and installation of CUPS. The following sections show how to compile a simple program (shown below) in two common environments.</p>
|
||||
<p>The following simple program lists the available destinations:</p>
|
||||
<pre><code>#include <stdio.h>
|
||||
@@ -552,20 +558,20 @@ int main(void)
|
||||
return (0);
|
||||
}
|
||||
</code></pre>
|
||||
<h4 id="compiling-with-xcode">Compiling with Xcode</h4>
|
||||
<p>In Xcode, choose <em>New Project...</em> from the <em>File</em> menu (or press SHIFT+CMD+N), then select the <em>Command Line Tool</em> under the macOS Application project type. Click <em>Next</em> and enter a name for the project, for example "firstcups". Click <em>Next</em> and choose a project directory. The click <em>Next</em> to create the project.</p>
|
||||
<p>In the project window, click on the <em>Build Phases</em> group and expand the <em>Link Binary with Libraries</em> section. Click <em>+</em>, type "libcups" to show the library, and then double-click on <code>libcups.tbd</code>.</p>
|
||||
<h4><a id="compiling-with-xcode">Compiling with Xcode</a></h4>
|
||||
<p>In Xcode, choose <em>New</em> <em>Project...</em> from the <em>File</em> menu (or press SHIFT+CMD+N), then select the <em>Command</em> <em>Line</em> <em>Tool</em> under the macOS Application project type. Click <em>Next</em> and enter a name for the project, for example "firstcups". Click <em>Next</em> and choose a project directory. The click <em>Next</em> to create the project.</p>
|
||||
<p>In the project window, click on the <em>Build</em> <em>Phases</em> group and expand the <em>Link</em> <em>Binary</em> <em>with</em> <em>Libraries</em> section. Click <em>+</em>, type "libcups" to show the library, and then double-click on <code>libcups.tbd</code>.</p>
|
||||
<p>Finally, click on the <code>main.c</code> file in the sidebar and copy the example program to the file. Build and run (CMD+R) to see the list of destinations.</p>
|
||||
<h4 id="compiling-with-gcc">Compiling with GCC</h4>
|
||||
<p>From the command-line, create a file called <code>sample.c</code> using your favorite editor, copy the example to this file, and save. Then run the following command to compile it with GCC and run it:</p>
|
||||
<h4><a id="compiling-with-gcc">Compiling with GCC</a></h4>
|
||||
<p>From the command-line, create a file called <code>simple.c</code> using your favorite editor, copy the example to this file, and save. Then run the following command to compile it with GCC and run it:</p>
|
||||
<pre><code>gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
|
||||
./simple
|
||||
</code></pre>
|
||||
<p>The <code>cups-config</code> command provides the compiler flags (<code>cups-config --cflags</code>) and libraries (<code>cups-config --libs</code>) needed for the local system.</p>
|
||||
<h2 class="title" id="working-with-destinations">Working with Destinations</h2>
|
||||
<h2><a id="working-with-destinations">Working with Destinations</a></h2>
|
||||
<p>Destinations, which in CUPS represent individual printers or classes (collections or pools) of printers, are represented by the <code>cups_dest_t</code> structure which includes the name (<code>name</code>), instance (<code>instance</code>, saved options/settings), whether the destination is the default for the user (<code>is_default</code>), and the options and basic information associated with that destination (<code>num_options</code> and <code>options</code>).</p>
|
||||
<p>Historically destinations have been manually maintained by the administrator of a system or network, but CUPS also supports dynamic discovery of destinations on the current network.</p>
|
||||
<h3 class="title" id="finding-available-destinations">Finding Available Destinations</h3>
|
||||
<h3><a id="finding-available-destinations">Finding Available Destinations</a></h3>
|
||||
<p>The <code>cupsEnumDests</code> function finds all of the available destinations:</p>
|
||||
<pre><code> int
|
||||
cupsEnumDests(unsigned flags, int msec, int *cancel,
|
||||
@@ -577,42 +583,24 @@ int main(void)
|
||||
<p>The <code>cancel</code> argument points to an integer variable that, when set to a non-zero value, will cause enumeration to stop as soon as possible. It can be <code>NULL</code> if not needed.</p>
|
||||
<p>The <code>type</code> and <code>mask</code> arguments are bitfields that allow the caller to filter the destinations based on categories and/or capabilities. The destination's "printer-type" value is masked by the <code>mask</code> value and compared to the <code>type</code> value when filtering. For example, to only enumerate destinations that are hosted on the local system, pass <code>CUPS_PRINTER_LOCAL</code> for the <code>type</code> argument and <code>CUPS_PRINTER_DISCOVERED</code> for the <code>mask</code> argument. The following constants can be used for filtering:</p>
|
||||
<ul>
|
||||
<li> <p><code>CUPS_PRINTER_CLASS</code>: A collection of destinations.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_FAX</code>: A facsimile device.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_LOCAL</code>: A local printer or class. This constant has the value 0 (no bits set) and is only used for the <code>type</code> argument and is paired with the <code>CUPS_PRINTER_REMOTE</code> or <code>CUPS_PRINTER_DISCOVERED</code> constant passed in the <code>mask</code> argument.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_REMOTE</code>: A remote (shared) printer or class.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_DISCOVERED</code>: An available network printer or class.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_BW</code>: Can do B&W printing.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_COLOR</code>: Can do color printing.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_DUPLEX</code>: Can do two-sided printing.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_STAPLE</code>: Can staple output.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_COLLATE</code>: Can quickly collate copies.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_PUNCH</code>: Can punch output.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_COVER</code>: Can cover output.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_BIND</code>: Can bind output.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_SORT</code>: Can sort output (mailboxes, etc.)</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_SMALL</code>: Can print on Letter/Legal/A4-size media.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_MEDIUM</code>: Can print on Tabloid/B/C/A3/A2-size media.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_LARGE</code>: Can print on D/E/A1/A0-size media.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINTER_VARIABLE</code>: Can print on rolls and custom-size media.</p>
|
||||
</li>
|
||||
<li><code>CUPS_PRINTER_CLASS</code>: A collection of destinations.</li>
|
||||
<li><code>CUPS_PRINTER_FAX</code>: A facsimile device.</li>
|
||||
<li><code>CUPS_PRINTER_LOCAL</code>: A local printer or class. This constant has the value 0 (no bits set) and is only used for the <code>type</code> argument and is paired with the <code>CUPS_PRINTER_REMOTE</code> or <code>CUPS_PRINTER_DISCOVERED</code> constant passed in the <code>mask</code> argument.</li>
|
||||
<li><code>CUPS_PRINTER_REMOTE</code>: A remote (shared) printer or class.</li>
|
||||
<li><code>CUPS_PRINTER_DISCOVERED</code>: An available network printer or class.</li>
|
||||
<li><code>CUPS_PRINTER_BW</code>: Can do B&W printing.</li>
|
||||
<li><code>CUPS_PRINTER_COLOR</code>: Can do color printing.</li>
|
||||
<li><code>CUPS_PRINTER_DUPLEX</code>: Can do two-sided printing.</li>
|
||||
<li><code>CUPS_PRINTER_STAPLE</code>: Can staple output.</li>
|
||||
<li><code>CUPS_PRINTER_COLLATE</code>: Can quickly collate copies.</li>
|
||||
<li><code>CUPS_PRINTER_PUNCH</code>: Can punch output.</li>
|
||||
<li><code>CUPS_PRINTER_COVER</code>: Can cover output.</li>
|
||||
<li><code>CUPS_PRINTER_BIND</code>: Can bind output.</li>
|
||||
<li><code>CUPS_PRINTER_SORT</code>: Can sort output (mailboxes, etc.)</li>
|
||||
<li><code>CUPS_PRINTER_SMALL</code>: Can print on Letter/Legal/A4-size media.</li>
|
||||
<li><code>CUPS_PRINTER_MEDIUM</code>: Can print on Tabloid/B/C/A3/A2-size media.</li>
|
||||
<li><code>CUPS_PRINTER_LARGE</code>: Can print on D/E/A1/A0-size media.</li>
|
||||
<li><code>CUPS_PRINTER_VARIABLE</code>: Can print on rolls and custom-size media.</li>
|
||||
</ul>
|
||||
<p>The <code>cb</code> argument specifies a function to call for every destination that is found:</p>
|
||||
<pre><code>typedef int (*cups_dest_cb_t)(void *user_data,
|
||||
@@ -621,12 +609,9 @@ int main(void)
|
||||
</code></pre>
|
||||
<p>The callback function receives a copy of the <code>user_data</code> argument along with a bitfield (<code>flags</code>) and the destination that was found. The <code>flags</code> argument can have any of the following constant (bit) values set:</p>
|
||||
<ul>
|
||||
<li> <p><code>CUPS_DEST_FLAGS_MORE</code>: There are more destinations coming.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_DEST_FLAGS_REMOVED</code>: The destination has gone away and should be removed from the list of destinations a user can select.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_DEST_FLAGS_ERROR</code>: An error occurred. The reason for the error can be found by calling the <code>cupsLastError</code> and/or <code>cupsLastErrorString</code> functions.</p>
|
||||
</li>
|
||||
<li><code>CUPS_DEST_FLAGS_MORE</code>: There are more destinations coming.</li>
|
||||
<li><code>CUPS_DEST_FLAGS_REMOVED</code>: The destination has gone away and should be removed from the list of destinations a user can select.</li>
|
||||
<li><code>CUPS_DEST_FLAGS_ERROR</code>: An error occurred. The reason for the error can be found by calling the <code>cupsLastError</code> and/or <code>cupsLastErrorString</code> functions.</li>
|
||||
</ul>
|
||||
<p>The callback function returns 0 to stop enumeration or 1 to continue.</p>
|
||||
<blockquote>
|
||||
@@ -700,45 +685,34 @@ my_get_dests(cups_ptype_t type, cups_ptype_t mask,
|
||||
return (user_data.num_dests);
|
||||
}
|
||||
</code></pre>
|
||||
<h3 class="title" id="basic-destination-information">Basic Destination Information</h3>
|
||||
<h3><a id="basic-destination-information">Basic Destination Information</a></h3>
|
||||
<p>The <code>num_options</code> and <code>options</code> members of the <code>cups_dest_t</code> structure provide basic attributes about the destination in addition to the user default options and values for that destination. The following names are predefined for various destination attributes:</p>
|
||||
<ul>
|
||||
<li> <p>"auth-info-required": The type of authentication required for printing to this destination: "none", "username,password", "domain,username,password", or "negotiate" (Kerberos).</p>
|
||||
</li>
|
||||
<li> <p>"printer-info": The human-readable description of the destination such as "My Laser Printer".</p>
|
||||
</li>
|
||||
<li> <p>"printer-is-accepting-jobs": "true" if the destination is accepting new jobs, "false" otherwise.</p>
|
||||
</li>
|
||||
<li> <p>"printer-is-shared": "true" if the destination is being shared with other computers, "false" otherwise.</p>
|
||||
</li>
|
||||
<li> <p>"printer-location": The human-readable location of the destination such as "Lab 4".</p>
|
||||
</li>
|
||||
<li> <p>"printer-make-and-model": The human-readable make and model of the destination such as "ExampleCorp LaserPrinter 4000 Series".</p>
|
||||
</li>
|
||||
<li> <p>"printer-state": "3" if the destination is idle, "4" if the destination is printing a job, and "5" if the destination is stopped.</p>
|
||||
</li>
|
||||
<li> <p>"printer-state-change-time": The UNIX time when the destination entered the current state.</p>
|
||||
</li>
|
||||
<li> <p>"printer-state-reasons": Additional comma-delimited state keywords for the destination such as "media-tray-empty-error" and "toner-low-warning".</p>
|
||||
</li>
|
||||
<li> <p>"printer-type": The <code>cups_ptype_t</code> value associated with the destination.</p>
|
||||
</li>
|
||||
<li> <p>"printer-uri-supported": The URI associated with the destination; if not set, this destination was discovered but is not yet setup as a local printer.</p>
|
||||
</li>
|
||||
<li>"auth-info-required": The type of authentication required for printing to this destination: "none", "username,password", "domain,username,password", or "negotiate" (Kerberos).</li>
|
||||
<li>"printer-info": The human-readable description of the destination such as "My Laser Printer".</li>
|
||||
<li>"printer-is-accepting-jobs": "true" if the destination is accepting new jobs, "false" otherwise.</li>
|
||||
<li>"printer-is-shared": "true" if the destination is being shared with other computers, "false" otherwise.</li>
|
||||
<li>"printer-location": The human-readable location of the destination such as "Lab 4".</li>
|
||||
<li>"printer-make-and-model": The human-readable make and model of the destination such as "ExampleCorp LaserPrinter 4000 Series".</li>
|
||||
<li>"printer-state": "3" if the destination is idle, "4" if the destination is printing a job, and "5" if the destination is stopped.</li>
|
||||
<li>"printer-state-change-time": The UNIX time when the destination entered the current state.</li>
|
||||
<li>"printer-state-reasons": Additional comma-delimited state keywords for the destination such as "media-tray-empty-error" and "toner-low-warning".</li>
|
||||
<li>"printer-type": The <code>cups_ptype_t</code> value associated with the destination.</li>
|
||||
<li>"printer-uri-supported": The URI associated with the destination; if not set, this destination was discovered but is not yet setup as a local printer.</li>
|
||||
</ul>
|
||||
<p>Use the <code>cupsGetOption</code> function to retrieve the value. For example, the following code gets the make and model of a destination:</p>
|
||||
<pre><code>const char *model = cupsGetOption("printer-make-and-model",
|
||||
dest->num_options,
|
||||
dest->options);
|
||||
</code></pre>
|
||||
<h3 class="title" id="detailed-destination-information">Detailed Destination Information</h3>
|
||||
<h3><a id="detailed-destination-information">Detailed Destination Information</a></h3>
|
||||
<p>Once a destination has been chosen, the <code>cupsCopyDestInfo</code> function can be used to gather detailed information about the destination:</p>
|
||||
<pre><code>cups_dinfo_t *
|
||||
cupsCopyDestInfo(http_t *http, cups_dest_t *dest);
|
||||
</code></pre>
|
||||
<p>The <code>http</code> argument specifies a connection to the CUPS scheduler and is typically the constant <code>CUPS_HTTP_DEFAULT</code>. The <code>dest</code> argument specifies the destination to query.</p>
|
||||
<p>The <code>cups_dinfo_t</code> structure that is returned contains a snapshot of the supported options and their supported, ready, and default values. It also can report constraints between different options and values, and recommend changes to resolve those constraints.</p>
|
||||
<h4 id="getting-supported-options-and-values">Getting Supported Options and Values</h4>
|
||||
<h4><a id="getting-supported-options-and-values">Getting Supported Options and Values</a></h4>
|
||||
<p>The <code>cupsCheckDestSupported</code> function can be used to test whether a particular option or option and value is supported:</p>
|
||||
<pre><code>int
|
||||
cupsCheckDestSupported(http_t *http, cups_dest_t *dest,
|
||||
@@ -748,26 +722,16 @@ cupsCheckDestSupported(http_t *http, cups_dest_t *dest,
|
||||
</code></pre>
|
||||
<p>The <code>option</code> argument specifies the name of the option to check. The following constants can be used to check the various standard options:</p>
|
||||
<ul>
|
||||
<li> <p><code>CUPS_COPIES</code>: Controls the number of copies that are produced.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_FINISHINGS</code>: A comma-delimited list of integer constants that control the finishing processes that are applied to the job, including stapling, punching, and folding.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_MEDIA</code>: Controls the media size that is used, typically one of the following: <code>CUPS_MEDIA_3X5</code>, <code>CUPS_MEDIA_4X6</code>, <code>CUPS_MEDIA_5X7</code>, <code>CUPS_MEDIA_8X10</code>, <code>CUPS_MEDIA_A3</code>, <code>CUPS_MEDIA_A4</code>, <code>CUPS_MEDIA_A5</code>, <code>CUPS_MEDIA_A6</code>, <code>CUPS_MEDIA_ENV10</code>, <code>CUPS_MEDIA_ENVDL</code>, <code>CUPS_MEDIA_LEGAL</code>, <code>CUPS_MEDIA_LETTER</code>, <code>CUPS_MEDIA_PHOTO_L</code>, <code>CUPS_MEDIA_SUPERBA3</code>, or <code>CUPS_MEDIA_TABLOID</code>.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_MEDIA_SOURCE</code>: Controls where the media is pulled from, typically either <code>CUPS_MEDIA_SOURCE_AUTO</code> or <code>CUPS_MEDIA_SOURCE_MANUAL</code>.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_MEDIA_TYPE</code>: Controls the type of media that is used, typically one of the following: <code>CUPS_MEDIA_TYPE_AUTO</code>, <code>CUPS_MEDIA_TYPE_ENVELOPE</code>, <code>CUPS_MEDIA_TYPE_LABELS</code>, <code>CUPS_MEDIA_TYPE_LETTERHEAD</code>, <code>CUPS_MEDIA_TYPE_PHOTO</code>, <code>CUPS_MEDIA_TYPE_PHOTO_GLOSSY</code>, <code>CUPS_MEDIA_TYPE_PHOTO_MATTE</code>, <code>CUPS_MEDIA_TYPE_PLAIN</code>, or <code>CUPS_MEDIA_TYPE_TRANSPARENCY</code>.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_NUMBER_UP</code>: Controls the number of document pages that are placed on each media side.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_ORIENTATION</code>: Controls the orientation of document pages placed on the media: <code>CUPS_ORIENTATION_PORTRAIT</code> or <code>CUPS_ORIENTATION_LANDSCAPE</code>.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINT_COLOR_MODE</code>: Controls whether the output is in color (<code>CUPS_PRINT_COLOR_MODE_COLOR</code>), grayscale (<code>CUPS_PRINT_COLOR_MODE_MONOCHROME</code>), or either (<code>CUPS_PRINT_COLOR_MODE_AUTO</code>).</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_PRINT_QUALITY</code>: Controls the generate quality of the output: <code>CUPS_PRINT_QUALITY_DRAFT</code>, <code>CUPS_PRINT_QUALITY_NORMAL</code>, or <code>CUPS_PRINT_QUALITY_HIGH</code>.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_SIDES</code>: Controls whether prints are placed on one or both sides of the media: <code>CUPS_SIDES_ONE_SIDED</code>, <code>CUPS_SIDES_TWO_SIDED_PORTRAIT</code>, or <code>CUPS_SIDES_TWO_SIDED_LANDSCAPE</code>.</p>
|
||||
</li>
|
||||
<li><code>CUPS_COPIES</code>: Controls the number of copies that are produced.</li>
|
||||
<li><code>CUPS_FINISHINGS</code>: A comma-delimited list of integer constants that control the finishing processes that are applied to the job, including stapling, punching, and folding.</li>
|
||||
<li><code>CUPS_MEDIA</code>: Controls the media size that is used, typically one of the following: <code>CUPS_MEDIA_3X5</code>, <code>CUPS_MEDIA_4X6</code>, <code>CUPS_MEDIA_5X7</code>, <code>CUPS_MEDIA_8X10</code>, <code>CUPS_MEDIA_A3</code>, <code>CUPS_MEDIA_A4</code>, <code>CUPS_MEDIA_A5</code>, <code>CUPS_MEDIA_A6</code>, <code>CUPS_MEDIA_ENV10</code>, <code>CUPS_MEDIA_ENVDL</code>, <code>CUPS_MEDIA_LEGAL</code>, <code>CUPS_MEDIA_LETTER</code>, <code>CUPS_MEDIA_PHOTO_L</code>, <code>CUPS_MEDIA_SUPERBA3</code>, or <code>CUPS_MEDIA_TABLOID</code>.</li>
|
||||
<li><code>CUPS_MEDIA_SOURCE</code>: Controls where the media is pulled from, typically either <code>CUPS_MEDIA_SOURCE_AUTO</code> or <code>CUPS_MEDIA_SOURCE_MANUAL</code>.</li>
|
||||
<li><code>CUPS_MEDIA_TYPE</code>: Controls the type of media that is used, typically one of the following: <code>CUPS_MEDIA_TYPE_AUTO</code>, <code>CUPS_MEDIA_TYPE_ENVELOPE</code>, <code>CUPS_MEDIA_TYPE_LABELS</code>, <code>CUPS_MEDIA_TYPE_LETTERHEAD</code>, <code>CUPS_MEDIA_TYPE_PHOTO</code>, <code>CUPS_MEDIA_TYPE_PHOTO_GLOSSY</code>, <code>CUPS_MEDIA_TYPE_PHOTO_MATTE</code>, <code>CUPS_MEDIA_TYPE_PLAIN</code>, or <code>CUPS_MEDIA_TYPE_TRANSPARENCY</code>.</li>
|
||||
<li><code>CUPS_NUMBER_UP</code>: Controls the number of document pages that are placed on each media side.</li>
|
||||
<li><code>CUPS_ORIENTATION</code>: Controls the orientation of document pages placed on the media: <code>CUPS_ORIENTATION_PORTRAIT</code> or <code>CUPS_ORIENTATION_LANDSCAPE</code>.</li>
|
||||
<li><code>CUPS_PRINT_COLOR_MODE</code>: Controls whether the output is in color (<code>CUPS_PRINT_COLOR_MODE_COLOR</code>), grayscale (<code>CUPS_PRINT_COLOR_MODE_MONOCHROME</code>), or either (<code>CUPS_PRINT_COLOR_MODE_AUTO</code>).</li>
|
||||
<li><code>CUPS_PRINT_QUALITY</code>: Controls the generate quality of the output: <code>CUPS_PRINT_QUALITY_DRAFT</code>, <code>CUPS_PRINT_QUALITY_NORMAL</code>, or <code>CUPS_PRINT_QUALITY_HIGH</code>.</li>
|
||||
<li><code>CUPS_SIDES</code>: Controls whether prints are placed on one or both sides of the media: <code>CUPS_SIDES_ONE_SIDED</code>, <code>CUPS_SIDES_TWO_SIDED_PORTRAIT</code>, or <code>CUPS_SIDES_TWO_SIDED_LANDSCAPE</code>.</li>
|
||||
</ul>
|
||||
<p>If the <code>value</code> argument is <code>NULL</code>, the <code>cupsCheckDestSupported</code> function returns whether the option is supported by the destination. Otherwise, the function returns whether the specified value of the option is supported.</p>
|
||||
<p>The <code>cupsFindDestSupported</code> function returns the IPP attribute containing the supported values for a given option:</p>
|
||||
@@ -804,7 +768,7 @@ int i, count = ippGetCount(attrs);
|
||||
for (i = 0; i < count; i ++)
|
||||
puts(ippGetString(attrs, i, NULL));
|
||||
</code></pre>
|
||||
<h4 id="getting-default-values">Getting Default Values</h4>
|
||||
<h4><a id="getting-default-values">Getting Default Values</a></h4>
|
||||
<p>There are two sets of default values - user defaults that are available via the <code>num_options</code> and <code>options</code> members of the <code>cups_dest_t</code> structure, and destination defaults that available via the <code>cups_dinfo_t</code> structure and the <code>cupsFindDestDefault</code> function which returns the IPP attribute containing the default value(s) for a given option:</p>
|
||||
<pre><code>ipp_attribute_t *
|
||||
cupsFindDestDefault(http_t *http, cups_dest_t *dest,
|
||||
@@ -834,7 +798,7 @@ else
|
||||
putchar('\n');
|
||||
}
|
||||
</code></pre>
|
||||
<h4 id="getting-ready-loaded-values">Getting Ready (Loaded) Values</h4>
|
||||
<h4><a id="getting-ready-loaded-values">Getting Ready (Loaded) Values</a></h4>
|
||||
<p>The finishings and media options also support queries for the ready, or loaded, values. For example, a printer may have punch and staple finishers installed but be out of staples - the supported values will list both punch and staple finishing processes but the ready values will only list the punch processes. Similarly, a printer may support hundreds of different sizes of media but only have a single size loaded at any given time - the ready values are limited to the media that is actually in the printer.</p>
|
||||
<p>The <code>cupsFindDestReady</code> function finds the IPP attribute containing the ready values for a given option:</p>
|
||||
<pre><code>ipp_attribute_t *
|
||||
@@ -857,7 +821,7 @@ if (ready_finishings != NULL)
|
||||
else
|
||||
puts("no finishings are ready.");
|
||||
</code></pre>
|
||||
<h4 id="media-size-options">Media Size Options</h4>
|
||||
<h4><a id="media-size-options">Media Size Options</a></h4>
|
||||
<p>CUPS provides functions for querying the dimensions and margins for each of the supported media size options. The <code>cups_size_t</code> structure is used to describe a media size:</p>
|
||||
<pre><code>typedef struct cups_size_s
|
||||
{
|
||||
@@ -882,16 +846,11 @@ cupsGetDestMediaBySize(http_t *http, cups_dest_t *dest,
|
||||
</code></pre>
|
||||
<p>The <code>media</code>, <code>width</code>, and <code>length</code> arguments specify the size to lookup. The <code>flags</code> argument specifies a bitfield controlling various lookup options:</p>
|
||||
<ul>
|
||||
<li> <p><code>CUPS_MEDIA_FLAGS_DEFAULT</code>: Find the closest size supported by the printer.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_MEDIA_FLAGS_BORDERLESS</code>: Find a borderless size.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_MEDIA_FLAGS_DUPLEX</code>: Find a size compatible with two-sided printing.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_MEDIA_FLAGS_EXACT</code>: Find an exact match for the size.</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_MEDIA_FLAGS_READY</code>: If the printer supports media sensing or configuration of the media in each tray/source, find the size amongst the "ready" media.</p>
|
||||
</li>
|
||||
<li><code>CUPS_MEDIA_FLAGS_DEFAULT</code>: Find the closest size supported by the printer.</li>
|
||||
<li><code>CUPS_MEDIA_FLAGS_BORDERLESS</code>: Find a borderless size.</li>
|
||||
<li><code>CUPS_MEDIA_FLAGS_DUPLEX</code>: Find a size compatible with two-sided printing.</li>
|
||||
<li><code>CUPS_MEDIA_FLAGS_EXACT</code>: Find an exact match for the size.</li>
|
||||
<li><code>CUPS_MEDIA_FLAGS_READY</code>: If the printer supports media sensing or configuration of the media in each tray/source, find the size amongst the "ready" media.</li>
|
||||
</ul>
|
||||
<p>If a matching size is found for the destination, the size information is stored in the structure pointed to by the <code>size</code> argument and 1 is returned. Otherwise 0 is returned.</p>
|
||||
<p>For example, the following code prints the margins for two-sided printing on US Letter media:</p>
|
||||
@@ -949,7 +908,7 @@ cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest,
|
||||
cups_dinfo_t *dinfo, unsigned flags,
|
||||
cups_size_t *size);
|
||||
</code></pre>
|
||||
<h4 id="localizing-options-and-values">Localizing Options and Values</h4>
|
||||
<h4><a id="localizing-options-and-values">Localizing Options and Values</a></h4>
|
||||
<p>CUPS provides three functions to get localized, human-readable strings in the user's current locale for options and values: <code>cupsLocalizeDestMedia</code>, <code>cupsLocalizeDestOption</code>, and <code>cupsLocalizeDestValue</code>:</p>
|
||||
<pre><code>const char *
|
||||
cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest,
|
||||
@@ -966,7 +925,7 @@ cupsLocalizeDestValue(http_t *http, cups_dest_t *dest,
|
||||
cups_dinfo_t *info,
|
||||
const char *option, const char *value);
|
||||
</code></pre>
|
||||
<h3 class="title" id="submitting-a-print-job">Submitting a Print Job</h3>
|
||||
<h3><a id="submitting-a-print-job">Submitting a Print Job</a></h3>
|
||||
<p>Once you are ready to submit a print job, you create a job using the <code>cupsCreateDestJob</code> function:</p>
|
||||
<pre><code>ipp_status_t
|
||||
cupsCreateDestJob(http_t *http, cups_dest_t *dest,
|
||||
@@ -1017,14 +976,10 @@ cupsFinishDestDocument(http_t *http, cups_dest_t *dest,
|
||||
</code></pre>
|
||||
<p>The <code>docname</code> argument specifies the name of the document, typically the original filename. The <code>format</code> argument specifies the MIME media type of the document, including the following constants:</p>
|
||||
<ul>
|
||||
<li> <p><code>CUPS_FORMAT_JPEG</code>: "image/jpeg"</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_FORMAT_PDF</code>: "application/pdf"</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_FORMAT_POSTSCRIPT</code>: "application/postscript"</p>
|
||||
</li>
|
||||
<li> <p><code>CUPS_FORMAT_TEXT</code>: "text/plain"</p>
|
||||
</li>
|
||||
<li><code>CUPS_FORMAT_JPEG</code>: "image/jpeg"</li>
|
||||
<li><code>CUPS_FORMAT_PDF</code>: "application/pdf"</li>
|
||||
<li><code>CUPS_FORMAT_POSTSCRIPT</code>: "application/postscript"</li>
|
||||
<li><code>CUPS_FORMAT_TEXT</code>: "text/plain"</li>
|
||||
</ul>
|
||||
<p>The <code>num_options</code> and <code>options</code> arguments specify per-document print options, which at present must be 0 and <code>NULL</code>. The <code>last_document</code> argument specifies whether this is the last document in the job.</p>
|
||||
<p>For example, the following code submits a PDF file to the job that was just created:</p>
|
||||
@@ -1051,9 +1006,9 @@ if (cupsStartDestDocument(CUPS_HTTP_DEFAULT, dest, info,
|
||||
|
||||
fclose(fp);
|
||||
</code></pre>
|
||||
<h2 class="title" id="sending-ipp-requests">Sending IPP Requests</h2>
|
||||
<h2><a id="sending-ipp-requests">Sending IPP Requests</a></h2>
|
||||
<p>CUPS provides a rich API for sending IPP requests to the scheduler or printers, typically from management or utility applications whose primary purpose is not to send print jobs.</p>
|
||||
<h3 class="title" id="connecting-to-the-scheduler-or-printer">Connecting to the Scheduler or Printer</h3>
|
||||
<h3><a id="connecting-to-the-scheduler-or-printer">Connecting to the Scheduler or Printer</a></h3>
|
||||
<p>The connection to the scheduler or printer is represented by the HTTP connection type <code>http_t</code>. The <code>cupsConnectDest</code> function connects to the scheduler or printer associated with the destination:</p>
|
||||
<pre><code>http_t *
|
||||
cupsConnectDest(cups_dest_t *dest, unsigned flags, int msec,
|
||||
@@ -1074,7 +1029,7 @@ http_t *http = cupsConnectDest(dest, CUPS_DEST_FLAGS_DEVICE,
|
||||
30000, NULL, resource,
|
||||
sizeof(resource), NULL, NULL);
|
||||
</code></pre>
|
||||
<h3 class="title" id="creating-an-ipp-request">Creating an IPP Request</h3>
|
||||
<h3><a id="creating-an-ipp-request">Creating an IPP Request</a></h3>
|
||||
<p>IPP requests are represented by the IPP message type <code>ipp_t</code> and each IPP attribute in the request is representing using the type <code>ipp_attribute_t</code>. Each IPP request includes an operation code (<code>IPP_OP_CREATE_JOB</code>, <code>IPP_OP_GET_PRINTER_ATTRIBUTES</code>, etc.) and a 32-bit integer identifier.</p>
|
||||
<p>The <code>ippNewRequest</code> function creates a new IPP request:</p>
|
||||
<pre><code>ipp_t *
|
||||
@@ -1112,30 +1067,19 @@ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
<p>The <code>ippAddStrings</code> function adds an attribute with one or more strings, in this case three. The <code>IPP_TAG_KEYWORD</code> argument specifies that the strings are keyword values, which are used for attribute names. All strings use the same language (<code>NULL</code>), and the attribute will contain the three strings in the array <code>requested_attributes</code>.</p>
|
||||
<p>CUPS provides many functions to adding attributes of different types:</p>
|
||||
<ul>
|
||||
<li> <p><code>ippAddBoolean</code> adds a boolean (<code>IPP_TAG_BOOLEAN</code>) attribute with one value.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddInteger</code> adds an enum (<code>IPP_TAG_ENUM</code>) or integer (<code>IPP_TAG_INTEGER</code>) attribute with one value.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddIntegers</code> adds an enum or integer attribute with one or more values.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddOctetString</code> adds an octetString attribute with one value.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddOutOfBand</code> adds a admin-defined (<code>IPP_TAG_ADMINDEFINE</code>), default (<code>IPP_TAG_DEFAULT</code>), delete-attribute (<code>IPP_TAG_DELETEATTR</code>), no-value (<code>IPP_TAG_NOVALUE</code>), not-settable (<code>IPP_TAG_NOTSETTABLE</code>), unknown (<code>IPP_TAG_UNKNOWN</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_VALUE</code>) out-of-band attribute.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddRange</code> adds a rangeOfInteger attribute with one range.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddRanges</code> adds a rangeOfInteger attribute with one or more ranges.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddResolution</code> adds a resolution attribute with one resolution.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddResolutions</code> adds a resolution attribute with one or more resolutions.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddString</code> adds a charset (<code>IPP_TAG_CHARSET</code>), keyword (<code>IPP_TAG_KEYWORD</code>), mimeMediaType (<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code> and <code>IPP_TAG_NAMELANG</code>), naturalLanguage (<code>IPP_TAG_NATURAL_LANGUAGE</code>), text (<code>IPP_TAG_TEXT</code> and <code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), or uriScheme (<code>IPP_TAG_URISCHEME</code>) attribute with one value.</p>
|
||||
</li>
|
||||
<li> <p><code>ippAddStrings</code> adds a charset, keyword, mimeMediaType, name, naturalLanguage, text, uri, or uriScheme attribute with one or more values.</p>
|
||||
</li>
|
||||
<li><code>ippAddBoolean</code> adds a boolean (<code>IPP_TAG_BOOLEAN</code>) attribute with one value.</li>
|
||||
<li><code>ippAddInteger</code> adds an enum (<code>IPP_TAG_ENUM</code>) or integer (<code>IPP_TAG_INTEGER</code>) attribute with one value.</li>
|
||||
<li><code>ippAddIntegers</code> adds an enum or integer attribute with one or more values.</li>
|
||||
<li><code>ippAddOctetString</code> adds an octetString attribute with one value.</li>
|
||||
<li><code>ippAddOutOfBand</code> adds a admin-defined (<code>IPP_TAG_ADMINDEFINE</code>), default (<code>IPP_TAG_DEFAULT</code>), delete-attribute (<code>IPP_TAG_DELETEATTR</code>), no-value (<code>IPP_TAG_NOVALUE</code>), not-settable (<code>IPP_TAG_NOTSETTABLE</code>), unknown (<code>IPP_TAG_UNKNOWN</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_VALUE</code>) out-of-band attribute.</li>
|
||||
<li><code>ippAddRange</code> adds a rangeOfInteger attribute with one range.</li>
|
||||
<li><code>ippAddRanges</code> adds a rangeOfInteger attribute with one or more ranges.</li>
|
||||
<li><code>ippAddResolution</code> adds a resolution attribute with one resolution.</li>
|
||||
<li><code>ippAddResolutions</code> adds a resolution attribute with one or more resolutions.</li>
|
||||
<li><code>ippAddString</code> adds a charset (<code>IPP_TAG_CHARSET</code>), keyword (<code>IPP_TAG_KEYWORD</code>), mimeMediaType (<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code> and <code>IPP_TAG_NAMELANG</code>), naturalLanguage (<code>IPP_TAG_NATURAL_LANGUAGE</code>), text (<code>IPP_TAG_TEXT</code> and <code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), or uriScheme (<code>IPP_TAG_URISCHEME</code>) attribute with one value.</li>
|
||||
<li><code>ippAddStrings</code> adds a charset, keyword, mimeMediaType, name, naturalLanguage, text, uri, or uriScheme attribute with one or more values.</li>
|
||||
</ul>
|
||||
<h3 class="title" id="sending-the-ipp-request">Sending the IPP Request</h3>
|
||||
<h3><a id="sending-the-ipp-request">Sending the IPP Request</a></h3>
|
||||
<p>Once you have created the IPP request, you can send it using the <code>cupsDoRequest</code> function. For example, the following code sends the IPP Get-Printer-Attributes request to the destination and saves the response:</p>
|
||||
<pre><code>ipp_t *response = cupsDoRequest(http, request, resource);
|
||||
</code></pre>
|
||||
@@ -1157,7 +1101,7 @@ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
printf("Request failed: %s\n", cupsLastErrorString());
|
||||
}
|
||||
</code></pre>
|
||||
<h3 class="title" id="processing-the-ipp-response">Processing the IPP Response</h3>
|
||||
<h3><a id="processing-the-ipp-response">Processing the IPP Response</a></h3>
|
||||
<p>Each response to an IPP request is also an IPP message (<code>ipp_t</code>) with its own IPP attributes (<code>ipp_attribute_t</code>) that includes a status code (<code>IPP_STATUS_OK</code>, <code>IPP_STATUS_ERROR_BAD_REQUEST</code>, etc.) and the corresponding 32-bit integer identifier from the request.</p>
|
||||
<p>For example, the following code finds the printer state attributes and prints their values:</p>
|
||||
<pre><code>ipp_attribute_t *attr;
|
||||
@@ -1194,7 +1138,7 @@ if ((attr = ippFindAttribute(response, "printer-state-reasons",
|
||||
<p>Once you are done using the IPP response message, free it using the <code>ippDelete</code> function:</p>
|
||||
<pre><code>ippDelete(response);
|
||||
</code></pre>
|
||||
<h3 class="title" id="authentication">Authentication</h3>
|
||||
<h3><a id="authentication">Authentication</a></h3>
|
||||
<p>CUPS normally handles authentication through the console. GUI applications should set a password callback using the <code>cupsSetPasswordCB2</code> function:</p>
|
||||
<pre><code>void
|
||||
cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data);
|
||||
@@ -6339,7 +6283,7 @@ are server-oriented...</p>
|
||||
<tr><th>IPP_FINISHINGS_EDGE_STITCH_RIGHT </th> <td class="description">Stitch along right side</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_EDGE_STITCH_TOP </th> <td class="description">Stitch along top edge</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_FOLD </th> <td class="description">Fold (any type)</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_FOLD_ACCORDIAN </th> <td class="description">Accordian-fold the paper vertically into four sections</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_FOLD_ACCORDION </th> <td class="description">Accordion-fold the paper vertically into four sections</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_FOLD_DOUBLE_GATE </th> <td class="description">Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_FOLD_ENGINEERING_Z </th> <td class="description">Fold the paper vertically into two small sections and one larger, forming an elongated Z</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_FOLD_GATE </th> <td class="description">Fold the top and bottom quarters of the paper towards the midline</td></tr>
|
||||
@@ -6361,10 +6305,10 @@ are server-oriented...</p>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_DUAL_LEFT </th> <td class="description">Punch 2 holes left side</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_DUAL_RIGHT </th> <td class="description">Punch 2 holes right side</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_DUAL_TOP </th> <td class="description">Punch 2 holes top edge</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM </th> <td class="description">Pucnh multiple holes bottom edge</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_LEFT </th> <td class="description">Pucnh multiple holes left side</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_RIGHT </th> <td class="description">Pucnh multiple holes right side</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_TOP </th> <td class="description">Pucnh multiple holes top edge</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM </th> <td class="description">Punch multiple holes bottom edge</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_LEFT </th> <td class="description">Punch multiple holes left side</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_RIGHT </th> <td class="description">Punch multiple holes right side</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_TOP </th> <td class="description">Punch multiple holes top edge</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_QUAD_BOTTOM </th> <td class="description">Punch 4 holes bottom edge</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_QUAD_LEFT </th> <td class="description">Punch 4 holes left side</td></tr>
|
||||
<tr><th>IPP_FINISHINGS_PUNCH_QUAD_RIGHT </th> <td class="description">Punch 4 holes right side</td></tr>
|
||||
|
||||
@@ -19,28 +19,32 @@ See the NOTES section below for more information.
|
||||
<h3><a name="DIRECTIVES">Directives</a></h3>
|
||||
The following directives are understood by the client. Consult the online help for detailed descriptions:
|
||||
<dl class="man">
|
||||
<dt><b>AllowAnyRoot Yes</b>
|
||||
<dt><a name="AllowAnyRoot"></a><b>AllowAnyRoot Yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>AllowAnyRoot No</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether to allow TLS with certificates that have not been signed by a trusted Certificate Authority.
|
||||
The default is "Yes".
|
||||
<dt><b>AllowExpiredCerts Yes</b>
|
||||
<dt><a name="AllowExpiredCerts"></a><b>AllowExpiredCerts Yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>AllowExpiredCerts No</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether to allow TLS with expired certificates.
|
||||
The default is "No".
|
||||
<dt><b>Encryption IfRequested</b>
|
||||
<dt><a name="DigestOptions"></a><b>DigestOptions DenyMD5</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>DigestOptions None</b>
|
||||
<dd style="margin-left: 5.0em">Specifies HTTP Digest authentication options.
|
||||
<b>DenyMD5</b> disables support for the original MD5 hash algorithm.
|
||||
<dt><a name="Encryption"></a><b>Encryption IfRequested</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>Encryption Never</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>Encryption Required</b>
|
||||
<dd style="margin-left: 5.0em">Specifies the level of encryption that should be used.
|
||||
<dt><b>GSSServiceName </b><i>name</i>
|
||||
<dt><a name="GSSServiceName"></a><b>GSSServiceName </b><i>name</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the Kerberos service name that is used for authentication, typically "host", "http", or "ipp".
|
||||
CUPS adds the remote hostname ("name@server.example.com") for you. The default name is "http".
|
||||
<dt><b>ServerName </b><i>hostname-or-ip-address</i>[<i>:port</i>]
|
||||
<dt><a name="ServerName"></a><b>ServerName </b><i>hostname-or-ip-address</i>[<i>:port</i>]
|
||||
<dd style="margin-left: 5.0em"><dt><b>ServerName </b><i>/domain/socket</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the address and optionally the port to use when connecting to the server.
|
||||
<b>Note: This directive is not supported on macOS 10.7 or later.</b>
|
||||
<dt><b>ServerName </b><i>hostname-or-ip-address</i>[<i>:port</i>]<b>/version=1.1</b>
|
||||
<dd style="margin-left: 5.0em">Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier.
|
||||
<dt><b>SSLOptions </b>[<i>AllowDH</i>] [<i>AllowRC4</i>] [<i>AllowSSL3</i>] [<i>DenyCBC</i>] [<i>DenyTLS1.0</i>] [<i>MaxTLS1.0</i>] [<i>MaxTLS1.1</i>] [<i>MaxTLS1.2</i>] [<i>MaxTLS1.3</i>] [<i>MinTLS1.0</i>] [<i>MinTLS1.1</i>] [<i>MinTLS1.2</i>] [<i>MinTLS1.3</i>]
|
||||
<dt><a name="SSLOptions"></a><b>SSLOptions </b>[<i>AllowDH</i>] [<i>AllowRC4</i>] [<i>AllowSSL3</i>] [<i>DenyCBC</i>] [<i>DenyTLS1.0</i>] [<i>MaxTLS1.0</i>] [<i>MaxTLS1.1</i>] [<i>MaxTLS1.2</i>] [<i>MaxTLS1.3</i>] [<i>MinTLS1.0</i>] [<i>MinTLS1.1</i>] [<i>MinTLS1.2</i>] [<i>MinTLS1.3</i>]
|
||||
<dd style="margin-left: 5.0em"><dt><b>SSLOptions None</b>
|
||||
<dd style="margin-left: 5.0em">Sets encryption options (only in /etc/cups/client.conf).
|
||||
By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites.
|
||||
@@ -54,11 +58,11 @@ The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum p
|
||||
The <i>MinTLS</i> options set the minimum TLS version to support.
|
||||
The <i>MaxTLS</i> options set the maximum TLS version to support.
|
||||
Not all operating systems support TLS 1.3 at this time.
|
||||
<dt><b>TrustOnFirstUse Yes</b>
|
||||
<dt><a name="TrustOnFirstUse"></a><b>TrustOnFirstUse Yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>TrustOnFirstUse No</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether to trust new TLS certificates by default.
|
||||
The default is "Yes".
|
||||
<dt><b>User </b><i>name</i>
|
||||
<dt><a name="User"></a><b>User </b><i>name</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the default user name to use for requests.
|
||||
<dt><a name="UserAgentTokens"></a><b>UserAgentTokens None</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>UserAgentTokens ProductOnly</b>
|
||||
@@ -76,7 +80,7 @@ The default is "Yes".
|
||||
"OS" reports "CUPS/major.minor.path (osname osversion) IPP/2.1".
|
||||
"Full" reports "CUPS/major.minor.path (osname osversion; architecture) IPP/2.1".
|
||||
The default is "Minimal".
|
||||
<dt><b>ValidateCerts Yes</b>
|
||||
<dt><a name="ValidateCerts"></a><b>ValidateCerts Yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>ValidateCerts No</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether to only allow TLS with certificates whose common name matches the hostname.
|
||||
The default is "No".
|
||||
|
||||
@@ -16,10 +16,15 @@ ippeveprinter - an ipp everywhere printer application for cups
|
||||
] [
|
||||
<b>--no-web-forms</b>
|
||||
] [
|
||||
<b>--pam-service</b>
|
||||
<i>service</i>
|
||||
] [
|
||||
<b>--version</b>
|
||||
] [
|
||||
<b>-2</b>
|
||||
] [
|
||||
<b>-A</b>
|
||||
] [
|
||||
<b>-D</b>
|
||||
<i>device-uri</i>
|
||||
] [
|
||||
@@ -87,10 +92,17 @@ The following options are recognized by
|
||||
<dd style="margin-left: 5.0em">Show program usage.
|
||||
<dt><b>--no-web-forms</b>
|
||||
<dd style="margin-left: 5.0em">Disable the web interface forms used to update the media and supply levels.
|
||||
<dt><b>--pam-service </b><i>service</i>
|
||||
<dd style="margin-left: 5.0em">Set the PAM service name.
|
||||
The default service is "cups".
|
||||
<dt><b>--version</b>
|
||||
<dd style="margin-left: 5.0em">Show the CUPS version.
|
||||
<dt><b>-2</b>
|
||||
<dd style="margin-left: 5.0em">Report support for two-sided (duplex) printing.
|
||||
<dt><b>-A</b>
|
||||
<dd style="margin-left: 5.0em">Enable authentication for the created printer.
|
||||
<b>ippeveprinter</b>
|
||||
uses PAM to authenticate HTTP Basic credentials.
|
||||
<dt><b>-D </b><i>device-uri</i>
|
||||
<dd style="margin-left: 5.0em">Set the device URI for print output.
|
||||
The URI can be a filename, directory, or a network socket URI of the form "socket://ADDRESS[:PORT]" (where the default port number is 9100).
|
||||
@@ -149,6 +161,8 @@ command.
|
||||
<dt><b>-p </b><i>port</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the port number to listen on.
|
||||
The default is a user-specific number from 8000 to 8999.
|
||||
<dt><b>-r</b><b>off</b>
|
||||
<dd style="margin-left: 5.0em">Turns off DNS-SD service advertisements entirely.
|
||||
<dt><b>-r </b><i>subtype[,subtype]</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the DNS-SD subtype(s) to advertise.
|
||||
Separate multiple subtypes with a comma.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Developing PostScript Printer Drivers</title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Unknown">
|
||||
<meta name="copyright" content="Unknown">
|
||||
<meta name="version" content="0.0">
|
||||
@@ -450,7 +450,6 @@ h3.title {
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<!--
|
||||
PostScript printer driver documentation for CUPS.
|
||||
|
||||
@@ -478,7 +477,6 @@ h3.title {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Introduction to the PPD Compiler</title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Unknown">
|
||||
<meta name="copyright" content="Unknown">
|
||||
<meta name="version" content="0.0">
|
||||
@@ -450,7 +450,6 @@ h3.title {
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<!--
|
||||
PPD compiler documentation for CUPS.
|
||||
|
||||
@@ -486,7 +485,6 @@ that describe the features and capabilities of one or more printers.</P>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Developing Raster Printer Drivers</title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Unknown">
|
||||
<meta name="copyright" content="Unknown">
|
||||
<meta name="version" content="0.0">
|
||||
@@ -450,7 +450,6 @@ h3.title {
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<!--
|
||||
Raster printer driver documentation for CUPS.
|
||||
|
||||
@@ -478,7 +477,6 @@ h3.title {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
|
||||
@@ -35,7 +35,11 @@
|
||||
|
||||
<li><a href="http://ftp.pwg.org/pub/pwg/candidates/cs-ipptrans10-20131108-5100.16.pdf">PWG 5100.16: IPP Transaction-Based Printing Extensions</a></li>
|
||||
|
||||
<li><a href="http://tools.ietf.org/html/rfc3998">RFC 3998: IPP Job and Printer Administrative Operations</a> (Disable-Printer, Enable-Printer, Hold-New-Jobs, and Release-Held-New-Jobs operations)</li>
|
||||
<li><a href="http://tools.ietf.org/html/rfc3995">RFC 3995: IPP: Event Notifications and Subscriptions</a></li>
|
||||
|
||||
<li><a href="http://tools.ietf.org/html/rfc3996">RFC 3996: IPP: The 'ippget' Delivery Method for Event Notifications</li>
|
||||
|
||||
<li><a href="http://tools.ietf.org/html/rfc3998">RFC 3998: IPP: Job and Printer Administrative Operations</a> (Disable-Printer, Enable-Printer, Hold-New-Jobs, and Release-Held-New-Jobs operations)</li>
|
||||
|
||||
<li><a href="http://tools.ietf.org/html/rfc7472">RFC 7472: IPP over HTTPS Transport Binding and 'ipps' URI Scheme</a></li>
|
||||
|
||||
@@ -1614,11 +1618,13 @@ CUPS-Get-PPDs Response:
|
||||
|
||||
<li>'domain': A domain name is required.</li>
|
||||
|
||||
<li>'negotiate': Kerberos is required - this keyword can only appear by itself and causes cupsd to collect the UID of the printing user.</li>
|
||||
|
||||
<li>'none': No authentication is required - this keyword can only appear by itself.</li>
|
||||
|
||||
<li>'password': A password is required.</li>
|
||||
|
||||
<li>'username': A username is required.</li>
|
||||
<li>'username': A username is required. Some protocols (like SMB) prefix the username with the domain, for example "DOMAIN\user".</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>CUPS PPD Extensions</title>
|
||||
<meta name="keywords" content="Specifications">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="codedoc v3.2">
|
||||
<meta name="creator" content="codedoc v3.1">
|
||||
<meta name="author" content="Unknown">
|
||||
<meta name="copyright" content="Unknown">
|
||||
<meta name="version" content="0.0">
|
||||
@@ -450,7 +450,6 @@ h3.title {
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<!--
|
||||
PPD extension documentation for CUPS.
|
||||
|
||||
@@ -478,7 +477,6 @@ h3.title {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h2 class="title">Contents</h2>
|
||||
<ul class="contents">
|
||||
@@ -498,7 +496,7 @@ h3.title {
|
||||
<li><a href="#cupsUIResolver">cupsUIResolver</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#I18N">Globalized PPD Support</a></li>
|
||||
<li><a href="#OPTIONS">Custom Options</a></li>
|
||||
<li><a href="#OPTIONS"><span class="info">CUPS 1.3/macOS 10.6</span>Custom Options</a></li>
|
||||
<li><a href="#RASTERPS">Writing PostScript Option Commands for Raster Drivers</a></li>
|
||||
<li><a href="#MEDIA">Media Keywords</a><ul class="subcontents">
|
||||
<li><a href="#cupsMediaQualifier2">cupsMediaQualifier2</a></li>
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
|
||||
|
||||
/*
|
||||
* This driver filter currently supports Dymo, Intellitech, and Zebra
|
||||
* This driver filter currently supports DYMO, Intellitech, and Zebra
|
||||
* label printers.
|
||||
*
|
||||
* The Dymo portion of the driver has been tested with the 300, 330,
|
||||
* and 330 Turbo label printers; it may also work with other models.
|
||||
* The Dymo printers support printing at 136, 203, and 300 DPI.
|
||||
* The DYMO portion of the driver has been tested with the 300, 330,
|
||||
* 330 Turbo, and 450 Twin Turbo label printers; it may also work with other
|
||||
* models. The DYMO printers support printing at 136, 203, and 300 DPI.
|
||||
*
|
||||
* The Intellitech portion of the driver has been tested with the
|
||||
* Intellibar 408, 412, and 808 and supports their PCL variant.
|
||||
@@ -43,7 +43,7 @@
|
||||
* Model number constants...
|
||||
*/
|
||||
|
||||
#define DYMO_3x0 0 /* Dymo Labelwriter 300/330/330 Turbo */
|
||||
#define DYMO_3x0 0 /* DYMO Labelwriter 300/330/330 Turbo */
|
||||
|
||||
#define ZEBRA_EPL_LINE 0x10 /* Zebra EPL line mode printers */
|
||||
#define ZEBRA_EPL_PAGE 0x11 /* Zebra EPL page mode printers */
|
||||
@@ -191,6 +191,7 @@ StartPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
printf("\033D%c", header->cupsBytesPerLine);
|
||||
|
||||
printf("\033%c", header->cupsCompression + 'c'); /* Darkness */
|
||||
printf("\033q%d", header->MediaPosition + 1); /* Roll Select */
|
||||
break;
|
||||
|
||||
case ZEBRA_EPL_LINE :
|
||||
|
||||
+2504
-2385
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+101
-57
@@ -347,6 +347,7 @@
|
||||
"--name regex Match service name to regular expression" = "--name regex Match service name to regular expression";
|
||||
"--no-web-forms Disable web forms for media and supplies" = "--no-web-forms Disable web forms for media and supplies";
|
||||
"--not expression Unary NOT of expression" = "--not expression Unary NOT of expression";
|
||||
"--pam-service service Use the named PAM service" = "--pam-service service Use the named PAM service";
|
||||
"--path regex Match resource path to regular expression" = "--path regex Match resource path to regular expression";
|
||||
"--port number[-number] Match port to number or range" = "--port number[-number] Match port to number or range";
|
||||
"--print Print URI if true" = "--print Print URI if true";
|
||||
@@ -402,6 +403,7 @@
|
||||
"-9" = "-9";
|
||||
"-90" = "-90";
|
||||
"-95" = "-95";
|
||||
"-A Enable authentication" = "-A Enable authentication";
|
||||
"-C Send requests using chunking (default)" = "-C Send requests using chunking (default)";
|
||||
"-D description Specify the textual description of the printer" = "-D description Specify the textual description of the printer";
|
||||
"-D device-uri Set the device URI for the printer" = "-D device-uri Set the device URI for the printer";
|
||||
@@ -456,6 +458,7 @@
|
||||
"-d Show the default destination" = "-d Show the default destination";
|
||||
"-d destination Set default destination" = "-d destination Set default destination";
|
||||
"-d destination Set the named destination as the server default" = "-d destination Set the named destination as the server default";
|
||||
"-d destination Specify the destination" = "-d destination Specify the destination";
|
||||
"-d name=value Set named variable to value" = "-d name=value Set named variable to value";
|
||||
"-d regex Match domain to regular expression" = "-d regex Match domain to regular expression";
|
||||
"-d spool-directory Set spool directory" = "-d spool-directory Set spool directory";
|
||||
@@ -649,6 +652,7 @@
|
||||
"30 mm/sec." = "30 mm/sec.";
|
||||
"300 mm/sec." = "300 mm/sec.";
|
||||
"300dpi" = "300dpi";
|
||||
"30859 Paint Can Label" = "30859 Paint Can Label";
|
||||
"35" = "35";
|
||||
"360dpi" = "360dpi";
|
||||
"360x180dpi" = "360x180dpi";
|
||||
@@ -854,6 +858,7 @@
|
||||
"CustominTearInterval" = "CustominTearInterval";
|
||||
"Cut" = "Cut";
|
||||
"Cutter" = "Cutter";
|
||||
"DYMO" = "DYMO";
|
||||
"Dark" = "Dark";
|
||||
"Darkness" = "Darkness";
|
||||
"Data file sent successfully." = "Data file sent successfully.";
|
||||
@@ -877,7 +882,6 @@
|
||||
"Document #%d does not exist in job #%d." = "Document #%d does not exist in job #%d.";
|
||||
"Draft" = "Draft";
|
||||
"Duplexer" = "Duplexer";
|
||||
"Dymo" = "Dymo";
|
||||
"EPL1 Label Printer" = "EPL1 Label Printer";
|
||||
"EPL2 Label Printer" = "EPL2 Label Printer";
|
||||
"Edit Configuration File" = "Edit Configuration File";
|
||||
@@ -1086,6 +1090,7 @@
|
||||
"Local printer created." = "Local printer created.";
|
||||
"Long-Edge (Portrait)" = "Long-Edge (Portrait)";
|
||||
"Looking for printer." = "Looking for printer.";
|
||||
"Main Roll" = "Main Roll";
|
||||
"Manual Feed" = "Manual Feed";
|
||||
"Media Size" = "Media Size";
|
||||
"Media Source" = "Media Source";
|
||||
@@ -1258,6 +1263,7 @@
|
||||
"Rewind" = "Rewind";
|
||||
"SEQUENCE uses indefinite length" = "SEQUENCE uses indefinite length";
|
||||
"SSL/TLS Negotiation Error" = "SSL/TLS Negotiation Error";
|
||||
"Second Roll (DUO/Twin Only)" = "Second Roll (DUO/Twin Only)";
|
||||
"See Other" = "See Other";
|
||||
"See remote printer." = "See remote printer.";
|
||||
"Self-signed credentials are blocked." = "Self-signed credentials are blocked.";
|
||||
@@ -2114,6 +2120,10 @@
|
||||
"finishing-template.trim-after-job" = "Trim After Job";
|
||||
// TRANSLATORS: Trim After Every Page
|
||||
"finishing-template.trim-after-pages" = "Trim After Every Page";
|
||||
// TRANSLATORS: Trim After Every Set
|
||||
"finishing-template.trim-after-sets" = "Trim After Every Set";
|
||||
// TRANSLATORS: Trim After Every Page
|
||||
"finishing-template.trim-after-sheets" = "Trim After Every Page";
|
||||
// TRANSLATORS: Finishings
|
||||
"finishings" = "Finishings";
|
||||
// TRANSLATORS: Finishings
|
||||
@@ -2358,7 +2368,7 @@
|
||||
// TRANSLATORS: Job Accounting User ID
|
||||
"job-accounting-user-id" = "Job Accounting User ID";
|
||||
// TRANSLATORS: Job Cancel After
|
||||
"job-cancel-after" = "job-cancel-after";
|
||||
"job-cancel-after" = "Cancel job after";
|
||||
// TRANSLATORS: Copies
|
||||
"job-copies" = "Copies";
|
||||
// TRANSLATORS: Back Cover
|
||||
@@ -2469,21 +2479,21 @@
|
||||
// TRANSLATORS: Job Recipient Name
|
||||
"job-recipient-name" = "Job Recipient Name";
|
||||
// TRANSLATORS: Job Retain Until
|
||||
"job-retain-until" = "job-retain-until";
|
||||
"job-retain-until" = "Retain job until";
|
||||
// TRANSLATORS: Job Retain Until Interval
|
||||
"job-retain-until-interval" = "job-retain-until-interval";
|
||||
"job-retain-until-interval" = "Retain job until interval";
|
||||
// TRANSLATORS: Job Retain Until Time
|
||||
"job-retain-until-time" = "job-retain-until-time";
|
||||
"job-retain-until-time" = "Retain job until time";
|
||||
// TRANSLATORS: End Of Day
|
||||
"job-retain-until.end-of-day" = "job-retain-until.end-of-day";
|
||||
"job-retain-until.end-of-day" = "End of day";
|
||||
// TRANSLATORS: End Of Month
|
||||
"job-retain-until.end-of-month" = "job-retain-until.end-of-month";
|
||||
"job-retain-until.end-of-month" = "End of month";
|
||||
// TRANSLATORS: End Of Week
|
||||
"job-retain-until.end-of-week" = "job-retain-until.end-of-week";
|
||||
"job-retain-until.end-of-week" = "End of week";
|
||||
// TRANSLATORS: Indefinite
|
||||
"job-retain-until.indefinite" = "job-retain-until.indefinite";
|
||||
"job-retain-until.indefinite" = "Indefinitely";
|
||||
// TRANSLATORS: None
|
||||
"job-retain-until.none" = "job-retain-until.none";
|
||||
"job-retain-until.none" = "Never";
|
||||
// TRANSLATORS: Job Save Disposition
|
||||
"job-save-disposition" = "Job Save Disposition";
|
||||
// TRANSLATORS: Job Sheet Message
|
||||
@@ -3207,6 +3217,32 @@
|
||||
"media-type.cardstock" = "Cardstock";
|
||||
// TRANSLATORS: CD
|
||||
"media-type.cd" = "CD";
|
||||
// TRANSLATORS: Photo Advanced Paper
|
||||
"media-type.com.hp.advanced-photo" = "Photo Advanced Paper";
|
||||
// TRANSLATORS: Brochure Glossy Paper
|
||||
"media-type.com.hp.brochure-glossy" = "Brochure Glossy Paper";
|
||||
// TRANSLATORS: Brochure Matte Paper
|
||||
"media-type.com.hp.brochure-matte" = "Brochure Matte Paper";
|
||||
// TRANSLATORS: Matte Coverstock
|
||||
"media-type.com.hp.cover-matte" = "Matte Coverstock";
|
||||
// TRANSLATORS: EcoSMART Lite Paper
|
||||
"media-type.com.hp.ecosmart-lite" = "EcoSMART Lite Paper";
|
||||
// TRANSLATORS: Everyday Glossy Paper
|
||||
"media-type.com.hp.everyday-glossy" = "Everyday Glossy Paper";
|
||||
// TRANSLATORS: Everyday Matte Paper
|
||||
"media-type.com.hp.everyday-matte" = "Everyday Matte Paper";
|
||||
// TRANSLATORS: Extra Heavyweight Paper
|
||||
"media-type.com.hp.extra-heavy" = "Extra Heavyweight Paper";
|
||||
// TRANSLATORS: Intermediate Paper
|
||||
"media-type.com.hp.intermediate" = "Intermediate Paper";
|
||||
// TRANSLATORS: Mid-Weight Paper
|
||||
"media-type.com.hp.mid-weight" = "Mid-Weight Paper";
|
||||
// TRANSLATORS: Inkjet Premium Paper
|
||||
"media-type.com.hp.premium-inkjet" = "Inkjet Premium Paper";
|
||||
// TRANSLATORS: Photo Premium Paper
|
||||
"media-type.com.hp.premium-photo" = "Photo Premium Paper";
|
||||
// TRANSLATORS: Premium Matte Presentation Paper
|
||||
"media-type.com.hp.premium-presentation-matte" = "Premium Matte Presentation Paper";
|
||||
// TRANSLATORS: Continuous
|
||||
"media-type.continuous" = "Continuous";
|
||||
// TRANSLATORS: Continuous Long
|
||||
@@ -3303,6 +3339,14 @@
|
||||
"media-type.image-setter-paper" = "Image Setter Paper";
|
||||
// TRANSLATORS: Imaging Cylinder
|
||||
"media-type.imaging-cylinder" = "Imaging Cylinder";
|
||||
// TRANSLATORS: Photo Paper Plus Glossy II
|
||||
"media-type.jp.co.canon-photo-paper-plus-glossy-ii" = "Photo Paper Plus Glossy II";
|
||||
// TRANSLATORS: Photo Paper Pro Platinum
|
||||
"media-type.jp.co.canon-photo-paper-pro-platinum" = "Photo Paper Pro Platinum";
|
||||
// TRANSLATORS: Photo Paper Plus Glossy II
|
||||
"media-type.jp.co.canon_photo-paper-plus-glossy-ii" = "Photo Paper Plus Glossy II";
|
||||
// TRANSLATORS: Photo Paper Pro Platinum
|
||||
"media-type.jp.co.canon_photo-paper-pro-platinum" = "Photo Paper Pro Platinum";
|
||||
// TRANSLATORS: Labels
|
||||
"media-type.labels" = "Labels";
|
||||
// TRANSLATORS: Colored Labels
|
||||
@@ -3622,7 +3666,7 @@
|
||||
// TRANSLATORS: Envelope Chou 3
|
||||
"media.jpn_chou3_120x235mm" = "Envelope Chou 3";
|
||||
// TRANSLATORS: Envelope Chou 40
|
||||
"media.jpn_chou40_90x225mm" = "media.jpn_chou40_90x225mm";
|
||||
"media.jpn_chou40_90x225mm" = "Envelope Chou 40";
|
||||
// TRANSLATORS: Envelope Chou 4
|
||||
"media.jpn_chou4_90x205mm" = "Envelope Chou 4";
|
||||
// TRANSLATORS: Hagaki
|
||||
@@ -4265,13 +4309,13 @@
|
||||
// TRANSLATORS: Print Optimization
|
||||
"print-content-optimize" = "Print Optimization";
|
||||
// TRANSLATORS: Print Content Optimize Actual
|
||||
"print-content-optimize-actual" = "print-content-optimize-actual";
|
||||
"print-content-optimize-actual" = "Print Optimization";
|
||||
// TRANSLATORS: Automatic
|
||||
"print-content-optimize.auto" = "Automatic";
|
||||
// TRANSLATORS: Graphics
|
||||
"print-content-optimize.graphic" = "Graphics";
|
||||
// TRANSLATORS: Graphics
|
||||
"print-content-optimize.graphics" = "print-content-optimize.graphics";
|
||||
"print-content-optimize.graphics" = "Graphics";
|
||||
// TRANSLATORS: Photo
|
||||
"print-content-optimize.photo" = "Photo";
|
||||
// TRANSLATORS: Text
|
||||
@@ -4279,7 +4323,7 @@
|
||||
// TRANSLATORS: Text and Graphics
|
||||
"print-content-optimize.text-and-graphic" = "Text and Graphics";
|
||||
// TRANSLATORS: Text And Graphics
|
||||
"print-content-optimize.text-and-graphics" = "print-content-optimize.text-and-graphics";
|
||||
"print-content-optimize.text-and-graphics" = "Text and Graphics";
|
||||
// TRANSLATORS: Print Objects
|
||||
"print-objects" = "Print Objects";
|
||||
// TRANSLATORS: Print Quality
|
||||
@@ -4334,25 +4378,25 @@
|
||||
"printer %s/%s is idle. enabled since %s" = "printer %s/%s is idle. enabled since %s";
|
||||
"printer %s/%s now printing %s-%d. enabled since %s" = "printer %s/%s now printing %s-%d. enabled since %s";
|
||||
// TRANSLATORS: Printer Kind
|
||||
"printer-kind" = "printer-kind";
|
||||
"printer-kind" = "Printer Kind";
|
||||
// TRANSLATORS: Disc
|
||||
"printer-kind.disc" = "printer-kind.disc";
|
||||
"printer-kind.disc" = "Disc";
|
||||
// TRANSLATORS: Document
|
||||
"printer-kind.document" = "printer-kind.document";
|
||||
"printer-kind.document" = "Document";
|
||||
// TRANSLATORS: Envelope
|
||||
"printer-kind.envelope" = "printer-kind.envelope";
|
||||
"printer-kind.envelope" = "Envelope";
|
||||
// TRANSLATORS: Label
|
||||
"printer-kind.label" = "printer-kind.label";
|
||||
"printer-kind.label" = "Label";
|
||||
// TRANSLATORS: Large Format
|
||||
"printer-kind.large-format" = "printer-kind.large-format";
|
||||
"printer-kind.large-format" = "Large format";
|
||||
// TRANSLATORS: Photo
|
||||
"printer-kind.photo" = "printer-kind.photo";
|
||||
"printer-kind.photo" = "Photo";
|
||||
// TRANSLATORS: Postcard
|
||||
"printer-kind.postcard" = "printer-kind.postcard";
|
||||
"printer-kind.postcard" = "Postcard";
|
||||
// TRANSLATORS: Receipt
|
||||
"printer-kind.receipt" = "printer-kind.receipt";
|
||||
"printer-kind.receipt" = "Receipt";
|
||||
// TRANSLATORS: Roll
|
||||
"printer-kind.roll" = "printer-kind.roll";
|
||||
"printer-kind.roll" = "Roll";
|
||||
// TRANSLATORS: Message From Operator
|
||||
"printer-message-from-operator" = "Message From Operator";
|
||||
// TRANSLATORS: Print Resolution
|
||||
@@ -4624,15 +4668,15 @@
|
||||
// TRANSLATORS: Fan Failure
|
||||
"printer-state-reasons.fan-failure" = "Fan Failure";
|
||||
// TRANSLATORS: Fax Modem Life Almost Over
|
||||
"printer-state-reasons.fax-modem-life-almost-over" = "printer-state-reasons.fax-modem-life-almost-over";
|
||||
"printer-state-reasons.fax-modem-life-almost-over" = "Fax Modem Life Almost Over";
|
||||
// TRANSLATORS: Fax Modem Life Over
|
||||
"printer-state-reasons.fax-modem-life-over" = "printer-state-reasons.fax-modem-life-over";
|
||||
"printer-state-reasons.fax-modem-life-over" = "Fax Modem Life Over";
|
||||
// TRANSLATORS: Fax Modem Missing
|
||||
"printer-state-reasons.fax-modem-missing" = "printer-state-reasons.fax-modem-missing";
|
||||
"printer-state-reasons.fax-modem-missing" = "Fax Modem Missing";
|
||||
// TRANSLATORS: Fax Modem Turned Off
|
||||
"printer-state-reasons.fax-modem-turned-off" = "printer-state-reasons.fax-modem-turned-off";
|
||||
"printer-state-reasons.fax-modem-turned-off" = "Fax Modem Turned Off";
|
||||
// TRANSLATORS: Fax Modem Turned On
|
||||
"printer-state-reasons.fax-modem-turned-on" = "printer-state-reasons.fax-modem-turned-on";
|
||||
"printer-state-reasons.fax-modem-turned-on" = "Fax Modem Turned On";
|
||||
// TRANSLATORS: Folder Added
|
||||
"printer-state-reasons.folder-added" = "Folder Added";
|
||||
// TRANSLATORS: Folder Almost Empty
|
||||
@@ -4796,23 +4840,23 @@
|
||||
// TRANSLATORS: Input Media Size Change
|
||||
"printer-state-reasons.input-media-size-change" = "Input Media Size Change";
|
||||
// TRANSLATORS: Input Media Tray Failure
|
||||
"printer-state-reasons.input-media-tray-failure" = "printer-state-reasons.input-media-tray-failure";
|
||||
"printer-state-reasons.input-media-tray-failure" = "Input Media Tray Failure";
|
||||
// TRANSLATORS: Input Media Tray Feed Error
|
||||
"printer-state-reasons.input-media-tray-feed-error" = "printer-state-reasons.input-media-tray-feed-error";
|
||||
"printer-state-reasons.input-media-tray-feed-error" = "Input Media Tray Feed Error";
|
||||
// TRANSLATORS: Input Media Tray Jam
|
||||
"printer-state-reasons.input-media-tray-jam" = "printer-state-reasons.input-media-tray-jam";
|
||||
"printer-state-reasons.input-media-tray-jam" = "Input Media Tray Jam";
|
||||
// TRANSLATORS: Input Media Type Change
|
||||
"printer-state-reasons.input-media-type-change" = "Input Media Type Change";
|
||||
// TRANSLATORS: Input Media Weight Change
|
||||
"printer-state-reasons.input-media-weight-change" = "Input Media Weight Change";
|
||||
// TRANSLATORS: Input Pick Roller Failure
|
||||
"printer-state-reasons.input-pick-roller-failure" = "printer-state-reasons.input-pick-roller-failure";
|
||||
"printer-state-reasons.input-pick-roller-failure" = "Input Pick Roller Failure";
|
||||
// TRANSLATORS: Input Pick Roller Life Over
|
||||
"printer-state-reasons.input-pick-roller-life-over" = "printer-state-reasons.input-pick-roller-life-over";
|
||||
"printer-state-reasons.input-pick-roller-life-over" = "Input Pick Roller Life Over";
|
||||
// TRANSLATORS: Input Pick Roller Life Warn
|
||||
"printer-state-reasons.input-pick-roller-life-warn" = "printer-state-reasons.input-pick-roller-life-warn";
|
||||
"printer-state-reasons.input-pick-roller-life-warn" = "Input Pick Roller Life Warn";
|
||||
// TRANSLATORS: Input Pick Roller Missing
|
||||
"printer-state-reasons.input-pick-roller-missing" = "printer-state-reasons.input-pick-roller-missing";
|
||||
"printer-state-reasons.input-pick-roller-missing" = "Input Pick Roller Missing";
|
||||
// TRANSLATORS: Input Tray Elevation Failure
|
||||
"printer-state-reasons.input-tray-elevation-failure" = "Input Tray Elevation Failure";
|
||||
// TRANSLATORS: Paper tray is missing
|
||||
@@ -4998,63 +5042,63 @@
|
||||
// TRANSLATORS: Marker Adjusting Print Quality
|
||||
"printer-state-reasons.marker-adjusting-print-quality" = "Marker Adjusting Print Quality";
|
||||
// TRANSLATORS: Marker Cleaner Missing
|
||||
"printer-state-reasons.marker-cleaner-missing" = "printer-state-reasons.marker-cleaner-missing";
|
||||
"printer-state-reasons.marker-cleaner-missing" = "Marker Cleaner Missing";
|
||||
// TRANSLATORS: Marker Developer Almost Empty
|
||||
"printer-state-reasons.marker-developer-almost-empty" = "Marker Developer Almost Empty";
|
||||
// TRANSLATORS: Marker Developer Empty
|
||||
"printer-state-reasons.marker-developer-empty" = "Marker Developer Empty";
|
||||
// TRANSLATORS: Marker Developer Missing
|
||||
"printer-state-reasons.marker-developer-missing" = "printer-state-reasons.marker-developer-missing";
|
||||
"printer-state-reasons.marker-developer-missing" = "Marker Developer Missing";
|
||||
// TRANSLATORS: Marker Fuser Missing
|
||||
"printer-state-reasons.marker-fuser-missing" = "printer-state-reasons.marker-fuser-missing";
|
||||
"printer-state-reasons.marker-fuser-missing" = "Marker Fuser Missing";
|
||||
// TRANSLATORS: Marker Fuser Thermistor Failure
|
||||
"printer-state-reasons.marker-fuser-thermistor-failure" = "Marker Fuser Thermistor Failure";
|
||||
// TRANSLATORS: Marker Fuser Timing Failure
|
||||
"printer-state-reasons.marker-fuser-timing-failure" = "Marker Fuser Timing Failure";
|
||||
// TRANSLATORS: Marker Ink Almost Empty
|
||||
"printer-state-reasons.marker-ink-almost-empty" = "Marker Ink Almost Empty";
|
||||
"printer-state-reasons.marker-ink-almost-empty" = "Low ink";
|
||||
// TRANSLATORS: Marker Ink Empty
|
||||
"printer-state-reasons.marker-ink-empty" = "Marker Ink Empty";
|
||||
"printer-state-reasons.marker-ink-empty" = "Ink empty";
|
||||
// TRANSLATORS: Marker Ink Missing
|
||||
"printer-state-reasons.marker-ink-missing" = "printer-state-reasons.marker-ink-missing";
|
||||
"printer-state-reasons.marker-ink-missing" = "Ink missing";
|
||||
// TRANSLATORS: Marker Opc Missing
|
||||
"printer-state-reasons.marker-opc-missing" = "printer-state-reasons.marker-opc-missing";
|
||||
"printer-state-reasons.marker-opc-missing" = "OPC missing";
|
||||
// TRANSLATORS: Marker Print Ribbon Almost Empty
|
||||
"printer-state-reasons.marker-print-ribbon-almost-empty" = "Marker Print Ribbon Almost Empty";
|
||||
"printer-state-reasons.marker-print-ribbon-almost-empty" = "Print ribbon Almost Empty";
|
||||
// TRANSLATORS: Marker Print Ribbon Empty
|
||||
"printer-state-reasons.marker-print-ribbon-empty" = "Marker Print Ribbon Empty";
|
||||
"printer-state-reasons.marker-print-ribbon-empty" = "Print ribbon Empty";
|
||||
// TRANSLATORS: Marker Print Ribbon Missing
|
||||
"printer-state-reasons.marker-print-ribbon-missing" = "printer-state-reasons.marker-print-ribbon-missing";
|
||||
"printer-state-reasons.marker-print-ribbon-missing" = "Print ribbon missing";
|
||||
// TRANSLATORS: Marker Supply Almost Empty
|
||||
"printer-state-reasons.marker-supply-almost-empty" = "printer-state-reasons.marker-supply-almost-empty";
|
||||
"printer-state-reasons.marker-supply-almost-empty" = "Ink/toner almost empty";
|
||||
// TRANSLATORS: Ink/toner empty
|
||||
"printer-state-reasons.marker-supply-empty" = "Marker Supply Empty";
|
||||
"printer-state-reasons.marker-supply-empty" = "Ink/toner empty";
|
||||
// TRANSLATORS: Ink/toner low
|
||||
"printer-state-reasons.marker-supply-low" = "Marker Supply Low";
|
||||
"printer-state-reasons.marker-supply-low" = "Ink/toner low";
|
||||
// TRANSLATORS: Marker Supply Missing
|
||||
"printer-state-reasons.marker-supply-missing" = "printer-state-reasons.marker-supply-missing";
|
||||
"printer-state-reasons.marker-supply-missing" = "Ink/toner missing";
|
||||
// TRANSLATORS: Marker Toner Cartridge Missing
|
||||
"printer-state-reasons.marker-toner-cartridge-missing" = "Marker Toner Cartridge Missing";
|
||||
"printer-state-reasons.marker-toner-cartridge-missing" = "Toner cartridge missing";
|
||||
// TRANSLATORS: Marker Toner Missing
|
||||
"printer-state-reasons.marker-toner-missing" = "printer-state-reasons.marker-toner-missing";
|
||||
"printer-state-reasons.marker-toner-missing" = "Toner missing";
|
||||
// TRANSLATORS: Ink/toner waste bin almost full
|
||||
"printer-state-reasons.marker-waste-almost-full" = "Marker Waste Almost Full";
|
||||
"printer-state-reasons.marker-waste-almost-full" = "Ink/toner waste bin almost full";
|
||||
// TRANSLATORS: Ink/toner waste bin full
|
||||
"printer-state-reasons.marker-waste-full" = "Marker Waste Full";
|
||||
"printer-state-reasons.marker-waste-full" = "Ink/toner waste bin full";
|
||||
// TRANSLATORS: Marker Waste Ink Receptacle Almost Full
|
||||
"printer-state-reasons.marker-waste-ink-receptacle-almost-full" = "Marker Waste Ink Receptacle Almost Full";
|
||||
// TRANSLATORS: Marker Waste Ink Receptacle Full
|
||||
"printer-state-reasons.marker-waste-ink-receptacle-full" = "Marker Waste Ink Receptacle Full";
|
||||
// TRANSLATORS: Marker Waste Ink Receptacle Missing
|
||||
"printer-state-reasons.marker-waste-ink-receptacle-missing" = "printer-state-reasons.marker-waste-ink-receptacle-missing";
|
||||
"printer-state-reasons.marker-waste-ink-receptacle-missing" = "Marker Waste Ink Receptacle Missing";
|
||||
// TRANSLATORS: Marker Waste Missing
|
||||
"printer-state-reasons.marker-waste-missing" = "printer-state-reasons.marker-waste-missing";
|
||||
"printer-state-reasons.marker-waste-missing" = "Ink/toner waste bin missing";
|
||||
// TRANSLATORS: Marker Waste Toner Receptacle Almost Full
|
||||
"printer-state-reasons.marker-waste-toner-receptacle-almost-full" = "Marker Waste Toner Receptacle Almost Full";
|
||||
// TRANSLATORS: Marker Waste Toner Receptacle Full
|
||||
"printer-state-reasons.marker-waste-toner-receptacle-full" = "Marker Waste Toner Receptacle Full";
|
||||
// TRANSLATORS: Marker Waste Toner Receptacle Missing
|
||||
"printer-state-reasons.marker-waste-toner-receptacle-missing" = "printer-state-reasons.marker-waste-toner-receptacle-missing";
|
||||
"printer-state-reasons.marker-waste-toner-receptacle-missing" = "Marker Waste Toner Receptacle Missing";
|
||||
// TRANSLATORS: Material Empty
|
||||
"printer-state-reasons.material-empty" = "Material Empty";
|
||||
// TRANSLATORS: Material Low
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\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"
|
||||
@@ -1579,6 +1579,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1749,6 +1752,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1920,6 +1926,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2529,6 +2538,9 @@ msgstr "300 mm/seg."
|
||||
msgid "300dpi"
|
||||
msgstr "300ppp"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3179,6 +3191,9 @@ msgstr "Tall"
|
||||
msgid "Cutter"
|
||||
msgstr "Ganiveta"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Fosc"
|
||||
|
||||
@@ -3268,9 +3283,6 @@ msgstr ""
|
||||
msgid "Duplexer"
|
||||
msgstr "Unitat d'impressió a dues cares"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "Impressora d'etiquetes EPL1"
|
||||
|
||||
@@ -3927,6 +3939,9 @@ msgstr "Costat-llarg (vertical)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "S'està buscant la impressora."
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "Alimentació manual"
|
||||
|
||||
@@ -4465,6 +4480,9 @@ msgstr "SEQUENCE té una longitud indefinida"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "S'ha produït un error mentre es negociava el SSL/TLS"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "Vegeu altres"
|
||||
|
||||
@@ -6596,6 +6614,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8939,6 +8965,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -9131,6 +9209,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -15161,6 +15255,9 @@ msgstr ""
|
||||
#~ "Necessiteu una nom d'usuari de Samba per exportar els controladors "
|
||||
#~ "d'impressora"
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Exportar les impressores al Samba"
|
||||
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\n"
|
||||
"PO-Revision-Date: 2012-09-14 10:26+0100\n"
|
||||
"Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
|
||||
"Language-Team: Czech\n"
|
||||
@@ -1428,6 +1428,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1598,6 +1601,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1769,6 +1775,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2378,6 +2387,9 @@ msgstr "300 mm/sek."
|
||||
msgid "300dpi"
|
||||
msgstr "300 dpi"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3024,6 +3036,9 @@ msgstr "Snížit"
|
||||
msgid "Cutter"
|
||||
msgstr "Výstřižek"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Tmavý"
|
||||
|
||||
@@ -3107,9 +3122,6 @@ msgstr ""
|
||||
msgid "Duplexer"
|
||||
msgstr "Duplexní jednotka"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "Tiskárna štítků EPL1"
|
||||
|
||||
@@ -3762,6 +3774,9 @@ msgstr "Delší okraj (na výšku)"
|
||||
msgid "Looking for printer."
|
||||
msgstr ""
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "Ruční podávání"
|
||||
|
||||
@@ -4293,6 +4308,9 @@ msgstr "\"SEQUENCE\" má neomezenou délku"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "Viz další"
|
||||
|
||||
@@ -6394,6 +6412,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8720,6 +8746,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -8912,6 +8990,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -14903,5 +14997,8 @@ msgstr ""
|
||||
msgid "~/.cups/lpoptions file names default destination that does not exist."
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Export tiskáren do Samby"
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\n"
|
||||
"PO-Revision-Date: 2017-10-25 14:57+0200\n"
|
||||
"Last-Translator: Joachim Schwender <joachim.schwender@web.de>\n"
|
||||
"Language-Team: German <LL@li.org>\n"
|
||||
@@ -1495,6 +1495,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1665,6 +1668,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1836,6 +1842,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2450,6 +2459,9 @@ msgstr "300 mm/s"
|
||||
msgid "300dpi"
|
||||
msgstr "300 dpi"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3099,6 +3111,9 @@ msgstr "Abschneiden"
|
||||
msgid "Cutter"
|
||||
msgstr "Abschneider"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Dunkel"
|
||||
|
||||
@@ -3188,9 +3203,6 @@ msgstr "Entwurf"
|
||||
msgid "Duplexer"
|
||||
msgstr "Duplexer"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "EPL1 Etikettendrucker"
|
||||
|
||||
@@ -3845,6 +3857,9 @@ msgstr "Lange Kante (Hochformat)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "Suche nach Drucker."
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "Manuelle Papierzufuhr"
|
||||
|
||||
@@ -4381,6 +4396,9 @@ msgstr "SEQUENCE hat unbestimmte Länge"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "SSL/TLS Verhandlungsfehler"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "Siehe auch"
|
||||
|
||||
@@ -6510,6 +6528,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8843,6 +8869,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -9035,6 +9113,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -15034,6 +15128,9 @@ msgstr ""
|
||||
#~ msgstr ""
|
||||
#~ "Ein Samba-Benutzername ist erforderlich, um Druckertreiber zu exportieren"
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Drucker zu Samba exportieren"
|
||||
|
||||
|
||||
+104
-7
@@ -24,7 +24,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.3.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: English\n"
|
||||
@@ -1599,6 +1599,9 @@ msgstr "--no-web-forms Disable web forms for media and supplies"
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr "--not expression Unary NOT of expression"
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr "--path regex Match resource path to regular expression"
|
||||
|
||||
@@ -1774,6 +1777,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr "-C Send requests using chunking (default)"
|
||||
|
||||
@@ -1955,6 +1961,9 @@ msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
"-d destination Set the named destination as the server default"
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr "-d name=value Set named variable to value"
|
||||
|
||||
@@ -2596,6 +2605,9 @@ msgstr "300 mm/sec."
|
||||
msgid "300dpi"
|
||||
msgstr "300dpi"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3245,6 +3257,9 @@ msgstr "Cut"
|
||||
msgid "Cutter"
|
||||
msgstr "Cutter"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Dark"
|
||||
|
||||
@@ -3334,9 +3349,6 @@ msgstr "Draft"
|
||||
msgid "Duplexer"
|
||||
msgstr "Duplexer"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "EPL1 Label Printer"
|
||||
|
||||
@@ -3994,6 +4006,9 @@ msgstr "Long-Edge (Portrait)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "Looking for printer."
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "Manual Feed"
|
||||
|
||||
@@ -4530,6 +4545,9 @@ msgstr "SEQUENCE uses indefinite length"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "SSL/TLS Negotiation Error"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "See Other"
|
||||
|
||||
@@ -6678,6 +6696,14 @@ msgstr "Trim After Job"
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr "Trim After Every Page"
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr "Trim After Every Set"
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr "Trim After Every Page"
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr "Finishings"
|
||||
@@ -9022,6 +9048,58 @@ msgstr "Cardstock"
|
||||
msgid "media-type.cd"
|
||||
msgstr "CD"
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr "Photo Advanced Paper"
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr "Brochure Glossy Paper"
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr "Brochure Matte Paper"
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr "Matte Coverstock"
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr "EcoSMART Lite Paper"
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr "Everyday Glossy Paper"
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr "Everyday Matte Paper"
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr "Extra Heavyweight Paper"
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr "Intermediate Paper"
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr "Mid-Weight Paper"
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr "Inkjet Premium Paper"
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr "Photo Premium Paper"
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr "Premium Matte Presentation Paper"
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr "Continuous"
|
||||
@@ -9214,6 +9292,22 @@ msgstr "Image Setter Paper"
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr "Imaging Cylinder"
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr "Photo Paper Plus Glossy II"
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr "Photo Paper Pro Platinum"
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr "Labels"
|
||||
@@ -12870,15 +12964,15 @@ msgstr "Ink missing"
|
||||
msgid "printer-state-reasons.marker-opc-missing"
|
||||
msgstr "OPC missing"
|
||||
|
||||
#. TRANSLATORS: Print ribbon Almost Empty
|
||||
#. TRANSLATORS: Marker Print Ribbon Almost Empty
|
||||
msgid "printer-state-reasons.marker-print-ribbon-almost-empty"
|
||||
msgstr "Print ribbon Almost Empty"
|
||||
|
||||
#. TRANSLATORS: Print ribbon Empty
|
||||
#. TRANSLATORS: Marker Print Ribbon Empty
|
||||
msgid "printer-state-reasons.marker-print-ribbon-empty"
|
||||
msgstr "Print ribbon Empty"
|
||||
|
||||
#. TRANSLATORS: Print ribbon Missing
|
||||
#. TRANSLATORS: Marker Print Ribbon Missing
|
||||
msgid "printer-state-reasons.marker-print-ribbon-missing"
|
||||
msgstr "Print ribbon missing"
|
||||
|
||||
@@ -15210,3 +15304,6 @@ msgstr "{} URI"
|
||||
|
||||
msgid "~/.cups/lpoptions file names default destination that does not exist."
|
||||
msgstr "~/.cups/lpoptions file names default destination that does not exist."
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\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"
|
||||
@@ -1582,6 +1582,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1752,6 +1755,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1923,6 +1929,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2532,6 +2541,9 @@ msgstr "300 mm/seg"
|
||||
msgid "300dpi"
|
||||
msgstr "300ppp"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3182,6 +3194,9 @@ msgstr "Cortar"
|
||||
msgid "Cutter"
|
||||
msgstr "Cortadora"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Oscuro"
|
||||
|
||||
@@ -3271,9 +3286,6 @@ msgstr "Borrador"
|
||||
msgid "Duplexer"
|
||||
msgstr "Unidad de impresión dúplex"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "Impresora de etiquetas EPL1"
|
||||
|
||||
@@ -3928,6 +3940,9 @@ msgstr "Lado largo (retrato)"
|
||||
msgid "Looking for printer."
|
||||
msgstr ""
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "Alimentación manual"
|
||||
|
||||
@@ -4465,6 +4480,9 @@ msgstr "SEQUENCE usa una longitud indefinida"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "Error en negociación SSL/TLS"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "Ver otros"
|
||||
|
||||
@@ -6612,6 +6630,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8953,6 +8979,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -9145,6 +9223,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -15172,6 +15266,9 @@ msgstr ""
|
||||
#~ "Se requiere un nombre de usuario Samba para exportar los controladores de "
|
||||
#~ "impresora"
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Exportar impresoras a Samba"
|
||||
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\n"
|
||||
"PO-Revision-Date: 2012-12-12 11:12+0100\n"
|
||||
"Last-Translator: Stéphane Blondon <stephane.blondon@gmail.com>\n"
|
||||
"Language-Team: French <LL@li.org>\n"
|
||||
@@ -1439,6 +1439,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1609,6 +1612,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1780,6 +1786,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2389,6 +2398,9 @@ msgstr "300 mm/s"
|
||||
msgid "300dpi"
|
||||
msgstr "300 ppp"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3035,6 +3047,9 @@ msgstr "Couper"
|
||||
msgid "Cutter"
|
||||
msgstr "Cutter"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Foncé"
|
||||
|
||||
@@ -3120,9 +3135,6 @@ msgstr "Brouillon"
|
||||
msgid "Duplexer"
|
||||
msgstr "Duplexeur"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "Imprimante pour étiquettes EPL1"
|
||||
|
||||
@@ -3775,6 +3787,9 @@ msgstr "Bord le plus long (Portrait)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "Recherche d'imprimante en cours."
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr ""
|
||||
|
||||
@@ -4306,6 +4321,9 @@ msgstr "SEQUENCE s’avère être de longueur indéfinie"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "Erreur de négotiation SSL/TLS"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "Autres"
|
||||
|
||||
@@ -6412,6 +6430,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8738,6 +8764,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -8930,6 +9008,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -14921,5 +15015,8 @@ msgstr ""
|
||||
msgid "~/.cups/lpoptions file names default destination that does not exist."
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Exporter les imprimantes vers SAMBA"
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\n"
|
||||
"PO-Revision-Date: 2013-07-14 12:00+0200\n"
|
||||
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
|
||||
"Language-Team: Italian - Arch Linux Italian Team <giovanni@archlinux.org>\n"
|
||||
@@ -1579,6 +1579,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1749,6 +1752,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1920,6 +1926,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2529,6 +2538,9 @@ msgstr "300 mm/sec."
|
||||
msgid "300dpi"
|
||||
msgstr "300dpi"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3178,6 +3190,9 @@ msgstr "Taglia"
|
||||
msgid "Cutter"
|
||||
msgstr "Taglierino"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Scuro"
|
||||
|
||||
@@ -3268,9 +3283,6 @@ msgstr ""
|
||||
msgid "Duplexer"
|
||||
msgstr "Duplexer"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "EPL1 Label Printer"
|
||||
|
||||
@@ -3925,6 +3937,9 @@ msgstr "Long-Edge (Portrait)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "Cerca una stampante."
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "Alimentazione manuale"
|
||||
|
||||
@@ -4462,6 +4477,9 @@ msgstr "SEQUENZA utilizza una lunghezza indefinita"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "Errore di negoziazione SSL/TLS"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "Vedi altro"
|
||||
|
||||
@@ -6597,6 +6615,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8935,6 +8961,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -9127,6 +9205,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -15151,6 +15245,9 @@ msgstr ""
|
||||
#~ msgstr ""
|
||||
#~ "Per esportare i driver della stampante è richiesto un username di Samba"
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Esporta le stampanti per Samba"
|
||||
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\n"
|
||||
"PO-Revision-Date: 2014-11-15 19:27+0900\n"
|
||||
"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
|
||||
"Language-Team: Japanese - OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
|
||||
@@ -1573,6 +1573,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1743,6 +1746,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1914,6 +1920,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2523,6 +2532,9 @@ msgstr "300 ミリメートル/秒"
|
||||
msgid "300dpi"
|
||||
msgstr "300dpi"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3172,6 +3184,9 @@ msgstr "カット"
|
||||
msgid "Cutter"
|
||||
msgstr "カッター"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "濃い"
|
||||
|
||||
@@ -3264,9 +3279,6 @@ msgstr ""
|
||||
msgid "Duplexer"
|
||||
msgstr "両面オプション"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "EPL1 ラベルプリンター"
|
||||
|
||||
@@ -3923,6 +3935,9 @@ msgstr "長辺給紙 (縦向き)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "プリンターを探しています。"
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "手差し"
|
||||
|
||||
@@ -4458,6 +4473,9 @@ msgstr "SEQUENCE は不定長を使用しています"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "SSL/TLS のネゴシエーションエラー"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "残りを見てください"
|
||||
|
||||
@@ -6580,6 +6598,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8927,6 +8953,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -9119,6 +9197,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -15169,6 +15263,9 @@ msgstr ""
|
||||
#~ msgstr ""
|
||||
#~ "プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です。"
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Samba へプリンターをエクスポート"
|
||||
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\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"
|
||||
@@ -1586,6 +1586,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1756,6 +1759,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1927,6 +1933,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2536,6 +2545,9 @@ msgstr "300 mm/s"
|
||||
msgid "300dpi"
|
||||
msgstr "300dpi"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3186,6 +3198,9 @@ msgstr "Cortar"
|
||||
msgid "Cutter"
|
||||
msgstr "Cortador"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Escuro"
|
||||
|
||||
@@ -3275,9 +3290,6 @@ msgstr ""
|
||||
msgid "Duplexer"
|
||||
msgstr "Duplexador"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "Impressora de etiqueta EPL1"
|
||||
|
||||
@@ -3932,6 +3944,9 @@ msgstr "Borda maior (retrato)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "Procurando impressoras."
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "Alimentação manual"
|
||||
|
||||
@@ -4470,6 +4485,9 @@ msgstr "SEQUENCE usa comprimento indefinido"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "Erro de negociação SSL/TLS"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "Veja outro"
|
||||
|
||||
@@ -6607,6 +6625,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8944,6 +8970,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -9136,6 +9214,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -15148,6 +15242,9 @@ msgstr ""
|
||||
#~ "Um nome de usuário do Samba é necessário para exportar drivers de "
|
||||
#~ "impressora"
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Exportar impressoras para o Samba"
|
||||
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\n"
|
||||
"PO-Revision-Date: 2015-01-28 12:00-0800\n"
|
||||
"Last-Translator: Aleksandr Proklov\n"
|
||||
"Language-Team: Russian - PuppyRus Linux Team\n"
|
||||
@@ -1554,6 +1554,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1724,6 +1727,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1895,6 +1901,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2504,6 +2513,9 @@ msgstr "300 мм/с"
|
||||
msgid "300dpi"
|
||||
msgstr "300dpi"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3153,6 +3165,9 @@ msgstr "Обрезать"
|
||||
msgid "Cutter"
|
||||
msgstr "Резак"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Темный"
|
||||
|
||||
@@ -3236,9 +3251,6 @@ msgstr ""
|
||||
msgid "Duplexer"
|
||||
msgstr "Дуплексер"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "Принтер для печати этикеток EPL1"
|
||||
|
||||
@@ -3893,6 +3905,9 @@ msgstr "По длинной стороне (книжная)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "Поиск принтера."
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "Ручная подача"
|
||||
|
||||
@@ -4430,6 +4445,9 @@ msgstr "Для SEQUENCE длина не установлена"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "SSL/TLS Negotiation Error"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "Посмотреть другие"
|
||||
|
||||
@@ -6556,6 +6574,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8892,6 +8918,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -9084,6 +9162,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -15098,6 +15192,9 @@ msgstr ""
|
||||
#~ msgid "A Samba username is required to export printer drivers"
|
||||
#~ msgstr "Для экспорта драйверов принтера требуется имя пользователя Samba"
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "Экспортировать принтеры в Samba"
|
||||
|
||||
|
||||
+101
-4
@@ -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: 2019-08-23 09:13-0400\n"
|
||||
"POT-Creation-Date: 2019-12-18 20:19-0500\n"
|
||||
"PO-Revision-Date: 2018-10-09 00:21-0500\n"
|
||||
"Last-Translator: Mingcong Bai <jeffbai@aosc.io>\n"
|
||||
"Language-Team: Chinese (Simplified)\n"
|
||||
@@ -1538,6 +1538,9 @@ msgstr ""
|
||||
msgid "--not expression Unary NOT of expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "--pam-service service Use the named PAM service"
|
||||
msgstr ""
|
||||
|
||||
msgid "--path regex Match resource path to regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -1708,6 +1711,9 @@ msgstr "-90"
|
||||
msgid "-95"
|
||||
msgstr "-95"
|
||||
|
||||
msgid "-A Enable authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "-C Send requests using chunking (default)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1879,6 +1885,9 @@ msgstr ""
|
||||
msgid "-d destination Set the named destination as the server default"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d destination Specify the destination"
|
||||
msgstr ""
|
||||
|
||||
msgid "-d name=value Set named variable to value"
|
||||
msgstr ""
|
||||
|
||||
@@ -2488,6 +2497,9 @@ msgstr "300 毫米/秒"
|
||||
msgid "300dpi"
|
||||
msgstr "300 dpi"
|
||||
|
||||
msgid "30859 Paint Can Label"
|
||||
msgstr ""
|
||||
|
||||
msgid "35"
|
||||
msgstr "35"
|
||||
|
||||
@@ -3137,6 +3149,9 @@ msgstr "剪切"
|
||||
msgid "Cutter"
|
||||
msgstr "车床刀具"
|
||||
|
||||
msgid "DYMO"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "暗色"
|
||||
|
||||
@@ -3226,9 +3241,6 @@ msgstr "草稿"
|
||||
msgid "Duplexer"
|
||||
msgstr "双工器"
|
||||
|
||||
msgid "Dymo"
|
||||
msgstr "Dymo"
|
||||
|
||||
msgid "EPL1 Label Printer"
|
||||
msgstr "EPL1 标签打印机"
|
||||
|
||||
@@ -3882,6 +3894,9 @@ msgstr "长边缘(竖直)"
|
||||
msgid "Looking for printer."
|
||||
msgstr "正在寻找打印机。"
|
||||
|
||||
msgid "Main Roll"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual Feed"
|
||||
msgstr "手动喂纸"
|
||||
|
||||
@@ -4420,6 +4435,9 @@ msgstr "SEQUENCE 使用不定长度"
|
||||
msgid "SSL/TLS Negotiation Error"
|
||||
msgstr "SSL/TLS 协商错误"
|
||||
|
||||
msgid "Second Roll (DUO/Twin Only)"
|
||||
msgstr ""
|
||||
|
||||
msgid "See Other"
|
||||
msgstr "查看其他"
|
||||
|
||||
@@ -6526,6 +6544,14 @@ msgstr ""
|
||||
msgid "finishing-template.trim-after-pages"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Set
|
||||
msgid "finishing-template.trim-after-sets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Trim After Every Page
|
||||
msgid "finishing-template.trim-after-sheets"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Finishings
|
||||
msgid "finishings"
|
||||
msgstr ""
|
||||
@@ -8860,6 +8886,58 @@ msgstr ""
|
||||
msgid "media-type.cd"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Advanced Paper
|
||||
msgid "media-type.com.hp.advanced-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Glossy Paper
|
||||
msgid "media-type.com.hp.brochure-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Brochure Matte Paper
|
||||
msgid "media-type.com.hp.brochure-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Matte Coverstock
|
||||
msgid "media-type.com.hp.cover-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: EcoSMART Lite Paper
|
||||
msgid "media-type.com.hp.ecosmart-lite"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Glossy Paper
|
||||
msgid "media-type.com.hp.everyday-glossy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Everyday Matte Paper
|
||||
msgid "media-type.com.hp.everyday-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Extra Heavyweight Paper
|
||||
msgid "media-type.com.hp.extra-heavy"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Intermediate Paper
|
||||
msgid "media-type.com.hp.intermediate"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Mid-Weight Paper
|
||||
msgid "media-type.com.hp.mid-weight"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Inkjet Premium Paper
|
||||
msgid "media-type.com.hp.premium-inkjet"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Premium Paper
|
||||
msgid "media-type.com.hp.premium-photo"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Premium Matte Presentation Paper
|
||||
msgid "media-type.com.hp.premium-presentation-matte"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Continuous
|
||||
msgid "media-type.continuous"
|
||||
msgstr ""
|
||||
@@ -9052,6 +9130,22 @@ msgstr ""
|
||||
msgid "media-type.imaging-cylinder"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Plus Glossy II
|
||||
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Photo Paper Pro Platinum
|
||||
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Labels
|
||||
msgid "media-type.labels"
|
||||
msgstr ""
|
||||
@@ -15054,6 +15148,9 @@ msgstr "~/.cups/lpoptions 文件所指定的默认目标不存在。"
|
||||
#~ msgid "A Samba username is required to export printer drivers"
|
||||
#~ msgstr "需要 Samba 用户名以导出打印机驱动"
|
||||
|
||||
#~ msgid "Dymo"
|
||||
#~ msgstr "Dymo"
|
||||
|
||||
#~ msgid "Export Printers to Samba"
|
||||
#~ msgstr "将打印机导出到 Samba"
|
||||
|
||||
|
||||
@@ -576,6 +576,10 @@ _("finishing-template.trim-after-documents");
|
||||
_("finishing-template.trim-after-job");
|
||||
/* TRANSLATORS: Trim After Every Page */
|
||||
_("finishing-template.trim-after-pages");
|
||||
/* TRANSLATORS: Trim After Every Set */
|
||||
_("finishing-template.trim-after-sets");
|
||||
/* TRANSLATORS: Trim After Every Page */
|
||||
_("finishing-template.trim-after-sheets");
|
||||
/* TRANSLATORS: Finishings */
|
||||
_("finishings");
|
||||
/* TRANSLATORS: Finishings */
|
||||
@@ -1578,6 +1582,32 @@ _("media-type.cardboard");
|
||||
_("media-type.cardstock");
|
||||
/* TRANSLATORS: CD */
|
||||
_("media-type.cd");
|
||||
/* TRANSLATORS: Photo Advanced Paper */
|
||||
_("media-type.com.hp.advanced-photo");
|
||||
/* TRANSLATORS: Brochure Glossy Paper */
|
||||
_("media-type.com.hp.brochure-glossy");
|
||||
/* TRANSLATORS: Brochure Matte Paper */
|
||||
_("media-type.com.hp.brochure-matte");
|
||||
/* TRANSLATORS: Matte Coverstock */
|
||||
_("media-type.com.hp.cover-matte");
|
||||
/* TRANSLATORS: EcoSMART Lite Paper */
|
||||
_("media-type.com.hp.ecosmart-lite");
|
||||
/* TRANSLATORS: Everyday Glossy Paper */
|
||||
_("media-type.com.hp.everyday-glossy");
|
||||
/* TRANSLATORS: Everyday Matte Paper */
|
||||
_("media-type.com.hp.everyday-matte");
|
||||
/* TRANSLATORS: Extra Heavyweight Paper */
|
||||
_("media-type.com.hp.extra-heavy");
|
||||
/* TRANSLATORS: Intermediate Paper */
|
||||
_("media-type.com.hp.intermediate");
|
||||
/* TRANSLATORS: Mid-Weight Paper */
|
||||
_("media-type.com.hp.mid-weight");
|
||||
/* TRANSLATORS: Inkjet Premium Paper */
|
||||
_("media-type.com.hp.premium-inkjet");
|
||||
/* TRANSLATORS: Photo Premium Paper */
|
||||
_("media-type.com.hp.premium-photo");
|
||||
/* TRANSLATORS: Premium Matte Presentation Paper */
|
||||
_("media-type.com.hp.premium-presentation-matte");
|
||||
/* TRANSLATORS: Continuous */
|
||||
_("media-type.continuous");
|
||||
/* TRANSLATORS: Continuous Long */
|
||||
@@ -1674,6 +1704,14 @@ _("media-type.gravure-cylinder");
|
||||
_("media-type.image-setter-paper");
|
||||
/* TRANSLATORS: Imaging Cylinder */
|
||||
_("media-type.imaging-cylinder");
|
||||
/* TRANSLATORS: Photo Paper Plus Glossy II*/
|
||||
_("media-type.jp.co.canon-photo-paper-plus-glossy-ii");
|
||||
/* TRANSLATORS: Photo Paper Pro Platinum*/
|
||||
_("media-type.jp.co.canon-photo-paper-pro-platinum");
|
||||
/* TRANSLATORS: Photo Paper Plus Glossy II*/
|
||||
_("media-type.jp.co.canon_photo-paper-plus-glossy-ii");
|
||||
/* TRANSLATORS: Photo Paper Pro Platinum*/
|
||||
_("media-type.jp.co.canon_photo-paper-pro-platinum");
|
||||
/* TRANSLATORS: Labels */
|
||||
_("media-type.labels");
|
||||
/* TRANSLATORS: Colored Labels */
|
||||
|
||||
+17
-1
@@ -7,7 +7,7 @@
|
||||
.\" Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
.\" information.
|
||||
.\"
|
||||
.TH client.conf 5 "CUPS" "26 April 2019" "Apple Inc."
|
||||
.TH client.conf 5 "CUPS" "15 October 2019" "Apple Inc."
|
||||
.SH NAME
|
||||
client.conf \- client configuration file for cups (deprecated on macos)
|
||||
.SH DESCRIPTION
|
||||
@@ -20,18 +20,28 @@ Starting with macOS 10.12, all applications can access these settings in the \fI
|
||||
See the NOTES section below for more information.
|
||||
.SS DIRECTIVES
|
||||
The following directives are understood by the client. Consult the online help for detailed descriptions:
|
||||
.\"#AllowAnyRoot
|
||||
.TP 5
|
||||
\fBAllowAnyRoot Yes\fR
|
||||
.TP 5
|
||||
\fBAllowAnyRoot No\fR
|
||||
Specifies whether to allow TLS with certificates that have not been signed by a trusted Certificate Authority.
|
||||
The default is "Yes".
|
||||
.\"#AllowExpiredCerts
|
||||
.TP 5
|
||||
\fBAllowExpiredCerts Yes\fR
|
||||
.TP 5
|
||||
\fBAllowExpiredCerts No\fR
|
||||
Specifies whether to allow TLS with expired certificates.
|
||||
The default is "No".
|
||||
.\"#DigestOptions
|
||||
.TP 5
|
||||
\fBDigestOptions DenyMD5\fR
|
||||
.TP 5
|
||||
\fBDigestOptions None\fR
|
||||
Specifies HTTP Digest authentication options.
|
||||
\fBDenyMD5\fR disables support for the original MD5 hash algorithm.
|
||||
.\"#Encryption
|
||||
.TP 5
|
||||
\fBEncryption IfRequested\fR
|
||||
.TP 5
|
||||
@@ -39,10 +49,12 @@ The default is "No".
|
||||
.TP 5
|
||||
\fBEncryption Required\fR
|
||||
Specifies the level of encryption that should be used.
|
||||
.\"#GSSServiceName
|
||||
.TP 5
|
||||
\fBGSSServiceName \fIname\fR
|
||||
Specifies the Kerberos service name that is used for authentication, typically "host", "http", or "ipp".
|
||||
CUPS adds the remote hostname ("name@server.example.com") for you. The default name is "http".
|
||||
.\"#ServerName
|
||||
.TP 5
|
||||
\fBServerName \fIhostname-or-ip-address\fR[\fI:port\fR]
|
||||
.TP 5
|
||||
@@ -52,6 +64,7 @@ Specifies the address and optionally the port to use when connecting to the serv
|
||||
.TP 5
|
||||
\fBServerName \fIhostname-or-ip-address\fR[\fI:port\fR]\fB/version=1.1\fR
|
||||
Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier.
|
||||
.\"#SSLOptions
|
||||
.TP 5
|
||||
\fBSSLOptions \fR[\fIAllowDH\fR] [\fIAllowRC4\fR] [\fIAllowSSL3\fR] [\fIDenyCBC\fR] [\fIDenyTLS1.0\fR] [\fIMaxTLS1.0\fR] [\fIMaxTLS1.1\fR] [\fIMaxTLS1.2\fR] [\fIMaxTLS1.3\fR] [\fIMinTLS1.0\fR] [\fIMinTLS1.1\fR] [\fIMinTLS1.2\fR] [\fIMinTLS1.3\fR]
|
||||
.TP 5
|
||||
@@ -68,12 +81,14 @@ The \fIDenyTLS1.0\fR option disables TLS v1.0 support - this sets the minimum pr
|
||||
The \fIMinTLS\fR options set the minimum TLS version to support.
|
||||
The \fIMaxTLS\fR options set the maximum TLS version to support.
|
||||
Not all operating systems support TLS 1.3 at this time.
|
||||
.\"#TrustOnFirstUse
|
||||
.TP 5
|
||||
\fBTrustOnFirstUse Yes\fR
|
||||
.TP 5
|
||||
\fBTrustOnFirstUse No\fR
|
||||
Specifies whether to trust new TLS certificates by default.
|
||||
The default is "Yes".
|
||||
.\"#User
|
||||
.TP 5
|
||||
\fBUser \fIname\fR
|
||||
Specifies the default user name to use for requests.
|
||||
@@ -101,6 +116,7 @@ Specifies what information is included in the User-Agent header of HTTP requests
|
||||
"OS" reports "CUPS/major.minor.path (osname osversion) IPP/2.1".
|
||||
"Full" reports "CUPS/major.minor.path (osname osversion; architecture) IPP/2.1".
|
||||
The default is "Minimal".
|
||||
.\"#ValidateCerts
|
||||
.TP 5
|
||||
\fBValidateCerts Yes\fR
|
||||
.TP 5
|
||||
|
||||
+18
-1
@@ -6,7 +6,7 @@
|
||||
.\" Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
.\" information.
|
||||
.\"
|
||||
.TH ippeveprinter 1 "CUPS" "17 May 2019" "Apple Inc."
|
||||
.TH ippeveprinter 1 "CUPS" "2 December 2019" "Apple Inc."
|
||||
.SH NAME
|
||||
ippeveprinter \- an ipp everywhere printer application for cups
|
||||
.SH SYNOPSIS
|
||||
@@ -16,10 +16,15 @@ ippeveprinter \- an ipp everywhere printer application for cups
|
||||
] [
|
||||
.B \-\-no\-web\-forms
|
||||
] [
|
||||
.B \-\-pam\-service
|
||||
.I service
|
||||
] [
|
||||
.B \-\-version
|
||||
] [
|
||||
.B \-2
|
||||
] [
|
||||
.B \-A
|
||||
] [
|
||||
.B \-D
|
||||
.I device-uri
|
||||
] [
|
||||
@@ -89,12 +94,21 @@ Show program usage.
|
||||
.B \-\-no\-web\-forms
|
||||
Disable the web interface forms used to update the media and supply levels.
|
||||
.TP 5
|
||||
\fB\-\-pam\-service \fIservice\fR
|
||||
Set the PAM service name.
|
||||
The default service is "cups".
|
||||
.TP 5
|
||||
.B \-\-version
|
||||
Show the CUPS version.
|
||||
.TP 5
|
||||
.B \-2
|
||||
Report support for two-sided (duplex) printing.
|
||||
.TP 5
|
||||
.B \-A
|
||||
Enable authentication for the created printer.
|
||||
.B ippeveprinter
|
||||
uses PAM to authenticate HTTP Basic credentials.
|
||||
.TP 5
|
||||
\fB\-D \fIdevice-uri\fR
|
||||
Set the device URI for print output.
|
||||
The URI can be a filename, directory, or a network socket URI of the form "socket://ADDRESS[:PORT]" (where the default port number is 9100).
|
||||
@@ -168,6 +182,9 @@ command.
|
||||
Specifies the port number to listen on.
|
||||
The default is a user-specific number from 8000 to 8999.
|
||||
.TP 5
|
||||
.B \-r off
|
||||
Turns off DNS-SD service advertisements entirely.
|
||||
.TP 5
|
||||
\fB\-r \fIsubtype[,subtype]\fR
|
||||
Specifies the DNS-SD subtype(s) to advertise.
|
||||
Separate multiple subtypes with a comma.
|
||||
|
||||
@@ -1743,15 +1743,17 @@ ppdcSource::get_resolution(ppdcFile *fp)// I - File to read
|
||||
|
||||
switch (sscanf(name, "%dx%d", &xdpi, &ydpi))
|
||||
{
|
||||
case 0 :
|
||||
_cupsLangPrintf(stderr,
|
||||
_("ppdc: Bad resolution name \"%s\" on line %d of "
|
||||
"%s."), name, fp->line, fp->filename);
|
||||
break;
|
||||
case 1 :
|
||||
ydpi = xdpi;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2 :
|
||||
break;
|
||||
default :
|
||||
_cupsLangPrintf(stderr,
|
||||
_("ppdc: Bad resolution name \"%s\" on line %d of "
|
||||
"%s."), name, fp->line, fp->filename);
|
||||
break;
|
||||
}
|
||||
|
||||
// Create the necessary PS commands...
|
||||
snprintf(command, sizeof(command),
|
||||
|
||||
+11
-6
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// Driver info file for CUPS-supplied PPDs.
|
||||
//
|
||||
// Copyright © 2007-2018 by Apple Inc.
|
||||
// Copyright © 2007-2019 by Apple Inc.
|
||||
// Copyright © 1993-2006 by Easy Software Products.
|
||||
//
|
||||
// Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
@@ -66,6 +66,7 @@
|
||||
#media "w144h396/2.00x5.50\"" 144 396
|
||||
#media "w162h36/2.25x0.50\"" 162 36
|
||||
#media "w162h90/2.25x1.25\"" 162 90
|
||||
#media "w162h225/30859 Paint Can Label" 162 225
|
||||
#media "w162h288/2.25x4.00\"" 162 288
|
||||
#media "w162h396/2.25x5.50\"" 162 396
|
||||
#media "w171h396/2.38x5.50\"" 171 396
|
||||
@@ -114,7 +115,7 @@ Attribute "FileSystem" "" "False"
|
||||
Attribute "LandscapeOrientation" "" "Plus90"
|
||||
Attribute "TTRasterizer" "" "Type42"
|
||||
|
||||
Copyright "Copyright (c) 2007-2018 by Apple Inc."
|
||||
Copyright "Copyright (c) 2007-2019 by Apple Inc."
|
||||
Copyright "Copyright (c) 1997-2007 by Easy Software Products."
|
||||
Copyright ""
|
||||
Copyright "Licensed under Apache License v2.0. See the file \"LICENSE\" for more"
|
||||
@@ -124,11 +125,11 @@ Font *
|
||||
|
||||
Version "2.3"
|
||||
|
||||
// Dymo Label Printer
|
||||
// DYMO Label Printer
|
||||
{
|
||||
Manufacturer "Dymo"
|
||||
Manufacturer "DYMO"
|
||||
ModelName "Label Printer"
|
||||
Attribute NickName "" "Dymo Label Printer"
|
||||
Attribute NickName "" "DYMO Label Printer"
|
||||
PCFileName "dymo.ppd"
|
||||
DriverType label
|
||||
ModelNumber $DYMO_3x0
|
||||
@@ -142,7 +143,8 @@ Version "2.3"
|
||||
*MediaSize w81h252
|
||||
MediaSize w101h252
|
||||
MediaSize w54h144
|
||||
MediaSize w167h288
|
||||
MediaSize w162h225
|
||||
MediaSize w162h288
|
||||
MediaSize w162h540
|
||||
MediaSize w162h504
|
||||
MediaSize w41h248
|
||||
@@ -153,6 +155,9 @@ Version "2.3"
|
||||
Resolution k 1 0 0 0 203dpi
|
||||
*Resolution k 1 0 0 0 300dpi
|
||||
|
||||
*InputSlot 0 "Roll/Main Roll"
|
||||
InputSlot 1 "Roll2/Second Roll (DUO/Twin Only)"
|
||||
|
||||
Darkness 0 Light
|
||||
Darkness 1 Medium
|
||||
*Darkness 2 Normal
|
||||
|
||||
+1
-1
@@ -757,7 +757,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
|
||||
* Decode the authorization string to get the input token...
|
||||
*/
|
||||
|
||||
len = (int)strlen(authorization);
|
||||
len = (int)strlen(authorization) + 0;
|
||||
input_token.value = malloc((size_t)len);
|
||||
input_token.value = httpDecode64_2(input_token.value, &len,
|
||||
authorization);
|
||||
|
||||
@@ -664,7 +664,7 @@ cupsdSaveAllClasses(void)
|
||||
cupsd_printer_t *pclass; /* Current printer class */
|
||||
int i; /* Looping var */
|
||||
time_t curtime; /* Current time */
|
||||
struct tm *curdate; /* Current date */
|
||||
struct tm curdate; /* Current date */
|
||||
cups_option_t *option; /* Current option */
|
||||
|
||||
|
||||
@@ -683,9 +683,9 @@ cupsdSaveAllClasses(void)
|
||||
* Write a small header to the file...
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
|
||||
|
||||
cupsFilePuts(fp, "# Class configuration file for " CUPS_SVERSION "\n");
|
||||
cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
|
||||
|
||||
+23
-10
@@ -1099,7 +1099,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/printers", 9) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5))
|
||||
else if (!buf[0] && (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5) || !strncmp(con->uri, "/printers", 9)))
|
||||
{
|
||||
if (!WebInterface)
|
||||
{
|
||||
@@ -1125,14 +1125,6 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
|
||||
cupsdSetStringf(&con->command, "%s/cgi-bin/admin.cgi", ServerBin);
|
||||
cupsdSetString(&con->options, strchr(con->uri + 6, '?'));
|
||||
}
|
||||
else if (!strncmp(con->uri, "/printers", 9))
|
||||
{
|
||||
cupsdSetStringf(&con->command, "%s/cgi-bin/printers.cgi", ServerBin);
|
||||
if (con->uri[9] && con->uri[10])
|
||||
cupsdSetString(&con->options, con->uri + 9);
|
||||
else
|
||||
cupsdSetString(&con->options, NULL);
|
||||
}
|
||||
else if (!strncmp(con->uri, "/classes", 8))
|
||||
{
|
||||
cupsdSetStringf(&con->command, "%s/cgi-bin/classes.cgi", ServerBin);
|
||||
@@ -1149,6 +1141,14 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
|
||||
else
|
||||
cupsdSetString(&con->options, NULL);
|
||||
}
|
||||
else if (!strncmp(con->uri, "/printers", 9))
|
||||
{
|
||||
cupsdSetStringf(&con->command, "%s/cgi-bin/printers.cgi", ServerBin);
|
||||
if (con->uri[9] && con->uri[10])
|
||||
cupsdSetString(&con->options, con->uri + 9);
|
||||
else
|
||||
cupsdSetString(&con->options, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
cupsdSetStringf(&con->command, "%s/cgi-bin/help.cgi", ServerBin);
|
||||
@@ -1458,7 +1458,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
|
||||
break;
|
||||
}
|
||||
|
||||
if (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/printers", 9) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5))
|
||||
if (!buf[0] && (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5) || !strncmp(con->uri, "/printers", 9)))
|
||||
{
|
||||
/*
|
||||
* CGI output...
|
||||
@@ -2701,6 +2701,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
|
||||
* Figure out the real filename...
|
||||
*/
|
||||
|
||||
filename[0] = '\0';
|
||||
language[0] = '\0';
|
||||
|
||||
if (!strncmp(con->uri, "/help", 5) && (con->uri[5] == '/' || !con->uri[5]))
|
||||
@@ -2718,6 +2719,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
|
||||
|
||||
if ((p = cupsdFindDest(dest)) == NULL)
|
||||
{
|
||||
strlcpy(filename, "/", len);
|
||||
cupsdLogClient(con, CUPSD_LOG_INFO, "No destination \"%s\" found.", dest);
|
||||
return (NULL);
|
||||
}
|
||||
@@ -2754,6 +2756,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
|
||||
|
||||
if ((p = cupsdFindDest(dest)) == NULL)
|
||||
{
|
||||
strlcpy(filename, "/", len);
|
||||
cupsdLogClient(con, CUPSD_LOG_INFO, "No destination \"%s\" found.", dest);
|
||||
return (NULL);
|
||||
}
|
||||
@@ -2786,6 +2789,14 @@ get_file(cupsd_client_t *con, /* I - Client connection */
|
||||
|
||||
perm_check = 0;
|
||||
}
|
||||
else if (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/jobs", 5) || !strncmp(con->uri, "/printers", 9))
|
||||
{
|
||||
/*
|
||||
* Admin/class/job/printer pages are served by CGI...
|
||||
*/
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
else if (!strncmp(con->uri, "/rss/", 5) && !strchr(con->uri + 5, '/'))
|
||||
snprintf(filename, len, "%s/rss/%s", CacheDir, con->uri + 5);
|
||||
else if (!strncmp(con->uri, "/strings/", 9) && !strcmp(con->uri + strlen(con->uri) - 8, ".strings"))
|
||||
@@ -2795,12 +2806,14 @@ get_file(cupsd_client_t *con, /* I - Client connection */
|
||||
|
||||
if ((p = cupsdFindDest(dest)) == NULL)
|
||||
{
|
||||
strlcpy(filename, "/", len);
|
||||
cupsdLogClient(con, CUPSD_LOG_INFO, "No destination \"%s\" found.", dest);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (!p->strings)
|
||||
{
|
||||
strlcpy(filename, "/", len);
|
||||
cupsdLogClient(con, CUPSD_LOG_INFO, "No strings files for \"%s\".", dest);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
+1
-1
@@ -10429,7 +10429,7 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
|
||||
|
||||
case IPP_JOB_PROCESSING :
|
||||
case IPP_JOB_STOPPED :
|
||||
if (job->state_value != attr->values[0].integer)
|
||||
if (job->state_value != (ipp_jstate_t)attr->values[0].integer)
|
||||
{
|
||||
send_ipp_status(con, IPP_NOT_POSSIBLE,
|
||||
_("Job state cannot be changed."));
|
||||
|
||||
+40
-40
@@ -2183,7 +2183,7 @@ cupsdSaveAllJobs(void)
|
||||
temp[1024]; /* Temporary string */
|
||||
cupsd_job_t *job; /* Current job */
|
||||
time_t curtime; /* Current time */
|
||||
struct tm *curdate; /* Current date */
|
||||
struct tm curdate; /* Current date */
|
||||
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/job.cache", CacheDir);
|
||||
@@ -2196,9 +2196,9 @@ cupsdSaveAllJobs(void)
|
||||
* Write a small header to the file...
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
|
||||
|
||||
cupsFilePuts(fp, "# Job cache file for " CUPS_SVERSION "\n");
|
||||
cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
|
||||
@@ -2311,7 +2311,7 @@ cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
|
||||
int update)/* I - Update job-hold-until attr? */
|
||||
{
|
||||
time_t curtime; /* Current time */
|
||||
struct tm *curdate; /* Current date */
|
||||
struct tm curdate; /* Current date */
|
||||
int hour; /* Hold hour */
|
||||
int minute; /* Hold minute */
|
||||
int second = 0; /* Hold second */
|
||||
@@ -2380,15 +2380,15 @@ cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
|
||||
* Hold to 6am the next morning unless local time is < 6pm.
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
|
||||
if (curdate->tm_hour < 18)
|
||||
if (curdate.tm_hour < 18)
|
||||
job->hold_until = curtime;
|
||||
else
|
||||
job->hold_until = curtime +
|
||||
((29 - curdate->tm_hour) * 60 + 59 -
|
||||
curdate->tm_min) * 60 + 60 - curdate->tm_sec;
|
||||
((29 - curdate.tm_hour) * 60 + 59 -
|
||||
curdate.tm_min) * 60 + 60 - curdate.tm_sec;
|
||||
}
|
||||
else if (!strcmp(when, "evening") || !strcmp(when, "night"))
|
||||
{
|
||||
@@ -2396,15 +2396,15 @@ cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
|
||||
* Hold to 6pm unless local time is > 6pm or < 6am.
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
|
||||
if (curdate->tm_hour < 6 || curdate->tm_hour >= 18)
|
||||
if (curdate.tm_hour < 6 || curdate.tm_hour >= 18)
|
||||
job->hold_until = curtime;
|
||||
else
|
||||
job->hold_until = curtime +
|
||||
((17 - curdate->tm_hour) * 60 + 59 -
|
||||
curdate->tm_min) * 60 + 60 - curdate->tm_sec;
|
||||
((17 - curdate.tm_hour) * 60 + 59 -
|
||||
curdate.tm_min) * 60 + 60 - curdate.tm_sec;
|
||||
}
|
||||
else if (!strcmp(when, "second-shift"))
|
||||
{
|
||||
@@ -2412,15 +2412,15 @@ cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
|
||||
* Hold to 4pm unless local time is > 4pm.
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
|
||||
if (curdate->tm_hour >= 16)
|
||||
if (curdate.tm_hour >= 16)
|
||||
job->hold_until = curtime;
|
||||
else
|
||||
job->hold_until = curtime +
|
||||
((15 - curdate->tm_hour) * 60 + 59 -
|
||||
curdate->tm_min) * 60 + 60 - curdate->tm_sec;
|
||||
((15 - curdate.tm_hour) * 60 + 59 -
|
||||
curdate.tm_min) * 60 + 60 - curdate.tm_sec;
|
||||
}
|
||||
else if (!strcmp(when, "third-shift"))
|
||||
{
|
||||
@@ -2428,15 +2428,15 @@ cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
|
||||
* Hold to 12am unless local time is < 8am.
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
|
||||
if (curdate->tm_hour < 8)
|
||||
if (curdate.tm_hour < 8)
|
||||
job->hold_until = curtime;
|
||||
else
|
||||
job->hold_until = curtime +
|
||||
((23 - curdate->tm_hour) * 60 + 59 -
|
||||
curdate->tm_min) * 60 + 60 - curdate->tm_sec;
|
||||
((23 - curdate.tm_hour) * 60 + 59 -
|
||||
curdate.tm_min) * 60 + 60 - curdate.tm_sec;
|
||||
}
|
||||
else if (!strcmp(when, "weekend"))
|
||||
{
|
||||
@@ -2444,16 +2444,16 @@ cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
|
||||
* Hold to weekend unless we are in the weekend.
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
|
||||
if (curdate->tm_wday == 0 || curdate->tm_wday == 6)
|
||||
if (curdate.tm_wday == 0 || curdate.tm_wday == 6)
|
||||
job->hold_until = curtime;
|
||||
else
|
||||
job->hold_until = curtime +
|
||||
(((5 - curdate->tm_wday) * 24 +
|
||||
(17 - curdate->tm_hour)) * 60 + 59 -
|
||||
curdate->tm_min) * 60 + 60 - curdate->tm_sec;
|
||||
(((5 - curdate.tm_wday) * 24 +
|
||||
(17 - curdate.tm_hour)) * 60 + 59 -
|
||||
curdate.tm_min) * 60 + 60 - curdate.tm_sec;
|
||||
}
|
||||
else if (sscanf(when, "%d:%d:%d", &hour, &minute, &second) >= 2)
|
||||
{
|
||||
@@ -2461,12 +2461,12 @@ cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
|
||||
* Hold to specified GMT time (HH:MM or HH:MM:SS)...
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = gmtime(&curtime);
|
||||
time(&curtime);
|
||||
gmtime_r(&curtime, &curdate);
|
||||
|
||||
job->hold_until = curtime +
|
||||
((hour - curdate->tm_hour) * 60 + minute -
|
||||
curdate->tm_min) * 60 + second - curdate->tm_sec;
|
||||
((hour - curdate.tm_hour) * 60 + minute -
|
||||
curdate.tm_min) * 60 + second - curdate.tm_sec;
|
||||
|
||||
/*
|
||||
* Hold until next day as needed...
|
||||
@@ -2957,7 +2957,7 @@ dump_job_history(cupsd_job_t *job) /* I - Job */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
oldsize; /* Current MaxLogSize */
|
||||
struct tm *date; /* Date/time value */
|
||||
struct tm date; /* Date/time value */
|
||||
cupsd_joblog_t *message; /* Current message */
|
||||
char temp[2048], /* Log message */
|
||||
*ptr, /* Pointer into log message */
|
||||
@@ -2985,12 +2985,12 @@ dump_job_history(cupsd_job_t *job) /* I - Job */
|
||||
*/
|
||||
|
||||
message = (cupsd_joblog_t *)cupsArrayFirst(job->history);
|
||||
date = localtime(&(message->time));
|
||||
strftime(start, sizeof(start), "%X", date);
|
||||
localtime_r(&(message->time), &date);
|
||||
strftime(start, sizeof(start), "%X", &date);
|
||||
|
||||
message = (cupsd_joblog_t *)cupsArrayLast(job->history);
|
||||
date = localtime(&(message->time));
|
||||
strftime(end, sizeof(end), "%X", date);
|
||||
localtime_r(&(message->time), &date);
|
||||
strftime(end, sizeof(end), "%X", &date);
|
||||
|
||||
snprintf(temp, sizeof(temp),
|
||||
"[Job %d] The following messages were recorded from %s to %s",
|
||||
|
||||
+8
-8
@@ -301,7 +301,7 @@ cupsdGetDateTime(struct timeval *t, /* I - Time value or NULL for current */
|
||||
cupsd_time_t format) /* I - Format to use */
|
||||
{
|
||||
struct timeval curtime; /* Current time value */
|
||||
struct tm *date; /* Date/time value */
|
||||
struct tm date; /* Date/time value */
|
||||
static struct timeval last_time = { 0, 0 };
|
||||
/* Last time we formatted */
|
||||
static char s[1024]; /* Date/time string */
|
||||
@@ -351,23 +351,23 @@ cupsdGetDateTime(struct timeval *t, /* I - Time value or NULL for current */
|
||||
* (*BSD and Darwin store the timezone offset in the tm structure)
|
||||
*/
|
||||
|
||||
date = localtime(&(t->tv_sec));
|
||||
localtime_r(&(t->tv_sec), &date);
|
||||
|
||||
if (format == CUPSD_TIME_STANDARD)
|
||||
snprintf(s, sizeof(s), "[%02d/%s/%04d:%02d:%02d:%02d %+03ld%02ld]",
|
||||
date->tm_mday, months[date->tm_mon], 1900 + date->tm_year,
|
||||
date->tm_hour, date->tm_min, date->tm_sec,
|
||||
date.tm_mday, months[date.tm_mon], 1900 + date.tm_year,
|
||||
date.tm_hour, date.tm_min, date.tm_sec,
|
||||
#ifdef HAVE_TM_GMTOFF
|
||||
date->tm_gmtoff / 3600, (date->tm_gmtoff / 60) % 60);
|
||||
date.tm_gmtoff / 3600, (date.tm_gmtoff / 60) % 60);
|
||||
#else
|
||||
timezone / 3600, (timezone / 60) % 60);
|
||||
#endif /* HAVE_TM_GMTOFF */
|
||||
else
|
||||
snprintf(s, sizeof(s), "[%02d/%s/%04d:%02d:%02d:%02d.%06d %+03ld%02ld]",
|
||||
date->tm_mday, months[date->tm_mon], 1900 + date->tm_year,
|
||||
date->tm_hour, date->tm_min, date->tm_sec, (int)t->tv_usec,
|
||||
date.tm_mday, months[date.tm_mon], 1900 + date.tm_year,
|
||||
date.tm_hour, date.tm_min, date.tm_sec, (int)t->tv_usec,
|
||||
#ifdef HAVE_TM_GMTOFF
|
||||
date->tm_gmtoff / 3600, (date->tm_gmtoff / 60) % 60);
|
||||
date.tm_gmtoff / 3600, (date.tm_gmtoff / 60) % 60);
|
||||
#else
|
||||
timezone / 3600, (timezone / 60) % 60);
|
||||
#endif /* HAVE_TM_GMTOFF */
|
||||
|
||||
@@ -757,7 +757,9 @@ main(int argc, /* I - Number of command-line args */
|
||||
#ifdef HAVE_ONDEMAND
|
||||
if (OnDemand)
|
||||
{
|
||||
# ifndef HAVE_SYSTEMD /* Issue #5640: systemd doesn't actually support launch-on-demand services, need to fake it */
|
||||
stop_scheduler = 1;
|
||||
# endif /* HAVE_SYSTEMD */
|
||||
break;
|
||||
}
|
||||
#endif /* HAVE_ONDEMAND */
|
||||
|
||||
@@ -446,7 +446,7 @@ cupsdCreateCommonData(void)
|
||||
|
||||
/* cups-version */
|
||||
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_TEXT | IPP_TAG_COPY,
|
||||
"cups-version", NULL, CUPS_SVERSION + 6);
|
||||
"cups-version", NULL, &CUPS_SVERSION[6]);
|
||||
|
||||
/* generated-natural-language-supported (no IPP_TAG_COPY) */
|
||||
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE,
|
||||
@@ -1478,7 +1478,7 @@ cupsdSaveAllPrinters(void)
|
||||
*name; /* Current user/group name */
|
||||
cupsd_printer_t *printer; /* Current printer class */
|
||||
time_t curtime; /* Current time */
|
||||
struct tm *curdate; /* Current date */
|
||||
struct tm curdate; /* Current date */
|
||||
cups_option_t *option; /* Current option */
|
||||
ipp_attribute_t *marker; /* Current marker attribute */
|
||||
|
||||
@@ -1498,9 +1498,9 @@ cupsdSaveAllPrinters(void)
|
||||
* Write a small header to the file...
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
|
||||
|
||||
cupsFilePuts(fp, "# Printer configuration file for " CUPS_SVERSION "\n");
|
||||
cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
|
||||
|
||||
@@ -1025,7 +1025,7 @@ cupsdSaveAllSubscriptions(void)
|
||||
temp[1024]; /* Temporary string */
|
||||
cupsd_subscription_t *sub; /* Current subscription */
|
||||
time_t curtime; /* Current time */
|
||||
struct tm *curdate; /* Current date */
|
||||
struct tm curdate; /* Current date */
|
||||
unsigned mask; /* Current event mask */
|
||||
const char *name; /* Current event name */
|
||||
int hex; /* Non-zero if we are writing hex data */
|
||||
@@ -1046,9 +1046,9 @@ cupsdSaveAllSubscriptions(void)
|
||||
* Write a small header to the file...
|
||||
*/
|
||||
|
||||
curtime = time(NULL);
|
||||
curdate = localtime(&curtime);
|
||||
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate);
|
||||
time(&curtime);
|
||||
localtime_r(&curtime, &curdate);
|
||||
strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
|
||||
|
||||
cupsFilePuts(fp, "# Subscription configuration file for " CUPS_SVERSION "\n");
|
||||
cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
|
||||
|
||||
Arquivo executável
+48
@@ -0,0 +1,48 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Script to configure and make CUPS with the standard build options. When no
|
||||
# targets are specified, the "clean" and "check" targets are used.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# scripts/makecups [configure option(s)] [make target(s)]
|
||||
#
|
||||
|
||||
# Scan the command-line arguments...
|
||||
confopts="--enable-debug --enable-debug-guards --enable-debug-printfs --enable-sanitizer --enable-unit-tests"
|
||||
makeopts=""
|
||||
|
||||
while test $# -gt 0; do
|
||||
opt="$1"
|
||||
shift
|
||||
|
||||
case "$opt" in
|
||||
-*)
|
||||
confopts="$confopts $opt"
|
||||
;;
|
||||
*)
|
||||
makeopts="$makeopts $opt"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test "x$makeopts" = x; then
|
||||
makeopts="clean check"
|
||||
fi
|
||||
|
||||
case "`uname`" in
|
||||
Darwin)
|
||||
makeopts="-j`sysctl -n hw.activecpu` $makeopts"
|
||||
;;
|
||||
Linux*)
|
||||
ASAN_OPTIONS="leak_check_at_exit=false"; export ASAN_OPTIONS
|
||||
;;
|
||||
esac
|
||||
|
||||
# Run the configure script...
|
||||
echo ./configure $confopts
|
||||
./configure $confopts || exit 1
|
||||
|
||||
# Build the software...
|
||||
echo make $makeopts
|
||||
make $makeopts
|
||||
+2
-1
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "lp" command for CUPS.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||
@@ -749,6 +749,7 @@ usage(void)
|
||||
" lp [options] -i id"));
|
||||
_cupsLangPuts(stdout, _("Options:"));
|
||||
_cupsLangPuts(stdout, _("-c Make a copy of the print file(s)"));
|
||||
_cupsLangPuts(stdout, _("-d destination Specify the destination"));
|
||||
_cupsLangPuts(stdout, _("-E Encrypt the connection to the server"));
|
||||
_cupsLangPuts(stdout, _("-h server[:port] Connect to the named server and port"));
|
||||
_cupsLangPuts(stdout, _("-H HH:MM Hold the job until the specified UTC time"));
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="restart-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}"><INPUT TYPE="SUBMIT" VALUE="Reprint Job"></FORM>:}:}
|
||||
{job_state=4?{job_hold_until=auth-info-required?Held for authentication.:
|
||||
<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="release-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
|
||||
<INPUT TYPE="SUBMIT" VALUE="Release Job"></FORM>:}}
|
||||
<INPUT TYPE="SUBMIT" VALUE="Release Job"></FORM>:}:}
|
||||
{job_state=3?
|
||||
<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="hold-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
|
||||
<INPUT TYPE="SUBMIT" VALUE="Hold Job"></FORM>:}
|
||||
|
||||
+2
-2
@@ -147,7 +147,7 @@ local: ippeveprinter-static ipptool-static
|
||||
|
||||
ippeveprinter: ippeveprinter.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(LD_CC) $(ALL_LDFLAGS) -o $@ ippeveprinter.o $(DNSSDLIBS) $(LINKCUPS)
|
||||
$(LD_CC) $(ALL_LDFLAGS) -o $@ ippeveprinter.o $(DNSSDLIBS) $(PAMLIBS) $(LINKCUPS)
|
||||
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ ippeveprinter: ippeveprinter.o ../cups/$(LIBCUPS)
|
||||
|
||||
ippeveprinter-static: ippeveprinter.o ../cups/$(LIBCUPSSTATIC)
|
||||
echo Linking $@...
|
||||
$(LD_CC) $(ALL_LDFLAGS) -o $@ ippeveprinter.o $(LINKCUPSSTATIC)
|
||||
$(LD_CC) $(ALL_LDFLAGS) -o $@ ippeveprinter.o $(PAMLIBS) $(LINKCUPSSTATIC)
|
||||
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
|
||||
|
||||
|
||||
|
||||
+335
-75
@@ -51,6 +51,7 @@ extern char **environ;
|
||||
# include <avahi-common/error.h>
|
||||
# include <avahi-common/thread-watch.h>
|
||||
#endif /* HAVE_DNSSD */
|
||||
|
||||
#ifdef HAVE_SYS_MOUNT_H
|
||||
# include <sys/mount.h>
|
||||
#endif /* HAVE_SYS_MOUNT_H */
|
||||
@@ -64,6 +65,14 @@ extern char **environ;
|
||||
# include <sys/vfs.h>
|
||||
#endif /* HAVE_SYS_VFS_H */
|
||||
|
||||
#if HAVE_LIBPAM
|
||||
# ifdef HAVE_PAM_PAM_APPL_H
|
||||
# include <pam/pam_appl.h>
|
||||
# else
|
||||
# include <security/pam_appl.h>
|
||||
# endif /* HAVE_PAM_PAM_APPL_H */
|
||||
#endif /* HAVE_LIBPAM */
|
||||
|
||||
#include "printer-png.h"
|
||||
|
||||
|
||||
@@ -148,6 +157,14 @@ typedef void *ippeve_srv_t; /* Service reference */
|
||||
typedef void *ippeve_txt_t; /* TXT record */
|
||||
#endif /* HAVE_DNSSD */
|
||||
|
||||
#if HAVE_LIBPAM
|
||||
typedef struct ippeve_authdata_s /* Authentication data */
|
||||
{
|
||||
char username[HTTP_MAX_VALUE], /* Username string */
|
||||
*password; /* Password string */
|
||||
} ippeve_authdata_t;
|
||||
#endif /* HAVE_LIBPAM */
|
||||
|
||||
typedef struct ippeve_filter_s /**** Attribute filter ****/
|
||||
{
|
||||
cups_array_t *ra; /* Requested attributes */
|
||||
@@ -224,7 +241,9 @@ typedef struct ippeve_client_s /**** Client data ****/
|
||||
char uri[1024], /* Request URI */
|
||||
*options; /* URI options */
|
||||
http_addr_t addr; /* Client address */
|
||||
char hostname[256]; /* Client hostname */
|
||||
char hostname[256], /* Client hostname */
|
||||
username[HTTP_MAX_VALUE];
|
||||
/* Authenticated username, if any */
|
||||
ippeve_printer_t *printer; /* Printer */
|
||||
ippeve_job_t *job; /* Current job, if any */
|
||||
} ippeve_client_t;
|
||||
@@ -234,6 +253,7 @@ typedef struct ippeve_client_s /**** Client data ****/
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static http_status_t authenticate_request(ippeve_client_t *client);
|
||||
static void clean_jobs(ippeve_printer_t *printer);
|
||||
static int compare_jobs(ippeve_job_t *a, ippeve_job_t *b);
|
||||
static void copy_attributes(ipp_t *to, ipp_t *from, cups_array_t *ra, ipp_tag_t group_tag, int quickcopy);
|
||||
@@ -281,6 +301,9 @@ static ipp_t *load_legacy_attributes(const char *make, const char *model, int p
|
||||
#if !CUPS_LITE
|
||||
static ipp_t *load_ppd_attributes(const char *ppdfile, cups_array_t *docformats);
|
||||
#endif /* !CUPS_LITE */
|
||||
#if HAVE_LIBPAM
|
||||
static int pam_func(int, const struct pam_message **, struct pam_response **, void *);
|
||||
#endif /* HAVE_LIBPAM */
|
||||
static int parse_options(ippeve_client_t *client, cups_option_t **options);
|
||||
static void process_attr_message(ippeve_job_t *job, char *message);
|
||||
static void *process_client(ippeve_client_t *client);
|
||||
@@ -316,6 +339,8 @@ static AvahiClient *DNSSDClient = NULL;
|
||||
static int KeepFiles = 0, /* Keep spooled job files? */
|
||||
MaxVersion = 20,/* Maximum IPP version (20 = 2.0, 11 = 1.1, etc.) */
|
||||
Verbosity = 0; /* Verbosity level */
|
||||
static const char *PAMService = NULL;
|
||||
/* PAM service */
|
||||
|
||||
|
||||
/*
|
||||
@@ -371,6 +396,14 @@ main(int argc, /* I - Number of command-line args */
|
||||
{
|
||||
web_forms = 0;
|
||||
}
|
||||
else if (!strcmp(argv[i], "--pam-service"))
|
||||
{
|
||||
i ++;
|
||||
if (i >= argc)
|
||||
usage(1);
|
||||
|
||||
PAMService = argv[i];
|
||||
}
|
||||
else if (!strcmp(argv[i], "--version"))
|
||||
{
|
||||
puts(CUPS_SVERSION);
|
||||
@@ -392,6 +425,11 @@ main(int argc, /* I - Number of command-line args */
|
||||
legacy = 1;
|
||||
break;
|
||||
|
||||
case 'A' : /* -A (enable authentication) */
|
||||
if (!PAMService)
|
||||
PAMService = "cups";
|
||||
break;
|
||||
|
||||
case 'D' : /* -D device-uri */
|
||||
i ++;
|
||||
if (i >= argc)
|
||||
@@ -631,10 +669,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
_cupsLangPrintf(stderr, _("Using spool directory \"%s\"."), directory);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
cupsSetServerCredentials(keypath, servername, 1);
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
/*
|
||||
* Initialize DNS-SD...
|
||||
*/
|
||||
@@ -675,6 +709,10 @@ main(int argc, /* I - Number of command-line args */
|
||||
printer->ppdfile = strdup(ppdfile);
|
||||
#endif /* !CUPS_LITE */
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
cupsSetServerCredentials(keypath, printer->hostname, 1);
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
/*
|
||||
* Run the print service...
|
||||
*/
|
||||
@@ -691,6 +729,105 @@ main(int argc, /* I - Number of command-line args */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'authenticate_request()' - Try to authenticate the request.
|
||||
*/
|
||||
|
||||
static http_status_t /* O - HTTP_STATUS_CONTINUE to keep going, otherwise status to return */
|
||||
authenticate_request(
|
||||
ippeve_client_t *client) /* I - Client */
|
||||
{
|
||||
#if HAVE_LIBPAM
|
||||
/*
|
||||
* If PAM isn't enabled, return 'continue' now...
|
||||
*/
|
||||
|
||||
const char *authorization; /* Pointer into Authorization string */
|
||||
int userlen; /* Username:password length */
|
||||
pam_handle_t *pamh; /* PAM authentication handle */
|
||||
int pamerr; /* PAM error code */
|
||||
struct pam_conv pamdata; /* PAM conversation data */
|
||||
ippeve_authdata_t data; /* Authentication data */
|
||||
|
||||
|
||||
if (!PAMService)
|
||||
return (HTTP_STATUS_CONTINUE);
|
||||
|
||||
/*
|
||||
* Try authenticating using PAM...
|
||||
*/
|
||||
|
||||
authorization = httpGetField(client->http, HTTP_FIELD_AUTHORIZATION);
|
||||
|
||||
if (!*authorization)
|
||||
return (HTTP_STATUS_UNAUTHORIZED);
|
||||
|
||||
if (strncmp(authorization, "Basic ", 6))
|
||||
{
|
||||
fputs("Unsupported scheme in Authorization header.\n", stderr);
|
||||
return (HTTP_STATUS_BAD_REQUEST);
|
||||
}
|
||||
|
||||
authorization += 5;
|
||||
while (isspace(*authorization & 255))
|
||||
authorization ++;
|
||||
|
||||
userlen = sizeof(data.username);
|
||||
httpDecode64_2(data.username, &userlen, authorization);
|
||||
|
||||
if ((data.password = strchr(data.username, ':')) == NULL)
|
||||
{
|
||||
fputs("No password in Authorization header.\n", stderr);
|
||||
return (HTTP_STATUS_BAD_REQUEST);
|
||||
}
|
||||
|
||||
*(data.password)++ = '\0';
|
||||
|
||||
if (!data.username[0])
|
||||
{
|
||||
fputs("No username in Authorization header.\n", stderr);
|
||||
return (HTTP_STATUS_BAD_REQUEST);
|
||||
}
|
||||
|
||||
pamdata.conv = pam_func;
|
||||
pamdata.appdata_ptr = &data;
|
||||
|
||||
if ((pamerr = pam_start(PAMService, data.username, &pamdata, &pamh)) != PAM_SUCCESS)
|
||||
{
|
||||
fprintf(stderr, "pam_start() returned %d (%s)\n", pamerr, pam_strerror(pamh, pamerr));
|
||||
return (HTTP_STATUS_SERVER_ERROR);
|
||||
}
|
||||
|
||||
if ((pamerr = pam_authenticate(pamh, PAM_SILENT)) != PAM_SUCCESS)
|
||||
{
|
||||
fprintf(stderr, "pam_authenticate() returned %d (%s)\n", pamerr, pam_strerror(pamh, pamerr));
|
||||
pam_end(pamh, 0);
|
||||
return (HTTP_STATUS_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
if ((pamerr = pam_acct_mgmt(pamh, PAM_SILENT)) != PAM_SUCCESS)
|
||||
{
|
||||
fprintf(stderr, "pam_acct_mgmt() returned %d (%s)\n", pamerr, pam_strerror(pamh, pamerr));
|
||||
pam_end(pamh, 0);
|
||||
return (HTTP_STATUS_SERVER_ERROR);
|
||||
}
|
||||
|
||||
strlcpy(client->username, data.username, sizeof(client->username));
|
||||
|
||||
pam_end(pamh, PAM_SUCCESS);
|
||||
|
||||
return (HTTP_STATUS_CONTINUE);
|
||||
|
||||
#else
|
||||
/*
|
||||
* No authentication support built-in, return 'continue'...
|
||||
*/
|
||||
|
||||
return (HTTP_STATUS_CONTINUE);
|
||||
#endif /* HAVE_LIBPAM */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'clean_jobs()' - Clean out old (completed) jobs.
|
||||
*/
|
||||
@@ -1427,6 +1564,11 @@ create_printer(
|
||||
"none",
|
||||
"none"
|
||||
};
|
||||
static const char * const uri_authentication_basic[] =
|
||||
{ /* uri-authentication-supported values with authentication */
|
||||
"basic",
|
||||
"basic"
|
||||
};
|
||||
static const char * const uri_security_supported[] =
|
||||
{ /* uri-security-supported values */
|
||||
"none",
|
||||
@@ -1763,9 +1905,15 @@ create_printer(
|
||||
|
||||
/* uri-authentication-supported */
|
||||
#ifdef HAVE_SSL
|
||||
ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", 2, NULL, uri_authentication_supported);
|
||||
if (PAMService)
|
||||
ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", 2, NULL, uri_authentication_basic);
|
||||
else
|
||||
ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", 2, NULL, uri_authentication_supported);
|
||||
#else
|
||||
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", NULL, "none");
|
||||
if (PAMService)
|
||||
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", NULL, "basic");
|
||||
else
|
||||
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", NULL, "none");
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
/* uri-security-supported */
|
||||
@@ -5226,6 +5374,78 @@ load_ppd_attributes(
|
||||
#endif /* !CUPS_LITE */
|
||||
|
||||
|
||||
#if HAVE_LIBPAM
|
||||
/*
|
||||
* 'pam_func()' - PAM conversation function.
|
||||
*/
|
||||
|
||||
static int /* O - Success or failure */
|
||||
pam_func(
|
||||
int num_msg, /* I - Number of messages */
|
||||
const struct pam_message **msg, /* I - Messages */
|
||||
struct pam_response **resp, /* O - Responses */
|
||||
void *appdata_ptr)
|
||||
/* I - Pointer to connection */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
struct pam_response *replies; /* Replies */
|
||||
ippeve_authdata_t *data; /* Pointer to auth data */
|
||||
|
||||
|
||||
/*
|
||||
* Allocate memory for the responses...
|
||||
*/
|
||||
|
||||
if ((replies = malloc(sizeof(struct pam_response) * (size_t)num_msg)) == NULL)
|
||||
return (PAM_CONV_ERR);
|
||||
|
||||
/*
|
||||
* Answer all of the messages...
|
||||
*/
|
||||
|
||||
data = (ippeve_authdata_t *)appdata_ptr;
|
||||
|
||||
for (i = 0; i < num_msg; i ++)
|
||||
{
|
||||
switch (msg[i]->msg_style)
|
||||
{
|
||||
case PAM_PROMPT_ECHO_ON:
|
||||
replies[i].resp_retcode = PAM_SUCCESS;
|
||||
replies[i].resp = strdup(data->username);
|
||||
break;
|
||||
|
||||
case PAM_PROMPT_ECHO_OFF:
|
||||
replies[i].resp_retcode = PAM_SUCCESS;
|
||||
replies[i].resp = strdup(data->password);
|
||||
break;
|
||||
|
||||
case PAM_TEXT_INFO:
|
||||
replies[i].resp_retcode = PAM_SUCCESS;
|
||||
replies[i].resp = NULL;
|
||||
break;
|
||||
|
||||
case PAM_ERROR_MSG:
|
||||
replies[i].resp_retcode = PAM_SUCCESS;
|
||||
replies[i].resp = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
free(replies);
|
||||
return (PAM_CONV_ERR);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the responses back to PAM...
|
||||
*/
|
||||
|
||||
*resp = replies;
|
||||
|
||||
return (PAM_SUCCESS);
|
||||
}
|
||||
#endif /* HAVE_LIBPAM */
|
||||
|
||||
|
||||
/*
|
||||
* 'parse_options()' - Parse URL options into CUPS options.
|
||||
*
|
||||
@@ -5431,6 +5651,8 @@ process_http(ippeve_client_t *client) /* I - Client connection */
|
||||
* Clear state variables...
|
||||
*/
|
||||
|
||||
client->username[0] = '\0';
|
||||
|
||||
ippDelete(client->request);
|
||||
ippDelete(client->response);
|
||||
|
||||
@@ -5526,8 +5748,7 @@ process_http(ippeve_client_t *client) /* I - Client connection */
|
||||
* Handle HTTP Upgrade...
|
||||
*/
|
||||
|
||||
if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION),
|
||||
"Upgrade"))
|
||||
if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION), "Upgrade"))
|
||||
{
|
||||
#ifdef HAVE_SSL
|
||||
if (strstr(httpGetField(client->http, HTTP_FIELD_UPGRADE), "TLS/") != NULL && !httpIsEncrypted(client->http))
|
||||
@@ -5552,34 +5773,6 @@ process_http(ippeve_client_t *client) /* I - Client connection */
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle HTTP Expect...
|
||||
*/
|
||||
|
||||
if (httpGetExpect(client->http) &&
|
||||
(client->operation == HTTP_STATE_POST ||
|
||||
client->operation == HTTP_STATE_PUT))
|
||||
{
|
||||
if (httpGetExpect(client->http) == HTTP_STATUS_CONTINUE)
|
||||
{
|
||||
/*
|
||||
* Send 100-continue header...
|
||||
*/
|
||||
|
||||
if (!respond_http(client, HTTP_STATUS_CONTINUE, NULL, NULL, 0))
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Send 417-expectation-failed header...
|
||||
*/
|
||||
|
||||
if (!respond_http(client, HTTP_STATUS_EXPECTATION_FAILED, NULL, NULL, 0))
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle new transfers...
|
||||
*/
|
||||
@@ -5646,32 +5839,44 @@ process_http(ippeve_client_t *client) /* I - Client connection */
|
||||
httpFlushWrite(client->http);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(client->uri, "/"))
|
||||
{
|
||||
/*
|
||||
* Show web status page...
|
||||
*/
|
||||
|
||||
return (show_status(client));
|
||||
}
|
||||
else if (!strcmp(client->uri, "/media"))
|
||||
{
|
||||
/*
|
||||
* Show web media page...
|
||||
*/
|
||||
|
||||
return (show_media(client));
|
||||
}
|
||||
else if (!strcmp(client->uri, "/supplies"))
|
||||
{
|
||||
/*
|
||||
* Show web supplies page...
|
||||
*/
|
||||
|
||||
return (show_supplies(client));
|
||||
}
|
||||
else
|
||||
return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
|
||||
{
|
||||
/*
|
||||
* Authenticate if needed...
|
||||
*/
|
||||
|
||||
if ((http_status = authenticate_request(client)) != HTTP_STATUS_CONTINUE)
|
||||
{
|
||||
return (respond_http(client, http_status, NULL, NULL, 0));
|
||||
}
|
||||
|
||||
if (!strcmp(client->uri, "/"))
|
||||
{
|
||||
/*
|
||||
* Show web status page...
|
||||
*/
|
||||
|
||||
return (show_status(client));
|
||||
}
|
||||
else if (!strcmp(client->uri, "/media"))
|
||||
{
|
||||
/*
|
||||
* Show web media page...
|
||||
*/
|
||||
|
||||
return (show_media(client));
|
||||
}
|
||||
else if (!strcmp(client->uri, "/supplies"))
|
||||
{
|
||||
/*
|
||||
* Show web supplies page...
|
||||
*/
|
||||
|
||||
return (show_supplies(client));
|
||||
}
|
||||
else
|
||||
return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
|
||||
}
|
||||
break;
|
||||
|
||||
case HTTP_STATE_POST :
|
||||
@@ -5730,6 +5935,7 @@ process_ipp(ippeve_client_t *client) /* I - Client */
|
||||
ipp_attribute_t *uri; /* Printer URI attribute */
|
||||
int major, minor; /* Version number */
|
||||
const char *name; /* Name of attribute */
|
||||
http_status_t status; /* Authentication status */
|
||||
|
||||
|
||||
debug_attributes("Request", client->request, 1);
|
||||
@@ -5880,13 +6086,48 @@ process_ipp(ippeve_client_t *client) /* I - Client */
|
||||
strcmp(resource, "/ipp/print")))
|
||||
respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "%s %s not found.",
|
||||
name, ippGetString(uri, 0, NULL));
|
||||
else
|
||||
else if (client->operation_id != IPP_OP_GET_PRINTER_ATTRIBUTES && (status = authenticate_request(client)) != HTTP_STATUS_CONTINUE)
|
||||
{
|
||||
httpFlush(client->http);
|
||||
|
||||
return (respond_http(client, status, NULL, NULL, 0));
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Handle HTTP Expect...
|
||||
*/
|
||||
|
||||
if (httpGetExpect(client->http))
|
||||
{
|
||||
if (httpGetExpect(client->http) == HTTP_STATUS_CONTINUE)
|
||||
{
|
||||
/*
|
||||
* Send 100-continue header...
|
||||
*/
|
||||
|
||||
if (!respond_http(client, HTTP_STATUS_CONTINUE, NULL, NULL, 0))
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Send 417-expectation-failed header...
|
||||
*/
|
||||
|
||||
if (!respond_http(client, HTTP_STATUS_EXPECTATION_FAILED, NULL, NULL, 0))
|
||||
return (0);
|
||||
|
||||
httpFlush(client->http);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Try processing the operation...
|
||||
*/
|
||||
|
||||
switch (ippGetOperation(client->request))
|
||||
switch (client->operation_id)
|
||||
{
|
||||
case IPP_OP_PRINT_JOB :
|
||||
ipp_print_job(client);
|
||||
@@ -6529,6 +6770,10 @@ register_printer(
|
||||
urf[252], /* List of supported URF values */
|
||||
*ptr; /* Pointer into string */
|
||||
|
||||
|
||||
if (!strcmp(subtypes, "off"))
|
||||
return (1);
|
||||
|
||||
color_supported = ippFindAttribute(printer->attrs, "color-supported", IPP_TAG_BOOLEAN);
|
||||
document_format_supported = ippFindAttribute(printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE);
|
||||
printer_location = ippFindAttribute(printer->attrs, "printer-location", IPP_TAG_TEXT);
|
||||
@@ -6574,6 +6819,7 @@ register_printer(
|
||||
#ifdef HAVE_DNSSD
|
||||
DNSServiceErrorType error; /* Error from Bonjour */
|
||||
char regtype[256]; /* Bonjour service type */
|
||||
uint32_t interface; /* Interface index */
|
||||
|
||||
|
||||
/*
|
||||
@@ -6606,9 +6852,11 @@ register_printer(
|
||||
* defend our service name but not actually support LPD...
|
||||
*/
|
||||
|
||||
interface = !strcmp(printer->hostname, "localhost") ? kDNSServiceInterfaceIndexLocalOnly : kDNSServiceInterfaceIndexAny;
|
||||
|
||||
printer->printer_ref = DNSSDMaster;
|
||||
|
||||
if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
|
||||
if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
|
||||
{
|
||||
_cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, "_printer._tcp", error);
|
||||
return (0);
|
||||
@@ -6626,7 +6874,7 @@ register_printer(
|
||||
else
|
||||
strlcpy(regtype, "_ipp._tcp", sizeof(regtype));
|
||||
|
||||
if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
|
||||
if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
|
||||
{
|
||||
_cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, regtype, error);
|
||||
return (0);
|
||||
@@ -6645,7 +6893,7 @@ register_printer(
|
||||
else
|
||||
strlcpy(regtype, "_ipps._tcp", sizeof(regtype));
|
||||
|
||||
if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
|
||||
if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
|
||||
{
|
||||
_cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, regtype, error);
|
||||
return (0);
|
||||
@@ -6659,7 +6907,7 @@ register_printer(
|
||||
|
||||
printer->http_ref = DNSSDMaster;
|
||||
|
||||
if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
|
||||
if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
|
||||
{
|
||||
_cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, "_http._tcp,_printer", error);
|
||||
return (0);
|
||||
@@ -6824,6 +7072,14 @@ respond_http(
|
||||
client->operation == HTTP_STATE_OPTIONS)
|
||||
httpSetField(client->http, HTTP_FIELD_ALLOW, "GET, HEAD, OPTIONS, POST");
|
||||
|
||||
if (code == HTTP_STATUS_UNAUTHORIZED)
|
||||
{
|
||||
char value[256]; /* WWW-Authenticate value */
|
||||
|
||||
snprintf(value, sizeof(value), "Basic realm=\"%s\"", PAMService);
|
||||
httpSetField(client->http, HTTP_FIELD_WWW_AUTHENTICATE, value);
|
||||
}
|
||||
|
||||
if (type)
|
||||
{
|
||||
if (!strcmp(type, "text/html"))
|
||||
@@ -7645,10 +7901,12 @@ time_string(time_t tv, /* I - Time value */
|
||||
char *buffer, /* I - Buffer */
|
||||
size_t bufsize) /* I - Size of buffer */
|
||||
{
|
||||
struct tm *curtime = localtime(&tv);
|
||||
/* Local time */
|
||||
struct tm date; /* Local time and date */
|
||||
|
||||
localtime_r(&tv, &date);
|
||||
|
||||
strftime(buffer, bufsize, "%X", &date);
|
||||
|
||||
strftime(buffer, bufsize, "%X", curtime);
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
@@ -7662,10 +7920,12 @@ usage(int status) /* O - Exit status */
|
||||
{
|
||||
_cupsLangPuts(stdout, _("Usage: ippeveprinter [options] \"name\""));
|
||||
_cupsLangPuts(stdout, _("Options:"));
|
||||
_cupsLangPuts(stderr, _("--help Show program help"));
|
||||
_cupsLangPuts(stderr, _("--no-web-forms Disable web forms for media and supplies"));
|
||||
_cupsLangPuts(stderr, _("--version Show program version"));
|
||||
_cupsLangPuts(stdout, _("--help Show program help"));
|
||||
_cupsLangPuts(stdout, _("--no-web-forms Disable web forms for media and supplies"));
|
||||
_cupsLangPuts(stdout, _("--pam-service service Use the named PAM service"));
|
||||
_cupsLangPuts(stdout, _("--version Show program version"));
|
||||
_cupsLangPuts(stdout, _("-2 Set 2-sided printing support (default=1-sided)"));
|
||||
_cupsLangPuts(stdout, _("-A Enable authentication"));
|
||||
_cupsLangPuts(stdout, _("-D device-uri Set the device URI for the printer"));
|
||||
_cupsLangPuts(stdout, _("-F output-type/subtype Set the output format for the printer"));
|
||||
#ifdef HAVE_SSL
|
||||
@@ -7686,7 +7946,7 @@ usage(int status) /* O - Exit status */
|
||||
_cupsLangPuts(stdout, _("-p port Set port number for printer"));
|
||||
_cupsLangPuts(stdout, _("-r subtype,[subtype] Set DNS-SD service subtype"));
|
||||
_cupsLangPuts(stdout, _("-s speed[,color-speed] Set speed in pages per minute"));
|
||||
_cupsLangPuts(stderr, _("-v Be verbose"));
|
||||
_cupsLangPuts(stdout, _("-v Be verbose"));
|
||||
|
||||
exit(status);
|
||||
}
|
||||
|
||||
+4
-4
@@ -2162,16 +2162,16 @@ static char * /* O - ISO 8601 date/time string */
|
||||
iso_date(const ipp_uchar_t *date) /* I - IPP (RFC 1903) date/time value */
|
||||
{
|
||||
time_t utctime; /* UTC time since 1970 */
|
||||
struct tm *utcdate; /* UTC date/time */
|
||||
struct tm utcdate; /* UTC date/time */
|
||||
static char buffer[255]; /* String buffer */
|
||||
|
||||
|
||||
utctime = ippDateToTime(date);
|
||||
utcdate = gmtime(&utctime);
|
||||
gmtime_r(&utctime, &utcdate);
|
||||
|
||||
snprintf(buffer, sizeof(buffer), "%04d-%02d-%02dT%02d:%02d:%02dZ",
|
||||
utcdate->tm_year + 1900, utcdate->tm_mon + 1, utcdate->tm_mday,
|
||||
utcdate->tm_hour, utcdate->tm_min, utcdate->tm_sec);
|
||||
utcdate.tm_year + 1900, utcdate.tm_mon + 1, utcdate.tm_mday,
|
||||
utcdate.tm_hour, utcdate.tm_min, utcdate.tm_sec);
|
||||
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
+10
-9
@@ -46,6 +46,14 @@
|
||||
#define write _write
|
||||
|
||||
|
||||
/*
|
||||
* Microsoft "safe" functions use a different argument order than POSIX...
|
||||
*/
|
||||
|
||||
#define gmtime_r(t,tm) gmtime_s(tm,t)
|
||||
#define localtime_r(t,tm) localtime_s(tm,t)
|
||||
|
||||
|
||||
/*
|
||||
* Map the POSIX strcasecmp() and strncasecmp() functions to the Win32
|
||||
* _stricmp() and _strnicmp() functions...
|
||||
@@ -89,8 +97,8 @@ typedef unsigned long useconds_t;
|
||||
* Version of software...
|
||||
*/
|
||||
|
||||
#define CUPS_SVERSION "CUPS v2.3.0"
|
||||
#define CUPS_MINIMAL "CUPS/2.3.0"
|
||||
#define CUPS_SVERSION "CUPS v2.3.3"
|
||||
#define CUPS_MINIMAL "CUPS/2.3.3"
|
||||
|
||||
|
||||
/*
|
||||
@@ -375,13 +383,6 @@ typedef unsigned long useconds_t;
|
||||
#define HAVE_SSL 1
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the gnutls_fips140_set_mode function?
|
||||
*/
|
||||
|
||||
/* #undef HAVE_GNUTLS_FIPS140_SET_MODE */
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the gnutls_transport_set_pull_timeout_function function?
|
||||
*/
|
||||
|
||||
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+2
-9
@@ -18,8 +18,8 @@
|
||||
* Version of software...
|
||||
*/
|
||||
|
||||
#define CUPS_SVERSION "CUPS v2.3.0"
|
||||
#define CUPS_MINIMAL "CUPS/2.3.0"
|
||||
#define CUPS_SVERSION "CUPS v2.3.3"
|
||||
#define CUPS_MINIMAL "CUPS/2.3.3"
|
||||
|
||||
|
||||
/*
|
||||
@@ -305,13 +305,6 @@
|
||||
#define HAVE_SSL 1
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the gnutls_fips140_set_mode function?
|
||||
*/
|
||||
|
||||
/* #undef HAVE_GNUTLS_FIPS140_SET_MODE */
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the gnutls_transport_set_pull_timeout_function function?
|
||||
*/
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário