Comparar commits
85 Commits
v2.2.10
...
branch-2.2
| Autor | SHA1 | Data | |
|---|---|---|---|
| 0ad6ac55da | |||
| 339d33b8e6 | |||
| e93ab4a004 | |||
| 8c9b3606cc | |||
| 25a9f95813 | |||
| 197bfe6ab4 | |||
| 619af39389 | |||
| 457d534a9c | |||
| b796104425 | |||
| 9645531eeb | |||
| b1bc79753d | |||
| 72288f3069 | |||
| 891e14ed26 | |||
| f5e07479b2 | |||
| 6946292516 | |||
| 40a54a37ae | |||
| 81d39a9fd3 | |||
| 250c2783c0 | |||
| affc6e3ba6 | |||
| c8cb6400e3 | |||
| f24e6cf6a3 | |||
| ad312a0c66 | |||
| e1eb4a8495 | |||
| 04fef0e213 | |||
| 86cf8118f7 | |||
| 2f26c6b713 | |||
| d11af547d1 | |||
| b4909ef014 | |||
| 2062d366ea | |||
| c507739347 | |||
| 666d07699b | |||
| c1a310ffdc | |||
| 3676fc318a | |||
| 669659ca88 | |||
| 9b48d16c1d | |||
| c5b991fdaa | |||
| fd8245cd01 | |||
| 35e927f835 | |||
| a0096a2f73 | |||
| 6235f36a95 | |||
| 971bdfe043 | |||
| 9d6f1bb6c6 | |||
| d76e57f8c6 | |||
| a2eba04317 | |||
| c1b133728b | |||
| 8829edfef0 | |||
| 0ad7895cff | |||
| aaebca5660 | |||
| ee5419f6df | |||
| 803b6de89a | |||
| 35064a2596 | |||
| e4a0aa86c9 | |||
| ba9d68cc74 | |||
| 488ec102c1 | |||
| c7b37f21eb | |||
| 88c131a16f | |||
| 74dece9c5a | |||
| 17675b0d73 | |||
| 816b3bfd42 | |||
| 1178267306 | |||
| 469b6abcd8 | |||
| 606cfe8cb9 | |||
| 4c94126876 | |||
| 3a66aedf8a | |||
| 534af3a30b | |||
| f7d8c89ecc | |||
| 9f6cee7e3f | |||
| bafbb263f8 | |||
| 019198b76b | |||
| 324a11611a | |||
| 949c21788d | |||
| b1648391cb | |||
| ddcb034a2b | |||
| 6844678902 | |||
| 558bba72fe | |||
| 6cf21c3b87 | |||
| 328d863971 | |||
| 907afa29b7 | |||
| f3693bb315 | |||
| bad9fef486 | |||
| 21cbc2f292 | |||
| 18518f3b94 | |||
| ddaef0f518 | |||
| b7724e9966 | |||
| f7d4caccaf |
+99
-2
@@ -1,11 +1,108 @@
|
||||
CHANGES - 2.2.10 - 2018-12-07
|
||||
CHANGES - 2.2.13 - 2019-12-13
|
||||
=============================
|
||||
|
||||
|
||||
Changes in CUPS v2.2.13
|
||||
-----------------------
|
||||
|
||||
- CVE-2019-2228: The `ippSetValuetag` function did not validate the default
|
||||
language value.
|
||||
- Added a workaround for the scheduler's systemd support (Issue #5640)
|
||||
- Fixed spelling of "fold-accordion".
|
||||
- Fixed the default common name for TLS certificates used by `ippserver`.
|
||||
- The libusb-based USB backend now reports an error when the distribution
|
||||
permissions are wrong (Issue #5658)
|
||||
- Default printers set with `lpoptions` did not work in all cases (Issue #5681,
|
||||
Issue #5683, Issue #5684)
|
||||
- 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)
|
||||
|
||||
|
||||
Changes in CUPS v2.2.12
|
||||
-----------------------
|
||||
|
||||
- CVE-2019-8696 and CVE-2019-8675: Fixed SNMP buffer overflows (rdar://51685251)
|
||||
- The `cupsctl` command now prevents setting "cups-files.conf" directives
|
||||
(Issue #5530)
|
||||
- Updated the systemd service file for cupsd (Issue #5551)
|
||||
- The `cupsCheckDestSupported` function did not check octetString values
|
||||
correctly (Issue #5557)
|
||||
- The scheduler did not encode octetString values like "job-password" correctly
|
||||
for the print filters (Issue #5558)
|
||||
- Restored minimal support for the `Emulators` keyword in PPD files to allow
|
||||
old Samsung printer drivers to continue to work (Issue #5562)
|
||||
- Timed out job submission now yields an error (Issue #5570)
|
||||
- The footer in the web interface covered some content on small displays
|
||||
(Issue #5574)
|
||||
- The libusb-based USB backend now enforces read limits, improving print speed
|
||||
in many cases (Issue #5583)
|
||||
- Fixed some compatibility issues with old releases of CUPS (Issue #5587)
|
||||
- Fixed a bug in the scheduler job cleanup code (Issue #5588)
|
||||
- "make" failed with GZIP options (Issue #5595)
|
||||
- Added FIPS-140 workarounds for GNU TLS (Issue #5601, Issue #5622)
|
||||
- The scheduler no longer provides a default value for the description
|
||||
(Issue #5603)
|
||||
- The `lpadmin` command did not always update the PPD file for changes to the
|
||||
`cupsIPPSupplies` and `cupsSNMPSupplies` keywords (Issue #5610)
|
||||
- The scheduler now uses both the group's membership list as well as the
|
||||
various OS-specific membership functions to determine whether a user belongs
|
||||
to a named group (Issue #5613)
|
||||
- Added USB quirks rule for HP LaserJet 1015 (Issue #5617)
|
||||
- Fixed some PPD parser issues (Issue #5623, Issue #5624)
|
||||
- The IPP parser no longer allows invalid member attributes in collections
|
||||
(Issue #5630)
|
||||
- Fixed IPP buffer overflow (rdar://50035411)
|
||||
- Fixed memory disclosure issue in the scheduler (rdar://51373853)
|
||||
- Fixed DoS issues in the scheduler (rdar://51373929)
|
||||
- The scheduler would restart continuously when idle and printers were not
|
||||
shared (rdar://52561199)
|
||||
- Fixed a command ordering issue in the Zebra ZPL driver.
|
||||
- Fixed a memory leak in `ppdOpen`.
|
||||
|
||||
|
||||
Changes in CUPS v2.2.11
|
||||
-----------------------
|
||||
|
||||
- Running ppdmerge with the same input and output filenames did not work as
|
||||
advertised (Issue #5455)
|
||||
- Fixed a potential memory leak when reading at the end of a file (Issue #5473)
|
||||
- Fixed potential unaligned accesses in the string pool (Issue #5474)
|
||||
- Fixed a potential memory leak when loading a PPD file (Issue #5475)
|
||||
- Added a USB quirks rule for the Lexmark E120n (Issue #5478)
|
||||
- Updated the USB quirks rule for Zebra label printers (Issue #5395)
|
||||
- Fixed a compile error on Linux (Issue #5483)
|
||||
- The lpadmin command, web interface, and scheduler all queried an IPP
|
||||
Everywhere printer differently, resulting in different PPDs for the same
|
||||
printer (Issue #5484)
|
||||
- Fixed an issue with the self-signed certificates generated by GNU TLS
|
||||
(Issue #5506)
|
||||
- The `ippValidateAttribute` function did not catch all instances of invalid
|
||||
UTF-8 strings (Issue #5509)
|
||||
- Non-Kerberized printing to Windows via IPP was broken (Issue #5515)
|
||||
- The scheduler no longer stops a printer if an error occurs when a job is
|
||||
canceled or aborted (Issue #5517)
|
||||
- Added a USB quirks rule for the DYMO 450 Turbo (Issue #5521)
|
||||
- Added a USB quirks rule for Xerox printers (Issue #5523)
|
||||
- The scheduler's self-signed certificate did not include all of the alternate
|
||||
names for the server when using GNU TLS (Issue #5525)
|
||||
- Fixed compiler warnings with newer versions of GCC (Issue #5532, Issue #5533)
|
||||
- Fixed some PPD caching and IPP Everywhere PPD accounting/password bugs
|
||||
(Issue #5535)
|
||||
- Fixed `PreserveJobHistory` bug with time values (Issue #5538)
|
||||
- Media size matching now uses a tolerance of 0.5mm (rdar://33822024)
|
||||
- The lpadmin command would hang with a bad PPD file (rdar://41495016)
|
||||
- Fixed a potential crash bug in cups-driverd (rdar://46625579)
|
||||
- Fixed a performance regression with large PPDs (rdar://47040759)
|
||||
- The scheduler did not always idle exit as quickly as it could.
|
||||
|
||||
|
||||
Changes in CUPS v2.2.10
|
||||
-----------------------
|
||||
|
||||
- CVE-2018-4700: Linux session cookies used a predictable random number seed.
|
||||
- CVE-2018-4300: Linux session cookies used a predictable random number seed.
|
||||
- The `lpoptions` command now works with IPP Everywhere printers that have not
|
||||
yet been added as local queues (Issue #5045)
|
||||
- Added USB quirk rules (Issue #5395, Issue #5443)
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
INSTALL - CUPS v2.2.10 - 2018-12-07
|
||||
INSTALL - CUPS v2.2.13 - 2019-12-13
|
||||
===================================
|
||||
|
||||
This file describes how to compile and install CUPS from source code. For more
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# Common makefile definitions for CUPS.
|
||||
#
|
||||
# Copyright 2007-2018 by Apple Inc.
|
||||
# Copyright 2007-2019 by Apple Inc.
|
||||
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
@@ -29,7 +29,7 @@ CHMOD = @CHMOD@
|
||||
CXX = @LIBTOOL_CXX@ @CXX@
|
||||
DSO = @DSO@
|
||||
DSOXX = @DSOXX@
|
||||
GZIP = @GZIP@
|
||||
GZIPPROG = @GZIPPROG@
|
||||
INSTALL = @INSTALL@
|
||||
LD = @LD@
|
||||
LD_CC = @LD_CC@
|
||||
|
||||
+5
-4
@@ -1,4 +1,4 @@
|
||||
README - CUPS v2.2.10 - 2018-12-07
|
||||
README - CUPS v2.2.13 - 2019-12-13
|
||||
==================================
|
||||
|
||||
Looking for compile instructions? Read the file `INSTALL.md` instead...
|
||||
@@ -22,8 +22,9 @@ included with CUPS to support many Dymo, EPSON, HP, Intellitech, OKIDATA, and
|
||||
Zebra printers. Many more drivers are available online and (in some cases) on
|
||||
the driver CD-ROM that came with your printer.
|
||||
|
||||
CUPS is licensed under the GNU General Public License and GNU Library General
|
||||
Public License versions 2. See the file "LICENSE.txt" for more information.
|
||||
CUPS 2.2.x is licensed under the GNU General Public License and GNU Library
|
||||
General Public License versions 2. See the file "LICENSE.txt" for more
|
||||
information.
|
||||
|
||||
|
||||
READING THE DOCUMENTATION
|
||||
@@ -148,7 +149,7 @@ This will prevent the filters from misinterpreting your print file.
|
||||
LEGAL STUFF
|
||||
-----------
|
||||
|
||||
CUPS is copyright © 2007-2018 by Apple Inc. CUPS and the CUPS logo are
|
||||
CUPS is copyright © 2007-2019 by Apple Inc. CUPS and the CUPS logo are
|
||||
trademarks of Apple Inc.
|
||||
|
||||
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
|
||||
|
||||
+22
-11
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* IPP backend for CUPS.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -1459,6 +1459,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];
|
||||
@@ -1852,21 +1854,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)
|
||||
@@ -1883,7 +1893,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"))
|
||||
{
|
||||
@@ -2217,8 +2227,9 @@ main(int argc, /* I - Number of command-line args */
|
||||
else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED)
|
||||
fputs("JOBSTATE: account-authorization-failed\n", stderr);
|
||||
|
||||
if (ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_FORBIDDEN ||
|
||||
ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED)
|
||||
if (job_canceled)
|
||||
return (CUPS_BACKEND_OK);
|
||||
else if (ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_FORBIDDEN || ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED)
|
||||
return (CUPS_BACKEND_AUTH_REQUIRED);
|
||||
else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED ||
|
||||
ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED ||
|
||||
@@ -2561,7 +2572,7 @@ monitor_printer(
|
||||
}
|
||||
|
||||
fprintf(stderr, "DEBUG: (monitor) job-state = %s\n",
|
||||
ippEnumString("job-state", monitor->job_state));
|
||||
ippEnumString("job-state", (int)monitor->job_state));
|
||||
|
||||
if (!job_canceled &&
|
||||
(monitor->job_state == IPP_JSTATE_CANCELED ||
|
||||
@@ -2643,7 +2654,7 @@ monitor_printer(
|
||||
ippDelete(response);
|
||||
|
||||
fprintf(stderr, "DEBUG: (monitor) job-state = %s\n",
|
||||
ippEnumString("job-state", monitor->job_state));
|
||||
ippEnumString("job-state", (int)monitor->job_state));
|
||||
|
||||
if (!job_canceled &&
|
||||
(monitor->job_state == IPP_JSTATE_CANCELED ||
|
||||
|
||||
+8
-4
@@ -76,7 +76,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,
|
||||
@@ -1052,7 +1056,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);
|
||||
@@ -1102,7 +1106,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))
|
||||
{
|
||||
@@ -1185,7 +1189,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);
|
||||
|
||||
@@ -140,8 +140,8 @@
|
||||
# Samsung ML-2160 Series (https://bugzilla.redhat.com/show_bug.cgi?id=873123)
|
||||
0x04e8 0x330f unidir
|
||||
|
||||
# All Zebra devices (https://bugs.launchpad.net/bugs/1001028)
|
||||
0x0a5f unidir
|
||||
# All Zebra devices (https://bugs.launchpad.net/bugs/1001028) (Issue #5395)
|
||||
0x0a5f unidir no-reattach
|
||||
|
||||
# Canon CP-10
|
||||
0x04a9 0x304a blacklist
|
||||
@@ -242,6 +242,9 @@
|
||||
# All Intermec devices (Issue #4553)
|
||||
0x067e no-reattach
|
||||
|
||||
# HP LaserJet 1015 (Issue #5617)
|
||||
0x03f0 0x0e17 delay-close
|
||||
|
||||
# HP LaserJet 1150 (Issue #4549)
|
||||
0x03f0 0x0f17 delay-close
|
||||
|
||||
@@ -291,5 +294,11 @@
|
||||
# Star TSP743 (Issue #5443)
|
||||
0x0519 0x0001 delay-close
|
||||
|
||||
# Zebra ZD420 (Issue #5395)
|
||||
0x0a5f 0x0120 unidir no-reattach
|
||||
# Lexmark E120n (Issue #5478)
|
||||
0x043d 0x00cc no-reattach
|
||||
|
||||
# All Xerox printers (Issue #5523)
|
||||
0x0924 no-reattach
|
||||
|
||||
# Dymo 450 Turbo (Issue #5521)
|
||||
0x0922 0x0021 unidir
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* LIBUSB interface code for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -829,8 +829,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);
|
||||
}
|
||||
|
||||
@@ -882,7 +881,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
protocol = 0;
|
||||
|
||||
for (altset = 0, altptr = ifaceptr->altsetting;
|
||||
altset < ifaceptr->num_altsetting;
|
||||
altset < (uint8_t)ifaceptr->num_altsetting;
|
||||
altset ++, altptr ++)
|
||||
{
|
||||
/*
|
||||
@@ -1746,8 +1745,7 @@ static void *read_thread(void *reference)
|
||||
* Make sure this loop executes no more than once every 250 miliseconds...
|
||||
*/
|
||||
|
||||
if ((readstatus != LIBUSB_SUCCESS || rbytes == 0) &&
|
||||
(g.wait_eof || !g.read_thread_stop))
|
||||
if ((g.wait_eof || !g.read_thread_stop))
|
||||
{
|
||||
gettimeofday(&now, NULL);
|
||||
if (timercmp(&now, &end, <))
|
||||
|
||||
+23
-8
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Administration CGI for CUPS.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -767,7 +767,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
|
||||
attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris",
|
||||
num_printers, NULL, NULL);
|
||||
for (i = 0; i < num_printers; i ++)
|
||||
attr->values[i].string.text = _cupsStrAlloc(cgiGetArray("MEMBER_URIS", i));
|
||||
ippSetString(request, &attr, i, cgiGetArray("MEMBER_URIS", i));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2413,7 +2413,7 @@ do_list_printers(http_t *http) /* I - HTTP connection */
|
||||
attr;
|
||||
attr = ippFindNextAttribute(response, "device-uri", IPP_TAG_URI))
|
||||
{
|
||||
cupsArrayAdd(printer_devices, _cupsStrAlloc(attr->values[0].string.text));
|
||||
cupsArrayAdd(printer_devices, strdup(attr->values[0].string.text));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2551,7 +2551,7 @@ do_list_printers(http_t *http) /* I - HTTP connection */
|
||||
for (printer_device = (char *)cupsArrayFirst(printer_devices);
|
||||
printer_device;
|
||||
printer_device = (char *)cupsArrayNext(printer_devices))
|
||||
_cupsStrFree(printer_device);
|
||||
free(printer_device);
|
||||
|
||||
cupsArrayDelete(printer_devices);
|
||||
}
|
||||
@@ -2948,7 +2948,7 @@ do_set_allowed_users(http_t *http) /* I - HTTP connection */
|
||||
* Add the name...
|
||||
*/
|
||||
|
||||
attr->values[i].string.text = _cupsStrAlloc(ptr);
|
||||
ippSetString(request, &attr, i, ptr);
|
||||
|
||||
/*
|
||||
* Advance to the next name...
|
||||
@@ -3410,6 +3410,9 @@ do_set_options(http_t *http, /* I - HTTP connection */
|
||||
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_POINTS :
|
||||
if (!_cups_strncasecmp(option->defchoice, "Custom.", 7))
|
||||
{
|
||||
@@ -3757,8 +3760,8 @@ do_set_options(http_t *http, /* I - HTTP connection */
|
||||
|
||||
attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_NAME,
|
||||
"job-sheets-default", 2, NULL, NULL);
|
||||
attr->values[0].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_start"));
|
||||
attr->values[1].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_end"));
|
||||
ippSetString(request, &attr, 0, cgiGetVariable("job_sheets_start"));
|
||||
ippSetString(request, &attr, 1, cgiGetVariable("job_sheets_end"));
|
||||
|
||||
if ((var = cgiGetVariable("printer_error_policy")) != NULL)
|
||||
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME,
|
||||
@@ -4009,6 +4012,9 @@ get_option_value(
|
||||
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_REAL :
|
||||
@@ -4087,6 +4093,9 @@ get_option_value(
|
||||
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_REAL :
|
||||
@@ -4220,6 +4229,11 @@ get_printer_ppd(const char *uri, /* I - Printer URI */
|
||||
host[256], /* Hostname */
|
||||
resource[256]; /* Resource path */
|
||||
int port; /* Port number */
|
||||
static const char * const pattrs[] = /* Printer attributes we need */
|
||||
{
|
||||
"all",
|
||||
"media-col-database"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -4260,6 +4274,7 @@ get_printer_ppd(const char *uri, /* I - Printer URI */
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
|
||||
if (!_ppdCreateFromIPP(buffer, bufsize, response))
|
||||
|
||||
+21
-23
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* CGI form variable and array functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -33,10 +33,10 @@
|
||||
|
||||
typedef struct /**** Form variable structure ****/
|
||||
{
|
||||
const char *name; /* Name of variable */
|
||||
char *name; /* Name of variable */
|
||||
int nvalues, /* Number of values */
|
||||
avalues; /* Number of values allocated */
|
||||
const char **values; /* Value(s) of variable */
|
||||
char **values; /* Value(s) of variable */
|
||||
} _cgi_var_t;
|
||||
|
||||
|
||||
@@ -139,10 +139,10 @@ cgiClearVariables(void)
|
||||
|
||||
for (v = form_vars, i = form_count; i > 0; v ++, i --)
|
||||
{
|
||||
_cupsStrFree(v->name);
|
||||
free(v->name);
|
||||
for (j = 0; j < v->nvalues; j ++)
|
||||
if (v->values[j])
|
||||
_cupsStrFree(v->values[j]);
|
||||
free(v->values[j]);
|
||||
}
|
||||
|
||||
form_count = 0;
|
||||
@@ -168,7 +168,7 @@ cgiGetArray(const char *name, /* I - Name of array variable */
|
||||
if (element < 0 || element >= var->nvalues)
|
||||
return (NULL);
|
||||
|
||||
return (_cupsStrRetain(var->values[element]));
|
||||
return (strdup(var->values[element]));
|
||||
}
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@ cgiGetVariable(const char *name) /* I - Name of variable */
|
||||
var->values[var->nvalues - 1]));
|
||||
#endif /* DEBUG */
|
||||
|
||||
return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1]));
|
||||
return ((var == NULL) ? NULL : strdup(var->values[var->nvalues - 1]));
|
||||
}
|
||||
|
||||
|
||||
@@ -382,10 +382,9 @@ cgiSetArray(const char *name, /* I - Name of variable */
|
||||
{
|
||||
if (element >= var->avalues)
|
||||
{
|
||||
const char **temp; /* Temporary pointer */
|
||||
char **temp; /* Temporary pointer */
|
||||
|
||||
temp = (const char **)realloc((void *)(var->values),
|
||||
sizeof(char *) * (size_t)(element + 16));
|
||||
temp = (char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(element + 16));
|
||||
if (!temp)
|
||||
return;
|
||||
|
||||
@@ -401,9 +400,9 @@ cgiSetArray(const char *name, /* I - Name of variable */
|
||||
var->nvalues = element + 1;
|
||||
}
|
||||
else if (var->values[element])
|
||||
_cupsStrFree((char *)var->values[element]);
|
||||
free((char *)var->values[element]);
|
||||
|
||||
var->values[element] = _cupsStrAlloc(value);
|
||||
var->values[element] = strdup(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,10 +459,9 @@ cgiSetSize(const char *name, /* I - Name of variable */
|
||||
|
||||
if (size >= var->avalues)
|
||||
{
|
||||
const char **temp; /* Temporary pointer */
|
||||
char **temp; /* Temporary pointer */
|
||||
|
||||
temp = (const char **)realloc((void *)(var->values),
|
||||
sizeof(char *) * (size_t)(size + 16));
|
||||
temp = (char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(size + 16));
|
||||
if (!temp)
|
||||
return;
|
||||
|
||||
@@ -480,7 +478,7 @@ cgiSetSize(const char *name, /* I - Name of variable */
|
||||
{
|
||||
for (i = size; i < var->nvalues; i ++)
|
||||
if (var->values[i])
|
||||
_cupsStrFree((void *)(var->values[i]));
|
||||
free((void *)(var->values[i]));
|
||||
}
|
||||
|
||||
var->nvalues = size;
|
||||
@@ -515,9 +513,9 @@ cgiSetVariable(const char *name, /* I - Name of variable */
|
||||
{
|
||||
for (i = 0; i < var->nvalues; i ++)
|
||||
if (var->values[i])
|
||||
_cupsStrFree((char *)var->values[i]);
|
||||
free((char *)var->values[i]);
|
||||
|
||||
var->values[0] = _cupsStrAlloc(value);
|
||||
var->values[0] = strdup(value);
|
||||
var->nvalues = 1;
|
||||
}
|
||||
}
|
||||
@@ -563,10 +561,10 @@ cgi_add_variable(const char *name, /* I - Variable name */
|
||||
if ((var->values = calloc((size_t)element + 1, sizeof(char *))) == NULL)
|
||||
return;
|
||||
|
||||
var->name = _cupsStrAlloc(name);
|
||||
var->name = strdup(name);
|
||||
var->nvalues = element + 1;
|
||||
var->avalues = element + 1;
|
||||
var->values[element] = _cupsStrAlloc(value);
|
||||
var->values[element] = strdup(value);
|
||||
|
||||
form_count ++;
|
||||
}
|
||||
@@ -598,7 +596,7 @@ cgi_find_variable(const char *name) /* I - Name of variable */
|
||||
if (form_count < 1 || name == NULL)
|
||||
return (NULL);
|
||||
|
||||
key.name = name;
|
||||
key.name = (char *)name;
|
||||
|
||||
return ((_cgi_var_t *)bsearch(&key, form_vars, (size_t)form_count, sizeof(_cgi_var_t),
|
||||
(int (*)(const void *, const void *))cgi_compare_variables));
|
||||
@@ -989,7 +987,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);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
dnl
|
||||
dnl Common configuration stuff for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2017 by Apple Inc.
|
||||
dnl Copyright 2007-2019 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
@@ -42,7 +42,11 @@ AC_PROG_CXX(clang++ c++ g++)
|
||||
AC_PROG_RANLIB
|
||||
AC_PATH_PROG(AR,ar)
|
||||
AC_PATH_PROG(CHMOD,chmod)
|
||||
AC_PATH_PROG(GZIP,gzip)
|
||||
AC_PATH_PROG(GZIPPROG,gzip)
|
||||
AC_MSG_CHECKING(for install-sh script)
|
||||
INSTALL="`pwd`/install-sh"
|
||||
AC_SUBST(INSTALL)
|
||||
AC_MSG_RESULT(using $INSTALL)
|
||||
AC_PATH_PROG(LD,ld)
|
||||
AC_PATH_PROG(LN,ln)
|
||||
AC_PATH_PROG(MKDIR,mkdir)
|
||||
@@ -51,6 +55,7 @@ AC_PATH_PROG(RM,rm)
|
||||
AC_PATH_PROG(RMDIR,rmdir)
|
||||
AC_PATH_PROG(SED,sed)
|
||||
AC_PATH_PROG(XDGOPEN,xdg-open)
|
||||
|
||||
if test "x$XDGOPEN" = x; then
|
||||
CUPS_HTMLVIEW="htmlview"
|
||||
else
|
||||
@@ -58,11 +63,6 @@ else
|
||||
fi
|
||||
AC_SUBST(CUPS_HTMLVIEW)
|
||||
|
||||
AC_MSG_CHECKING(for install-sh script)
|
||||
INSTALL="`pwd`/install-sh"
|
||||
AC_SUBST(INSTALL)
|
||||
AC_MSG_RESULT(using $INSTALL)
|
||||
|
||||
if test "x$AR" = x; then
|
||||
AC_MSG_ERROR([Unable to find required library archive command.])
|
||||
fi
|
||||
@@ -266,14 +266,14 @@ dnl ZLIB
|
||||
INSTALL_GZIP=""
|
||||
LIBZ=""
|
||||
AC_CHECK_HEADER(zlib.h,
|
||||
AC_CHECK_LIB(z, gzgets,
|
||||
AC_CHECK_LIB(z, gzgets,[
|
||||
AC_DEFINE(HAVE_LIBZ)
|
||||
LIBZ="-lz"
|
||||
LIBS="$LIBS -lz"
|
||||
AC_CHECK_LIB(z, inflateCopy, AC_DEFINE(HAVE_INFLATECOPY))
|
||||
if test "x$GZIP" != z; then
|
||||
if test "x$GZIPPROG" != x; then
|
||||
INSTALL_GZIP="-z"
|
||||
fi))
|
||||
fi]))
|
||||
AC_SUBST(INSTALL_GZIP)
|
||||
AC_SUBST(LIBZ)
|
||||
|
||||
|
||||
@@ -80,6 +80,7 @@ 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"
|
||||
|
||||
@@ -303,6 +303,13 @@
|
||||
#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
+36
-29
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for CUPS 2.2.10.
|
||||
# Generated by GNU Autoconf 2.69 for CUPS 2.2.13.
|
||||
#
|
||||
# Report bugs to <https://github.com/apple/cups/issues>.
|
||||
#
|
||||
@@ -580,8 +580,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='CUPS'
|
||||
PACKAGE_TARNAME='cups'
|
||||
PACKAGE_VERSION='2.2.10'
|
||||
PACKAGE_STRING='CUPS 2.2.10'
|
||||
PACKAGE_VERSION='2.2.13'
|
||||
PACKAGE_STRING='CUPS 2.2.13'
|
||||
PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
|
||||
PACKAGE_URL='https://www.cups.org/'
|
||||
|
||||
@@ -762,7 +762,6 @@ LIBPAPER
|
||||
LIBMALLOC
|
||||
PKGCONFIG
|
||||
INSTALLSTATIC
|
||||
INSTALL
|
||||
CUPS_HTMLVIEW
|
||||
XDGOPEN
|
||||
SED
|
||||
@@ -772,7 +771,8 @@ MV
|
||||
MKDIR
|
||||
LN
|
||||
LD
|
||||
GZIP
|
||||
INSTALL
|
||||
GZIPPROG
|
||||
CHMOD
|
||||
AR
|
||||
RANLIB
|
||||
@@ -1480,7 +1480,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures CUPS 2.2.10 to adapt to many kinds of systems.
|
||||
\`configure' configures CUPS 2.2.13 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1545,7 +1545,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of CUPS 2.2.10:";;
|
||||
short | recursive ) echo "Configuration of CUPS 2.2.13:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1726,7 +1726,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
CUPS configure 2.2.10
|
||||
CUPS configure 2.2.13
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -2190,7 +2190,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by CUPS $as_me 2.2.10, which was
|
||||
It was created by CUPS $as_me 2.2.13, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -2711,7 +2711,7 @@ done
|
||||
ac_config_headers="$ac_config_headers config.h"
|
||||
|
||||
|
||||
CUPS_VERSION="2.2.10"
|
||||
CUPS_VERSION="2.2.13"
|
||||
CUPS_REVISION=""
|
||||
CUPS_BUILD="cups-$CUPS_VERSION"
|
||||
|
||||
@@ -3948,12 +3948,12 @@ fi
|
||||
set dummy gzip; ac_word=$2
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||
$as_echo_n "checking for $ac_word... " >&6; }
|
||||
if ${ac_cv_path_GZIP+:} false; then :
|
||||
if ${ac_cv_path_GZIPPROG+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
case $GZIP in
|
||||
case $GZIPPROG in
|
||||
[\\/]* | ?:[\\/]*)
|
||||
ac_cv_path_GZIP="$GZIP" # Let the user override the test with a path.
|
||||
ac_cv_path_GZIPPROG="$GZIPPROG" # Let the user override the test with a path.
|
||||
;;
|
||||
*)
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
@@ -3963,7 +3963,7 @@ do
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
||||
ac_cv_path_GZIP="$as_dir/$ac_word$ac_exec_ext"
|
||||
ac_cv_path_GZIPPROG="$as_dir/$ac_word$ac_exec_ext"
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
@@ -3974,16 +3974,22 @@ IFS=$as_save_IFS
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
GZIP=$ac_cv_path_GZIP
|
||||
if test -n "$GZIP"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIP" >&5
|
||||
$as_echo "$GZIP" >&6; }
|
||||
GZIPPROG=$ac_cv_path_GZIPPROG
|
||||
if test -n "$GZIPPROG"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIPPROG" >&5
|
||||
$as_echo "$GZIPPROG" >&6; }
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for install-sh script" >&5
|
||||
$as_echo_n "checking for install-sh script... " >&6; }
|
||||
INSTALL="`pwd`/install-sh"
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $INSTALL" >&5
|
||||
$as_echo "using $INSTALL" >&6; }
|
||||
# Extract the first word of "ld", so it can be a program name with args.
|
||||
set dummy ld; ac_word=$2
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||
@@ -4304,6 +4310,7 @@ $as_echo "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if test "x$XDGOPEN" = x; then
|
||||
CUPS_HTMLVIEW="htmlview"
|
||||
else
|
||||
@@ -4311,13 +4318,6 @@ else
|
||||
fi
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for install-sh script" >&5
|
||||
$as_echo_n "checking for install-sh script... " >&6; }
|
||||
INSTALL="`pwd`/install-sh"
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $INSTALL" >&5
|
||||
$as_echo "using $INSTALL" >&6; }
|
||||
|
||||
if test "x$AR" = x; then
|
||||
as_fn_error $? "Unable to find required library archive command." "$LINENO" 5
|
||||
fi
|
||||
@@ -5718,7 +5718,8 @@ fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzgets" >&5
|
||||
$as_echo "$ac_cv_lib_z_gzgets" >&6; }
|
||||
if test "x$ac_cv_lib_z_gzgets" = xyes; then :
|
||||
$as_echo "#define HAVE_LIBZ 1" >>confdefs.h
|
||||
|
||||
$as_echo "#define HAVE_LIBZ 1" >>confdefs.h
|
||||
|
||||
LIBZ="-lz"
|
||||
LIBS="$LIBS -lz"
|
||||
@@ -5763,7 +5764,7 @@ if test "x$ac_cv_lib_z_inflateCopy" = xyes; then :
|
||||
|
||||
fi
|
||||
|
||||
if test "x$GZIP" != z; then
|
||||
if test "x$GZIPPROG" != x; then
|
||||
INSTALL_GZIP="-z"
|
||||
fi
|
||||
fi
|
||||
@@ -8479,6 +8480,12 @@ 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
|
||||
@@ -10832,7 +10839,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by CUPS $as_me 2.2.10, which was
|
||||
This file was extended by CUPS $as_me 2.2.13, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -10895,7 +10902,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
CUPS config.status 2.2.10
|
||||
CUPS config.status 2.2.13
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
dnl
|
||||
dnl Configuration script for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2018 by Apple Inc.
|
||||
dnl Copyright 2007-2019 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
@@ -15,7 +15,7 @@ dnl We need at least autoconf 2.60...
|
||||
AC_PREREQ(2.60)
|
||||
|
||||
dnl Package name and version...
|
||||
AC_INIT([CUPS], [2.2.10], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
|
||||
AC_INIT([CUPS], [2.2.13], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
|
||||
|
||||
sinclude(config-scripts/cups-opsys.m4)
|
||||
sinclude(config-scripts/cups-common.m4)
|
||||
|
||||
+54
-18
@@ -52,6 +52,9 @@ static const char *cups_auth_param(const char *scheme, const char *name, char *v
|
||||
static const char *cups_auth_scheme(const char *www_authenticate, char *scheme, size_t schemesize);
|
||||
|
||||
#ifdef HAVE_GSSAPI
|
||||
# define CUPS_GSS_OK 0 /* Successfully set credentials */
|
||||
# define CUPS_GSS_NONE -1 /* No credentials */
|
||||
# define CUPS_GSS_FAIL -2 /* Failed credentials/authentication */
|
||||
# ifdef HAVE_GSS_ACQUIRE_CRED_EX_F
|
||||
# ifdef HAVE_GSS_GSSAPI_SPI_H
|
||||
# include <GSS/gssapi_spi.h>
|
||||
@@ -178,6 +181,8 @@ cupsDoAuthentication(
|
||||
* Check the scheme name...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("2cupsDoAuthentication: Trying scheme \"%s\"...", scheme));
|
||||
|
||||
#ifdef HAVE_GSSAPI
|
||||
if (!_cups_strcasecmp(scheme, "Negotiate"))
|
||||
{
|
||||
@@ -185,18 +190,36 @@ cupsDoAuthentication(
|
||||
* Kerberos authentication...
|
||||
*/
|
||||
|
||||
if (_cupsSetNegotiateAuthString(http, method, resource))
|
||||
int gss_status; /* Auth status */
|
||||
|
||||
if ((gss_status = _cupsSetNegotiateAuthString(http, method, resource)) == CUPS_GSS_FAIL)
|
||||
{
|
||||
DEBUG_puts("1cupsDoAuthentication: Negotiate failed.");
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
break;
|
||||
else if (gss_status == CUPS_GSS_NONE)
|
||||
{
|
||||
DEBUG_puts("2cupsDoAuthentication: No credentials for Negotiate.");
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_puts("2cupsDoAuthentication: Using Negotiate.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_GSSAPI */
|
||||
if (_cups_strcasecmp(scheme, "Basic") && _cups_strcasecmp(scheme, "Digest"))
|
||||
continue; /* Not supported (yet) */
|
||||
{
|
||||
/*
|
||||
* Other schemes not yet supported...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("2cupsDoAuthentication: Scheme \"%s\" not yet supported.", scheme));
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* See if we should retry the current username:password...
|
||||
@@ -226,6 +249,7 @@ cupsDoAuthentication(
|
||||
|
||||
if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
|
||||
{
|
||||
DEBUG_puts("1cupsDoAuthentication: User canceled password request.");
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
@@ -255,6 +279,7 @@ cupsDoAuthentication(
|
||||
|
||||
char encode[256]; /* Base64 buffer */
|
||||
|
||||
DEBUG_puts("2cupsDoAuthentication: Using Basic.");
|
||||
httpEncode64_2(encode, sizeof(encode), http->userpass, (int)strlen(http->userpass));
|
||||
httpSetAuthString(http, "Basic", encode);
|
||||
break;
|
||||
@@ -273,19 +298,22 @@ cupsDoAuthentication(
|
||||
cups_auth_param(schemedata, "realm", http->realm, sizeof(http->realm));
|
||||
|
||||
if (_httpSetDigestAuthString(http, nonce, method, resource))
|
||||
{
|
||||
DEBUG_puts("2cupsDoAuthentication: Using Basic.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (http->authstring)
|
||||
{
|
||||
DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\"", http->authstring));
|
||||
DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\".", http->authstring));
|
||||
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_printf(("1cupsDoAuthentication: Unknown auth type: \"%s\"", www_auth));
|
||||
DEBUG_puts("1cupsDoAuthentication: No supported schemes.");
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
|
||||
return (-1);
|
||||
@@ -298,7 +326,7 @@ cupsDoAuthentication(
|
||||
* '_cupsSetNegotiateAuthString()' - Set the Kerberos authentication string.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on error */
|
||||
int /* O - 0 on success, negative on error */
|
||||
_cupsSetNegotiateAuthString(
|
||||
http_t *http, /* I - Connection to server */
|
||||
const char *method, /* I - Request method ("GET", "POST", "PUT") */
|
||||
@@ -323,10 +351,16 @@ _cupsSetNegotiateAuthString(
|
||||
{
|
||||
DEBUG_puts("1_cupsSetNegotiateAuthString: Weak-linked GSSAPI/Kerberos "
|
||||
"framework is not present");
|
||||
return (-1);
|
||||
return (CUPS_GSS_NONE);
|
||||
}
|
||||
# endif /* __APPLE__ */
|
||||
|
||||
if (!strcmp(http->hostname, "localhost") || http->hostname[0] == '/' || isdigit(http->hostname[0] & 255) || !strchr(http->hostname, '.'))
|
||||
{
|
||||
DEBUG_printf(("1_cupsSetNegotiateAuthString: Kerberos not available for host \"%s\".", http->hostname));
|
||||
return (CUPS_GSS_NONE);
|
||||
}
|
||||
|
||||
if (http->gssname == GSS_C_NO_NAME)
|
||||
{
|
||||
http->gssname = cups_gss_getname(http, _cupsGSSServiceName());
|
||||
@@ -371,7 +405,7 @@ _cupsSetNegotiateAuthString(
|
||||
cupsUser(), http->gsshost);
|
||||
|
||||
if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
|
||||
return (-1);
|
||||
return (CUPS_GSS_FAIL);
|
||||
|
||||
/*
|
||||
* Try to acquire credentials...
|
||||
@@ -425,18 +459,20 @@ _cupsSetNegotiateAuthString(
|
||||
}
|
||||
# endif /* HAVE_GSS_ACQUIRED_CRED_EX_F */
|
||||
|
||||
if (GSS_ERROR(major_status))
|
||||
if (major_status == GSS_S_NO_CRED)
|
||||
{
|
||||
cups_gss_printf(major_status, minor_status,
|
||||
"_cupsSetNegotiateAuthString: Unable to initialize "
|
||||
"security context");
|
||||
return (-1);
|
||||
cups_gss_printf(major_status, minor_status, "_cupsSetNegotiateAuthString: No credentials");
|
||||
return (CUPS_GSS_NONE);
|
||||
}
|
||||
else if (GSS_ERROR(major_status))
|
||||
{
|
||||
cups_gss_printf(major_status, minor_status, "_cupsSetNegotiateAuthString: Unable to initialize security context");
|
||||
return (CUPS_GSS_FAIL);
|
||||
}
|
||||
|
||||
# ifdef DEBUG
|
||||
else if (major_status == GSS_S_CONTINUE_NEEDED)
|
||||
cups_gss_printf(major_status, minor_status,
|
||||
"_cupsSetNegotiateAuthString: Continuation needed!");
|
||||
cups_gss_printf(major_status, minor_status, "_cupsSetNegotiateAuthString: Continuation needed");
|
||||
# endif /* DEBUG */
|
||||
|
||||
if (output_token.length > 0 && output_token.length <= 65536)
|
||||
@@ -470,10 +506,10 @@ _cupsSetNegotiateAuthString(
|
||||
"large - %d bytes!", (int)output_token.length));
|
||||
gss_release_buffer(&minor_status, &output_token);
|
||||
|
||||
return (-1);
|
||||
return (CUPS_GSS_FAIL);
|
||||
}
|
||||
|
||||
return (0);
|
||||
return (CUPS_GSS_OK);
|
||||
}
|
||||
#endif /* HAVE_GSSAPI */
|
||||
|
||||
|
||||
@@ -239,8 +239,7 @@ extern http_t *_cupsConnect(void);
|
||||
extern char *_cupsCreateDest(const char *name, const char *info, const char *device_id, const char *device_uri, char *uri, size_t urisize);
|
||||
extern int _cupsGet1284Values(const char *device_id,
|
||||
cups_option_t **values);
|
||||
extern const char *_cupsGetDestResource(cups_dest_t *dest, char *resource,
|
||||
size_t resourcesize);
|
||||
extern const char *_cupsGetDestResource(cups_dest_t *dest, unsigned flags, char *resource, size_t resourcesize);
|
||||
extern int _cupsGetDests(http_t *http, ipp_op_t op,
|
||||
const char *name, cups_dest_t **dests,
|
||||
cups_ptype_t type, cups_ptype_t mask);
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* API definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -47,10 +47,10 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 2.0210
|
||||
# define CUPS_VERSION 2.0213
|
||||
# define CUPS_VERSION_MAJOR 2
|
||||
# define CUPS_VERSION_MINOR 2
|
||||
# define CUPS_VERSION_PATCH 10
|
||||
# define CUPS_VERSION_PATCH 13
|
||||
|
||||
# define CUPS_BC_FD 3
|
||||
/* Back-channel file descriptor for
|
||||
|
||||
+138
-73
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Destination option/media support for CUPS.
|
||||
*
|
||||
* Copyright 2012-2017 by Apple Inc.
|
||||
* Copyright 2012-2019 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -83,6 +83,7 @@ cupsCheckDestSupported(
|
||||
ipp_res_t units_value; /* Resolution units */
|
||||
ipp_attribute_t *attr; /* Attribute */
|
||||
_ipp_value_t *attrval; /* Current attribute value */
|
||||
_ipp_option_t *map; /* Option mapping information */
|
||||
|
||||
|
||||
/*
|
||||
@@ -128,10 +129,10 @@ cupsCheckDestSupported(
|
||||
*/
|
||||
|
||||
pwg_media_t *pwg; /* Current PWG media size info */
|
||||
int min_width, /* Minimum width */
|
||||
min_length, /* Minimum length */
|
||||
max_width, /* Maximum width */
|
||||
max_length; /* Maximum length */
|
||||
int min_width, /* Minimum width */
|
||||
min_length, /* Minimum length */
|
||||
max_width, /* Maximum width */
|
||||
max_length; /* Maximum length */
|
||||
|
||||
/*
|
||||
* Get the minimum and maximum size...
|
||||
@@ -174,9 +175,14 @@ cupsCheckDestSupported(
|
||||
* Check literal values...
|
||||
*/
|
||||
|
||||
map = _ippFindOption(option);
|
||||
|
||||
switch (attr->value_tag)
|
||||
{
|
||||
case IPP_TAG_INTEGER :
|
||||
if (map && map->value_tag == IPP_TAG_STRING)
|
||||
return (strlen(value) <= (size_t)attr->values[0].integer);
|
||||
|
||||
case IPP_TAG_ENUM :
|
||||
int_value = atoi(value);
|
||||
|
||||
@@ -189,7 +195,10 @@ cupsCheckDestSupported(
|
||||
return (attr->values[0].boolean);
|
||||
|
||||
case IPP_TAG_RANGE :
|
||||
int_value = atoi(value);
|
||||
if (map && map->value_tag == IPP_TAG_STRING)
|
||||
int_value = (int)strlen(value);
|
||||
else
|
||||
int_value = atoi(value);
|
||||
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
if (int_value >= attr->values[i].range.lower &&
|
||||
@@ -572,6 +581,7 @@ cupsCopyDestInfo(
|
||||
cups_dest_t *dest) /* I - Destination */
|
||||
{
|
||||
cups_dinfo_t *dinfo; /* Destination information */
|
||||
unsigned dflags; /* Destination flags */
|
||||
ipp_t *request, /* Get-Printer-Attributes request */
|
||||
*response; /* Supported attributes */
|
||||
int tries, /* Number of tries so far */
|
||||
@@ -581,6 +591,7 @@ cupsCopyDestInfo(
|
||||
char resource[1024]; /* Resource path */
|
||||
int version; /* IPP version */
|
||||
ipp_status_t status; /* Status of request */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
|
||||
static const char * const requested_attrs[] =
|
||||
{ /* Requested attributes */
|
||||
"job-template",
|
||||
@@ -589,14 +600,35 @@ cupsCopyDestInfo(
|
||||
};
|
||||
|
||||
|
||||
DEBUG_printf(("cupsCopyDestSupported(http=%p, dest=%p(%s))", (void *)http, (void *)dest, dest ? dest->name : ""));
|
||||
DEBUG_printf(("cupsCopyDestInfo(http=%p, dest=%p(%s))", (void *)http, (void *)dest, dest ? dest->name : ""));
|
||||
|
||||
/*
|
||||
* Get the default connection as needed...
|
||||
*/
|
||||
|
||||
if (!http)
|
||||
http = _cupsConnect();
|
||||
{
|
||||
DEBUG_puts("1cupsCopyDestInfo: Default server connection.");
|
||||
http = _cupsConnect();
|
||||
dflags = CUPS_DEST_FLAGS_NONE;
|
||||
}
|
||||
#ifdef AF_LOCAL
|
||||
else if (httpAddrFamily(http->hostaddr) == AF_LOCAL)
|
||||
{
|
||||
DEBUG_puts("1cupsCopyDestInfo: Connection to server (domain socket).");
|
||||
dflags = CUPS_DEST_FLAGS_NONE;
|
||||
}
|
||||
#endif /* AF_LOCAL */
|
||||
else if ((strcmp(http->hostname, cg->server) && cg->server[0] != '/') || cg->ipp_port != httpAddrPort(http->hostaddr))
|
||||
{
|
||||
DEBUG_printf(("1cupsCopyDestInfo: Connection to device (%s).", http->hostname));
|
||||
dflags = CUPS_DEST_FLAGS_DEVICE;
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_printf(("1cupsCopyDestInfo: Connection to server (%s).", http->hostname));
|
||||
dflags = CUPS_DEST_FLAGS_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
@@ -609,8 +641,11 @@ cupsCopyDestInfo(
|
||||
* Get the printer URI and resource path...
|
||||
*/
|
||||
|
||||
if ((uri = _cupsGetDestResource(dest, resource, sizeof(resource))) == NULL)
|
||||
if ((uri = _cupsGetDestResource(dest, dflags, resource, sizeof(resource))) == NULL)
|
||||
{
|
||||
DEBUG_puts("1cupsCopyDestInfo: Unable to get resource.");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the supported attributes...
|
||||
@@ -628,28 +663,25 @@ cupsCopyDestInfo(
|
||||
*/
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
|
||||
uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
|
||||
"requesting-user-name", NULL, cupsUser());
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes",
|
||||
(int)(sizeof(requested_attrs) / sizeof(requested_attrs[0])),
|
||||
NULL, requested_attrs);
|
||||
|
||||
ippSetVersion(request, version / 10, version % 10);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(requested_attrs) / sizeof(requested_attrs[0])), NULL, requested_attrs);
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
|
||||
{
|
||||
DEBUG_printf(("cupsCopyDestSupported: Get-Printer-Attributes for '%s' "
|
||||
"returned %s (%s)", dest->name, ippErrorString(status),
|
||||
cupsLastErrorString()));
|
||||
DEBUG_printf(("1cupsCopyDestInfo: Get-Printer-Attributes for '%s' returned %s (%s)", dest->name, ippErrorString(status), cupsLastErrorString()));
|
||||
|
||||
ippDelete(response);
|
||||
response = NULL;
|
||||
|
||||
if (status == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED && version > 11)
|
||||
if ((status == IPP_STATUS_ERROR_BAD_REQUEST || status == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) && version > 11)
|
||||
{
|
||||
version = 11;
|
||||
}
|
||||
else if (status == IPP_STATUS_ERROR_BUSY)
|
||||
{
|
||||
sleep((unsigned)delay);
|
||||
@@ -665,7 +697,10 @@ cupsCopyDestInfo(
|
||||
while (!response && tries < 10);
|
||||
|
||||
if (!response)
|
||||
{
|
||||
DEBUG_puts("1cupsCopyDestInfo: Unable to get printer attributes.");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate a cups_dinfo_t structure and return it...
|
||||
@@ -678,6 +713,8 @@ cupsCopyDestInfo(
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cupsCopyDestInfo: version=%d, uri=\"%s\", resource=\"%s\".", version, uri, resource));
|
||||
|
||||
dinfo->version = version;
|
||||
dinfo->uri = uri;
|
||||
dinfo->resource = _cupsStrAlloc(resource);
|
||||
@@ -938,10 +975,10 @@ cupsGetDestMediaByIndex(
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (nsize->size_name)
|
||||
strlcpy(size->media, nsize->size_name, sizeof(size->media));
|
||||
else if (nsize->key)
|
||||
if (nsize->key)
|
||||
strlcpy(size->media, nsize->key, sizeof(size->media));
|
||||
else if (nsize->size_name)
|
||||
strlcpy(size->media, nsize->size_name, sizeof(size->media));
|
||||
else if ((pwg = pwgMediaForSize(nsize->width, nsize->length)) != NULL)
|
||||
strlcpy(size->media, pwg->pwg, sizeof(size->media));
|
||||
else
|
||||
@@ -1202,25 +1239,19 @@ cupsGetDestMediaDefault(
|
||||
* Get the default media size, if any...
|
||||
*/
|
||||
|
||||
if ((media = cupsGetOption("media", dest->num_options,
|
||||
dest->options)) == NULL)
|
||||
if ((media = cupsGetOption("media", dest->num_options, dest->options)) == NULL)
|
||||
media = "na_letter_8.5x11in";
|
||||
|
||||
if (cupsGetDestMediaByName(http, dest, dinfo, media, flags, size))
|
||||
return (1);
|
||||
|
||||
if (strcmp(media, "na_letter_8.5x11in") &&
|
||||
cupsGetDestMediaByName(http, dest, dinfo, "iso_a4_210x297mm", flags,
|
||||
size))
|
||||
if (strcmp(media, "na_letter_8.5x11in") && cupsGetDestMediaByName(http, dest, dinfo, "iso_a4_210x297mm", flags, size))
|
||||
return (1);
|
||||
|
||||
if (strcmp(media, "iso_a4_210x297mm") &&
|
||||
cupsGetDestMediaByName(http, dest, dinfo, "na_letter_8.5x11in", flags,
|
||||
size))
|
||||
if (strcmp(media, "iso_a4_210x297mm") && cupsGetDestMediaByName(http, dest, dinfo, "na_letter_8.5x11in", flags, size))
|
||||
return (1);
|
||||
|
||||
if ((flags & CUPS_MEDIA_FLAGS_BORDERLESS) &&
|
||||
cupsGetDestMediaByName(http, dest, dinfo, "na_index_4x6in", flags, size))
|
||||
if ((flags & CUPS_MEDIA_FLAGS_BORDERLESS) && cupsGetDestMediaByName(http, dest, dinfo, "na_index_4x6in", flags, size))
|
||||
return (1);
|
||||
|
||||
/*
|
||||
@@ -1513,6 +1544,7 @@ cups_create_media_db(
|
||||
pwg_media_t *pwg; /* PWG media info */
|
||||
cups_array_t *db; /* New media database array */
|
||||
_cups_media_db_t mdb; /* Media entry */
|
||||
char media_key[256]; /* Synthesized media-key value */
|
||||
|
||||
|
||||
db = cupsArrayNew3((cups_array_func_t)cups_compare_media_db,
|
||||
@@ -1613,61 +1645,92 @@ cups_create_media_db(
|
||||
}
|
||||
}
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-color",
|
||||
IPP_TAG_ZERO)) != NULL &&
|
||||
(media_attr->value_tag == IPP_TAG_NAME ||
|
||||
media_attr->value_tag == IPP_TAG_NAMELANG ||
|
||||
media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-color", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
mdb.color = media_attr->values[0].string.text;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-info",
|
||||
IPP_TAG_TEXT)) != NULL)
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-info", IPP_TAG_TEXT)) != NULL)
|
||||
mdb.info = media_attr->values[0].string.text;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-key",
|
||||
IPP_TAG_ZERO)) != NULL &&
|
||||
(media_attr->value_tag == IPP_TAG_NAME ||
|
||||
media_attr->value_tag == IPP_TAG_NAMELANG ||
|
||||
media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-key", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
mdb.key = media_attr->values[0].string.text;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-size-name",
|
||||
IPP_TAG_ZERO)) != NULL &&
|
||||
(media_attr->value_tag == IPP_TAG_NAME ||
|
||||
media_attr->value_tag == IPP_TAG_NAMELANG ||
|
||||
media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-size-name", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
mdb.size_name = media_attr->values[0].string.text;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-source",
|
||||
IPP_TAG_ZERO)) != NULL &&
|
||||
(media_attr->value_tag == IPP_TAG_NAME ||
|
||||
media_attr->value_tag == IPP_TAG_NAMELANG ||
|
||||
media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-source", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
mdb.source = media_attr->values[0].string.text;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-type",
|
||||
IPP_TAG_ZERO)) != NULL &&
|
||||
(media_attr->value_tag == IPP_TAG_NAME ||
|
||||
media_attr->value_tag == IPP_TAG_NAMELANG ||
|
||||
media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-type", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
mdb.type = media_attr->values[0].string.text;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-bottom-margin",
|
||||
IPP_TAG_INTEGER)) != NULL)
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-bottom-margin", IPP_TAG_INTEGER)) != NULL)
|
||||
mdb.bottom = media_attr->values[0].integer;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-left-margin",
|
||||
IPP_TAG_INTEGER)) != NULL)
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-left-margin", IPP_TAG_INTEGER)) != NULL)
|
||||
mdb.left = media_attr->values[0].integer;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-right-margin",
|
||||
IPP_TAG_INTEGER)) != NULL)
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-right-margin", IPP_TAG_INTEGER)) != NULL)
|
||||
mdb.right = media_attr->values[0].integer;
|
||||
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-top-margin",
|
||||
IPP_TAG_INTEGER)) != NULL)
|
||||
if ((media_attr = ippFindAttribute(val->collection, "media-top-margin", IPP_TAG_INTEGER)) != NULL)
|
||||
mdb.top = media_attr->values[0].integer;
|
||||
|
||||
if (!mdb.key)
|
||||
{
|
||||
if (!mdb.size_name && (pwg = pwgMediaForSize(mdb.width, mdb.length)) != NULL)
|
||||
mdb.size_name = (char *)pwg->pwg;
|
||||
|
||||
if (!mdb.size_name)
|
||||
{
|
||||
/*
|
||||
* Use a CUPS-specific identifier if we don't have a size name...
|
||||
*/
|
||||
|
||||
if (flags & CUPS_MEDIA_FLAGS_READY)
|
||||
snprintf(media_key, sizeof(media_key), "cups-media-ready-%d", i + 1);
|
||||
else
|
||||
snprintf(media_key, sizeof(media_key), "cups-media-%d", i + 1);
|
||||
}
|
||||
else if (mdb.source)
|
||||
{
|
||||
/*
|
||||
* Generate key using size name, source, and type (if set)...
|
||||
*/
|
||||
|
||||
if (mdb.type)
|
||||
snprintf(media_key, sizeof(media_key), "%s_%s_%s", mdb.size_name, mdb.source, mdb.type);
|
||||
else
|
||||
snprintf(media_key, sizeof(media_key), "%s_%s", mdb.size_name, mdb.source);
|
||||
}
|
||||
else if (mdb.type)
|
||||
{
|
||||
/*
|
||||
* Generate key using size name and type...
|
||||
*/
|
||||
|
||||
snprintf(media_key, sizeof(media_key), "%s_%s", mdb.size_name, mdb.type);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Key is just the size name...
|
||||
*/
|
||||
|
||||
strlcpy(media_key, mdb.size_name, sizeof(media_key));
|
||||
}
|
||||
|
||||
/*
|
||||
* Append "_borderless" for borderless media...
|
||||
*/
|
||||
|
||||
if (!mdb.bottom && !mdb.left && !mdb.right && !mdb.top)
|
||||
strlcat(media_key, "_borderless", sizeof(media_key));
|
||||
|
||||
mdb.key = media_key;
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cups_create_media_db: Adding media: key=\"%s\", width=%d, length=%d, source=\"%s\", type=\"%s\".", mdb.key, mdb.width, mdb.length, mdb.source, mdb.type));
|
||||
|
||||
cupsArrayAdd(db, &mdb);
|
||||
}
|
||||
|
||||
@@ -2027,12 +2090,14 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
* Return the matching size...
|
||||
*/
|
||||
|
||||
if (best->size_name)
|
||||
strlcpy(size->media, best->size_name, sizeof(size->media));
|
||||
else if (best->key)
|
||||
if (best->key)
|
||||
strlcpy(size->media, best->key, sizeof(size->media));
|
||||
else
|
||||
else if (best->size_name)
|
||||
strlcpy(size->media, best->size_name, sizeof(size->media));
|
||||
else if (pwg && pwg->pwg)
|
||||
strlcpy(size->media, pwg->pwg, sizeof(size->media));
|
||||
else
|
||||
strlcpy(size->media, "unknown", sizeof(size->media));
|
||||
|
||||
size->width = best->width;
|
||||
size->length = best->length;
|
||||
|
||||
+252
-333
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* User-defined destination (and option) support for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -79,7 +79,6 @@ typedef enum _cups_dnssd_state_e /* Enumerated device state */
|
||||
_CUPS_DNSSD_QUERY,
|
||||
_CUPS_DNSSD_PENDING,
|
||||
_CUPS_DNSSD_ACTIVE,
|
||||
_CUPS_DNSSD_LOCAL,
|
||||
_CUPS_DNSSD_INCOMPATIBLE,
|
||||
_CUPS_DNSSD_ERROR
|
||||
} _cups_dnssd_state_t;
|
||||
@@ -99,6 +98,10 @@ typedef struct _cups_dnssd_data_s /* Enumeration data */
|
||||
cups_ptype_t type, /* Printer type filter */
|
||||
mask; /* Printer type mask */
|
||||
cups_array_t *devices; /* Devices found so far */
|
||||
int num_dests; /* Number of lpoptions destinations */
|
||||
cups_dest_t *dests; /* lpoptions destinations */
|
||||
char def_name[1024], /* Default printer name, if any */
|
||||
*def_instance; /* Default printer instance, if any */
|
||||
} _cups_dnssd_data_t;
|
||||
|
||||
typedef struct _cups_dnssd_device_s /* Enumerated device */
|
||||
@@ -125,8 +128,10 @@ typedef struct _cups_dnssd_resolve_s /* Data for resolving URI */
|
||||
|
||||
typedef struct _cups_getdata_s
|
||||
{
|
||||
int num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests; /* Destinations */
|
||||
int num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests; /* Destinations */
|
||||
char def_name[1024], /* Default printer name, if any */
|
||||
*def_instance; /* Default printer instance, if any */
|
||||
} _cups_getdata_t;
|
||||
|
||||
typedef struct _cups_namedata_s
|
||||
@@ -192,14 +197,6 @@ static _cups_dnssd_device_t *
|
||||
const char *regtype,
|
||||
const char *replyDomain);
|
||||
# ifdef HAVE_DNSSD
|
||||
static void cups_dnssd_local_cb(DNSServiceRef sdRef,
|
||||
DNSServiceFlags flags,
|
||||
uint32_t interfaceIndex,
|
||||
DNSServiceErrorType errorCode,
|
||||
const char *serviceName,
|
||||
const char *regtype,
|
||||
const char *replyDomain,
|
||||
void *context);
|
||||
static void cups_dnssd_query_cb(DNSServiceRef sdRef,
|
||||
DNSServiceFlags flags,
|
||||
uint32_t interfaceIndex,
|
||||
@@ -237,9 +234,7 @@ static int cups_find_dest(const char *name, const char *instance,
|
||||
static int cups_get_cb(_cups_getdata_t *data, unsigned flags, cups_dest_t *dest);
|
||||
static char *cups_get_default(const char *filename, char *namebuf,
|
||||
size_t namesize, const char **instance);
|
||||
static int cups_get_dests(const char *filename, const char *match_name,
|
||||
const char *match_inst, int user_default_set,
|
||||
int num_dests, cups_dest_t **dests);
|
||||
static int cups_get_dests(const char *filename, const char *match_name, const char *match_inst, int load_all, int user_default_set, int num_dests, cups_dest_t **dests);
|
||||
static char *cups_make_string(ipp_attribute_t *attr, char *buffer,
|
||||
size_t bufsize);
|
||||
static int cups_name_cb(_cups_namedata_t *data, unsigned flags, cups_dest_t *dest);
|
||||
@@ -574,7 +569,7 @@ _cupsAppleSetUseLastPrinter(
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsConnectDest()' - Open a conection to the destination.
|
||||
* 'cupsConnectDest()' - Open a connection to the destination.
|
||||
*
|
||||
* Connect to the destination, returning a new @code http_t@ connection object
|
||||
* and optionally the resource path to use for the destination. These calls
|
||||
@@ -583,7 +578,7 @@ _cupsAppleSetUseLastPrinter(
|
||||
* returns 0. The caller is responsible for calling @link httpClose@ on the
|
||||
* returned connection.
|
||||
*
|
||||
* Starting with CUPS 2.2.4, the caller can pass @code CUPS_DEST_FLAGS_DEVICE@
|
||||
* Starting with CUPS 2.2.4, the caller can pass @code CUPS_DEST_FLAGS_DEVICE@
|
||||
* for the "flags" argument to connect directly to the device associated with
|
||||
* the destination. Otherwise, the connection is made to the CUPS scheduler
|
||||
* associated with the destination.
|
||||
@@ -851,6 +846,8 @@ cupsCopyDest(cups_dest_t *dest, /* I - Destination to copy */
|
||||
|
||||
if (new_dest)
|
||||
{
|
||||
new_dest->is_default = dest->is_default;
|
||||
|
||||
if ((new_dest->options = calloc(sizeof(cups_option_t), (size_t)dest->num_options)) == NULL)
|
||||
return (cupsRemoveDest(dest->name, dest->instance, num_dests, dests));
|
||||
|
||||
@@ -1103,20 +1100,23 @@ cupsGetDest(const char *name, /* I - Destination name or @code NULL@ for the d
|
||||
* '_cupsGetDestResource()' - Get the resource path and URI for a destination.
|
||||
*/
|
||||
|
||||
const char * /* O - Printer URI */
|
||||
const char * /* O - URI */
|
||||
_cupsGetDestResource(
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
unsigned flags, /* I - Destination flags */
|
||||
char *resource, /* I - Resource buffer */
|
||||
size_t resourcesize) /* I - Size of resource buffer */
|
||||
{
|
||||
const char *uri; /* Printer URI */
|
||||
const char *uri, /* URI */
|
||||
*device_uri, /* Device URI */
|
||||
*printer_uri; /* Printer URI */
|
||||
char scheme[32], /* URI scheme */
|
||||
userpass[256], /* Username and password (unused) */
|
||||
hostname[256]; /* Hostname */
|
||||
int port; /* Port number */
|
||||
|
||||
|
||||
DEBUG_printf(("_cupsGetDestResource(dest=%p(%s), resource=%p, resourcesize=%d)", (void *)dest, dest->name, (void *)resource, (int)resourcesize));
|
||||
DEBUG_printf(("_cupsGetDestResource(dest=%p(%s), flags=%u, resource=%p, resourcesize=%d)", (void *)dest, dest->name, flags, (void *)resource, (int)resourcesize));
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
@@ -1132,25 +1132,46 @@ _cupsGetDestResource(
|
||||
}
|
||||
|
||||
/*
|
||||
* Grab the printer URI...
|
||||
* Grab the printer and device URIs...
|
||||
*/
|
||||
|
||||
if ((uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options)) == NULL)
|
||||
{
|
||||
if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL)
|
||||
{
|
||||
device_uri = cupsGetOption("device-uri", dest->num_options, dest->options);
|
||||
printer_uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options);
|
||||
|
||||
DEBUG_printf(("1_cupsGetDestResource: device-uri=\"%s\", printer-uri-supported=\"%s\".", device_uri, printer_uri));
|
||||
|
||||
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
|
||||
if (strstr(uri, "._tcp"))
|
||||
uri = cups_dnssd_resolve(dest, uri, 5000, NULL, NULL, NULL);
|
||||
#endif /* HAVE_DNSSD || HAVE_AVAHI */
|
||||
}
|
||||
|
||||
if (uri)
|
||||
if (((flags & CUPS_DEST_FLAGS_DEVICE) || !printer_uri) && strstr(device_uri, "._tcp"))
|
||||
{
|
||||
if ((device_uri = cups_dnssd_resolve(dest, device_uri, 5000, NULL, NULL, NULL)) != NULL)
|
||||
{
|
||||
DEBUG_printf(("1_cupsGetDestResource: Resolved printer-uri-supported=\"%s\"", uri));
|
||||
|
||||
uri = _cupsCreateDest(dest->name, cupsGetOption("printer-info", dest->num_options, dest->options), NULL, uri, resource, resourcesize);
|
||||
DEBUG_printf(("1_cupsGetDestResource: Resolved device-uri=\"%s\".", device_uri));
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_puts("1_cupsGetDestResource: Unable to resolve device.");
|
||||
|
||||
if (resource)
|
||||
*resource = '\0';
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_DNSSD || HAVE_AVAHI */
|
||||
|
||||
if (flags & CUPS_DEST_FLAGS_DEVICE)
|
||||
{
|
||||
uri = device_uri;
|
||||
}
|
||||
else if (printer_uri)
|
||||
{
|
||||
uri = printer_uri;
|
||||
}
|
||||
else
|
||||
{
|
||||
uri = _cupsCreateDest(dest->name, cupsGetOption("printer-info", dest->num_options, dest->options), NULL, device_uri, resource, resourcesize);
|
||||
|
||||
if (uri)
|
||||
{
|
||||
@@ -1160,30 +1181,24 @@ _cupsGetDestResource(
|
||||
|
||||
uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_puts("1_cupsGetDestResource: No printer-uri-supported found.");
|
||||
|
||||
if (resource)
|
||||
*resource = '\0';
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if (!uri)
|
||||
{
|
||||
DEBUG_printf(("1_cupsGetDestResource: printer-uri-supported=\"%s\"", uri));
|
||||
DEBUG_puts("1_cupsGetDestResource: No printer-uri-supported or device-uri found.");
|
||||
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
|
||||
userpass, sizeof(userpass), hostname, sizeof(hostname),
|
||||
&port, resource, (int)resourcesize) < HTTP_URI_STATUS_OK)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer-uri."), 1);
|
||||
if (resource)
|
||||
*resource = '\0';
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
else if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, (int)resourcesize) < HTTP_URI_STATUS_OK)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad URI."), 1);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
DEBUG_printf(("1_cupsGetDestResource: resource=\"%s\"", resource));
|
||||
@@ -1271,6 +1286,12 @@ cupsGetDestWithURI(const char *name, /* I - Desired printer name or @code NULL@
|
||||
name = resource + 10;
|
||||
info = temp;
|
||||
}
|
||||
else if (!strncmp(resource, "/ipp/print/", 11))
|
||||
{
|
||||
snprintf(temp, sizeof(temp), "%s @ %s", resource + 11, hostname);
|
||||
name = resource + 11;
|
||||
info = temp;
|
||||
}
|
||||
else
|
||||
{
|
||||
name = hostname;
|
||||
@@ -1631,16 +1652,6 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
cups_dest_t **dests) /* O - Destinations */
|
||||
{
|
||||
_cups_getdata_t data; /* Enumeration data */
|
||||
cups_dest_t *dest; /* Current destination */
|
||||
const char *home; /* HOME environment variable */
|
||||
char filename[1024]; /* Local ~/.cups/lpoptions file */
|
||||
const char *defprinter; /* Default printer */
|
||||
char name[1024], /* Copy of printer name */
|
||||
*instance, /* Pointer to instance name */
|
||||
*user_default; /* User default printer */
|
||||
int num_reals; /* Number of real queues */
|
||||
cups_dest_t *reals; /* Real queues */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsGetDests2(http=%p, dests=%p)", (void *)http, (void *)dests));
|
||||
@@ -1696,107 +1707,6 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
cups_enum_dests(http, 0, _CUPS_DNSSD_GET_DESTS, NULL, 0, 0, (cups_dest_cb_t)cups_get_cb, &data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Make a copy of the "real" queues for a later sanity check...
|
||||
*/
|
||||
|
||||
if (data.num_dests > 0)
|
||||
{
|
||||
num_reals = data.num_dests;
|
||||
reals = calloc((size_t)num_reals, sizeof(cups_dest_t));
|
||||
|
||||
if (reals)
|
||||
memcpy(reals, data.dests, (size_t)num_reals * sizeof(cups_dest_t));
|
||||
else
|
||||
num_reals = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
num_reals = 0;
|
||||
reals = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Grab the default destination...
|
||||
*/
|
||||
|
||||
if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
|
||||
defprinter = name;
|
||||
else if ((defprinter = cupsGetDefault2(http)) != NULL)
|
||||
{
|
||||
strlcpy(name, defprinter, sizeof(name));
|
||||
defprinter = name;
|
||||
}
|
||||
|
||||
if (defprinter)
|
||||
{
|
||||
/*
|
||||
* Separate printer and instance name...
|
||||
*/
|
||||
|
||||
if ((instance = strchr(name, '/')) != NULL)
|
||||
*instance++ = '\0';
|
||||
|
||||
/*
|
||||
* Lookup the printer and instance and make it the default...
|
||||
*/
|
||||
|
||||
if ((dest = cupsGetDest(name, instance, data.num_dests, data.dests)) != NULL)
|
||||
dest->is_default = 1;
|
||||
}
|
||||
else
|
||||
instance = NULL;
|
||||
|
||||
/*
|
||||
* Load the /etc/cups/lpoptions and ~/.cups/lpoptions files...
|
||||
*/
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
||||
data.num_dests = cups_get_dests(filename, NULL, NULL, 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, user_default != NULL, data.num_dests, &data.dests);
|
||||
}
|
||||
|
||||
/*
|
||||
* Validate the current default destination - this prevents old
|
||||
* Default lines in /etc/cups/lpoptions and ~/.cups/lpoptions from
|
||||
* pointing to a non-existent printer or class...
|
||||
*/
|
||||
|
||||
if (num_reals)
|
||||
{
|
||||
/*
|
||||
* See if we have a default printer...
|
||||
*/
|
||||
|
||||
if ((dest = cupsGetDest(NULL, NULL, data.num_dests, data.dests)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Have a default; see if it is real...
|
||||
*/
|
||||
|
||||
if (!cupsGetDest(dest->name, NULL, num_reals, reals))
|
||||
{
|
||||
/*
|
||||
* Remove the non-real printer from the list, since we don't want jobs
|
||||
* going to an unexpected printer... (<rdar://problem/14216472>)
|
||||
*/
|
||||
|
||||
data.num_dests = cupsRemoveDest(dest->name, dest->instance, data.num_dests, &data.dests);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Free memory...
|
||||
*/
|
||||
|
||||
free(reals);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the number of destinations...
|
||||
*/
|
||||
@@ -1883,6 +1793,9 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
|
||||
|
||||
dest_name = cups_get_default(filename, defname, sizeof(defname), &instance);
|
||||
|
||||
if (dest_name)
|
||||
set_as_default = 2;
|
||||
}
|
||||
|
||||
if (!dest_name)
|
||||
@@ -1893,6 +1806,9 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
||||
dest_name = cups_get_default(filename, defname, sizeof(defname), &instance);
|
||||
|
||||
if (dest_name)
|
||||
set_as_default = 3;
|
||||
}
|
||||
|
||||
if (!dest_name)
|
||||
@@ -1901,7 +1817,8 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
* No locally-set default destination, ask the server...
|
||||
*/
|
||||
|
||||
op = IPP_OP_CUPS_GET_DEFAULT;
|
||||
op = IPP_OP_CUPS_GET_DEFAULT;
|
||||
set_as_default = 4;
|
||||
|
||||
DEBUG_puts("1cupsGetNamedDest: Asking server for default printer...");
|
||||
}
|
||||
@@ -1932,7 +1849,36 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
dest = data.dest;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (set_as_default)
|
||||
{
|
||||
default :
|
||||
break;
|
||||
|
||||
case 1 : /* Set from env vars */
|
||||
if (getenv("LPDEST"))
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("LPDEST environment variable names default destination that does not exist."), 1);
|
||||
else if (getenv("PRINTER"))
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("PRINTER environment variable names default destination that does not exist."), 1);
|
||||
else
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("No default destination."), 1);
|
||||
break;
|
||||
|
||||
case 2 : /* Set from ~/.cups/lpoptions */
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("~/.cups/lpoptions file names default destination that does not exist."), 1);
|
||||
break;
|
||||
|
||||
case 3 : /* Set from /etc/cups/lpoptions */
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("/etc/cups/lpoptions file names default destination that does not exist."), 1);
|
||||
break;
|
||||
|
||||
case 4 : /* Set from server */
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("No default destination."), 1);
|
||||
break;
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cupsGetNamedDest: Got dest=%p", (void *)dest));
|
||||
@@ -1948,13 +1894,13 @@ 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, 1, 1, &dest);
|
||||
cups_get_dests(filename, dest_name, instance, 0, 1, 1, &dest);
|
||||
|
||||
if (home)
|
||||
{
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
|
||||
|
||||
cups_get_dests(filename, dest_name, instance, 1, 1, &dest);
|
||||
cups_get_dests(filename, dest_name, instance, 0, 1, 1, &dest);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2129,12 +2075,6 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
#ifndef _WIN32
|
||||
if (getuid())
|
||||
{
|
||||
/*
|
||||
* Merge in server defaults...
|
||||
*/
|
||||
|
||||
num_temps = cups_get_dests(filename, NULL, NULL, 0, num_temps, &temps);
|
||||
|
||||
/*
|
||||
* Point to user defaults...
|
||||
*/
|
||||
@@ -2195,8 +2135,7 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
else
|
||||
wrote = 0;
|
||||
|
||||
if ((temp = cupsGetDest(dest->name, dest->instance, num_temps, temps)) == NULL)
|
||||
temp = cupsGetDest(dest->name, NULL, num_temps, temps);
|
||||
temp = cupsGetDest(dest->name, NULL, num_temps, temps);
|
||||
|
||||
for (j = dest->num_options, option = dest->options; j > 0; j --, option ++)
|
||||
{
|
||||
@@ -2204,19 +2143,14 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
* See if this option is a printer attribute; if so, skip it...
|
||||
*/
|
||||
|
||||
if ((match = _ippFindOption(option->name)) != NULL &&
|
||||
match->group_tag == IPP_TAG_PRINTER)
|
||||
if ((match = _ippFindOption(option->name)) != NULL && match->group_tag == IPP_TAG_PRINTER)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* See if the server/global options match these; if so, don't
|
||||
* write 'em.
|
||||
* See if the server options match these; if so, don't write 'em.
|
||||
*/
|
||||
|
||||
if (temp &&
|
||||
(val = cupsGetOption(option->name, temp->num_options,
|
||||
temp->options)) != NULL &&
|
||||
!_cups_strcasecmp(val, option->value))
|
||||
if (temp && (val = cupsGetOption(option->name, temp->num_options, temp->options)) != NULL && !_cups_strcasecmp(val, option->value))
|
||||
continue;
|
||||
|
||||
/*
|
||||
@@ -2233,10 +2167,7 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
|
||||
if (option->value[0])
|
||||
{
|
||||
if (strchr(option->value, ' ') ||
|
||||
strchr(option->value, '\\') ||
|
||||
strchr(option->value, '\"') ||
|
||||
strchr(option->value, '\''))
|
||||
if (strchr(option->value, ' ') || strchr(option->value, '\\') || strchr(option->value, '\"') || strchr(option->value, '\''))
|
||||
{
|
||||
/*
|
||||
* Quote the value...
|
||||
@@ -2287,9 +2218,7 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
|
||||
if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) != NULL)
|
||||
{
|
||||
CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault,
|
||||
dest->name,
|
||||
kCFStringEncodingUTF8);
|
||||
CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, dest->name, kCFStringEncodingUTF8);
|
||||
/* Default printer name */
|
||||
|
||||
if (name)
|
||||
@@ -2344,7 +2273,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);
|
||||
@@ -2720,22 +2649,7 @@ cups_dnssd_browse_cb(
|
||||
* This object is new on the network.
|
||||
*/
|
||||
|
||||
if (flags & AVAHI_LOOKUP_RESULT_LOCAL)
|
||||
{
|
||||
/*
|
||||
* This comes from the local machine so ignore it.
|
||||
*/
|
||||
|
||||
DEBUG_printf(("cups_dnssd_browse_cb: Ignoring local service \"%s\".", name));
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Create a device entry for it if it doesn't yet exist.
|
||||
*/
|
||||
|
||||
cups_dnssd_get_device(data, name, type, domain);
|
||||
}
|
||||
cups_dnssd_get_device(data, name, type, domain);
|
||||
break;
|
||||
|
||||
case AVAHI_BROWSER_REMOVE :
|
||||
@@ -2956,66 +2870,6 @@ cups_dnssd_get_device(
|
||||
}
|
||||
|
||||
|
||||
# ifdef HAVE_DNSSD
|
||||
/*
|
||||
* 'cups_dnssd_local_cb()' - Browse for local printers.
|
||||
*/
|
||||
|
||||
static void
|
||||
cups_dnssd_local_cb(
|
||||
DNSServiceRef sdRef, /* I - Service reference */
|
||||
DNSServiceFlags flags, /* I - Option flags */
|
||||
uint32_t interfaceIndex, /* I - Interface number */
|
||||
DNSServiceErrorType errorCode, /* I - Error, if any */
|
||||
const char *serviceName, /* I - Name of service/device */
|
||||
const char *regtype, /* I - Type of service */
|
||||
const char *replyDomain, /* I - Service domain */
|
||||
void *context) /* I - Devices array */
|
||||
{
|
||||
_cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context;
|
||||
/* Enumeration data */
|
||||
_cups_dnssd_device_t *device; /* Device */
|
||||
|
||||
|
||||
DEBUG_printf(("5cups_dnssd_local_cb(sdRef=%p, flags=%x, interfaceIndex=%d, errorCode=%d, serviceName=\"%s\", regtype=\"%s\", replyDomain=\"%s\", context=%p)", (void *)sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain, context));
|
||||
|
||||
/*
|
||||
* Only process "add" data...
|
||||
*/
|
||||
|
||||
if (errorCode != kDNSServiceErr_NoError || !(flags & kDNSServiceFlagsAdd))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Get the device...
|
||||
*/
|
||||
|
||||
device = cups_dnssd_get_device(data, serviceName, regtype, replyDomain);
|
||||
|
||||
/*
|
||||
* Hide locally-registered devices...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("6cups_dnssd_local_cb: Hiding local printer '%s'.",
|
||||
serviceName));
|
||||
|
||||
if (device->ref)
|
||||
{
|
||||
DNSServiceRefDeallocate(device->ref);
|
||||
device->ref = 0;
|
||||
}
|
||||
|
||||
if (device->state == _CUPS_DNSSD_ACTIVE)
|
||||
{
|
||||
DEBUG_printf(("6cups_dnssd_local_cb: Remove callback for \"%s\".", device->dest.name));
|
||||
(*data->cb)(data->user_data, CUPS_DEST_FLAGS_REMOVED, &device->dest);
|
||||
}
|
||||
|
||||
device->state = _CUPS_DNSSD_LOCAL;
|
||||
}
|
||||
# endif /* HAVE_DNSSD */
|
||||
|
||||
|
||||
# ifdef HAVE_AVAHI
|
||||
/*
|
||||
* 'cups_dnssd_poll_cb()' - Wait for input on the specified file descriptors.
|
||||
@@ -3065,9 +2919,9 @@ cups_dnssd_poll_cb(
|
||||
* 'cups_dnssd_query_cb()' - Process query data.
|
||||
*/
|
||||
|
||||
# ifdef HAVE_DNSSD
|
||||
static void
|
||||
cups_dnssd_query_cb(
|
||||
# ifdef HAVE_DNSSD
|
||||
DNSServiceRef sdRef, /* I - Service reference */
|
||||
DNSServiceFlags flags, /* I - Data flags */
|
||||
uint32_t interfaceIndex, /* I - Interface */
|
||||
@@ -3078,11 +2932,7 @@ cups_dnssd_query_cb(
|
||||
uint16_t rdlen, /* I - Length of record data */
|
||||
const void *rdata, /* I - Record data */
|
||||
uint32_t ttl, /* I - Time-to-live */
|
||||
void *context) /* I - Enumeration data */
|
||||
{
|
||||
# else /* HAVE_AVAHI */
|
||||
static void
|
||||
cups_dnssd_query_cb(
|
||||
AvahiRecordBrowser *browser, /* I - Record browser */
|
||||
AvahiIfIndex interfaceIndex,
|
||||
/* I - Interface index (unused) */
|
||||
@@ -3094,13 +2944,13 @@ cups_dnssd_query_cb(
|
||||
const void *rdata, /* I - TXT record */
|
||||
size_t rdlen, /* I - Length of TXT record */
|
||||
AvahiLookupResultFlags flags, /* I - Flags */
|
||||
void *context) /* I - Enumeration data */
|
||||
# endif /* HAVE_DNSSD */
|
||||
void *context) /* I - Enumeration data */
|
||||
{
|
||||
# ifdef DEBUG
|
||||
# if defined(DEBUG) && defined(HAVE_AVAHI)
|
||||
AvahiClient *client = avahi_record_browser_get_client(browser);
|
||||
/* Client information */
|
||||
# endif /* DEBUG */
|
||||
# endif /* HAVE_DNSSD */
|
||||
# endif /* DEBUG && HAVE_AVAHI */
|
||||
_cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context;
|
||||
/* Enumeration data */
|
||||
char serviceName[256],/* Service name */
|
||||
@@ -3543,29 +3393,25 @@ cups_enum_dests(
|
||||
cups_dest_cb_t cb, /* I - Callback function */
|
||||
void *user_data) /* I - User data */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
int i, j, /* Looping vars */
|
||||
num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests = NULL, /* Destinations */
|
||||
*dest; /* Current destination */
|
||||
const char *defprinter; /* Default printer */
|
||||
char name[1024], /* Copy of printer name */
|
||||
*instance, /* Pointer to instance name */
|
||||
*user_default; /* User default printer */
|
||||
cups_option_t *option; /* Current option */
|
||||
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 */
|
||||
remaining; /* Remainder of timeout */
|
||||
struct timeval curtime; /* Current time */
|
||||
_cups_dnssd_data_t data; /* Data for callback */
|
||||
_cups_dnssd_data_t data; /* Data for callback */
|
||||
_cups_dnssd_device_t *device; /* Current device */
|
||||
# ifdef HAVE_DNSSD
|
||||
int nfds, /* Number of files responded */
|
||||
main_fd; /* File descriptor for lookups */
|
||||
DNSServiceRef ipp_ref = NULL, /* IPP browser */
|
||||
local_ipp_ref = NULL; /* Local IPP browser */
|
||||
DNSServiceRef ipp_ref = NULL; /* IPP browser */
|
||||
# ifdef HAVE_SSL
|
||||
DNSServiceRef ipps_ref = NULL, /* IPPS browser */
|
||||
local_ipps_ref = NULL; /* Local IPPS browser */
|
||||
DNSServiceRef ipps_ref = NULL; /* IPPS browser */
|
||||
# endif /* HAVE_SSL */
|
||||
# ifdef HAVE_POLL
|
||||
struct pollfd pfd; /* Polling data */
|
||||
@@ -3580,7 +3426,12 @@ cups_enum_dests(
|
||||
AvahiServiceBrowser *ipps_ref = NULL; /* IPPS browser */
|
||||
# endif /* HAVE_SSL */
|
||||
# endif /* HAVE_DNSSD */
|
||||
#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 */
|
||||
|
||||
|
||||
DEBUG_printf(("cups_enum_dests(flags=%x, msec=%d, cancel=%p, type=%x, mask=%x, cb=%p, user_data=%p)", flags, msec, (void *)cancel, type, mask, (void *)cb, (void *)user_data));
|
||||
@@ -3597,13 +3448,60 @@ cups_enum_dests(
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Load the /etc/cups/lpoptions and ~/.cups/lpoptions files...
|
||||
*/
|
||||
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
user_default = _cupsUserDefault(data.def_name, 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 ((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);
|
||||
}
|
||||
|
||||
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])
|
||||
{
|
||||
/*
|
||||
* Separate printer and instance name...
|
||||
*/
|
||||
|
||||
if ((data.def_instance = strchr(data.def_name, '/')) != NULL)
|
||||
*data.def_instance++ = '\0';
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cups_enum_dests: def_name=\"%s\", def_instance=\"%s\"", data.def_name, data.def_instance));
|
||||
|
||||
/*
|
||||
* Get ready to enumerate...
|
||||
*/
|
||||
|
||||
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
data.type = type;
|
||||
data.mask = mask;
|
||||
data.cb = cb;
|
||||
@@ -3619,39 +3517,38 @@ cups_enum_dests(
|
||||
|
||||
num_dests = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &dests, type, mask);
|
||||
|
||||
if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
|
||||
defprinter = name;
|
||||
else if ((defprinter = cupsGetDefault2(http)) != NULL)
|
||||
{
|
||||
strlcpy(name, defprinter, sizeof(name));
|
||||
defprinter = name;
|
||||
}
|
||||
|
||||
if (defprinter)
|
||||
if (data.def_name[0])
|
||||
{
|
||||
/*
|
||||
* Separate printer and instance name...
|
||||
* Lookup the named default printer and instance and make it the default...
|
||||
*/
|
||||
|
||||
if ((instance = strchr(name, '/')) != NULL)
|
||||
*instance++ = '\0';
|
||||
|
||||
/*
|
||||
* Lookup the printer and instance and make it the default...
|
||||
*/
|
||||
|
||||
if ((dest = cupsGetDest(name, instance, num_dests, dests)) != NULL)
|
||||
if ((dest = cupsGetDest(data.def_name, data.def_instance, num_dests, dests)) != NULL)
|
||||
{
|
||||
DEBUG_printf(("1cups_enum_dests: Setting is_default on \"%s/%s\".", dest->name, dest->instance));
|
||||
dest->is_default = 1;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = num_dests, dest = 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)
|
||||
{
|
||||
/*
|
||||
* Apply user defaults to this destination...
|
||||
*/
|
||||
|
||||
for (j = user_dest->num_options, option = user_dest->options; j > 0; j --, option ++)
|
||||
dest->num_options = cupsAddOption(option->name, option->value, dest->num_options, &dest->options);
|
||||
}
|
||||
|
||||
if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, dest))
|
||||
break;
|
||||
|
||||
@@ -3714,6 +3611,9 @@ cups_enum_dests(
|
||||
if (DNSServiceCreateConnection(&data.main_ref) != kDNSServiceErr_NoError)
|
||||
{
|
||||
DEBUG_puts("1cups_enum_dests: Unable to create service browser, returning 0.");
|
||||
|
||||
cupsFreeDests(data.num_dests, data.dests);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -3724,14 +3624,9 @@ cups_enum_dests(
|
||||
{
|
||||
DEBUG_puts("1cups_enum_dests: Unable to create IPP browser, returning 0.");
|
||||
DNSServiceRefDeallocate(data.main_ref);
|
||||
return (0);
|
||||
}
|
||||
|
||||
local_ipp_ref = data.main_ref;
|
||||
if (DNSServiceBrowse(&local_ipp_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipp._tcp", NULL, (DNSServiceBrowseReply)cups_dnssd_local_cb, &data) != kDNSServiceErr_NoError)
|
||||
{
|
||||
DEBUG_puts("1cups_enum_dests: Unable to create local IPP browser, returning 0.");
|
||||
DNSServiceRefDeallocate(data.main_ref);
|
||||
cupsFreeDests(data.num_dests, data.dests);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -3741,14 +3636,9 @@ cups_enum_dests(
|
||||
{
|
||||
DEBUG_puts("1cups_enum_dests: Unable to create IPPS browser, returning 0.");
|
||||
DNSServiceRefDeallocate(data.main_ref);
|
||||
return (0);
|
||||
}
|
||||
|
||||
local_ipps_ref = data.main_ref;
|
||||
if (DNSServiceBrowse(&local_ipps_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipps._tcp", NULL, (DNSServiceBrowseReply)cups_dnssd_local_cb, &data) != kDNSServiceErr_NoError)
|
||||
{
|
||||
DEBUG_puts("1cups_enum_dests: Unable to create local IPPS browser, returning 0.");
|
||||
DNSServiceRefDeallocate(data.main_ref);
|
||||
cupsFreeDests(data.num_dests, data.dests);
|
||||
|
||||
return (0);
|
||||
}
|
||||
# endif /* HAVE_SSL */
|
||||
@@ -3757,6 +3647,9 @@ cups_enum_dests(
|
||||
if ((data.simple_poll = avahi_simple_poll_new()) == NULL)
|
||||
{
|
||||
DEBUG_puts("1cups_enum_dests: Unable to create Avahi poll, returning 0.");
|
||||
|
||||
cupsFreeDests(data.num_dests, data.dests);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -3769,6 +3662,9 @@ cups_enum_dests(
|
||||
{
|
||||
DEBUG_puts("1cups_enum_dests: Unable to create Avahi client, returning 0.");
|
||||
avahi_simple_poll_free(data.simple_poll);
|
||||
|
||||
cupsFreeDests(data.num_dests, data.dests);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -3779,6 +3675,9 @@ cups_enum_dests(
|
||||
|
||||
avahi_client_free(data.client);
|
||||
avahi_simple_poll_free(data.simple_poll);
|
||||
|
||||
cupsFreeDests(data.num_dests, data.dests);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -3791,6 +3690,9 @@ cups_enum_dests(
|
||||
avahi_service_browser_free(ipp_ref);
|
||||
avahi_client_free(data.client);
|
||||
avahi_simple_poll_free(data.simple_poll);
|
||||
|
||||
cupsFreeDests(data.num_dests, data.dests);
|
||||
|
||||
return (0);
|
||||
}
|
||||
# endif /* HAVE_SSL */
|
||||
@@ -3903,8 +3805,28 @@ 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)
|
||||
{
|
||||
/*
|
||||
* Apply user defaults to this destination...
|
||||
*/
|
||||
|
||||
for (j = user_dest->num_options, option = user_dest->options; j > 0; j --, option ++)
|
||||
dest->num_options = cupsAddOption(option->name, option->value, dest->num_options, &dest->options);
|
||||
}
|
||||
|
||||
if (!strcasecmp(dest->name, data.def_name) && !data.def_instance)
|
||||
{
|
||||
DEBUG_printf(("1cups_enum_dests: Setting is_default on discovered \"%s\".", dest->name));
|
||||
dest->is_default = 1;
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cups_enum_dests: Add callback for \"%s\".", device->dest.name));
|
||||
if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, &device->dest))
|
||||
if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, dest))
|
||||
{
|
||||
remaining = -1;
|
||||
break;
|
||||
@@ -3935,20 +3857,18 @@ cups_enum_dests(
|
||||
|
||||
enum_finished:
|
||||
|
||||
cupsFreeDests(data.num_dests, data.dests);
|
||||
|
||||
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
|
||||
cupsArrayDelete(data.devices);
|
||||
|
||||
# ifdef HAVE_DNSSD
|
||||
if (ipp_ref)
|
||||
DNSServiceRefDeallocate(ipp_ref);
|
||||
if (local_ipp_ref)
|
||||
DNSServiceRefDeallocate(local_ipp_ref);
|
||||
|
||||
# ifdef HAVE_SSL
|
||||
if (ipps_ref)
|
||||
DNSServiceRefDeallocate(ipps_ref);
|
||||
if (local_ipps_ref)
|
||||
DNSServiceRefDeallocate(local_ipps_ref);
|
||||
# endif /* HAVE_SSL */
|
||||
|
||||
if (data.main_ref)
|
||||
@@ -4166,6 +4086,7 @@ cups_get_dests(
|
||||
const char *filename, /* I - File to read from */
|
||||
const char *match_name, /* I - Destination name we want */
|
||||
const char *match_inst, /* I - Instance name we want */
|
||||
int load_all, /* I - Load all saved destinations? */
|
||||
int user_default_set, /* I - User default printer set? */
|
||||
int num_dests, /* I - Number of destinations */
|
||||
cups_dest_t **dests) /* IO - Destinations */
|
||||
@@ -4180,7 +4101,7 @@ cups_get_dests(
|
||||
int linenum; /* Current line number */
|
||||
|
||||
|
||||
DEBUG_printf(("7cups_get_dests(filename=\"%s\", match_name=\"%s\", match_inst=\"%s\", user_default_set=%d, num_dests=%d, dests=%p)", filename, match_name, match_inst, user_default_set, num_dests, (void *)dests));
|
||||
DEBUG_printf(("7cups_get_dests(filename=\"%s\", match_name=\"%s\", match_inst=\"%s\", load_all=%d, user_default_set=%d, num_dests=%d, dests=%p)", filename, match_name, match_inst, load_all, user_default_set, num_dests, (void *)dests));
|
||||
|
||||
/*
|
||||
* Try to open the file...
|
||||
@@ -4248,8 +4169,7 @@ cups_get_dests(
|
||||
instance));
|
||||
|
||||
/*
|
||||
* See if the primary instance of the destination exists; if not,
|
||||
* ignore this entry and move on...
|
||||
* Match and/or ignore missing destinations...
|
||||
*/
|
||||
|
||||
if (match_name)
|
||||
@@ -4262,7 +4182,7 @@ cups_get_dests(
|
||||
|
||||
dest = *dests;
|
||||
}
|
||||
else if (cupsGetDest(name, NULL, num_dests, *dests) == NULL)
|
||||
else if (!load_all && cupsGetDest(name, NULL, num_dests, *dests) == NULL)
|
||||
{
|
||||
DEBUG_puts("9cups_get_dests: Not found!");
|
||||
continue;
|
||||
@@ -4290,8 +4210,7 @@ cups_get_dests(
|
||||
* Add options until we hit the end of the line...
|
||||
*/
|
||||
|
||||
dest->num_options = cupsParseOptions(lineptr, dest->num_options,
|
||||
&(dest->options));
|
||||
dest->num_options = cupsParseOptions(lineptr, dest->num_options, &(dest->options));
|
||||
|
||||
/*
|
||||
* If we found what we were looking for, stop now...
|
||||
|
||||
@@ -679,6 +679,12 @@ cupsFileGetChar(cups_file_t *fp) /* I - CUPS file */
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (fp->eof)
|
||||
{
|
||||
DEBUG_puts("5cupsFileGetChar: End-of-file!");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the input buffer is empty, try to read more data...
|
||||
*/
|
||||
@@ -1651,6 +1657,12 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */
|
||||
if (bytes == 0)
|
||||
return (0);
|
||||
|
||||
if (fp->eof)
|
||||
{
|
||||
DEBUG_puts("5cupsFileRead: End-of-file!");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Loop until all bytes are read...
|
||||
*/
|
||||
|
||||
+25
-2
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Hashing function for CUPS.
|
||||
*
|
||||
* Copyright © 2015-2018 by Apple Inc.
|
||||
* Copyright © 2015-2019 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -190,6 +190,13 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
unsigned char temp[64]; /* Temporary hash buffer */
|
||||
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;
|
||||
else if (!strcmp(algorithm, "sha"))
|
||||
@@ -227,6 +234,10 @@ 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);
|
||||
}
|
||||
|
||||
@@ -235,9 +246,17 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */
|
||||
|
||||
gnutls_hash_fast(alg, data, datalen, hash);
|
||||
|
||||
return (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 */
|
||||
|
||||
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...
|
||||
@@ -271,6 +290,10 @@ 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);
|
||||
}
|
||||
|
||||
@@ -803,14 +803,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);
|
||||
}
|
||||
|
||||
+8
-3
@@ -1778,7 +1778,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 &&
|
||||
@@ -1905,7 +1905,7 @@ httpPrintf(http_t *http, /* I - HTTP connection */
|
||||
...) /* I - Additional args as needed */
|
||||
{
|
||||
ssize_t bytes; /* Number of bytes to write */
|
||||
char buf[16384]; /* Buffer for formatted string */
|
||||
char buf[65536]; /* Buffer for formatted string */
|
||||
va_list ap; /* Variable argument pointer */
|
||||
|
||||
|
||||
@@ -1917,7 +1917,12 @@ httpPrintf(http_t *http, /* I - HTTP connection */
|
||||
|
||||
DEBUG_printf(("3httpPrintf: (" CUPS_LLFMT " bytes) %s", CUPS_LLCAST bytes, buf));
|
||||
|
||||
if (http->data_encoding == HTTP_ENCODING_FIELDS)
|
||||
if (bytes > (ssize_t)(sizeof(buf) - 1))
|
||||
{
|
||||
http->error = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
else if (http->data_encoding == HTTP_ENCODING_FIELDS)
|
||||
return ((int)httpWrite2(http, buf, (size_t)bytes));
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Internet Printing Protocol support functions for CUPS.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -433,7 +433,7 @@ static const char * const ipp_document_states[] =
|
||||
"punch-multiple-top", /* Finishings 2.1/Canon */
|
||||
"punch-multiple-right",/* Finishings 2.1/Canon */
|
||||
"punch-multiple-bottom",/* Finishings 2.1/Canon */
|
||||
"fold-accordian", /* Finishings 2.0 */
|
||||
"fold-accordion", /* Finishings 2.0 */
|
||||
"fold-double-gate", /* Finishings 2.0 */
|
||||
"fold-gate", /* Finishings 2.0 */
|
||||
"fold-half", /* Finishings 2.0 */
|
||||
@@ -544,7 +544,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",
|
||||
@@ -1899,7 +1899,7 @@ ippEnumString(const char *attrname, /* I - Attribute name */
|
||||
sizeof(ipp_finishings[0]))))
|
||||
return (ipp_finishings[enumvalue - 3]);
|
||||
else if (enumvalue >= 0x40000000 &&
|
||||
enumvalue <= (0x40000000 + (int)(sizeof(ipp_finishings_vendor) /
|
||||
enumvalue < (0x40000000 + (int)(sizeof(ipp_finishings_vendor) /
|
||||
sizeof(ipp_finishings_vendor[0]))))
|
||||
return (ipp_finishings_vendor[enumvalue - 0x40000000]);
|
||||
}
|
||||
|
||||
+60
-72
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Internet Printing Protocol functions for CUPS.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -3044,8 +3044,13 @@ ippReadIO(void *src, /* I - Data source */
|
||||
|
||||
DEBUG_printf(("2ippReadIO: name length=%d", n));
|
||||
|
||||
if (n == 0 && tag != IPP_TAG_MEMBERNAME &&
|
||||
tag != IPP_TAG_END_COLLECTION)
|
||||
if (n && parent)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid named IPP attribute in collection."), 1);
|
||||
DEBUG_puts("1ippReadIO: bad attribute name in collection.");
|
||||
return (IPP_STATE_ERROR);
|
||||
}
|
||||
else if (n == 0 && tag != IPP_TAG_MEMBERNAME && tag != IPP_TAG_END_COLLECTION)
|
||||
{
|
||||
/*
|
||||
* More values for current attribute...
|
||||
@@ -3752,8 +3757,7 @@ ippSetDate(ipp_t *ipp, /* I - IPP message */
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_DATE ||
|
||||
element < 0 || element > (*attr)->num_values || !datevalue)
|
||||
if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_DATE && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values || !datevalue)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -3836,9 +3840,7 @@ ippSetInteger(ipp_t *ipp, /* I - IPP message */
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ipp || !attr || !*attr ||
|
||||
((*attr)->value_tag != IPP_TAG_INTEGER && (*attr)->value_tag != IPP_TAG_ENUM) ||
|
||||
element < 0 || element > (*attr)->num_values)
|
||||
if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_INTEGER && (*attr)->value_tag != IPP_TAG_ENUM && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -3846,7 +3848,12 @@ ippSetInteger(ipp_t *ipp, /* I - IPP message */
|
||||
*/
|
||||
|
||||
if ((value = ipp_set_value(ipp, attr, element)) != NULL)
|
||||
{
|
||||
if ((*attr)->value_tag != IPP_TAG_ENUM)
|
||||
(*attr)->value_tag = IPP_TAG_INTEGER;
|
||||
|
||||
value->integer = intvalue;
|
||||
}
|
||||
|
||||
return (value != NULL);
|
||||
}
|
||||
@@ -3923,9 +3930,7 @@ ippSetOctetString(
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_STRING ||
|
||||
element < 0 || element > (*attr)->num_values ||
|
||||
datalen < 0 || datalen > IPP_MAX_LENGTH)
|
||||
if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_STRING && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values || datalen < 0 || datalen > IPP_MAX_LENGTH)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -3949,6 +3954,8 @@ ippSetOctetString(
|
||||
* Copy the data...
|
||||
*/
|
||||
|
||||
(*attr)->value_tag = IPP_TAG_STRING;
|
||||
|
||||
if (value->unknown.data)
|
||||
{
|
||||
/*
|
||||
@@ -4040,8 +4047,7 @@ ippSetRange(ipp_t *ipp, /* I - IPP message */
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_RANGE ||
|
||||
element < 0 || element > (*attr)->num_values || lowervalue > uppervalue)
|
||||
if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_RANGE && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values || lowervalue > uppervalue)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -4050,6 +4056,7 @@ ippSetRange(ipp_t *ipp, /* I - IPP message */
|
||||
|
||||
if ((value = ipp_set_value(ipp, attr, element)) != NULL)
|
||||
{
|
||||
(*attr)->value_tag = IPP_TAG_RANGE;
|
||||
value->range.lower = lowervalue;
|
||||
value->range.upper = uppervalue;
|
||||
}
|
||||
@@ -4122,9 +4129,7 @@ ippSetResolution(
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_RESOLUTION ||
|
||||
element < 0 || element > (*attr)->num_values || xresvalue <= 0 || yresvalue <= 0 ||
|
||||
unitsvalue < IPP_RES_PER_INCH || unitsvalue > IPP_RES_PER_CM)
|
||||
if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_RESOLUTION && (*attr)->value_tag != IPP_TAG_NOVALUE && (*attr)->value_tag != IPP_TAG_UNKNOWN) || element < 0 || element > (*attr)->num_values || xresvalue <= 0 || yresvalue <= 0 || unitsvalue < IPP_RES_PER_INCH || unitsvalue > IPP_RES_PER_CM)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -4133,6 +4138,7 @@ ippSetResolution(
|
||||
|
||||
if ((value = ipp_set_value(ipp, attr, element)) != NULL)
|
||||
{
|
||||
(*attr)->value_tag = IPP_TAG_RESOLUTION;
|
||||
value->resolution.units = unitsvalue;
|
||||
value->resolution.xres = xresvalue;
|
||||
value->resolution.yres = yresvalue;
|
||||
@@ -4234,10 +4240,7 @@ ippSetString(ipp_t *ipp, /* I - IPP message */
|
||||
else
|
||||
value_tag = IPP_TAG_ZERO;
|
||||
|
||||
if (!ipp || !attr || !*attr ||
|
||||
(value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG &&
|
||||
value_tag != IPP_TAG_NAMELANG) || value_tag > IPP_TAG_MIMETYPE ||
|
||||
element < 0 || element > (*attr)->num_values || !strvalue)
|
||||
if (!ipp || !attr || !*attr || (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG && value_tag != IPP_TAG_NAMELANG && value_tag != IPP_TAG_NOVALUE && value_tag != IPP_TAG_UNKNOWN) || value_tag > IPP_TAG_MIMETYPE || element < 0 || element > (*attr)->num_values || !strvalue)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -4246,6 +4249,9 @@ ippSetString(ipp_t *ipp, /* I - IPP message */
|
||||
|
||||
if ((value = ipp_set_value(ipp, attr, element)) != NULL)
|
||||
{
|
||||
if (value_tag == IPP_TAG_NOVALUE || value_tag == IPP_TAG_UNKNOWN)
|
||||
(*attr)->value_tag = IPP_TAG_KEYWORD;
|
||||
|
||||
if (element > 0)
|
||||
value->string.language = (*attr)->values[0].string.language;
|
||||
|
||||
@@ -4346,10 +4352,7 @@ ippSetStringfv(ipp_t *ipp, /* I - IPP message */
|
||||
else
|
||||
value_tag = IPP_TAG_ZERO;
|
||||
|
||||
if (!ipp || !attr || !*attr ||
|
||||
(value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG &&
|
||||
value_tag != IPP_TAG_NAMELANG) || value_tag > IPP_TAG_MIMETYPE ||
|
||||
!format)
|
||||
if (!ipp || !attr || !*attr || (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG && value_tag != IPP_TAG_NAMELANG && value_tag != IPP_TAG_NOVALUE && value_tag != IPP_TAG_UNKNOWN) || value_tag > IPP_TAG_MIMETYPE || !format)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -4401,6 +4404,8 @@ ippSetStringfv(ipp_t *ipp, /* I - IPP message */
|
||||
max_bytes = IPP_MAX_CHARSET;
|
||||
break;
|
||||
|
||||
case IPP_TAG_NOVALUE :
|
||||
case IPP_TAG_UNKNOWN :
|
||||
case IPP_TAG_KEYWORD :
|
||||
max_bytes = IPP_MAX_KEYWORD;
|
||||
break;
|
||||
@@ -4548,9 +4553,7 @@ ippSetValueTag(
|
||||
break;
|
||||
|
||||
case IPP_TAG_NAME :
|
||||
if (temp_tag != IPP_TAG_KEYWORD && temp_tag != IPP_TAG_URI &&
|
||||
temp_tag != IPP_TAG_URISCHEME && temp_tag != IPP_TAG_LANGUAGE &&
|
||||
temp_tag != IPP_TAG_MIMETYPE)
|
||||
if (temp_tag != IPP_TAG_KEYWORD)
|
||||
return (0);
|
||||
|
||||
(*attr)->value_tag = (ipp_tag_t)(IPP_TAG_NAME | ((*attr)->value_tag & IPP_TAG_CUPS_CONST));
|
||||
@@ -4558,17 +4561,14 @@ ippSetValueTag(
|
||||
|
||||
case IPP_TAG_NAMELANG :
|
||||
case IPP_TAG_TEXTLANG :
|
||||
if (value_tag == IPP_TAG_NAMELANG &&
|
||||
(temp_tag != IPP_TAG_NAME && temp_tag != IPP_TAG_KEYWORD &&
|
||||
temp_tag != IPP_TAG_URI && temp_tag != IPP_TAG_URISCHEME &&
|
||||
temp_tag != IPP_TAG_LANGUAGE && temp_tag != IPP_TAG_MIMETYPE))
|
||||
if (value_tag == IPP_TAG_NAMELANG && (temp_tag != IPP_TAG_NAME && temp_tag != IPP_TAG_KEYWORD))
|
||||
return (0);
|
||||
|
||||
if (value_tag == IPP_TAG_TEXTLANG && temp_tag != IPP_TAG_TEXT)
|
||||
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...
|
||||
@@ -4662,7 +4662,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 */
|
||||
|
||||
@@ -4684,16 +4684,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;
|
||||
@@ -4975,30 +4975,24 @@ ippValidateAttribute(
|
||||
{
|
||||
if ((*ptr & 0xe0) == 0xc0)
|
||||
{
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
if ((ptr[1] & 0xc0) != 0x80)
|
||||
break;
|
||||
|
||||
ptr ++;
|
||||
}
|
||||
else if ((*ptr & 0xf0) == 0xe0)
|
||||
{
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
break;
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
if ((ptr[1] & 0xc0) != 0x80 || (ptr[2] & 0xc0) != 0x80)
|
||||
break;
|
||||
|
||||
ptr += 2;
|
||||
}
|
||||
else if ((*ptr & 0xf8) == 0xf0)
|
||||
{
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
break;
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
break;
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
if ((ptr[1] & 0xc0) != 0x80 || (ptr[2] & 0xc0) != 0x80 || (ptr[3] & 0xc0) != 0x80)
|
||||
break;
|
||||
|
||||
ptr += 3;
|
||||
}
|
||||
else if (*ptr & 0x80)
|
||||
break;
|
||||
@@ -5040,30 +5034,24 @@ ippValidateAttribute(
|
||||
{
|
||||
if ((*ptr & 0xe0) == 0xc0)
|
||||
{
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
if ((ptr[1] & 0xc0) != 0x80)
|
||||
break;
|
||||
|
||||
ptr ++;
|
||||
}
|
||||
else if ((*ptr & 0xf0) == 0xe0)
|
||||
{
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
break;
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
if ((ptr[1] & 0xc0) != 0x80 || (ptr[2] & 0xc0) != 0x80)
|
||||
break;
|
||||
|
||||
ptr += 2;
|
||||
}
|
||||
else if ((*ptr & 0xf8) == 0xf0)
|
||||
{
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
break;
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
break;
|
||||
ptr ++;
|
||||
if ((*ptr & 0xc0) != 0x80)
|
||||
if ((ptr[1] & 0xc0) != 0x80 || (ptr[2] & 0xc0) != 0x80 || (ptr[3] & 0xc0) != 0x80)
|
||||
break;
|
||||
|
||||
ptr += 3;
|
||||
}
|
||||
else if (*ptr & 0x80)
|
||||
break;
|
||||
|
||||
+11
-9
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Internet Printing Protocol definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -150,11 +150,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 */
|
||||
@@ -189,8 +189,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@ */
|
||||
@@ -203,8 +203,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 */
|
||||
|
||||
|
||||
+82
-82
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* PPD cache implementation for CUPS.
|
||||
*
|
||||
* Copyright © 2010-2018 by Apple Inc.
|
||||
* Copyright © 2010-2019 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -508,24 +508,20 @@ _ppdCacheCreateWithFile(
|
||||
else if (!_cups_strcasecmp(line, "Filter"))
|
||||
{
|
||||
if (!pc->filters)
|
||||
pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree);
|
||||
pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
|
||||
|
||||
cupsArrayAdd(pc->filters, value);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "PreFilter"))
|
||||
{
|
||||
if (!pc->prefilters)
|
||||
pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree);
|
||||
pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
|
||||
|
||||
cupsArrayAdd(pc->prefilters, value);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "Product"))
|
||||
{
|
||||
pc->product = _cupsStrAlloc(value);
|
||||
pc->product = strdup(value);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "SingleFile"))
|
||||
{
|
||||
@@ -625,8 +621,8 @@ _ppdCacheCreateWithFile(
|
||||
}
|
||||
|
||||
map = pc->bins + pc->num_bins;
|
||||
map->pwg = _cupsStrAlloc(pwg_keyword);
|
||||
map->ppd = _cupsStrAlloc(ppd_keyword);
|
||||
map->pwg = strdup(pwg_keyword);
|
||||
map->ppd = strdup(ppd_keyword);
|
||||
|
||||
pc->num_bins ++;
|
||||
}
|
||||
@@ -680,8 +676,8 @@ _ppdCacheCreateWithFile(
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
size->map.pwg = _cupsStrAlloc(pwg_keyword);
|
||||
size->map.ppd = _cupsStrAlloc(ppd_keyword);
|
||||
size->map.pwg = strdup(pwg_keyword);
|
||||
size->map.ppd = strdup(ppd_keyword);
|
||||
|
||||
pc->num_sizes ++;
|
||||
}
|
||||
@@ -709,15 +705,15 @@ _ppdCacheCreateWithFile(
|
||||
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max",
|
||||
pc->custom_max_width, pc->custom_max_length, NULL);
|
||||
pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword);
|
||||
pc->custom_max_keyword = strdup(pwg_keyword);
|
||||
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min",
|
||||
pc->custom_min_width, pc->custom_min_length, NULL);
|
||||
pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword);
|
||||
pc->custom_min_keyword = strdup(pwg_keyword);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "SourceOption"))
|
||||
{
|
||||
pc->source_option = _cupsStrAlloc(value);
|
||||
pc->source_option = strdup(value);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "NumSources"))
|
||||
{
|
||||
@@ -764,8 +760,8 @@ _ppdCacheCreateWithFile(
|
||||
}
|
||||
|
||||
map = pc->sources + pc->num_sources;
|
||||
map->pwg = _cupsStrAlloc(pwg_keyword);
|
||||
map->ppd = _cupsStrAlloc(ppd_keyword);
|
||||
map->pwg = strdup(pwg_keyword);
|
||||
map->ppd = strdup(ppd_keyword);
|
||||
|
||||
pc->num_sources ++;
|
||||
}
|
||||
@@ -813,8 +809,8 @@ _ppdCacheCreateWithFile(
|
||||
}
|
||||
|
||||
map = pc->types + pc->num_types;
|
||||
map->pwg = _cupsStrAlloc(pwg_keyword);
|
||||
map->ppd = _cupsStrAlloc(ppd_keyword);
|
||||
map->pwg = strdup(pwg_keyword);
|
||||
map->ppd = strdup(ppd_keyword);
|
||||
|
||||
pc->num_types ++;
|
||||
}
|
||||
@@ -844,13 +840,13 @@ _ppdCacheCreateWithFile(
|
||||
pc->presets[print_color_mode] + print_quality);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "SidesOption"))
|
||||
pc->sides_option = _cupsStrAlloc(value);
|
||||
pc->sides_option = strdup(value);
|
||||
else if (!_cups_strcasecmp(line, "Sides1Sided"))
|
||||
pc->sides_1sided = _cupsStrAlloc(value);
|
||||
pc->sides_1sided = strdup(value);
|
||||
else if (!_cups_strcasecmp(line, "Sides2SidedLong"))
|
||||
pc->sides_2sided_long = _cupsStrAlloc(value);
|
||||
pc->sides_2sided_long = strdup(value);
|
||||
else if (!_cups_strcasecmp(line, "Sides2SidedShort"))
|
||||
pc->sides_2sided_short = _cupsStrAlloc(value);
|
||||
pc->sides_2sided_short = strdup(value);
|
||||
else if (!_cups_strcasecmp(line, "Finishings"))
|
||||
{
|
||||
if (!pc->finishings)
|
||||
@@ -871,13 +867,13 @@ _ppdCacheCreateWithFile(
|
||||
else if (!_cups_strcasecmp(line, "MaxCopies"))
|
||||
pc->max_copies = atoi(value);
|
||||
else if (!_cups_strcasecmp(line, "ChargeInfoURI"))
|
||||
pc->charge_info_uri = _cupsStrAlloc(value);
|
||||
pc->charge_info_uri = strdup(value);
|
||||
else if (!_cups_strcasecmp(line, "JobAccountId"))
|
||||
pc->account_id = !_cups_strcasecmp(value, "true");
|
||||
else if (!_cups_strcasecmp(line, "JobAccountingUserId"))
|
||||
pc->accounting_user_id = !_cups_strcasecmp(value, "true");
|
||||
else if (!_cups_strcasecmp(line, "JobPassword"))
|
||||
pc->password = _cupsStrAlloc(value);
|
||||
pc->password = strdup(value);
|
||||
else if (!_cups_strcasecmp(line, "Mandatory"))
|
||||
{
|
||||
if (pc->mandatory)
|
||||
@@ -888,9 +884,7 @@ _ppdCacheCreateWithFile(
|
||||
else if (!_cups_strcasecmp(line, "SupportFile"))
|
||||
{
|
||||
if (!pc->support_files)
|
||||
pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree);
|
||||
pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
|
||||
|
||||
cupsArrayAdd(pc->support_files, value);
|
||||
}
|
||||
@@ -1130,8 +1124,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
*/
|
||||
|
||||
new_size = old_size;
|
||||
_cupsStrFree(old_size->map.ppd);
|
||||
_cupsStrFree(old_size->map.pwg);
|
||||
free(old_size->map.ppd);
|
||||
free(old_size->map.pwg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1152,8 +1146,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
* Save this size...
|
||||
*/
|
||||
|
||||
new_size->map.ppd = _cupsStrAlloc(ppd_size->name);
|
||||
new_size->map.pwg = _cupsStrAlloc(pwg_name);
|
||||
new_size->map.ppd = strdup(ppd_size->name);
|
||||
new_size->map.pwg = strdup(pwg_name);
|
||||
new_size->width = new_width;
|
||||
new_size->length = new_length;
|
||||
new_size->left = new_left;
|
||||
@@ -1173,14 +1167,14 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max",
|
||||
PWG_FROM_POINTS(ppd->custom_max[0]),
|
||||
PWG_FROM_POINTS(ppd->custom_max[1]), NULL);
|
||||
pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword);
|
||||
pc->custom_max_keyword = strdup(pwg_keyword);
|
||||
pc->custom_max_width = PWG_FROM_POINTS(ppd->custom_max[0]);
|
||||
pc->custom_max_length = PWG_FROM_POINTS(ppd->custom_max[1]);
|
||||
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min",
|
||||
PWG_FROM_POINTS(ppd->custom_min[0]),
|
||||
PWG_FROM_POINTS(ppd->custom_min[1]), NULL);
|
||||
pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword);
|
||||
pc->custom_min_keyword = strdup(pwg_keyword);
|
||||
pc->custom_min_width = PWG_FROM_POINTS(ppd->custom_min[0]);
|
||||
pc->custom_min_length = PWG_FROM_POINTS(ppd->custom_min[1]);
|
||||
|
||||
@@ -1199,7 +1193,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
|
||||
if (input_slot)
|
||||
{
|
||||
pc->source_option = _cupsStrAlloc(input_slot->keyword);
|
||||
pc->source_option = strdup(input_slot->keyword);
|
||||
|
||||
if ((pc->sources = calloc((size_t)input_slot->num_choices, sizeof(pwg_map_t))) == NULL)
|
||||
{
|
||||
@@ -1251,8 +1245,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
"_");
|
||||
}
|
||||
|
||||
map->pwg = _cupsStrAlloc(pwg_name);
|
||||
map->ppd = _cupsStrAlloc(choice->choice);
|
||||
map->pwg = strdup(pwg_name);
|
||||
map->ppd = strdup(choice->choice);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1315,8 +1309,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
"_");
|
||||
}
|
||||
|
||||
map->pwg = _cupsStrAlloc(pwg_name);
|
||||
map->ppd = _cupsStrAlloc(choice->choice);
|
||||
map->pwg = strdup(pwg_name);
|
||||
map->ppd = strdup(choice->choice);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1342,8 +1336,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
{
|
||||
pwg_unppdize_name(choice->choice, pwg_keyword, sizeof(pwg_keyword), "_");
|
||||
|
||||
map->pwg = _cupsStrAlloc(pwg_keyword);
|
||||
map->ppd = _cupsStrAlloc(choice->choice);
|
||||
map->pwg = strdup(pwg_keyword);
|
||||
map->ppd = strdup(choice->choice);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1558,7 +1552,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
|
||||
if (duplex)
|
||||
{
|
||||
pc->sides_option = _cupsStrAlloc(duplex->keyword);
|
||||
pc->sides_option = strdup(duplex->keyword);
|
||||
|
||||
for (i = duplex->num_choices, choice = duplex->choices;
|
||||
i > 0;
|
||||
@@ -1566,16 +1560,16 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
{
|
||||
if ((!_cups_strcasecmp(choice->choice, "None") ||
|
||||
!_cups_strcasecmp(choice->choice, "False")) && !pc->sides_1sided)
|
||||
pc->sides_1sided = _cupsStrAlloc(choice->choice);
|
||||
pc->sides_1sided = strdup(choice->choice);
|
||||
else if ((!_cups_strcasecmp(choice->choice, "DuplexNoTumble") ||
|
||||
!_cups_strcasecmp(choice->choice, "LongEdge") ||
|
||||
!_cups_strcasecmp(choice->choice, "Top")) && !pc->sides_2sided_long)
|
||||
pc->sides_2sided_long = _cupsStrAlloc(choice->choice);
|
||||
pc->sides_2sided_long = strdup(choice->choice);
|
||||
else if ((!_cups_strcasecmp(choice->choice, "DuplexTumble") ||
|
||||
!_cups_strcasecmp(choice->choice, "ShortEdge") ||
|
||||
!_cups_strcasecmp(choice->choice, "Bottom")) &&
|
||||
!pc->sides_2sided_short)
|
||||
pc->sides_2sided_short = _cupsStrAlloc(choice->choice);
|
||||
pc->sides_2sided_short = strdup(choice->choice);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1583,9 +1577,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
* Copy filters and pre-filters...
|
||||
*/
|
||||
|
||||
pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree);
|
||||
pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
|
||||
|
||||
cupsArrayAdd(pc->filters,
|
||||
"application/vnd.cups-raw application/octet-stream 0 -");
|
||||
@@ -1642,9 +1634,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsPreFilter", NULL)) != NULL)
|
||||
{
|
||||
pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree);
|
||||
pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
|
||||
|
||||
do
|
||||
{
|
||||
@@ -1661,7 +1651,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
*/
|
||||
|
||||
if (ppd->product)
|
||||
pc->product = _cupsStrAlloc(ppd->product);
|
||||
pc->product = strdup(ppd->product);
|
||||
|
||||
/*
|
||||
* Copy finishings mapping data...
|
||||
@@ -1818,7 +1808,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
*/
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsChargeInfoURI", NULL)) != NULL)
|
||||
pc->charge_info_uri = _cupsStrAlloc(ppd_attr->value);
|
||||
pc->charge_info_uri = strdup(ppd_attr->value);
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsJobAccountId", NULL)) != NULL)
|
||||
pc->account_id = !_cups_strcasecmp(ppd_attr->value, "true");
|
||||
@@ -1827,7 +1817,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
pc->accounting_user_id = !_cups_strcasecmp(ppd_attr->value, "true");
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsJobPassword", NULL)) != NULL)
|
||||
pc->password = _cupsStrAlloc(ppd_attr->value);
|
||||
pc->password = strdup(ppd_attr->value);
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL)
|
||||
pc->mandatory = _cupsArrayNewStrings(ppd_attr->value, ' ');
|
||||
@@ -1836,9 +1826,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
* Support files...
|
||||
*/
|
||||
|
||||
pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree);
|
||||
pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
|
||||
|
||||
for (ppd_attr = ppdFindAttr(ppd, "cupsICCProfile", NULL);
|
||||
ppd_attr;
|
||||
@@ -1894,8 +1882,8 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */
|
||||
{
|
||||
for (i = pc->num_bins, map = pc->bins; i > 0; i --, map ++)
|
||||
{
|
||||
_cupsStrFree(map->pwg);
|
||||
_cupsStrFree(map->ppd);
|
||||
free(map->pwg);
|
||||
free(map->ppd);
|
||||
}
|
||||
|
||||
free(pc->bins);
|
||||
@@ -1905,22 +1893,21 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */
|
||||
{
|
||||
for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++)
|
||||
{
|
||||
_cupsStrFree(size->map.pwg);
|
||||
_cupsStrFree(size->map.ppd);
|
||||
free(size->map.pwg);
|
||||
free(size->map.ppd);
|
||||
}
|
||||
|
||||
free(pc->sizes);
|
||||
}
|
||||
|
||||
if (pc->source_option)
|
||||
_cupsStrFree(pc->source_option);
|
||||
free(pc->source_option);
|
||||
|
||||
if (pc->sources)
|
||||
{
|
||||
for (i = pc->num_sources, map = pc->sources; i > 0; i --, map ++)
|
||||
{
|
||||
_cupsStrFree(map->pwg);
|
||||
_cupsStrFree(map->ppd);
|
||||
free(map->pwg);
|
||||
free(map->ppd);
|
||||
}
|
||||
|
||||
free(pc->sources);
|
||||
@@ -1930,26 +1917,23 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */
|
||||
{
|
||||
for (i = pc->num_types, map = pc->types; i > 0; i --, map ++)
|
||||
{
|
||||
_cupsStrFree(map->pwg);
|
||||
_cupsStrFree(map->ppd);
|
||||
free(map->pwg);
|
||||
free(map->ppd);
|
||||
}
|
||||
|
||||
free(pc->types);
|
||||
}
|
||||
|
||||
if (pc->custom_max_keyword)
|
||||
_cupsStrFree(pc->custom_max_keyword);
|
||||
free(pc->custom_max_keyword);
|
||||
free(pc->custom_min_keyword);
|
||||
|
||||
if (pc->custom_min_keyword)
|
||||
_cupsStrFree(pc->custom_min_keyword);
|
||||
|
||||
_cupsStrFree(pc->product);
|
||||
free(pc->product);
|
||||
cupsArrayDelete(pc->filters);
|
||||
cupsArrayDelete(pc->prefilters);
|
||||
cupsArrayDelete(pc->finishings);
|
||||
|
||||
_cupsStrFree(pc->charge_info_uri);
|
||||
_cupsStrFree(pc->password);
|
||||
free(pc->charge_info_uri);
|
||||
free(pc->password);
|
||||
|
||||
cupsArrayDelete(pc->mandatory);
|
||||
|
||||
@@ -2105,7 +2089,7 @@ _ppdCacheGetFinishingValues(
|
||||
f;
|
||||
f = (_pwg_finishings_t *)cupsArrayNext(pc->finishings))
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheGetFinishingValues: Checking %d (%s)", f->value, ippEnumString("finishings", f->value)));
|
||||
DEBUG_printf(("_ppdCacheGetFinishingValues: Checking %d (%s)", (int)f->value, ippEnumString("finishings", (int)f->value)));
|
||||
|
||||
for (i = f->num_options, option = f->options; i > 0; i --, option ++)
|
||||
{
|
||||
@@ -2121,9 +2105,9 @@ _ppdCacheGetFinishingValues(
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheGetFinishingValues: Adding %d (%s)", f->value, ippEnumString("finishings", f->value)));
|
||||
DEBUG_printf(("_ppdCacheGetFinishingValues: Adding %d (%s)", (int)f->value, ippEnumString("finishings", (int)f->value)));
|
||||
|
||||
values[num_values ++] = f->value;
|
||||
values[num_values ++] = (int)f->value;
|
||||
|
||||
if (num_values >= max_values)
|
||||
break;
|
||||
@@ -2887,12 +2871,12 @@ _ppdCacheWriteFile(
|
||||
if (pc->charge_info_uri)
|
||||
cupsFilePutConf(fp, "ChargeInfoURI", pc->charge_info_uri);
|
||||
|
||||
cupsFilePrintf(fp, "AccountId %s\n", pc->account_id ? "true" : "false");
|
||||
cupsFilePrintf(fp, "AccountingUserId %s\n",
|
||||
cupsFilePrintf(fp, "JobAccountId %s\n", pc->account_id ? "true" : "false");
|
||||
cupsFilePrintf(fp, "JobAccountingUserId %s\n",
|
||||
pc->accounting_user_id ? "true" : "false");
|
||||
|
||||
if (pc->password)
|
||||
cupsFilePutConf(fp, "Password", pc->password);
|
||||
cupsFilePutConf(fp, "JobPassword", pc->password);
|
||||
|
||||
for (value = (char *)cupsArrayFirst(pc->mandatory);
|
||||
value;
|
||||
@@ -3117,6 +3101,22 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
cupsFilePuts(fp, "*cupsSNMPSupplies: False\n");
|
||||
cupsFilePuts(fp, "*cupsLanguages: \"en\"\n");
|
||||
|
||||
if ((attr = ippFindAttribute(response, "printer-more-info", IPP_TAG_URI)) != NULL)
|
||||
cupsFilePrintf(fp, "*APSupplies: \"%s\"\n", ippGetString(attr, 0, NULL));
|
||||
|
||||
if ((attr = ippFindAttribute(response, "printer-charge-info-uri", IPP_TAG_URI)) != NULL)
|
||||
cupsFilePrintf(fp, "*cupsChargeInfoURI: \"%s\"\n", ippGetString(attr, 0, NULL));
|
||||
|
||||
/*
|
||||
* Accounting...
|
||||
*/
|
||||
|
||||
if (ippGetBoolean(ippFindAttribute(response, "job-account-id-supported", IPP_TAG_BOOLEAN), 0))
|
||||
cupsFilePuts(fp, "*cupsJobAccountId: True\n");
|
||||
|
||||
if (ippGetBoolean(ippFindAttribute(response, "job-accounting-user-id-supported", IPP_TAG_BOOLEAN), 0))
|
||||
cupsFilePuts(fp, "*cupsJobAccountingUserId: True\n");
|
||||
|
||||
/*
|
||||
* Password/PIN printing...
|
||||
*/
|
||||
@@ -3149,7 +3149,7 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
|
||||
pattern[maxlen] = '\0';
|
||||
|
||||
cupsFilePrintf(fp, "*cupsPassword: \"%s\"\n", pattern);
|
||||
cupsFilePrintf(fp, "*cupsJobPassword: \"%s\"\n", pattern);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -662,6 +662,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
|
||||
{
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_POINTS :
|
||||
@@ -708,6 +711,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
|
||||
{
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_POINTS :
|
||||
@@ -803,6 +809,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
|
||||
{
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_POINTS :
|
||||
@@ -1005,6 +1014,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
|
||||
{
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_POINTS :
|
||||
|
||||
+12
-6
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Option marking routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 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.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -855,6 +855,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_REAL :
|
||||
@@ -890,9 +893,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
case PPD_CUSTOM_PASSWORD :
|
||||
case PPD_CUSTOM_STRING :
|
||||
if (cparam->current.custom_string)
|
||||
_cupsStrFree(cparam->current.custom_string);
|
||||
free(cparam->current.custom_string);
|
||||
|
||||
cparam->current.custom_string = _cupsStrAlloc(choice + 7);
|
||||
cparam->current.custom_string = strdup(choice + 7);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -932,6 +935,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_REAL :
|
||||
@@ -967,9 +973,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
case PPD_CUSTOM_PASSWORD :
|
||||
case PPD_CUSTOM_STRING :
|
||||
if (cparam->current.custom_string)
|
||||
_cupsStrFree(cparam->current.custom_string);
|
||||
free(cparam->current.custom_string);
|
||||
|
||||
cparam->current.custom_string = _cupsStrRetain(val->value);
|
||||
cparam->current.custom_string = strdup(val->value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+105
-129
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* PPD file routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2018 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.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -34,8 +34,6 @@
|
||||
* Definitions...
|
||||
*/
|
||||
|
||||
#define ppd_free(p) if (p) free(p) /* Safe free macro */
|
||||
|
||||
#define PPD_KEYWORD 1 /* Line contained a keyword */
|
||||
#define PPD_OPTION 2 /* Line contained an option name */
|
||||
#define PPD_TEXT 4 /* Line contained human-readable text */
|
||||
@@ -117,7 +115,6 @@ void
|
||||
ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
ppd_emul_t *emul; /* Current emulation */
|
||||
ppd_group_t *group; /* Current group */
|
||||
char **font; /* Current font */
|
||||
ppd_attr_t **attr; /* Current attribute */
|
||||
@@ -136,28 +133,12 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
* Free all strings at the top level...
|
||||
*/
|
||||
|
||||
_cupsStrFree(ppd->lang_encoding);
|
||||
_cupsStrFree(ppd->nickname);
|
||||
if (ppd->patches)
|
||||
free(ppd->patches);
|
||||
_cupsStrFree(ppd->jcl_begin);
|
||||
_cupsStrFree(ppd->jcl_end);
|
||||
_cupsStrFree(ppd->jcl_ps);
|
||||
|
||||
/*
|
||||
* Free any emulations...
|
||||
*/
|
||||
|
||||
if (ppd->num_emulations > 0)
|
||||
{
|
||||
for (i = ppd->num_emulations, emul = ppd->emulations; i > 0; i --, emul ++)
|
||||
{
|
||||
_cupsStrFree(emul->start);
|
||||
_cupsStrFree(emul->stop);
|
||||
}
|
||||
|
||||
ppd_free(ppd->emulations);
|
||||
}
|
||||
free(ppd->lang_encoding);
|
||||
free(ppd->nickname);
|
||||
free(ppd->patches);
|
||||
free(ppd->jcl_begin);
|
||||
free(ppd->jcl_end);
|
||||
free(ppd->jcl_ps);
|
||||
|
||||
/*
|
||||
* Free any UI groups, subgroups, and options...
|
||||
@@ -168,7 +149,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++)
|
||||
ppd_free_group(group);
|
||||
|
||||
ppd_free(ppd->groups);
|
||||
free(ppd->groups);
|
||||
}
|
||||
|
||||
cupsArrayDelete(ppd->options);
|
||||
@@ -179,14 +160,14 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
*/
|
||||
|
||||
if (ppd->num_sizes > 0)
|
||||
ppd_free(ppd->sizes);
|
||||
free(ppd->sizes);
|
||||
|
||||
/*
|
||||
* Free any constraints...
|
||||
*/
|
||||
|
||||
if (ppd->num_consts > 0)
|
||||
ppd_free(ppd->consts);
|
||||
free(ppd->consts);
|
||||
|
||||
/*
|
||||
* Free any filters...
|
||||
@@ -201,9 +182,9 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
if (ppd->num_fonts > 0)
|
||||
{
|
||||
for (i = ppd->num_fonts, font = ppd->fonts; i > 0; i --, font ++)
|
||||
_cupsStrFree(*font);
|
||||
free(*font);
|
||||
|
||||
ppd_free(ppd->fonts);
|
||||
free(ppd->fonts);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -211,7 +192,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
*/
|
||||
|
||||
if (ppd->num_profiles > 0)
|
||||
ppd_free(ppd->profiles);
|
||||
free(ppd->profiles);
|
||||
|
||||
/*
|
||||
* Free any attributes...
|
||||
@@ -221,11 +202,11 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
{
|
||||
for (i = ppd->num_attrs, attr = ppd->attrs; i > 0; i --, attr ++)
|
||||
{
|
||||
_cupsStrFree((*attr)->value);
|
||||
ppd_free(*attr);
|
||||
free((*attr)->value);
|
||||
free(*attr);
|
||||
}
|
||||
|
||||
ppd_free(ppd->attrs);
|
||||
free(ppd->attrs);
|
||||
}
|
||||
|
||||
cupsArrayDelete(ppd->sorted_attrs);
|
||||
@@ -247,7 +228,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
case PPD_CUSTOM_PASSCODE :
|
||||
case PPD_CUSTOM_PASSWORD :
|
||||
case PPD_CUSTOM_STRING :
|
||||
_cupsStrFree(cparam->current.custom_string);
|
||||
free(cparam->current.custom_string);
|
||||
break;
|
||||
|
||||
default :
|
||||
@@ -295,7 +276,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
* Free the whole record...
|
||||
*/
|
||||
|
||||
ppd_free(ppd);
|
||||
free(ppd);
|
||||
}
|
||||
|
||||
|
||||
@@ -443,7 +424,6 @@ _ppdOpen(
|
||||
_ppd_localization_t localization) /* I - Localization to load */
|
||||
{
|
||||
int i, j, k; /* Looping vars */
|
||||
int count; /* Temporary count */
|
||||
_ppd_line_t line; /* Line buffer */
|
||||
ppd_file_t *ppd; /* PPD file record */
|
||||
ppd_group_t *group, /* Current group */
|
||||
@@ -461,7 +441,6 @@ _ppdOpen(
|
||||
/* Human-readable text from file */
|
||||
*string, /* Code/text from file */
|
||||
*sptr, /* Pointer into string */
|
||||
*nameptr, /* Pointer into name */
|
||||
*temp, /* Temporary string pointer */
|
||||
**tempfonts; /* Temporary fonts pointer */
|
||||
float order; /* Order dependency number */
|
||||
@@ -635,15 +614,15 @@ _ppdOpen(
|
||||
if (pg->ppd_status == PPD_OK)
|
||||
pg->ppd_status = PPD_MISSING_PPDADOBE4;
|
||||
|
||||
_cupsStrFree(string);
|
||||
ppd_free(line.buffer);
|
||||
free(string);
|
||||
free(line.buffer);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
DEBUG_printf(("2_ppdOpen: keyword=%s, string=%p", keyword, string));
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
|
||||
/*
|
||||
* Allocate memory for the PPD file record...
|
||||
@@ -653,8 +632,8 @@ _ppdOpen(
|
||||
{
|
||||
pg->ppd_status = PPD_ALLOC_ERROR;
|
||||
|
||||
_cupsStrFree(string);
|
||||
ppd_free(line.buffer);
|
||||
free(string);
|
||||
free(line.buffer);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
@@ -737,6 +716,8 @@ _ppdOpen(
|
||||
strncmp(ll, keyword, ll_len)))
|
||||
{
|
||||
DEBUG_printf(("2_ppdOpen: Ignoring localization: \"%s\"\n", keyword));
|
||||
free(string);
|
||||
string = NULL;
|
||||
continue;
|
||||
}
|
||||
else if (localization == _PPD_LOCALIZATION_ICC_PROFILES)
|
||||
@@ -756,6 +737,8 @@ _ppdOpen(
|
||||
if (i >= (int)(sizeof(color_keywords) / sizeof(color_keywords[0])))
|
||||
{
|
||||
DEBUG_printf(("2_ppdOpen: Ignoring localization: \"%s\"\n", keyword));
|
||||
free(string);
|
||||
string = NULL;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -851,7 +834,7 @@ _ppdOpen(
|
||||
* Say all PPD files are UTF-8, since we convert to UTF-8...
|
||||
*/
|
||||
|
||||
ppd->lang_encoding = _cupsStrAlloc("UTF-8");
|
||||
ppd->lang_encoding = strdup("UTF-8");
|
||||
encoding = _ppdGetEncoding(string);
|
||||
}
|
||||
else if (!strcmp(keyword, "LanguageVersion"))
|
||||
@@ -872,10 +855,10 @@ _ppdOpen(
|
||||
|
||||
|
||||
cupsCharsetToUTF8(utf8, string, sizeof(utf8), encoding);
|
||||
ppd->nickname = _cupsStrAlloc((char *)utf8);
|
||||
ppd->nickname = strdup((char *)utf8);
|
||||
}
|
||||
else
|
||||
ppd->nickname = _cupsStrAlloc(string);
|
||||
ppd->nickname = strdup(string);
|
||||
}
|
||||
else if (!strcmp(keyword, "Product"))
|
||||
ppd->product = string;
|
||||
@@ -885,17 +868,17 @@ _ppdOpen(
|
||||
ppd->ttrasterizer = string;
|
||||
else if (!strcmp(keyword, "JCLBegin"))
|
||||
{
|
||||
ppd->jcl_begin = _cupsStrAlloc(string);
|
||||
ppd->jcl_begin = strdup(string);
|
||||
ppd_decode(ppd->jcl_begin); /* Decode quoted string */
|
||||
}
|
||||
else if (!strcmp(keyword, "JCLEnd"))
|
||||
{
|
||||
ppd->jcl_end = _cupsStrAlloc(string);
|
||||
ppd->jcl_end = strdup(string);
|
||||
ppd_decode(ppd->jcl_end); /* Decode quoted string */
|
||||
}
|
||||
else if (!strcmp(keyword, "JCLToPSInterpreter"))
|
||||
{
|
||||
ppd->jcl_ps = _cupsStrAlloc(string);
|
||||
ppd->jcl_ps = strdup(string);
|
||||
ppd_decode(ppd->jcl_ps); /* Decode quoted string */
|
||||
}
|
||||
else if (!strcmp(keyword, "AccurateScreensSupport"))
|
||||
@@ -963,10 +946,10 @@ _ppdOpen(
|
||||
ppd->num_filters ++;
|
||||
|
||||
/*
|
||||
* Retain a copy of the filter string...
|
||||
* Make a copy of the filter string...
|
||||
*/
|
||||
|
||||
*filter = _cupsStrRetain(string);
|
||||
*filter = strdup(string);
|
||||
}
|
||||
else if (!strcmp(keyword, "Throughput"))
|
||||
ppd->throughput = atoi(string);
|
||||
@@ -989,7 +972,7 @@ _ppdOpen(
|
||||
}
|
||||
|
||||
ppd->fonts = tempfonts;
|
||||
ppd->fonts[ppd->num_fonts] = _cupsStrAlloc(name);
|
||||
ppd->fonts[ppd->num_fonts] = strdup(name);
|
||||
ppd->num_fonts ++;
|
||||
}
|
||||
else if (!strncmp(keyword, "ParamCustom", 11))
|
||||
@@ -1020,6 +1003,13 @@ _ppdOpen(
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (cparam->type != PPD_CUSTOM_UNKNOWN)
|
||||
{
|
||||
pg->ppd_status = PPD_BAD_CUSTOM_PARAM;
|
||||
|
||||
goto error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the parameter data...
|
||||
*/
|
||||
@@ -1154,7 +1144,7 @@ _ppdOpen(
|
||||
strlcpy(choice->text, text[0] ? text : _("Custom"),
|
||||
sizeof(choice->text));
|
||||
|
||||
choice->code = _cupsStrAlloc(string);
|
||||
choice->code = strdup(string);
|
||||
|
||||
if (custom_option->section == PPD_ORDER_JCL)
|
||||
ppd_decode(choice->code);
|
||||
@@ -1203,59 +1193,23 @@ _ppdOpen(
|
||||
else if (!strcmp(string, "Plus90"))
|
||||
ppd->landscape = 90;
|
||||
}
|
||||
else if (!strcmp(keyword, "Emulators") && string)
|
||||
else if (!strcmp(keyword, "Emulators") && string && ppd->num_emulations == 0)
|
||||
{
|
||||
for (count = 1, sptr = string; sptr != NULL;)
|
||||
if ((sptr = strchr(sptr, ' ')) != NULL)
|
||||
{
|
||||
count ++;
|
||||
while (*sptr == ' ')
|
||||
sptr ++;
|
||||
}
|
||||
/*
|
||||
* Issue #5562: Samsung printer drivers incorrectly use Emulators keyword
|
||||
* to configure themselves
|
||||
*
|
||||
* The Emulators keyword was loaded but never used by anything in CUPS,
|
||||
* and has no valid purpose in CUPS. The old code was removed due to a
|
||||
* memory leak (Issue #5475), so the following (new) code supports a single
|
||||
* name for the Emulators keyword, allowing these drivers to work until we
|
||||
* remove PPD and driver support entirely in a future version of CUPS.
|
||||
*/
|
||||
|
||||
ppd->num_emulations = count;
|
||||
if ((ppd->emulations = calloc((size_t)count, sizeof(ppd_emul_t))) == NULL)
|
||||
{
|
||||
pg->ppd_status = PPD_ALLOC_ERROR;
|
||||
ppd->num_emulations = 1;
|
||||
ppd->emulations = calloc(1, sizeof(ppd_emul_t));
|
||||
|
||||
goto error;
|
||||
}
|
||||
|
||||
for (i = 0, sptr = string; i < count; i ++)
|
||||
{
|
||||
for (nameptr = ppd->emulations[i].name;
|
||||
*sptr != '\0' && *sptr != ' ';
|
||||
sptr ++)
|
||||
if (nameptr < (ppd->emulations[i].name + sizeof(ppd->emulations[i].name) - 1))
|
||||
*nameptr++ = *sptr;
|
||||
|
||||
*nameptr = '\0';
|
||||
|
||||
while (*sptr == ' ')
|
||||
sptr ++;
|
||||
}
|
||||
}
|
||||
else if (!strncmp(keyword, "StartEmulator_", 14))
|
||||
{
|
||||
ppd_decode(string);
|
||||
|
||||
for (i = 0; i < ppd->num_emulations; i ++)
|
||||
if (!strcmp(keyword + 14, ppd->emulations[i].name))
|
||||
{
|
||||
ppd->emulations[i].start = string;
|
||||
string = NULL;
|
||||
}
|
||||
}
|
||||
else if (!strncmp(keyword, "StopEmulator_", 13))
|
||||
{
|
||||
ppd_decode(string);
|
||||
|
||||
for (i = 0; i < ppd->num_emulations; i ++)
|
||||
if (!strcmp(keyword + 13, ppd->emulations[i].name))
|
||||
{
|
||||
ppd->emulations[i].stop = string;
|
||||
string = NULL;
|
||||
}
|
||||
strlcpy(ppd->emulations[0].name, string, sizeof(ppd->emulations[0].name));
|
||||
}
|
||||
else if (!strcmp(keyword, "JobPatchFile"))
|
||||
{
|
||||
@@ -1410,7 +1364,7 @@ _ppdOpen(
|
||||
|
||||
option->section = PPD_ORDER_ANY;
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
|
||||
/*
|
||||
@@ -1438,7 +1392,7 @@ _ppdOpen(
|
||||
strlcpy(choice->text,
|
||||
custom_attr->text[0] ? custom_attr->text : _("Custom"),
|
||||
sizeof(choice->text));
|
||||
choice->code = _cupsStrRetain(custom_attr->value);
|
||||
choice->code = strdup(custom_attr->value);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(keyword, "JCLOpenUI"))
|
||||
@@ -1517,7 +1471,7 @@ _ppdOpen(
|
||||
option->section = PPD_ORDER_JCL;
|
||||
group = NULL;
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
|
||||
/*
|
||||
@@ -1541,7 +1495,7 @@ _ppdOpen(
|
||||
strlcpy(choice->text,
|
||||
custom_attr->text[0] ? custom_attr->text : _("Custom"),
|
||||
sizeof(choice->text));
|
||||
choice->code = _cupsStrRetain(custom_attr->value);
|
||||
choice->code = strdup(custom_attr->value);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(keyword, "CloseUI"))
|
||||
@@ -1555,7 +1509,7 @@ _ppdOpen(
|
||||
|
||||
option = NULL;
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
}
|
||||
else if (!strcmp(keyword, "JCLCloseUI"))
|
||||
@@ -1569,7 +1523,7 @@ _ppdOpen(
|
||||
|
||||
option = NULL;
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
}
|
||||
else if (!strcmp(keyword, "OpenGroup"))
|
||||
@@ -1616,14 +1570,14 @@ _ppdOpen(
|
||||
if (group == NULL)
|
||||
goto error;
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
}
|
||||
else if (!strcmp(keyword, "CloseGroup"))
|
||||
{
|
||||
group = NULL;
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
}
|
||||
else if (!strcmp(keyword, "OrderDependency"))
|
||||
@@ -1681,7 +1635,7 @@ _ppdOpen(
|
||||
option->order = order;
|
||||
}
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
}
|
||||
else if (!strncmp(keyword, "Default", 7))
|
||||
@@ -1924,11 +1878,18 @@ _ppdOpen(
|
||||
* Don't add this one as an attribute...
|
||||
*/
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
}
|
||||
else if (!strcmp(keyword, "PaperDimension"))
|
||||
{
|
||||
if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
|
||||
{
|
||||
pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
|
||||
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((size = ppdPageSize(ppd, name)) == NULL)
|
||||
size = ppd_add_size(ppd, name);
|
||||
|
||||
@@ -1946,11 +1907,18 @@ _ppdOpen(
|
||||
size->width = (float)_cupsStrScand(string, &sptr, loc);
|
||||
size->length = (float)_cupsStrScand(sptr, NULL, loc);
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
}
|
||||
else if (!strcmp(keyword, "ImageableArea"))
|
||||
{
|
||||
if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
|
||||
{
|
||||
pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
|
||||
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((size = ppdPageSize(ppd, name)) == NULL)
|
||||
size = ppd_add_size(ppd, name);
|
||||
|
||||
@@ -1970,7 +1938,7 @@ _ppdOpen(
|
||||
size->right = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
size->top = (float)_cupsStrScand(sptr, NULL, loc);
|
||||
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
string = NULL;
|
||||
}
|
||||
else if (option != NULL &&
|
||||
@@ -1980,6 +1948,13 @@ _ppdOpen(
|
||||
{
|
||||
DEBUG_printf(("2_ppdOpen: group=%p, subgroup=%p", group, subgroup));
|
||||
|
||||
if (!_cups_strcasecmp(name, "custom") || !_cups_strncasecmp(name, "custom.", 7))
|
||||
{
|
||||
pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD;
|
||||
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!strcmp(keyword, "PageSize"))
|
||||
{
|
||||
/*
|
||||
@@ -2026,7 +2001,7 @@ _ppdOpen(
|
||||
(mask & (PPD_KEYWORD | PPD_STRING)) == (PPD_KEYWORD | PPD_STRING))
|
||||
ppd_add_attr(ppd, keyword, name, text, string);
|
||||
else
|
||||
_cupsStrFree(string);
|
||||
free(string);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2049,7 +2024,7 @@ _ppdOpen(
|
||||
goto error;
|
||||
}
|
||||
|
||||
ppd_free(line.buffer);
|
||||
free(line.buffer);
|
||||
|
||||
/*
|
||||
* Reset language preferences...
|
||||
@@ -2131,8 +2106,8 @@ _ppdOpen(
|
||||
|
||||
error:
|
||||
|
||||
_cupsStrFree(string);
|
||||
ppd_free(line.buffer);
|
||||
free(string);
|
||||
free(line.buffer);
|
||||
|
||||
ppdClose(ppd);
|
||||
|
||||
@@ -2570,9 +2545,9 @@ ppd_free_filters(ppd_file_t *ppd) /* I - PPD file */
|
||||
if (ppd->num_filters > 0)
|
||||
{
|
||||
for (i = ppd->num_filters, filter = ppd->filters; i > 0; i --, filter ++)
|
||||
_cupsStrFree(*filter);
|
||||
free(*filter);
|
||||
|
||||
ppd_free(ppd->filters);
|
||||
free(ppd->filters);
|
||||
|
||||
ppd->num_filters = 0;
|
||||
ppd->filters = NULL;
|
||||
@@ -2599,7 +2574,7 @@ ppd_free_group(ppd_group_t *group) /* I - Group to free */
|
||||
i --, option ++)
|
||||
ppd_free_option(option);
|
||||
|
||||
ppd_free(group->options);
|
||||
free(group->options);
|
||||
}
|
||||
|
||||
if (group->num_subgroups > 0)
|
||||
@@ -2609,7 +2584,7 @@ ppd_free_group(ppd_group_t *group) /* I - Group to free */
|
||||
i --, subgroup ++)
|
||||
ppd_free_group(subgroup);
|
||||
|
||||
ppd_free(group->subgroups);
|
||||
free(group->subgroups);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2631,10 +2606,10 @@ ppd_free_option(ppd_option_t *option) /* I - Option to free */
|
||||
i > 0;
|
||||
i --, choice ++)
|
||||
{
|
||||
_cupsStrFree(choice->code);
|
||||
free(choice->code);
|
||||
}
|
||||
|
||||
ppd_free(option->choices);
|
||||
free(option->choices);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2704,6 +2679,7 @@ ppd_get_cparam(ppd_coption_t *opt, /* I - PPD file */
|
||||
if ((cparam = calloc(1, sizeof(ppd_cparam_t))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
cparam->type = PPD_CUSTOM_UNKNOWN;
|
||||
strlcpy(cparam->name, param, sizeof(cparam->name));
|
||||
strlcpy(cparam->text, text[0] ? text : param, sizeof(cparam->text));
|
||||
|
||||
@@ -3371,7 +3347,7 @@ ppd_read(cups_file_t *fp, /* I - File to read from */
|
||||
lineptr ++;
|
||||
}
|
||||
|
||||
*string = _cupsStrAlloc(lineptr);
|
||||
*string = strdup(lineptr);
|
||||
|
||||
mask |= PPD_STRING;
|
||||
}
|
||||
@@ -3493,7 +3469,7 @@ ppd_update_filters(ppd_file_t *ppd, /* I - PPD file */
|
||||
filter += ppd->num_filters;
|
||||
ppd->num_filters ++;
|
||||
|
||||
*filter = _cupsStrAlloc(buffer);
|
||||
*filter = strdup(buffer);
|
||||
}
|
||||
while ((attr = ppdFindNextAttr(ppd, "cupsFilter2", NULL)) != NULL);
|
||||
|
||||
|
||||
+5
-4
@@ -5,8 +5,8 @@
|
||||
* -D_PPD_DEPRECATED="" TO YOUR COMPILE OPTIONS. THIS HEADER AND THESE
|
||||
* FUNCTIONS WILL BE REMOVED IN A FUTURE RELEASE OF 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.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -235,6 +235,7 @@ typedef struct ppd_profile_s /**** sRGB Color Profiles ****/
|
||||
/**** New in CUPS 1.2/macOS 10.5 ****/
|
||||
typedef enum ppd_cptype_e /**** Custom Parameter Type @since CUPS 1.2/macOS 10.5@ ****/
|
||||
{
|
||||
PPD_CUSTOM_UNKNOWN = -1, /* Unknown type (error) */
|
||||
PPD_CUSTOM_CURVE, /* Curve value for f(x) = x^value */
|
||||
PPD_CUSTOM_INT, /* Integer number value */
|
||||
PPD_CUSTOM_INVCURVE, /* Curve value for f(x) = x^(1/value) */
|
||||
@@ -304,8 +305,8 @@ typedef struct ppd_file_s /**** PPD File ****/
|
||||
int throughput; /* Pages per minute */
|
||||
ppd_cs_t colorspace; /* Default colorspace */
|
||||
char *patches; /* Patch commands to be sent to printer */
|
||||
int num_emulations; /* Number of emulations supported */
|
||||
ppd_emul_t *emulations; /* Emulations and the code to invoke them */
|
||||
int num_emulations; /* Number of emulations supported (no longer supported) @private@ */
|
||||
ppd_emul_t *emulations; /* Emulations and the code to invoke them (no longer supported) @private@ */
|
||||
char *jcl_begin; /* Start JCL commands */
|
||||
char *jcl_ps; /* Enter PostScript interpreter */
|
||||
char *jcl_end; /* End JCL commands */
|
||||
|
||||
+5
-3
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* PWG media name API implementation for CUPS.
|
||||
*
|
||||
* Copyright 2009-2017 by Apple Inc.
|
||||
* Copyright 2009-2019 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#define _PWG_MEDIA_IN(p,l,a,x,y) {p, l, a, (int)(x * 2540), (int)(y * 2540)}
|
||||
#define _PWG_MEDIA_MM(p,l,a,x,y) {p, l, a, (int)(x * 100), (int)(y * 100)}
|
||||
#define _PWG_EPSILON 50 /* Matching tolerance */
|
||||
|
||||
|
||||
/*
|
||||
@@ -912,10 +913,11 @@ pwgMediaForSize(int width, /* I - Width in hundredths of millimeters */
|
||||
{
|
||||
/*
|
||||
* Adobe uses a size matching algorithm with an epsilon of 5 points, which
|
||||
* is just about 176/2540ths...
|
||||
* is just about 176/2540ths... But a lot of international media sizes are
|
||||
* very close so use 0.5mm (50/2540ths) as the maximum delta.
|
||||
*/
|
||||
|
||||
return (_pwgMediaNearSize(width, length, 176));
|
||||
return (_pwgMediaNearSize(width, length, _PWG_EPSILON));
|
||||
}
|
||||
|
||||
|
||||
|
||||
+19
-1
@@ -1233,6 +1233,9 @@ asn1_get_integer(
|
||||
int value; /* Integer value */
|
||||
|
||||
|
||||
if (*buffer >= bufend)
|
||||
return (0);
|
||||
|
||||
if (length > sizeof(int))
|
||||
{
|
||||
(*buffer) += length;
|
||||
@@ -1259,6 +1262,9 @@ asn1_get_length(unsigned char **buffer, /* IO - Pointer in buffer */
|
||||
unsigned length; /* Length */
|
||||
|
||||
|
||||
if (*buffer >= bufend)
|
||||
return (0);
|
||||
|
||||
length = **buffer;
|
||||
(*buffer) ++;
|
||||
|
||||
@@ -1301,6 +1307,9 @@ asn1_get_oid(
|
||||
int number; /* OID number */
|
||||
|
||||
|
||||
if (*buffer >= bufend)
|
||||
return (0);
|
||||
|
||||
valend = *buffer + length;
|
||||
oidptr = oid;
|
||||
oidend = oid + oidsize - 1;
|
||||
@@ -1349,9 +1358,12 @@ asn1_get_packed(
|
||||
int value; /* Value */
|
||||
|
||||
|
||||
if (*buffer >= bufend)
|
||||
return (0);
|
||||
|
||||
value = 0;
|
||||
|
||||
while ((**buffer & 128) && *buffer < bufend)
|
||||
while (*buffer < bufend && (**buffer & 128))
|
||||
{
|
||||
value = (value << 7) | (**buffer & 127);
|
||||
(*buffer) ++;
|
||||
@@ -1379,6 +1391,9 @@ asn1_get_string(
|
||||
char *string, /* I - String buffer */
|
||||
size_t strsize) /* I - String buffer size */
|
||||
{
|
||||
if (*buffer >= bufend)
|
||||
return (NULL);
|
||||
|
||||
if (length > (unsigned)(bufend - *buffer))
|
||||
length = (unsigned)(bufend - *buffer);
|
||||
|
||||
@@ -1421,6 +1436,9 @@ asn1_get_type(unsigned char **buffer, /* IO - Pointer in buffer */
|
||||
int type; /* Type */
|
||||
|
||||
|
||||
if (*buffer >= bufend)
|
||||
return (0);
|
||||
|
||||
type = **buffer;
|
||||
(*buffer) ++;
|
||||
|
||||
|
||||
+5
-5
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* snprintf functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -177,7 +177,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
break;
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, double));
|
||||
templen = strlen(temp):
|
||||
templen = strlen(temp);
|
||||
|
||||
bytes += (int)templen;
|
||||
|
||||
@@ -208,7 +208,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
break;
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, int));
|
||||
templen = strlen(temp):
|
||||
templen = strlen(temp);
|
||||
|
||||
bytes += (int)templen;
|
||||
|
||||
@@ -232,7 +232,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
break;
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, void *));
|
||||
templen = strlen(temp):
|
||||
templen = strlen(temp);
|
||||
|
||||
bytes += (int)templen;
|
||||
|
||||
|
||||
+14
-15
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* String functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -150,7 +150,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 */
|
||||
|
||||
@@ -158,15 +158,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);
|
||||
}
|
||||
@@ -316,15 +316,6 @@ _cupsStrFree(const char *s) /* I - String to free */
|
||||
|
||||
key = (_cups_sp_item_t *)(s - offsetof(_cups_sp_item_t, str));
|
||||
|
||||
#ifdef DEBUG_GUARDS
|
||||
if (key->guard != _CUPS_STR_GUARD)
|
||||
{
|
||||
DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, "
|
||||
"ref_count=%d", key, key->str, key->guard, key->ref_count));
|
||||
abort();
|
||||
}
|
||||
#endif /* DEBUG_GUARDS */
|
||||
|
||||
if ((item = (_cups_sp_item_t *)cupsArrayFind(stringpool, key)) != NULL &&
|
||||
item == key)
|
||||
{
|
||||
@@ -332,6 +323,14 @@ _cupsStrFree(const char *s) /* I - String to free */
|
||||
* Found it, dereference...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG_GUARDS
|
||||
if (key->guard != _CUPS_STR_GUARD)
|
||||
{
|
||||
DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, ref_count=%d", key, key->str, key->guard, key->ref_count));
|
||||
abort();
|
||||
}
|
||||
#endif /* DEBUG_GUARDS */
|
||||
|
||||
item->ref_count --;
|
||||
|
||||
if (!item->ref_count)
|
||||
|
||||
+72
-48
@@ -1,15 +1,9 @@
|
||||
/*
|
||||
* CUPS destination API test program for CUPS.
|
||||
*
|
||||
* Copyright 2012-2018 by Apple Inc.
|
||||
* Copyright © 2012-2018 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -43,17 +37,31 @@ int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* Connection to destination */
|
||||
cups_dest_t *dest = NULL; /* Destination */
|
||||
cups_dinfo_t *dinfo; /* Destination info */
|
||||
unsigned dflags = CUPS_DEST_FLAGS_NONE;
|
||||
/* Destination flags */
|
||||
|
||||
|
||||
if (argc < 2)
|
||||
usage(NULL);
|
||||
return (0);
|
||||
|
||||
if (!strcmp(argv[1], "--enum"))
|
||||
if (!strcmp(argv[1], "--get"))
|
||||
{
|
||||
cups_dest_t *dests; /* Destinations */
|
||||
int num_dests = cupsGetDests2(CUPS_HTTP_DEFAULT, &dests);
|
||||
/* Number of destinations */
|
||||
|
||||
for (i = 0; i < num_dests; i ++)
|
||||
enum_cb(NULL, 0, dests + i);
|
||||
|
||||
cupsFreeDests(num_dests, dests);
|
||||
return (0);
|
||||
}
|
||||
else if (!strcmp(argv[1], "--enum"))
|
||||
{
|
||||
int i; /* Looping var */
|
||||
cups_ptype_t type = 0, /* Printer type filter */
|
||||
mask = 0; /* Printer type mask */
|
||||
|
||||
@@ -103,78 +111,91 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
return (0);
|
||||
}
|
||||
else if (!strncmp(argv[1], "ipp://", 6) || !strncmp(argv[1], "ipps://", 7))
|
||||
dest = cupsGetDestWithURI(NULL, argv[1]);
|
||||
else if (!strcmp(argv[1], "default"))
|
||||
|
||||
i = 1;
|
||||
if (!strcmp(argv[i], "--device"))
|
||||
{
|
||||
dflags = CUPS_DEST_FLAGS_DEVICE;
|
||||
i ++;
|
||||
}
|
||||
|
||||
if (!strncmp(argv[i], "ipp://", 6) || !strncmp(argv[i], "ipps://", 7))
|
||||
dest = cupsGetDestWithURI(NULL, argv[i]);
|
||||
else if (!strcmp(argv[i], "default"))
|
||||
{
|
||||
dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL);
|
||||
if (dest && dest->instance)
|
||||
printf("default is \"%s/%s\".\n", dest->name, dest->instance);
|
||||
else
|
||||
else if (dest)
|
||||
printf("default is \"%s\".\n", dest->name);
|
||||
else
|
||||
puts("no default destination.");
|
||||
}
|
||||
else
|
||||
dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[1], NULL);
|
||||
dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[i], NULL);
|
||||
|
||||
if (!dest)
|
||||
{
|
||||
printf("testdest: Unable to get destination \"%s\": %s\n", argv[1], cupsLastErrorString());
|
||||
printf("testdest: Unable to get destination \"%s\": %s\n", argv[i], cupsLastErrorString());
|
||||
return (1);
|
||||
}
|
||||
|
||||
if ((http = cupsConnectDest(dest, CUPS_DEST_FLAGS_NONE, 30000, NULL, NULL, 0, NULL, NULL)) == NULL)
|
||||
i ++;
|
||||
|
||||
if ((http = cupsConnectDest(dest, dflags, 30000, NULL, NULL, 0, NULL, NULL)) == NULL)
|
||||
{
|
||||
printf("testdest: Unable to connect to destination \"%s\": %s\n", argv[1], cupsLastErrorString());
|
||||
printf("testdest: Unable to connect to destination \"%s\": %s\n", dest->name, cupsLastErrorString());
|
||||
return (1);
|
||||
}
|
||||
|
||||
if ((dinfo = cupsCopyDestInfo(http, dest)) == NULL)
|
||||
{
|
||||
printf("testdest: Unable to get information for destination \"%s\": %s\n", argv[1], cupsLastErrorString());
|
||||
printf("testdest: Unable to get information for destination \"%s\": %s\n", dest->name, cupsLastErrorString());
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (argc == 2 || (!strcmp(argv[2], "supported") && argc < 6))
|
||||
if (i == argc || !strcmp(argv[i], "supported"))
|
||||
{
|
||||
if (argc > 3)
|
||||
show_supported(http, dest, dinfo, argv[3], argv[4]);
|
||||
i ++;
|
||||
|
||||
if ((i + 1) < argc)
|
||||
show_supported(http, dest, dinfo, argv[i], argv[i + 1]);
|
||||
else if (argc > 2)
|
||||
show_supported(http, dest, dinfo, argv[3], NULL);
|
||||
show_supported(http, dest, dinfo, argv[i], NULL);
|
||||
else
|
||||
show_supported(http, dest, dinfo, NULL, NULL);
|
||||
}
|
||||
else if (!strcmp(argv[2], "conflicts") && argc > 3)
|
||||
else if (!strcmp(argv[i], "conflicts") && (i + 1) < argc)
|
||||
{
|
||||
int i, /* Looping var */
|
||||
num_options = 0;/* Number of options */
|
||||
int num_options = 0;/* Number of options */
|
||||
cups_option_t *options = NULL;/* Options */
|
||||
|
||||
for (i = 3; i < argc; i ++)
|
||||
for (i ++; i < argc; i ++)
|
||||
num_options = cupsParseOptions(argv[i], num_options, &options);
|
||||
|
||||
show_conflicts(http, dest, dinfo, num_options, options);
|
||||
}
|
||||
else if (!strcmp(argv[2], "default") && argc == 4)
|
||||
else if (!strcmp(argv[i], "default") && (i + 1) < argc)
|
||||
{
|
||||
show_default(http, dest, dinfo, argv[3]);
|
||||
show_default(http, dest, dinfo, argv[i + 1]);
|
||||
}
|
||||
else if (!strcmp(argv[2], "localize") && argc < 6)
|
||||
else if (!strcmp(argv[i], "localize"))
|
||||
{
|
||||
if (argc > 3)
|
||||
localize(http, dest, dinfo, argv[3], argv[4]);
|
||||
i ++;
|
||||
if ((i + 1) < argc)
|
||||
localize(http, dest, dinfo, argv[i], argv[i + 1]);
|
||||
else if (argc > 2)
|
||||
localize(http, dest, dinfo, argv[3], NULL);
|
||||
localize(http, dest, dinfo, argv[i], NULL);
|
||||
else
|
||||
localize(http, dest, dinfo, NULL, NULL);
|
||||
}
|
||||
else if (!strcmp(argv[2], "media"))
|
||||
else if (!strcmp(argv[i], "media"))
|
||||
{
|
||||
int i; /* Looping var */
|
||||
const char *name = NULL; /* Media name, if any */
|
||||
unsigned flags = CUPS_MEDIA_FLAGS_DEFAULT;
|
||||
/* Media selection flags */
|
||||
|
||||
for (i = 3; i < argc; i ++)
|
||||
for (i ++; i < argc; i ++)
|
||||
{
|
||||
if (!strcmp(argv[i], "borderless"))
|
||||
flags = CUPS_MEDIA_FLAGS_BORDERLESS;
|
||||
@@ -192,19 +213,19 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
show_media(http, dest, dinfo, flags, name);
|
||||
}
|
||||
else if (!strcmp(argv[2], "print") && argc > 3)
|
||||
else if (!strcmp(argv[i], "print") && (i + 1) < argc)
|
||||
{
|
||||
int i, /* Looping var */
|
||||
num_options = 0;/* Number of options */
|
||||
int num_options = 0;/* Number of options */
|
||||
cups_option_t *options = NULL;/* Options */
|
||||
const char *filename = argv[i + 1];
|
||||
|
||||
for (i = 4; i < argc; i ++)
|
||||
for (i += 2; i < argc; i ++)
|
||||
num_options = cupsParseOptions(argv[i], num_options, &options);
|
||||
|
||||
print_file(http, dest, dinfo, argv[3], num_options, options);
|
||||
print_file(http, dest, dinfo, filename, num_options, options);
|
||||
}
|
||||
else
|
||||
usage(argv[2]);
|
||||
usage(argv[i]);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -226,13 +247,15 @@ enum_cb(void *user_data, /* I - User data (unused) */
|
||||
(void)flags;
|
||||
|
||||
if (dest->instance)
|
||||
printf("%s%s/%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name, dest->instance);
|
||||
printf("%s%s/%s%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name, dest->instance, dest->is_default ? " (Default)" : "");
|
||||
else
|
||||
printf("%s%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name);
|
||||
printf("%s%s%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name, dest->is_default ? " (Default)" : "");
|
||||
|
||||
for (i = 0; i < dest->num_options; i ++)
|
||||
printf(" %s=\"%s\"\n", dest->options[i].name, dest->options[i].value);
|
||||
|
||||
puts("");
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
@@ -740,9 +763,10 @@ usage(const char *arg) /* I - Argument for usage message */
|
||||
printf("testdest: Unknown option \"%s\".\n", arg);
|
||||
|
||||
puts("Usage:");
|
||||
puts(" ./testdest name [operation ...]");
|
||||
puts(" ./testdest ipp://... [operation ...]");
|
||||
puts(" ./testdest ipps://... [operation ...]");
|
||||
puts(" ./testdest [--device] name [operation ...]");
|
||||
puts(" ./testdest [--device] ipp://... [operation ...]");
|
||||
puts(" ./testdest [--device] ipps://... [operation ...]");
|
||||
puts(" ./testdest --get");
|
||||
puts(" ./testdest --enum [grayscale] [color] [duplex] [staple] [small]\n"
|
||||
" [medium] [large]");
|
||||
puts("");
|
||||
|
||||
+102
-16
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* IPP test program for CUPS.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -50,7 +50,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x01, 0x01, /* IPP version */
|
||||
0x00, 0x02, /* Print-Job operation */
|
||||
0x00, 0x00, 0x00, 0x01,
|
||||
/* Request ID */
|
||||
/* Request ID */
|
||||
|
||||
IPP_TAG_OPERATION,
|
||||
|
||||
@@ -80,7 +80,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
IPP_TAG_JOB, /* job group tag */
|
||||
|
||||
IPP_TAG_BEGIN_COLLECTION,
|
||||
/* begCollection tag */
|
||||
/* begCollection tag */
|
||||
0x00, 0x09, /* Name length + name */
|
||||
'm', 'e', 'd', 'i', 'a', '-', 'c', 'o', 'l',
|
||||
0x00, 0x00, /* No value */
|
||||
@@ -89,11 +89,11 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x00, 0x0a, /* Value length + value */
|
||||
'm', 'e', 'd', 'i', 'a', '-', 's', 'i', 'z', 'e',
|
||||
IPP_TAG_BEGIN_COLLECTION,
|
||||
/* begCollection tag */
|
||||
/* begCollection tag */
|
||||
0x00, 0x00, /* Name length + name */
|
||||
0x00, 0x00, /* No value */
|
||||
IPP_TAG_MEMBERNAME,
|
||||
/* memberAttrName tag */
|
||||
/* memberAttrName tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x0b, /* Value length + value */
|
||||
'x', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
|
||||
@@ -102,7 +102,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x00, 0x04, /* Value length + value */
|
||||
0x00, 0x00, 0x54, 0x56,
|
||||
IPP_TAG_MEMBERNAME,
|
||||
/* memberAttrName tag */
|
||||
/* memberAttrName tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x0b, /* Value length + value */
|
||||
'y', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
|
||||
@@ -111,7 +111,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x00, 0x04, /* Value length + value */
|
||||
0x00, 0x00, 0x6d, 0x24,
|
||||
IPP_TAG_END_COLLECTION,
|
||||
/* endCollection tag */
|
||||
/* endCollection tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x00, /* No value */
|
||||
IPP_TAG_MEMBERNAME, /* memberAttrName tag */
|
||||
@@ -132,12 +132,12 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x00, 0x05, /* Value length + value */
|
||||
'p', 'l', 'a', 'i', 'n',
|
||||
IPP_TAG_END_COLLECTION,
|
||||
/* endCollection tag */
|
||||
/* endCollection tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x00, /* No value */
|
||||
|
||||
IPP_TAG_BEGIN_COLLECTION,
|
||||
/* begCollection tag */
|
||||
/* begCollection tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x00, /* No value */
|
||||
IPP_TAG_MEMBERNAME, /* memberAttrName tag */
|
||||
@@ -145,11 +145,11 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x00, 0x0a, /* Value length + value */
|
||||
'm', 'e', 'd', 'i', 'a', '-', 's', 'i', 'z', 'e',
|
||||
IPP_TAG_BEGIN_COLLECTION,
|
||||
/* begCollection tag */
|
||||
/* begCollection tag */
|
||||
0x00, 0x00, /* Name length + name */
|
||||
0x00, 0x00, /* No value */
|
||||
IPP_TAG_MEMBERNAME,
|
||||
/* memberAttrName tag */
|
||||
/* memberAttrName tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x0b, /* Value length + value */
|
||||
'x', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
|
||||
@@ -158,7 +158,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x00, 0x04, /* Value length + value */
|
||||
0x00, 0x00, 0x52, 0x08,
|
||||
IPP_TAG_MEMBERNAME,
|
||||
/* memberAttrName tag */
|
||||
/* memberAttrName tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x0b, /* Value length + value */
|
||||
'y', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
|
||||
@@ -167,7 +167,7 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x00, 0x04, /* Value length + value */
|
||||
0x00, 0x00, 0x74, 0x04,
|
||||
IPP_TAG_END_COLLECTION,
|
||||
/* endCollection tag */
|
||||
/* endCollection tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x00, /* No value */
|
||||
IPP_TAG_MEMBERNAME, /* memberAttrName tag */
|
||||
@@ -188,7 +188,72 @@ static ipp_uchar_t collection[] = /* Collection buffer */
|
||||
0x00, 0x06, /* Value length + value */
|
||||
'g', 'l', 'o', 's', 's', 'y',
|
||||
IPP_TAG_END_COLLECTION,
|
||||
/* endCollection tag */
|
||||
/* endCollection tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x00, /* No value */
|
||||
|
||||
IPP_TAG_END /* end tag */
|
||||
};
|
||||
static ipp_uchar_t bad_collection[] = /* Collection buffer (bad encoding) */
|
||||
{
|
||||
0x01, 0x01, /* IPP version */
|
||||
0x00, 0x02, /* Print-Job operation */
|
||||
0x00, 0x00, 0x00, 0x01,
|
||||
/* Request ID */
|
||||
|
||||
IPP_TAG_OPERATION,
|
||||
|
||||
IPP_TAG_CHARSET,
|
||||
0x00, 0x12, /* Name length + name */
|
||||
'a','t','t','r','i','b','u','t','e','s','-',
|
||||
'c','h','a','r','s','e','t',
|
||||
0x00, 0x05, /* Value length + value */
|
||||
'u','t','f','-','8',
|
||||
|
||||
IPP_TAG_LANGUAGE,
|
||||
0x00, 0x1b, /* Name length + name */
|
||||
'a','t','t','r','i','b','u','t','e','s','-',
|
||||
'n','a','t','u','r','a','l','-','l','a','n',
|
||||
'g','u','a','g','e',
|
||||
0x00, 0x02, /* Value length + value */
|
||||
'e','n',
|
||||
|
||||
IPP_TAG_URI,
|
||||
0x00, 0x0b, /* Name length + name */
|
||||
'p','r','i','n','t','e','r','-','u','r','i',
|
||||
0x00, 0x1c, /* Value length + value */
|
||||
'i','p','p',':','/','/','l','o','c','a','l',
|
||||
'h','o','s','t','/','p','r','i','n','t','e',
|
||||
'r','s','/','f','o','o',
|
||||
|
||||
IPP_TAG_JOB, /* job group tag */
|
||||
|
||||
IPP_TAG_BEGIN_COLLECTION,
|
||||
/* begCollection tag */
|
||||
0x00, 0x09, /* Name length + name */
|
||||
'm', 'e', 'd', 'i', 'a', '-', 'c', 'o', 'l',
|
||||
0x00, 0x00, /* No value */
|
||||
IPP_TAG_BEGIN_COLLECTION,
|
||||
/* begCollection tag */
|
||||
0x00, 0x0a, /* Name length + name */
|
||||
'm', 'e', 'd', 'i', 'a', '-', 's', 'i', 'z', 'e',
|
||||
0x00, 0x00, /* No value */
|
||||
IPP_TAG_INTEGER, /* integer tag */
|
||||
0x00, 0x0b, /* Name length + name */
|
||||
'x', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
|
||||
0x00, 0x04, /* Value length + value */
|
||||
0x00, 0x00, 0x54, 0x56,
|
||||
IPP_TAG_INTEGER, /* integer tag */
|
||||
0x00, 0x0b, /* Name length + name */
|
||||
'y', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n',
|
||||
0x00, 0x04, /* Value length + value */
|
||||
0x00, 0x00, 0x6d, 0x24,
|
||||
IPP_TAG_END_COLLECTION,
|
||||
/* endCollection tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x00, /* No value */
|
||||
IPP_TAG_END_COLLECTION,
|
||||
/* endCollection tag */
|
||||
0x00, 0x00, /* No name */
|
||||
0x00, 0x00, /* No value */
|
||||
|
||||
@@ -200,7 +265,7 @@ static ipp_uchar_t mixed[] = /* Mixed value buffer */
|
||||
0x01, 0x01, /* IPP version */
|
||||
0x00, 0x02, /* Print-Job operation */
|
||||
0x00, 0x00, 0x00, 0x01,
|
||||
/* Request ID */
|
||||
/* Request ID */
|
||||
|
||||
IPP_TAG_OPERATION,
|
||||
|
||||
@@ -589,12 +654,33 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
ippDelete(request);
|
||||
|
||||
/*
|
||||
* Read the bad collection data and confirm we get an error...
|
||||
*/
|
||||
|
||||
fputs("Read Bad Collection from Memory: ", stdout);
|
||||
|
||||
request = ippNew();
|
||||
data.rpos = 0;
|
||||
data.wused = sizeof(bad_collection);
|
||||
data.wsize = sizeof(bad_collection);
|
||||
data.wbuffer = bad_collection;
|
||||
|
||||
while ((state = ippReadIO(&data, (ipp_iocb_t)read_cb, 1, NULL, request)) != IPP_STATE_DATA)
|
||||
if (state == IPP_STATE_ERROR)
|
||||
break;
|
||||
|
||||
if (state != IPP_STATE_ERROR)
|
||||
puts("FAIL (read successful)");
|
||||
else
|
||||
puts("PASS");
|
||||
|
||||
/*
|
||||
* Read the mixed data and confirm we converted everything to rangeOfInteger
|
||||
* values...
|
||||
*/
|
||||
|
||||
printf("Read Mixed integer/rangeOfInteger from Memory: ");
|
||||
fputs("Read Mixed integer/rangeOfInteger from Memory: ", stdout);
|
||||
|
||||
request = ippNew();
|
||||
data.rpos = 0;
|
||||
|
||||
@@ -1054,6 +1054,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
{
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_UNKNOWN :
|
||||
printf(" %s(%s): PPD_CUSTOM_UNKNOWN (error)\n", cparam->name, cparam->text);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_CURVE :
|
||||
printf(" %s(%s): PPD_CUSTOM_CURVE (%g to %g)\n",
|
||||
cparam->name, cparam->text,
|
||||
|
||||
+37
-12
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* TLS support code for CUPS using GNU TLS.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -173,10 +173,33 @@ cupsMakeServerCredentials(
|
||||
gnutls_x509_crt_set_activation_time(crt, curtime);
|
||||
gnutls_x509_crt_set_expiration_time(crt, curtime + 10 * 365 * 86400);
|
||||
gnutls_x509_crt_set_ca_status(crt, 0);
|
||||
gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, common_name, (unsigned)strlen(common_name), GNUTLS_FSAN_SET);
|
||||
if (!strchr(common_name, '.'))
|
||||
{
|
||||
/*
|
||||
* Add common_name.local to the list, too...
|
||||
*/
|
||||
|
||||
char localname[256]; /* hostname.local */
|
||||
|
||||
snprintf(localname, sizeof(localname), "%s.local", common_name);
|
||||
gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, localname, (unsigned)strlen(localname), GNUTLS_FSAN_APPEND);
|
||||
}
|
||||
gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, "localhost", 9, GNUTLS_FSAN_APPEND);
|
||||
if (num_alt_names > 0)
|
||||
gnutls_x509_crt_set_subject_alternative_name(crt, GNUTLS_SAN_DNSNAME, alt_names[0]);
|
||||
{
|
||||
int i; /* Looping var */
|
||||
|
||||
for (i = 0; i < num_alt_names; i ++)
|
||||
{
|
||||
if (strcmp(alt_names[i], "localhost"))
|
||||
{
|
||||
gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, alt_names[i], (unsigned)strlen(alt_names[i]), GNUTLS_FSAN_APPEND);
|
||||
}
|
||||
}
|
||||
}
|
||||
gnutls_x509_crt_set_key_purpose_oid(crt, GNUTLS_KP_TLS_WWW_SERVER, 0);
|
||||
gnutls_x509_crt_set_key_usage(crt, GNUTLS_KEY_KEY_ENCIPHERMENT);
|
||||
gnutls_x509_crt_set_key_usage(crt, GNUTLS_KEY_DIGITAL_SIGNATURE | GNUTLS_KEY_KEY_ENCIPHERMENT);
|
||||
gnutls_x509_crt_set_version(crt, 3);
|
||||
|
||||
bytes = sizeof(buffer);
|
||||
@@ -380,8 +403,8 @@ httpCredentialsAreValidForName(
|
||||
|
||||
if (result)
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count; /* Number of revoked certificates */
|
||||
gnutls_x509_crl_iter_t iter = NULL;
|
||||
/* Iterator */
|
||||
unsigned char cserial[1024], /* Certificate serial number */
|
||||
rserial[1024]; /* Revoked serial number */
|
||||
size_t cserial_size, /* Size of cert serial number */
|
||||
@@ -389,22 +412,24 @@ httpCredentialsAreValidForName(
|
||||
|
||||
_cupsMutexLock(&tls_mutex);
|
||||
|
||||
count = gnutls_x509_crl_get_crt_count(tls_crl);
|
||||
|
||||
if (count > 0)
|
||||
if (gnutls_x509_crl_get_crt_count(tls_crl) > 0)
|
||||
{
|
||||
cserial_size = sizeof(cserial);
|
||||
gnutls_x509_crt_get_serial(cert, cserial, &cserial_size);
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
rserial_size = sizeof(rserial);
|
||||
if (!gnutls_x509_crl_get_crt_serial(tls_crl, (unsigned)i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, rserial_size))
|
||||
rserial_size = sizeof(rserial);
|
||||
|
||||
while (!gnutls_x509_crl_iter_crt_serial(tls_crl, &iter, rserial, &rserial_size, NULL))
|
||||
{
|
||||
if (cserial_size == rserial_size && !memcmp(cserial, rserial, rserial_size))
|
||||
{
|
||||
result = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
rserial_size = sizeof(rserial);
|
||||
}
|
||||
gnutls_x509_crl_iter_deinit(iter);
|
||||
}
|
||||
|
||||
_cupsMutexUnlock(&tls_mutex);
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
float: left;
|
||||
margin-left: 0.5%;
|
||||
margin-right: 0;
|
||||
padding-bottom: 40px;
|
||||
width: 33%;
|
||||
}
|
||||
.row .thirds:first-child {
|
||||
@@ -86,6 +87,7 @@
|
||||
float: left;
|
||||
margin-left: 0.5%;
|
||||
margin-right: 0;
|
||||
padding-bottom: 40px;
|
||||
width: 49.75%;
|
||||
}
|
||||
.row .halves:first-child {
|
||||
|
||||
@@ -50,6 +50,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS und das CUPS Logo sind Warenzeichen der <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. Alle Rechte vorbehalten.</div>
|
||||
<div class="footer">CUPS und das CUPS Logo sind Warenzeichen der <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. Alle Rechte vorbehalten.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -50,6 +50,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor © 2007-2018 Apple Inc. Todos los derechos reservados.</div>
|
||||
<div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor © 2007-2019 Apple Inc. Todos los derechos reservados.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -219,7 +219,7 @@ The value "0" disables log rotation.
|
||||
The default is "1048576" (1MB).
|
||||
<dt><a name="MultipleOperationTimeout"></a><b>MultipleOperationTimeout </b><i>seconds</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the maximum amount of time to allow between files in a multiple file print job.
|
||||
The default is "300" (5 minutes).
|
||||
The default is "900" (15 minutes).
|
||||
<dt><a name="Policy"></a><b><Policy </b><i>name</i><b>> </b>... <b></Policy></b>
|
||||
<dd style="margin-left: 5.0em">Specifies access control for the named policy.
|
||||
<dt><a name="Port"></a><b>Port </b><i>number</i>
|
||||
@@ -294,7 +294,7 @@ The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum p
|
||||
The default is "No".
|
||||
<dt><a name="Timeout"></a><b>Timeout </b><i>seconds</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the HTTP request timeout.
|
||||
The default is "300" (5 minutes).
|
||||
The default is "900" (15 minutes).
|
||||
<dt><a name="WebInterface"></a><b>WebInterface yes</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>WebInterface no</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether the web interface is enabled.
|
||||
@@ -601,7 +601,7 @@ Require authentication for accesses from outside the 10. network:
|
||||
<a href="man-subscriptions.conf.html?TOPIC=Man+Pages"><b>subscriptions.conf</b>(5),</a>
|
||||
CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2007-2018 by Apple Inc.
|
||||
Copyright © 2007-2019 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -230,7 +230,7 @@ The following predicates are understood following the <b>EXPECT</b> test directi
|
||||
<dd style="margin-left: 5.0em">Makes the <b>EXPECT</b> conditions apply only if the specified variable is not defined.
|
||||
<dt><b>IN-GROUP </b><i>tag</i>
|
||||
<dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to be in the specified group tag.
|
||||
<dt><b>OF-TYPE </b><i>tag[,tag,...]</i>
|
||||
<dt><b>OF-TYPE </b><i>tag[|tag,...]</i>
|
||||
<dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to use one of the specified value tag(s).
|
||||
<dt><b>REPEAT-LIMIT </b><i>number</i>
|
||||
<dd style="margin-left: 5.0em"><br>
|
||||
@@ -532,7 +532,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp-registrations)">
|
||||
PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp)">http://www.pwg.org/ipp)</a>,
|
||||
RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011">http://tools.ietf.org/html/rfc8011</a>)
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2007-2017 by Apple Inc.
|
||||
Copyright © 2007-2019 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+1
-1
@@ -50,6 +50,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. All rights reserved.</div>
|
||||
<div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. All rights reserved.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -50,6 +50,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. All rights reserved.</div>
|
||||
<div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. All rights reserved.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -51,6 +51,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS e o logo do CUPS são marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. Todos os direitos reservados.</div>
|
||||
<div class="footer">CUPS e o logo do CUPS são marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. Todos os direitos reservados.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -51,6 +51,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS а также логотип CUPS являются зарегистрированными торговыми марками <A HREF="http://www.apple.com">Apple Inc.</A> Авторские права на CUPS принадлежат (2007-2018) компании Apple Inc. Все права защищены.</div>
|
||||
<div class="footer">CUPS а также логотип CUPS являются зарегистрированными торговыми марками <A HREF="http://www.apple.com">Apple Inc.</A> Авторские права на CUPS принадлежат (2007-2019) компании Apple Inc. Все права защищены.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+77
-14
@@ -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.
|
||||
@@ -25,6 +25,29 @@
|
||||
#endif /* HAVE_STDINT_H */
|
||||
|
||||
|
||||
/*
|
||||
* 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"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Private structures...
|
||||
*/
|
||||
@@ -1098,7 +1121,10 @@ cupsRasterWriteHeader(
|
||||
* zeroed.
|
||||
*/
|
||||
|
||||
unsigned char appleheader[32]; /* Raw page header */
|
||||
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)
|
||||
{
|
||||
@@ -1125,24 +1151,35 @@ 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[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);
|
||||
appleheader[15] = (unsigned char)(r->header.cupsWidth);
|
||||
appleheader[16] = (unsigned char)(r->header.cupsHeight >> 24);
|
||||
appleheader[17] = (unsigned char)(r->header.cupsHeight >> 16);
|
||||
appleheader[18] = (unsigned char)(r->header.cupsHeight >> 8);
|
||||
appleheader[19] = (unsigned char)(r->header.cupsHeight);
|
||||
appleheader[16] = (unsigned char)(height >> 24);
|
||||
appleheader[17] = (unsigned char)(height >> 16);
|
||||
appleheader[18] = (unsigned char)(height >> 8);
|
||||
appleheader[19] = (unsigned char)(height);
|
||||
appleheader[20] = (unsigned char)(r->header.HWResolution[0] >> 24);
|
||||
appleheader[21] = (unsigned char)(r->header.HWResolution[0] >> 16);
|
||||
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] = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader));
|
||||
}
|
||||
else
|
||||
@@ -1271,8 +1308,9 @@ cupsRasterWriteHeader2(
|
||||
* 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)
|
||||
@@ -1300,11 +1338,14 @@ cupsRasterWriteHeader2(
|
||||
|
||||
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] = 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);
|
||||
@@ -1318,6 +1359,15 @@ cupsRasterWriteHeader2(
|
||||
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] = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader));
|
||||
}
|
||||
else
|
||||
@@ -1589,7 +1639,7 @@ cups_raster_read_header(
|
||||
{
|
||||
CUPS_CSPACE_SW,
|
||||
CUPS_CSPACE_SRGB,
|
||||
CUPS_CSPACE_RGBW,
|
||||
CUPS_CSPACE_CIELab,
|
||||
CUPS_CSPACE_ADOBERGB,
|
||||
CUPS_CSPACE_W,
|
||||
CUPS_CSPACE_RGB,
|
||||
@@ -1599,7 +1649,7 @@ cups_raster_read_header(
|
||||
{
|
||||
1,
|
||||
3,
|
||||
4,
|
||||
3,
|
||||
3,
|
||||
1,
|
||||
3,
|
||||
@@ -1632,8 +1682,21 @@ cups_raster_read_header(
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ StartPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
* Setup printer/job attributes...
|
||||
*/
|
||||
|
||||
Duplex = header->Duplex;
|
||||
Duplex = (int)header->Duplex;
|
||||
ColorBits = header->cupsBitsPerColor;
|
||||
|
||||
if ((!Duplex || (Page & 1)) && header->MediaPosition)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Label printer filter for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 2001-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -619,7 +619,14 @@ EndPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
*/
|
||||
|
||||
puts("^XZ");
|
||||
|
||||
/*
|
||||
* Delete the label image...
|
||||
*/
|
||||
|
||||
puts("^XA");
|
||||
puts("^IDR:CUPS.GRF^FS");
|
||||
puts("^XZ");
|
||||
|
||||
/*
|
||||
* Cut the label as needed...
|
||||
|
||||
@@ -795,7 +795,7 @@ monitor_printer(
|
||||
|
||||
if (printer_state != monitor->printer_state || strcmp(printer_state_reasons, monitor->printer_state_reasons))
|
||||
{
|
||||
printf("PRINTER: %s (%s)\n", ippEnumString("printer-state", printer_state), printer_state_reasons);
|
||||
printf("PRINTER: %s (%s)\n", ippEnumString("printer-state", (int)printer_state), printer_state_reasons);
|
||||
|
||||
monitor->printer_state = printer_state;
|
||||
strlcpy(monitor->printer_state_reasons, printer_state_reasons, sizeof(monitor->printer_state_reasons));
|
||||
@@ -825,7 +825,7 @@ monitor_printer(
|
||||
|
||||
if (job_state != monitor->job_state || strcmp(job_state_reasons, monitor->job_state_reasons))
|
||||
{
|
||||
printf("JOB %d: %s (%s)\n", monitor->job_id, ippEnumString("job-state", job_state), job_state_reasons);
|
||||
printf("JOB %d: %s (%s)\n", monitor->job_id, ippEnumString("job-state", (int)job_state), job_state_reasons);
|
||||
|
||||
monitor->job_state = job_state;
|
||||
strlcpy(monitor->job_state_reasons, job_state_reasons, sizeof(monitor->job_state_reasons));
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Raster test program routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -560,6 +560,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;
|
||||
@@ -690,6 +692,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;
|
||||
|
||||
+660
-659
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
@@ -1722,7 +1722,7 @@
|
||||
"cups-deviced failed to execute." = "cups-deviced failed to execute.";
|
||||
"cups-driverd failed to execute." = "cups-driverd failed to execute.";
|
||||
"cupsaddsmb: No PPD file for printer \"%s\" - %s" = "cupsaddsmb: No PPD file for printer “%s” - %s";
|
||||
"cupsctl: Cannot set Listen or Port directly." = "cupsctl: Cannot set Listen or Port directly.";
|
||||
"cupsctl: Cannot set %s directly." = "cupsctl: Cannot set %s directly.";
|
||||
"cupsctl: Unable to connect to server: %s" = "cupsctl: Unable to connect to server: %s";
|
||||
"cupsctl: Unknown option \"%s\"" = "cupsctl: Unknown option “%s”";
|
||||
"cupsctl: Unknown option \"-%c\"" = "cupsctl: Unknown option “-%c”";
|
||||
|
||||
+7
-3
@@ -32,7 +32,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.4.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2012-09-29 11:21+0200\n"
|
||||
"Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
|
||||
"Language-Team: Catalan <ca@dodds.net>\n"
|
||||
@@ -6271,8 +6271,9 @@ msgstr "no s'ha pogut executar correctament la cups-driverd"
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr "cupsaddsmb: falta el fitxer PPD per la impressora «%s» - %s"
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
msgstr "cupsctl: no es pot establir Listen o Port directament."
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cupsctl: Unable to connect to server: %s"
|
||||
@@ -13776,6 +13777,9 @@ msgstr "Z Offset"
|
||||
#~ "convert: feu servir l'opció -f per especificar el fitxer que voleu "
|
||||
#~ "convertir."
|
||||
|
||||
#~ msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#~ msgstr "cupsctl: no es pot establir Listen o Port directament."
|
||||
|
||||
#~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
|
||||
#~ msgstr ""
|
||||
#~ "cupsd: no s'ha compilat amb compatibilitat per launchd(8). S'executa en "
|
||||
|
||||
+3
-2
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2012-09-14 10:26+0100\n"
|
||||
"Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
|
||||
"Language-Team: Czech\n"
|
||||
@@ -6002,7 +6002,8 @@ msgstr "Nepodařilo se spustit \"cups-driverd\"."
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
|
||||
+7
-3
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2017-10-25 14:57+0200\n"
|
||||
"Last-Translator: Michael Weghorn <m.weghorn@posteo.de>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -6132,8 +6132,9 @@ msgstr "„cups-driverd“ konnte nicht ausgeführt werden."
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr "cupsaddsmb: Keine PPD Datei für Drucker »%s« - %s"
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
msgstr "cupsctl: Kann nicht direkt auf dem Port hören."
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cupsctl: Unable to connect to server: %s"
|
||||
@@ -13326,6 +13327,9 @@ msgstr "Z Offset"
|
||||
#~ msgid "compression.none"
|
||||
#~ msgstr "None"
|
||||
|
||||
#~ msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#~ msgstr "cupsctl: Kann nicht direkt auf dem Port hören."
|
||||
|
||||
#~ msgid "destination-accesses"
|
||||
#~ msgstr "Destination Accesses"
|
||||
|
||||
|
||||
+9
-5
@@ -16,7 +16,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.2\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2016-06-26 21:17+0100\n"
|
||||
"Last-Translator: Juan Pablo González Riopedre <jpgriopedre@yahoo.es>\n"
|
||||
"Language-Team: Spanish\n"
|
||||
@@ -5978,8 +5978,8 @@ msgstr "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]"
|
||||
msgid ""
|
||||
"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
|
||||
msgstr ""
|
||||
"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN."
|
||||
"ppd[.gz]]"
|
||||
"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd"
|
||||
"[.gz]]"
|
||||
|
||||
msgid ""
|
||||
"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
|
||||
@@ -6315,8 +6315,9 @@ msgstr "Ha fallado al ejecutarse cups-driverd."
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr "cupsaddsmb: No hay archivo PPD para la impresora \"%s\" - %s"
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
msgstr "cupsctl: No se puede establecer Listen o Port directamente."
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cupsctl: Unable to connect to server: %s"
|
||||
@@ -13715,6 +13716,9 @@ msgstr "Z Offset"
|
||||
#~ msgid "compression.none"
|
||||
#~ msgstr "None"
|
||||
|
||||
#~ msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#~ msgstr "cupsctl: No se puede establecer Listen o Port directamente."
|
||||
|
||||
#~ msgid "destination-accesses"
|
||||
#~ msgstr "Destination Accesses"
|
||||
|
||||
|
||||
+3
-2
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2012-12-12 11:12+0100\n"
|
||||
"Last-Translator: Stéphane Blondon <stephane.blondon@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -6069,7 +6069,8 @@ msgstr "L’exécution de « cups-driverd » a échoué."
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
|
||||
+7
-3
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2013-07-14 12:00+0200\n"
|
||||
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
|
||||
"Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
|
||||
@@ -6294,8 +6294,9 @@ msgstr "cups-driverd ha smesso di funzionare."
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr "cupsaddsmb: nessun file PPD per la stampante \"%s\" - %s"
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
msgstr "cupsctl: non è possibile impostare direttamente Listen o Port."
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cupsctl: Unable to connect to server: %s"
|
||||
@@ -13823,6 +13824,9 @@ msgstr "Z Offset"
|
||||
#~ msgid "compression.none"
|
||||
#~ msgstr "None"
|
||||
|
||||
#~ msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#~ msgstr "cupsctl: non è possibile impostare direttamente Listen o Port."
|
||||
|
||||
#~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
|
||||
#~ msgstr ""
|
||||
#~ "cupsd: launchd(8) non supporta i compilati, quando è in modalità normale."
|
||||
|
||||
+7
-3
@@ -28,7 +28,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2014-11-15 19:27+0900\n"
|
||||
"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
|
||||
"Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
|
||||
@@ -6251,8 +6251,9 @@ msgstr "cups-driverd の実行に失敗しました。"
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr "cupsaddsmb: プリンター \"%s\" の PPD ファイルがありません - %s"
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
msgstr "cupsctl: Listen あるいは Port を直接設定できません。"
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cupsctl: Unable to connect to server: %s"
|
||||
@@ -13843,6 +13844,9 @@ msgstr "Z Offset"
|
||||
#~ msgid "compression.none"
|
||||
#~ msgstr "None"
|
||||
|
||||
#~ msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#~ msgstr "cupsctl: Listen あるいは Port を直接設定できません。"
|
||||
|
||||
#~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
|
||||
#~ msgstr ""
|
||||
#~ "cupsd: launchd(8) サポートがコンパイルされていないので、通常モードで動作し"
|
||||
|
||||
@@ -40,7 +40,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.1.2\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2016-01-31 16:45-0200\n"
|
||||
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
|
||||
"Language-Team: Brazilian Portuguese <traducao-cups-pt-br@googlegroups.com>\n"
|
||||
@@ -6295,8 +6295,9 @@ msgstr "cups-driverd falhou na execução."
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr "cupsaddsmb: Nenhum arquivo PPD para a impressora \"%s\" - %s"
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
msgstr "cupsctl: Não foi possível definir diretamente Porta ou Listen."
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cupsctl: Unable to connect to server: %s"
|
||||
@@ -13814,6 +13815,9 @@ msgstr "Z Offset"
|
||||
#~ msgid "compression.none"
|
||||
#~ msgstr "None"
|
||||
|
||||
#~ msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#~ msgstr "cupsctl: Não foi possível definir diretamente Porta ou Listen."
|
||||
|
||||
#~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
|
||||
#~ msgstr ""
|
||||
#~ "cupsd: Compilado sem suporte a launchd(8) e, portanto, executando no modo "
|
||||
|
||||
+7
-3
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2015-01-28 12:00-0800\n"
|
||||
"Last-Translator: Aleksandr Proklov\n"
|
||||
"Language-Team: PuppyRus Linux Team\n"
|
||||
@@ -6208,8 +6208,9 @@ msgstr "Не удалось выполнить cups-driverd."
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr "cupsaddsmb: Нет PPD-файла для принтера \"%s\" - %s"
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
msgstr "cupsctl: Не удается задать Listen или Port."
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cupsctl: Unable to connect to server: %s"
|
||||
@@ -13605,6 +13606,9 @@ msgstr "Z Offset"
|
||||
#~ msgid "compression.none"
|
||||
#~ msgstr "None"
|
||||
|
||||
#~ msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#~ msgstr "cupsctl: Не удается задать Listen или Port."
|
||||
|
||||
#~ msgid "destination-accesses"
|
||||
#~ msgstr "Destination Accesses"
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
|
||||
"POT-Creation-Date: 2018-09-28 11:22-0400\n"
|
||||
"POT-Creation-Date: 2019-05-15 10:31-0400\n"
|
||||
"PO-Revision-Date: 2017-06-11 12:38+0800\n"
|
||||
"Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -6165,8 +6165,9 @@ msgstr "无法执行 cups-driverd。"
|
||||
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
|
||||
msgstr "cupsaddsmb:打印机“%s”无 PPD 文件 — %s"
|
||||
|
||||
msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
msgstr "cupsctl:无法直接设置 Listen 或 Port 值。"
|
||||
#, c-format
|
||||
msgid "cupsctl: Cannot set %s directly."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cupsctl: Unable to connect to server: %s"
|
||||
@@ -13505,6 +13506,9 @@ msgstr "Z Offset"
|
||||
#~ msgid "compression.none"
|
||||
#~ msgstr "None"
|
||||
|
||||
#~ msgid "cupsctl: Cannot set Listen or Port directly."
|
||||
#~ msgstr "cupsctl:无法直接设置 Listen 或 Port 值。"
|
||||
|
||||
#~ msgid "destination-accesses"
|
||||
#~ msgstr "Destination Accesses"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
.\"
|
||||
.\" cupsd.conf man page for CUPS.
|
||||
.\"
|
||||
.\" Copyright © 2007-2018 by Apple Inc.
|
||||
.\" Copyright © 2007-2019 by Apple Inc.
|
||||
.\" Copyright © 1997-2006 by Easy Software Products.
|
||||
.\"
|
||||
.\" These coded instructions, statements, and computer programs are the
|
||||
@@ -10,7 +10,7 @@
|
||||
.\" which should have been included with this file. If this file is
|
||||
.\" file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
.\"
|
||||
.TH cupsd.conf 5 "CUPS" "24 April 2018" "Apple Inc."
|
||||
.TH cupsd.conf 5 "CUPS" "2 May 2019" "Apple Inc."
|
||||
.SH NAME
|
||||
cupsd.conf \- server configuration file for cups
|
||||
.SH DESCRIPTION
|
||||
@@ -341,7 +341,7 @@ The default is "1048576" (1MB).
|
||||
.TP 5
|
||||
\fBMultipleOperationTimeout \fIseconds\fR
|
||||
Specifies the maximum amount of time to allow between files in a multiple file print job.
|
||||
The default is "300" (5 minutes).
|
||||
The default is "900" (15 minutes).
|
||||
.\"#Policy
|
||||
.TP 5
|
||||
\fB<Policy \fIname\fB> \fR... \fB</Policy>\fR
|
||||
@@ -459,7 +459,7 @@ The default is "No".
|
||||
.TP 5
|
||||
\fBTimeout \fIseconds\fR
|
||||
Specifies the HTTP request timeout.
|
||||
The default is "300" (5 minutes).
|
||||
The default is "900" (15 minutes).
|
||||
.\"#WebInterface
|
||||
.TP 5
|
||||
\fBWebInterface yes\fR
|
||||
@@ -876,4 +876,4 @@ Require authentication for accesses from outside the 10. network:
|
||||
.BR subscriptions.conf (5),
|
||||
CUPS Online Help (http://localhost:631/help)
|
||||
.SH COPYRIGHT
|
||||
Copyright \[co] 2007-2018 by Apple Inc.
|
||||
Copyright \[co] 2007-2019 by Apple Inc.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
.\"
|
||||
.\" ipptoolfile man page.
|
||||
.\"
|
||||
.\" Copyright 2010-2017 by Apple Inc.
|
||||
.\" Copyright 2010-2019 by Apple Inc.
|
||||
.\"
|
||||
.\" These coded instructions, statements, and computer programs are the
|
||||
.\" property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -9,7 +9,7 @@
|
||||
.\" which should have been included with this file. If this file is
|
||||
.\" file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
.\"
|
||||
.TH ipptoolfile 5 "CUPS" "15 June 2017" "Apple Inc."
|
||||
.TH ipptoolfile 5 "CUPS" "5 August 2019" "Apple Inc."
|
||||
.SH NAME
|
||||
ipptoolfile \- ipptool file format
|
||||
.SH DESCRIPTION
|
||||
@@ -297,7 +297,7 @@ Makes the \fBEXPECT\fR conditions apply only if the specified variable is not de
|
||||
\fBIN\-GROUP \fItag\fR
|
||||
Requires the \fBEXPECT\fR attribute to be in the specified group tag.
|
||||
.TP 5
|
||||
\fBOF\-TYPE \fItag[,tag,...]\fR
|
||||
\fBOF\-TYPE \fItag[|tag,...]\fR
|
||||
Requires the \fBEXPECT\fR attribute to use one of the specified value tag(s).
|
||||
.TP 5
|
||||
\fBREPEAT\-LIMIT \fInumber\fR
|
||||
@@ -649,4 +649,4 @@ IANA IPP Registry (http://www.iana.org/assignments/ipp-registrations),
|
||||
PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp),
|
||||
RFC 8011 (http://tools.ietf.org/html/rfc8011)
|
||||
.SH COPYRIGHT
|
||||
Copyright \[co] 2007-2017 by Apple Inc.
|
||||
Copyright \[co] 2007-2019 by Apple Inc.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// Array class for the CUPS PPD Compiler.
|
||||
//
|
||||
// Copyright 2007-2014 by Apple Inc.
|
||||
// Copyright 2007-2019 by Apple Inc.
|
||||
// Copyright 2002-2005 by Easy Software Products.
|
||||
//
|
||||
// These coded instructions, statements, and computer programs are the
|
||||
@@ -39,7 +39,7 @@ ppdcArray::ppdcArray(ppdcArray *a)
|
||||
|
||||
memcpy(data, a->data, (size_t)count * sizeof(ppdcShared *));
|
||||
|
||||
for (int i = 0; i < count; i ++)
|
||||
for (size_t i = 0; i < count; i ++)
|
||||
data[i]->retain();
|
||||
}
|
||||
else
|
||||
@@ -64,7 +64,7 @@ ppdcArray::~ppdcArray()
|
||||
{
|
||||
PPDC_DELETE;
|
||||
|
||||
for (int i = 0; i < count; i ++)
|
||||
for (size_t i = 0; i < count; i ++)
|
||||
data[i]->release();
|
||||
|
||||
if (alloc)
|
||||
@@ -134,7 +134,7 @@ ppdcArray::next()
|
||||
void
|
||||
ppdcArray::remove(ppdcShared *d) // I - Data element
|
||||
{
|
||||
int i; // Looping var
|
||||
size_t i; // Looping var
|
||||
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// Definitions for the CUPS PPD Compiler.
|
||||
//
|
||||
// Copyright 2007-2009 by Apple Inc.
|
||||
// Copyright 2007-2019 by Apple Inc.
|
||||
// Copyright 2002-2007 by Easy Software Products.
|
||||
//
|
||||
// These coded instructions, statements, and computer programs are the
|
||||
@@ -109,7 +109,7 @@ class ppdcArray //// Shared Array
|
||||
{
|
||||
public:
|
||||
|
||||
int count, // Number of elements
|
||||
size_t count, // Number of elements
|
||||
alloc, // Allocated elements
|
||||
current; // Current element
|
||||
ppdcShared **data; // Elements
|
||||
|
||||
+3
-5
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// PPD file merge utility for the CUPS PPD Compiler.
|
||||
//
|
||||
// Copyright 2007-2014 by Apple Inc.
|
||||
// Copyright 2002-2007 by Easy Software Products.
|
||||
// Copyright © 2007-2018 by Apple Inc.
|
||||
// Copyright © 2002-2007 by Easy Software Products.
|
||||
//
|
||||
// These coded instructions, statements, and computer programs are the
|
||||
// property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -42,6 +42,7 @@ main(int argc, // I - Number of command-line arguments
|
||||
cups_array_t *ppds; // Array of PPD files
|
||||
const char *inname, // First input filename
|
||||
*outname; // Output filename (if any)
|
||||
char bckname[1024]; // Backup filename
|
||||
cups_file_t *infile, // Input file
|
||||
*outfile; // Output file
|
||||
cups_array_t *languages; // Languages in file
|
||||
@@ -141,9 +142,6 @@ main(int argc, // I - Number of command-line arguments
|
||||
if (outname && !strcmp(inname, outname))
|
||||
{
|
||||
// Rename input filename so that we don't overwrite it...
|
||||
char bckname[1024]; // Backup filename
|
||||
|
||||
|
||||
snprintf(bckname, sizeof(bckname), "%s.bck", inname);
|
||||
|
||||
if (rename(inname, bckname))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// Test program for message catalog class.
|
||||
//
|
||||
// Copyright 2008 by Apple Inc.
|
||||
// Copyright © 2008-2019 by Apple Inc.
|
||||
//
|
||||
// These coded instructions, statements, and computer programs are the
|
||||
// property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -38,7 +38,7 @@ main(int argc, // I - Number of command-line arguments
|
||||
// Scan the command-line...
|
||||
catalog = new ppdcCatalog(NULL, argv[1]);
|
||||
|
||||
printf("%s: %d messages\n", argv[1], catalog->messages->count);
|
||||
printf("%s: %u messages\n", argv[1], (unsigned)catalog->messages->count);
|
||||
|
||||
for (m = (ppdcMessage *)catalog->messages->first();
|
||||
m;
|
||||
|
||||
+17
-8
@@ -768,7 +768,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
|
||||
*/
|
||||
|
||||
len = (int)strlen(authorization);
|
||||
input_token.value = malloc((size_t)len);
|
||||
input_token.value = malloc((size_t)len); /* lgtm [cpp/no-space-for-terminator] */
|
||||
input_token.value = httpDecode64_2(input_token.value, &len,
|
||||
authorization);
|
||||
input_token.length = (size_t)len;
|
||||
@@ -1176,7 +1176,23 @@ cupsdCheckGroup(
|
||||
|
||||
groupid = group->gr_gid;
|
||||
|
||||
for (i = 0; group->gr_mem[i]; i ++)
|
||||
{
|
||||
/*
|
||||
* User appears in the group membership...
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(username, group->gr_mem[i]))
|
||||
return (1);
|
||||
}
|
||||
|
||||
#ifdef HAVE_GETGROUPLIST
|
||||
/*
|
||||
* If the user isn't in the group membership list, try the results from
|
||||
* getgrouplist() which is supposed to return the full list of groups a user
|
||||
* belongs to...
|
||||
*/
|
||||
|
||||
if (user)
|
||||
{
|
||||
int ngroups; /* Number of groups */
|
||||
@@ -1197,13 +1213,6 @@ cupsdCheckGroup(
|
||||
if ((int)groupid == (int)groups[i])
|
||||
return (1);
|
||||
}
|
||||
|
||||
#else
|
||||
for (i = 0; group->gr_mem[i]; i ++)
|
||||
{
|
||||
if (!_cups_strcasecmp(username, group->gr_mem[i]))
|
||||
return (1);
|
||||
}
|
||||
#endif /* HAVE_GETGROUPLIST */
|
||||
}
|
||||
else
|
||||
|
||||
@@ -661,7 +661,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 */
|
||||
|
||||
|
||||
@@ -680,9 +680,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);
|
||||
|
||||
+12
-11
@@ -568,6 +568,17 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
|
||||
|
||||
cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdReadClient: error=%d, used=%d, state=%s, data_encoding=HTTP_ENCODING_%s, data_remaining=" CUPS_LLFMT ", request=%p(%s), file=%d", httpError(con->http), (int)httpGetReady(con->http), httpStateString(httpGetState(con->http)), httpIsChunked(con->http) ? "CHUNKED" : "LENGTH", CUPS_LLCAST httpGetRemaining(con->http), con->request, con->request ? ippStateString(ippGetState(con->request)) : "", con->file);
|
||||
|
||||
if (httpError(con->http) == EPIPE && !httpGetReady(con->http) && recv(httpGetFd(con->http), buf, 1, MSG_PEEK) < 1)
|
||||
{
|
||||
/*
|
||||
* Connection closed...
|
||||
*/
|
||||
|
||||
cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on EOF.");
|
||||
cupsdCloseClient(con);
|
||||
return;
|
||||
}
|
||||
|
||||
if (httpGetState(con->http) == HTTP_STATE_GET_SEND ||
|
||||
httpGetState(con->http) == HTTP_STATE_POST_SEND ||
|
||||
httpGetState(con->http) == HTTP_STATE_STATUS)
|
||||
@@ -577,17 +588,6 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
|
||||
* connection and we need to shut it down...
|
||||
*/
|
||||
|
||||
if (!httpGetReady(con->http) && recv(httpGetFd(con->http), buf, 1, MSG_PEEK) < 1)
|
||||
{
|
||||
/*
|
||||
* Connection closed...
|
||||
*/
|
||||
|
||||
cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on EOF.");
|
||||
cupsdCloseClient(con);
|
||||
return;
|
||||
}
|
||||
|
||||
cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on unexpected HTTP read state %s.", httpStateString(httpGetState(con->http)));
|
||||
cupsdCloseClient(con);
|
||||
return;
|
||||
@@ -2209,6 +2209,7 @@ cupsdSendError(cupsd_client_t *con, /* I - Connection */
|
||||
strlcpy(location, httpGetField(con->http, HTTP_FIELD_LOCATION), sizeof(location));
|
||||
|
||||
httpClearFields(con->http);
|
||||
httpClearCookie(con->http);
|
||||
|
||||
httpSetField(con->http, HTTP_FIELD_LOCATION, location);
|
||||
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Configuration routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -729,14 +729,14 @@ cupsdReadConfiguration(void)
|
||||
MaxClientsPerHost = 0;
|
||||
MaxLogSize = 1024 * 1024;
|
||||
MaxRequestSize = 0;
|
||||
MultipleOperationTimeout = DEFAULT_TIMEOUT;
|
||||
MultipleOperationTimeout = 900;
|
||||
NumSystemGroups = 0;
|
||||
ReloadTimeout = DEFAULT_KEEPALIVE;
|
||||
RootCertDuration = 300;
|
||||
Sandboxing = CUPSD_SANDBOXING_STRICT;
|
||||
StrictConformance = FALSE;
|
||||
SyncOnClose = FALSE;
|
||||
Timeout = DEFAULT_TIMEOUT;
|
||||
Timeout = 900;
|
||||
WebInterface = CUPS_DEFAULT_WEBIF;
|
||||
|
||||
BrowseLocalProtocols = parse_protocols(CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS);
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
* created from driver information files, and dynamically generated PPD files
|
||||
* using driver helper programs.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright  2007-2019 by Apple Inc.
|
||||
* Copyright  1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -31,7 +31,7 @@
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
#define PPD_SYNC 0x50504439 /* Sync word for ppds.dat (PPD9) */
|
||||
#define PPD_SYNC 0x50504441 /* Sync word for ppds.dat (PPDA) */
|
||||
#define PPD_MAX_LANG 32 /* Maximum languages */
|
||||
#define PPD_MAX_PROD 32 /* Maximum products */
|
||||
#define PPD_MAX_VERS 32 /* Maximum versions */
|
||||
@@ -40,12 +40,9 @@
|
||||
#define PPD_TYPE_PDF 1 /* PDF PPD */
|
||||
#define PPD_TYPE_RASTER 2 /* CUPS raster PPD */
|
||||
#define PPD_TYPE_FAX 3 /* Facsimile/MFD PPD */
|
||||
#define PPD_TYPE_OBJECT_ANY 4 /* 3D (AMF/STL/g-code) PPD */
|
||||
#define PPD_TYPE_OBJECT_DIRECT 5 /* 3D (AMF/STL/g-code) PPD over any connection */
|
||||
#define PPD_TYPE_OBJECT_STORAGE 6 /* 3D (AMF/STL/g-code) PPD for storage to SD card, etc. */
|
||||
#define PPD_TYPE_UNKNOWN 7 /* Other/hybrid PPD */
|
||||
#define PPD_TYPE_DRV 8 /* Driver info file */
|
||||
#define PPD_TYPE_ARCHIVE 9 /* Archive file */
|
||||
#define PPD_TYPE_UNKNOWN 4 /* Other/hybrid PPD */
|
||||
#define PPD_TYPE_DRV 5 /* Driver info file */
|
||||
#define PPD_TYPE_ARCHIVE 6 /* Archive file */
|
||||
|
||||
#define TAR_BLOCK 512 /* Number of bytes in a block */
|
||||
#define TAR_BLOCKS 10 /* Blocking factor */
|
||||
@@ -372,8 +369,7 @@ cat_drv(const char *name, /* I - PPD name */
|
||||
ppdcCatalog *catalog; // Message catalog in .drv file
|
||||
|
||||
|
||||
fprintf(stderr, "DEBUG2: [cups-driverd] %d locales defined in \"%s\"...\n",
|
||||
src->po_files->count, filename);
|
||||
fprintf(stderr, "DEBUG2: [cups-driverd] %u locales defined in \"%s\"...\n", (unsigned)src->po_files->count, filename);
|
||||
|
||||
locales = new ppdcArray();
|
||||
for (catalog = (ppdcCatalog *)src->po_files->first();
|
||||
@@ -1527,8 +1523,20 @@ list_ppds(int request_id, /* I - Request ID */
|
||||
}
|
||||
|
||||
if (send_type)
|
||||
cupsdSendIPPString(IPP_TAG_KEYWORD, "ppd-type",
|
||||
PPDTypes[ppd->record.type]);
|
||||
{
|
||||
if (ppd->record.type < PPD_TYPE_POSTSCRIPT || ppd->record.type > PPD_TYPE_ARCHIVE)
|
||||
{
|
||||
/*
|
||||
* This cache file is corrupted, remove it!
|
||||
*/
|
||||
|
||||
unlink(filename);
|
||||
|
||||
cupsdSendIPPString(IPP_TAG_KEYWORD, "ppd-type", PPDTypes[PPD_TYPE_UNKNOWN]);
|
||||
}
|
||||
else
|
||||
cupsdSendIPPString(IPP_TAG_KEYWORD, "ppd-type", PPDTypes[ppd->record.type]);
|
||||
}
|
||||
|
||||
if (send_model_number)
|
||||
cupsdSendIPPInteger(IPP_TAG_INTEGER, "ppd-model-number",
|
||||
@@ -2111,22 +2119,6 @@ load_ppd(const char *filename, /* I - Real filename */
|
||||
type = PPD_TYPE_RASTER;
|
||||
else if (strstr(line + 12, "application/vnd.cups-pdf"))
|
||||
type = PPD_TYPE_PDF;
|
||||
else if (strstr(line + 12, "application/amf") ||
|
||||
strstr(line + 12, "application/g-code") ||
|
||||
strstr(line + 12, "application/sla"))
|
||||
type = PPD_TYPE_OBJECT_ANY;
|
||||
}
|
||||
else if (!strncmp(line, "*cups3DWorkflows:", 17))
|
||||
{
|
||||
int is_direct = strstr(line + 17, "direct") != NULL;
|
||||
int is_storage = strstr(line + 17, "storage") != NULL;
|
||||
|
||||
if (is_direct && !is_storage)
|
||||
type = PPD_TYPE_OBJECT_DIRECT;
|
||||
else if (!is_direct && is_storage)
|
||||
type = PPD_TYPE_OBJECT_STORAGE;
|
||||
else
|
||||
type = PPD_TYPE_OBJECT_ANY;
|
||||
}
|
||||
else if (!strncmp(line, "*cupsModelNumber:", 17))
|
||||
sscanf(line, "*cupsModelNumber:%d", &model_number);
|
||||
|
||||
+18
-13
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* IPP routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* This file contains Kerberos support code, copyright 2006 by
|
||||
@@ -1918,7 +1918,7 @@ add_job(cupsd_client_t *con, /* I - Client connection */
|
||||
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
|
||||
|
||||
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state",
|
||||
job->state_value);
|
||||
(int)job->state_value);
|
||||
ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_TEXT, "job-state-message", NULL, "");
|
||||
ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons",
|
||||
NULL, job->reasons->values[0].string.text);
|
||||
@@ -2601,8 +2601,7 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
|
||||
if (!strcmp(attr->values[i].string.text, "none"))
|
||||
continue;
|
||||
|
||||
printer->reasons[printer->num_reasons] =
|
||||
_cupsStrRetain(attr->values[i].string.text);
|
||||
printer->reasons[printer->num_reasons] = _cupsStrAlloc(attr->values[i].string.text);
|
||||
printer->num_reasons ++;
|
||||
|
||||
if (!strcmp(attr->values[i].string.text, "paused") &&
|
||||
@@ -3285,7 +3284,7 @@ cancel_all_jobs(cupsd_client_t *con, /* I - Client connection */
|
||||
* Cancel all jobs on all printers...
|
||||
*/
|
||||
|
||||
cupsdCancelJobs(NULL, username, purge);
|
||||
cupsdCancelJobs(NULL, username, (int)purge);
|
||||
|
||||
cupsdLogMessage(CUPSD_LOG_INFO, "All jobs were %s by \"%s\".",
|
||||
purge == CUPSD_JOB_PURGE ? "purged" : "canceled",
|
||||
@@ -3344,7 +3343,7 @@ cancel_all_jobs(cupsd_client_t *con, /* I - Client connection */
|
||||
* Cancel all of the jobs on the named printer...
|
||||
*/
|
||||
|
||||
cupsdCancelJobs(printer->name, username, purge);
|
||||
cupsdCancelJobs(printer->name, username, (int)purge);
|
||||
|
||||
cupsdLogMessage(CUPSD_LOG_INFO, "All jobs on \"%s\" were %s by \"%s\".",
|
||||
printer->name,
|
||||
@@ -4001,7 +4000,7 @@ close_job(cupsd_client_t *con, /* I - Client connection */
|
||||
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
|
||||
|
||||
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state",
|
||||
job->state_value);
|
||||
(int)job->state_value);
|
||||
|
||||
con->response->request.status.status_code = IPP_OK;
|
||||
|
||||
@@ -4892,8 +4891,9 @@ copy_printer_attrs(
|
||||
|
||||
if ((p2_uri = ippFindAttribute(p2->attrs, "printer-uri-supported",
|
||||
IPP_TAG_URI)) != NULL)
|
||||
member_uris->values[i].string.text =
|
||||
_cupsStrRetain(p2_uri->values[0].string.text);
|
||||
{
|
||||
member_uris->values[i].string.text = _cupsStrAlloc(p2_uri->values[0].string.text);
|
||||
}
|
||||
else
|
||||
{
|
||||
httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri,
|
||||
@@ -4995,7 +4995,7 @@ copy_printer_attrs(
|
||||
|
||||
if (!ra || cupsArrayFind(ra, "printer-state"))
|
||||
ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state",
|
||||
printer->state);
|
||||
(int)printer->state);
|
||||
|
||||
if (!ra || cupsArrayFind(ra, "printer-state-change-date-time"))
|
||||
ippAddDate(con->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time));
|
||||
@@ -5279,6 +5279,11 @@ create_local_bg_thread(
|
||||
*response; /* Response from printer */
|
||||
ipp_attribute_t *attr; /* Attribute in response */
|
||||
ipp_status_t status; /* Status code */
|
||||
static const char * const pattrs[] = /* Printer attributes we need */
|
||||
{
|
||||
"all",
|
||||
"media-col-database"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -5313,7 +5318,7 @@ create_local_bg_thread(
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippSetVersion(request, 2, 0);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer->device_uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "all");
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
|
||||
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
status = cupsLastError();
|
||||
@@ -5536,7 +5541,7 @@ create_local_printer(
|
||||
add_printer_attributes:
|
||||
|
||||
ippAddBoolean(con->response, IPP_TAG_PRINTER, "printer-is-accepting-jobs", (char)printer->accepting);
|
||||
ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", printer->state);
|
||||
ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", (int)printer->state);
|
||||
add_printer_state_reasons(con, printer);
|
||||
|
||||
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), httpIsEncrypted(con->http) ? "ipps" : "ipp", NULL, con->clientname, con->clientport, "/printers/%s", printer->name);
|
||||
@@ -9966,7 +9971,7 @@ send_document(cupsd_client_t *con, /* I - Client connection */
|
||||
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", jobid);
|
||||
|
||||
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state",
|
||||
job->state_value);
|
||||
(int)job->state_value);
|
||||
ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons",
|
||||
NULL, job->reasons->values[0].string.text);
|
||||
|
||||
|
||||
+121
-65
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Job management routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -307,10 +307,12 @@ cupsdCheckJobs(void)
|
||||
|
||||
if (cupsdTimeoutJob(job))
|
||||
continue;
|
||||
}
|
||||
|
||||
cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
|
||||
"Job submission timed out.");
|
||||
cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Job submission timed out.");
|
||||
cupsdLogJob(job, CUPSD_LOG_ERROR, "Job submission timed out.");
|
||||
}
|
||||
else
|
||||
cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Job hold expired.");
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -437,10 +439,20 @@ cupsdCleanJobs(void)
|
||||
curtime = time(NULL);
|
||||
JobHistoryUpdate = 0;
|
||||
|
||||
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: curtime=%d", (int)curtime);
|
||||
|
||||
for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
|
||||
job;
|
||||
job = (cupsd_job_t *)cupsArrayNext(Jobs))
|
||||
{
|
||||
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: Job %d, state=%d, printer=%p, history_time=%d, file_time=%d", job->id, (int)job->state_value, (void *)job->printer, (int)job->history_time, (int)job->file_time);
|
||||
|
||||
if ((job->history_time && job->history_time < JobHistoryUpdate) || !JobHistoryUpdate)
|
||||
JobHistoryUpdate = job->history_time;
|
||||
|
||||
if ((job->file_time && job->file_time < JobHistoryUpdate) || !JobHistoryUpdate)
|
||||
JobHistoryUpdate = job->file_time;
|
||||
|
||||
if (job->state_value >= IPP_JOB_CANCELED && !job->printer)
|
||||
{
|
||||
/*
|
||||
@@ -456,21 +468,9 @@ cupsdCleanJobs(void)
|
||||
else if (job->file_time && job->file_time <= curtime)
|
||||
{
|
||||
cupsdLogJob(job, CUPSD_LOG_DEBUG, "Removing document files.");
|
||||
cupsdLogJob(job, CUPSD_LOG_DEBUG2, "curtime=%ld, job->file_time=%ld", (long)curtime, (long)job->file_time);
|
||||
remove_job_files(job);
|
||||
|
||||
cupsdMarkDirty(CUPSD_DIRTY_JOBS);
|
||||
|
||||
if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate)
|
||||
JobHistoryUpdate = job->history_time;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate)
|
||||
JobHistoryUpdate = job->history_time;
|
||||
|
||||
if (job->file_time < JobHistoryUpdate || !JobHistoryUpdate)
|
||||
JobHistoryUpdate = job->file_time;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1729,7 +1729,7 @@ cupsdLoadJob(cupsd_job_t *job) /* I - Job */
|
||||
job->completed_time = attr->values[0].integer;
|
||||
|
||||
if (JobHistory < INT_MAX)
|
||||
job->history_time = attr->values[0].integer + JobHistory;
|
||||
job->history_time = job->completed_time + JobHistory;
|
||||
else
|
||||
job->history_time = INT_MAX;
|
||||
|
||||
@@ -1740,7 +1740,7 @@ cupsdLoadJob(cupsd_job_t *job) /* I - Job */
|
||||
JobHistoryUpdate = job->history_time;
|
||||
|
||||
if (JobFiles < INT_MAX)
|
||||
job->file_time = attr->values[0].integer + JobFiles;
|
||||
job->file_time = job->completed_time + JobFiles;
|
||||
else
|
||||
job->file_time = INT_MAX;
|
||||
|
||||
@@ -2187,7 +2187,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);
|
||||
@@ -2200,9 +2200,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);
|
||||
@@ -2315,7 +2315,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 */
|
||||
@@ -2384,15 +2384,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"))
|
||||
{
|
||||
@@ -2400,15 +2400,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"))
|
||||
{
|
||||
@@ -2416,15 +2416,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"))
|
||||
{
|
||||
@@ -2432,15 +2432,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"))
|
||||
{
|
||||
@@ -2448,16 +2448,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)
|
||||
{
|
||||
@@ -2465,12 +2465,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...
|
||||
@@ -2581,7 +2581,7 @@ cupsdSetJobState(
|
||||
job->state_value = newstate;
|
||||
|
||||
if (job->state)
|
||||
job->state->values[0].integer = newstate;
|
||||
job->state->values[0].integer = (int)newstate;
|
||||
|
||||
switch (newstate)
|
||||
{
|
||||
@@ -2862,8 +2862,10 @@ cupsdUpdateJobs(void)
|
||||
* Update history/file expiration times...
|
||||
*/
|
||||
|
||||
job->completed_time = attr->values[0].integer;
|
||||
|
||||
if (JobHistory < INT_MAX)
|
||||
job->history_time = attr->values[0].integer + JobHistory;
|
||||
job->history_time = job->completed_time + JobHistory;
|
||||
else
|
||||
job->history_time = INT_MAX;
|
||||
|
||||
@@ -2877,7 +2879,7 @@ cupsdUpdateJobs(void)
|
||||
JobHistoryUpdate = job->history_time;
|
||||
|
||||
if (JobFiles < INT_MAX)
|
||||
job->file_time = attr->values[0].integer + JobFiles;
|
||||
job->file_time = job->completed_time + JobFiles;
|
||||
else
|
||||
job->file_time = INT_MAX;
|
||||
|
||||
@@ -2961,7 +2963,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 */
|
||||
@@ -2989,12 +2991,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",
|
||||
@@ -3442,6 +3444,12 @@ finalize_job(cupsd_job_t *job, /* I - Job */
|
||||
* Stop the printer...
|
||||
*/
|
||||
|
||||
if (job_state == IPP_JSTATE_CANCELED || job_state == IPP_JSTATE_ABORTED)
|
||||
{
|
||||
cupsdLogJob(job, CUPSD_LOG_INFO, "Ignored STOP from backend since the job is %s.", job_state == IPP_JSTATE_CANCELED ? "canceled" : "aborted");
|
||||
break;
|
||||
}
|
||||
|
||||
printer_state = IPP_PRINTER_STOPPED;
|
||||
|
||||
if (ErrorLog)
|
||||
@@ -3456,8 +3464,7 @@ finalize_job(cupsd_job_t *job, /* I - Job */
|
||||
{
|
||||
job_state = IPP_JOB_PENDING;
|
||||
|
||||
ippSetString(job->attrs, &job->reasons, 0,
|
||||
"resources-are-not-ready");
|
||||
ippSetString(job->attrs, &job->reasons, 0, "resources-are-not-ready");
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -4016,6 +4023,45 @@ get_options(cupsd_job_t *job, /* I - Job */
|
||||
break;
|
||||
|
||||
case IPP_TAG_STRING :
|
||||
{
|
||||
int length = attr->values[i].unknown.length;
|
||||
|
||||
for (valptr = attr->values[i].unknown.data; length > 0; length --)
|
||||
{
|
||||
if ((*valptr & 255) < 0x20 || *valptr == 0x7f)
|
||||
break;
|
||||
}
|
||||
|
||||
if (length > 0)
|
||||
{
|
||||
/*
|
||||
* Encode this string as hex characters...
|
||||
*/
|
||||
|
||||
*optptr++ = '<';
|
||||
|
||||
for (valptr = attr->values[i].unknown.data, length = attr->values[i].unknown.length; length > 0; length --)
|
||||
{
|
||||
snprintf(optptr, optlength - (size_t)(optptr - options) - 1, "%02X", *valptr & 255);
|
||||
optptr += 2;
|
||||
}
|
||||
|
||||
*optptr++ = '>';
|
||||
}
|
||||
else
|
||||
{
|
||||
for (valptr = attr->values[i].unknown.data, length = attr->values[i].unknown.length; length > 0; length --)
|
||||
{
|
||||
if (strchr(" \t\n\\\'\"", *valptr))
|
||||
*optptr++ = '\\';
|
||||
*optptr++ = *valptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*optptr = '\0';
|
||||
break;
|
||||
|
||||
case IPP_TAG_TEXT :
|
||||
case IPP_TAG_NAME :
|
||||
case IPP_TAG_KEYWORD :
|
||||
@@ -4161,6 +4207,16 @@ ipp_length(ipp_t *ipp) /* I - IPP request */
|
||||
break;
|
||||
|
||||
case IPP_TAG_STRING :
|
||||
/*
|
||||
* Octet strings can contain characters that need quoting. We need
|
||||
* at least 2 * len + 2 characters to cover the quotes and any
|
||||
* backslashes in the string.
|
||||
*/
|
||||
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
bytes += 2 * (size_t)attr->values[i].unknown.length + 2;
|
||||
break;
|
||||
|
||||
case IPP_TAG_TEXT :
|
||||
case IPP_TAG_NAME :
|
||||
case IPP_TAG_KEYWORD :
|
||||
@@ -4693,7 +4749,7 @@ set_time(cupsd_job_t *job, /* I - Job to update */
|
||||
job->completed_time = curtime;
|
||||
|
||||
if (JobHistory < INT_MAX && attr)
|
||||
job->history_time = attr->values[0].integer + JobHistory;
|
||||
job->history_time = job->completed_time + JobHistory;
|
||||
else
|
||||
job->history_time = INT_MAX;
|
||||
|
||||
@@ -4701,7 +4757,7 @@ set_time(cupsd_job_t *job, /* I - Job to update */
|
||||
JobHistoryUpdate = job->history_time;
|
||||
|
||||
if (JobFiles < INT_MAX && attr)
|
||||
job->file_time = curtime + JobFiles;
|
||||
job->file_time = job->completed_time + JobFiles;
|
||||
else
|
||||
job->file_time = INT_MAX;
|
||||
|
||||
|
||||
+8
-8
@@ -304,7 +304,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 */
|
||||
@@ -354,23 +354,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 */
|
||||
|
||||
+59
-49
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Main loop for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -749,7 +749,12 @@ 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 */
|
||||
|
||||
DoingShutdown = 1;
|
||||
@@ -808,14 +813,25 @@ main(int argc, /* I - Number of command-line args */
|
||||
*/
|
||||
|
||||
if (timeout == 86400 && OnDemand && IdleExitTimeout &&
|
||||
!cupsArrayCount(ActiveJobs) &&
|
||||
# ifdef HAVE_SYSTEMD
|
||||
!WebInterface &&
|
||||
# endif /* HAVE_SYSTEMD */
|
||||
(!Browsing || !BrowseLocalProtocols || !cupsArrayCount(Printers)))
|
||||
!cupsArrayCount(ActiveJobs))
|
||||
{
|
||||
timeout = IdleExitTimeout;
|
||||
service_idle_exit = 1;
|
||||
cupsd_printer_t *p = NULL; /* Current printer */
|
||||
|
||||
if (Browsing && BrowseLocalProtocols)
|
||||
{
|
||||
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers))
|
||||
if (p->shared)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!p)
|
||||
{
|
||||
timeout = IdleExitTimeout;
|
||||
service_idle_exit = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
service_idle_exit = 0;
|
||||
@@ -946,8 +962,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
if (current_time > expire_time)
|
||||
{
|
||||
if (cupsArrayCount(Subscriptions) > 0)
|
||||
cupsdExpireSubscriptions(NULL, NULL);
|
||||
cupsdExpireSubscriptions(NULL, NULL);
|
||||
|
||||
cupsdUnloadCompletedJobs();
|
||||
|
||||
@@ -982,6 +997,23 @@ main(int argc, /* I - Number of command-line args */
|
||||
}
|
||||
#endif /* !HAVE_AUTHORIZATION_H */
|
||||
|
||||
/*
|
||||
* Clean job history...
|
||||
*/
|
||||
|
||||
if (JobHistoryUpdate && current_time >= JobHistoryUpdate)
|
||||
cupsdCleanJobs();
|
||||
|
||||
/*
|
||||
* Update any pending multi-file documents...
|
||||
*/
|
||||
|
||||
if ((current_time - senddoc_time) >= 10)
|
||||
{
|
||||
cupsdCheckJobs();
|
||||
senddoc_time = current_time;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for new data on the client sockets...
|
||||
*/
|
||||
@@ -1014,23 +1046,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Update any pending multi-file documents...
|
||||
*/
|
||||
|
||||
if ((current_time - senddoc_time) >= 10)
|
||||
{
|
||||
cupsdCheckJobs();
|
||||
senddoc_time = current_time;
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean job history...
|
||||
*/
|
||||
|
||||
if (JobHistoryUpdate && current_time >= JobHistoryUpdate)
|
||||
cupsdCleanJobs();
|
||||
|
||||
/*
|
||||
* Log statistics at most once a minute when in debug mode...
|
||||
*/
|
||||
@@ -1612,7 +1627,6 @@ select_timeout(int fds) /* I - Number of descriptors returned */
|
||||
time_t now; /* Current time */
|
||||
cupsd_client_t *con; /* Client information */
|
||||
cupsd_job_t *job; /* Job information */
|
||||
cupsd_printer_t *printer; /* Printer information */
|
||||
const char *why; /* Debugging aid */
|
||||
|
||||
|
||||
@@ -1701,12 +1715,6 @@ select_timeout(int fds) /* I - Number of descriptors returned */
|
||||
* Check for any job activity...
|
||||
*/
|
||||
|
||||
if (JobHistoryUpdate && timeout > JobHistoryUpdate)
|
||||
{
|
||||
timeout = JobHistoryUpdate;
|
||||
why = "update job history";
|
||||
}
|
||||
|
||||
for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
|
||||
job;
|
||||
job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
|
||||
@@ -1737,22 +1745,6 @@ select_timeout(int fds) /* I - Number of descriptors returned */
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for temporary printers that need to be deleted...
|
||||
*/
|
||||
|
||||
for (printer = (cupsd_printer_t *)cupsArrayFirst(Printers); printer; printer = (cupsd_printer_t *)cupsArrayNext(Printers))
|
||||
{
|
||||
if (printer->temporary && !printer->job && (!local_timeout || local_timeout > (printer->state_time + 60)))
|
||||
local_timeout = printer->state_time + 60;
|
||||
}
|
||||
|
||||
if (timeout > local_timeout && local_timeout)
|
||||
{
|
||||
timeout = local_timeout;
|
||||
why = "delete stale local printers";
|
||||
}
|
||||
|
||||
/*
|
||||
* Adjust from absolute to relative time. We add 1 second to the timeout since
|
||||
* events occur after the timeout expires, and limit the timeout to 86400
|
||||
@@ -2046,13 +2038,31 @@ service_checkout(int shutdown) /* I - Shutting down? */
|
||||
#ifdef HAVE_ONDEMAND
|
||||
if (OnDemand)
|
||||
{
|
||||
int shared_printers = 0; /* Do we have shared printers? */
|
||||
|
||||
strlcpy(pidfile, CUPS_KEEPALIVE, sizeof(pidfile));
|
||||
|
||||
/*
|
||||
* If printer sharing is on see if there are any actual shared printers...
|
||||
*/
|
||||
|
||||
if (Browsing && BrowseLocalProtocols)
|
||||
{
|
||||
cupsd_printer_t *p = NULL; /* Current printer */
|
||||
|
||||
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers))
|
||||
{
|
||||
if (p->shared)
|
||||
break;
|
||||
}
|
||||
|
||||
shared_printers = (p != NULL);
|
||||
}
|
||||
|
||||
if (cupsArrayCount(ActiveJobs) || /* Active jobs */
|
||||
WebInterface || /* Web interface enabled */
|
||||
NeedReload || /* Doing a reload */
|
||||
(Browsing && BrowseLocalProtocols && cupsArrayCount(Printers)))
|
||||
/* Printers being shared */
|
||||
shared_printers) /* Printers being shared */
|
||||
{
|
||||
/*
|
||||
* Create or remove the "keep-alive" file based on whether there are active
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
[Unit]
|
||||
Description=CUPS Scheduler
|
||||
Documentation=man:cupsd(8)
|
||||
After=sssd.service
|
||||
|
||||
[Service]
|
||||
ExecStart=@sbindir@/cupsd -l
|
||||
|
||||
+32
-138
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Printer routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2017 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -48,8 +48,7 @@ static int compare_printers(void *first, void *second, void *data);
|
||||
static void delete_printer_filters(cupsd_printer_t *p);
|
||||
static void dirty_printer(cupsd_printer_t *p);
|
||||
static void load_ppd(cupsd_printer_t *p);
|
||||
static ipp_t *new_media_col(pwg_size_t *size, const char *source,
|
||||
const char *type);
|
||||
static ipp_t *new_media_col(pwg_size_t *size);
|
||||
static void write_xml_string(cups_file_t *fp, const char *s);
|
||||
|
||||
|
||||
@@ -1022,8 +1021,7 @@ cupsdLoadAllPrinters(void)
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "Info"))
|
||||
{
|
||||
if (value)
|
||||
cupsdSetString(&p->info, value);
|
||||
cupsdSetString(&p->info, value ? value : "");
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "MakeModel"))
|
||||
{
|
||||
@@ -1032,23 +1030,19 @@ cupsdLoadAllPrinters(void)
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "Location"))
|
||||
{
|
||||
if (value)
|
||||
cupsdSetString(&p->location, value);
|
||||
cupsdSetString(&p->location, value ? value : "");
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "GeoLocation"))
|
||||
{
|
||||
if (value)
|
||||
cupsdSetString(&p->geo_location, value);
|
||||
cupsdSetString(&p->geo_location, value ? value : "");
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "Organization"))
|
||||
{
|
||||
if (value)
|
||||
cupsdSetString(&p->organization, value);
|
||||
cupsdSetString(&p->organization, value ? value : "");
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "OrganizationalUnit"))
|
||||
{
|
||||
if (value)
|
||||
cupsdSetString(&p->organizational_unit, value);
|
||||
cupsdSetString(&p->organizational_unit, value ? value : "");
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "DeviceURI"))
|
||||
{
|
||||
@@ -1433,7 +1427,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 */
|
||||
|
||||
@@ -1453,9 +1447,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);
|
||||
@@ -3799,7 +3793,7 @@ dirty_printer(cupsd_printer_t *p) /* I - Printer */
|
||||
static void
|
||||
load_ppd(cupsd_printer_t *p) /* I - Printer */
|
||||
{
|
||||
int i, j, k; /* Looping vars */
|
||||
int i, j; /* Looping vars */
|
||||
char cache_name[1024]; /* Cache filename */
|
||||
struct stat cache_info; /* Cache file info */
|
||||
ppd_file_t *ppd; /* PPD file */
|
||||
@@ -3811,9 +3805,7 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
|
||||
*output_bin, /* OutputBin option */
|
||||
*output_mode, /* OutputMode option */
|
||||
*resolution; /* (Set|JCL|)Resolution option */
|
||||
ppd_choice_t *choice, /* Current PPD choice */
|
||||
*input_slot, /* Current input slot */
|
||||
*media_type; /* Current media type */
|
||||
ppd_choice_t *choice; /* Current PPD choice */
|
||||
ppd_attr_t *ppd_attr; /* PPD attribute */
|
||||
int xdpi, /* Horizontal resolution */
|
||||
ydpi; /* Vertical resolution */
|
||||
@@ -4073,20 +4065,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
|
||||
{
|
||||
ipp_t *col; /* Collection value */
|
||||
|
||||
input_slot = ppdFindMarkedChoice(ppd, "InputSlot");
|
||||
media_type = ppdFindMarkedChoice(ppd, "MediaType");
|
||||
col = new_media_col(pwgsize,
|
||||
input_slot ?
|
||||
_ppdCacheGetSource(p->pc,
|
||||
input_slot->choice) :
|
||||
NULL,
|
||||
media_type ?
|
||||
_ppdCacheGetType(p->pc,
|
||||
media_type->choice) :
|
||||
NULL);
|
||||
|
||||
ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-default",
|
||||
col);
|
||||
col = new_media_col(pwgsize);
|
||||
ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-default", col);
|
||||
ippDelete(col);
|
||||
}
|
||||
|
||||
@@ -4280,89 +4260,19 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
|
||||
* media-col-database
|
||||
*/
|
||||
|
||||
num_media = p->pc->num_sizes;
|
||||
if (p->pc->num_sources)
|
||||
if ((attr = ippAddCollections(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-database", p->pc->num_sizes, NULL)) != NULL)
|
||||
{
|
||||
if (p->pc->num_types > 0)
|
||||
num_media += p->pc->num_sizes * p->pc->num_sources *
|
||||
p->pc->num_types;
|
||||
else
|
||||
num_media += p->pc->num_sizes * p->pc->num_sources;
|
||||
}
|
||||
else if (p->pc->num_types)
|
||||
num_media += p->pc->num_sizes * p->pc->num_types;
|
||||
|
||||
if ((attr = ippAddCollections(p->ppd_attrs, IPP_TAG_PRINTER,
|
||||
"media-col-database", num_media,
|
||||
NULL)) != NULL)
|
||||
{
|
||||
for (i = p->pc->num_sizes, pwgsize = p->pc->sizes, val = attr->values;
|
||||
i > 0;
|
||||
i --, pwgsize ++)
|
||||
{
|
||||
/*
|
||||
* Start by adding the page size without source or type...
|
||||
*/
|
||||
|
||||
ppdMarkOption(ppd, "PageSize", pwgsize->map.ppd);
|
||||
|
||||
val->collection = new_media_col(pwgsize, NULL, NULL);
|
||||
val ++;
|
||||
|
||||
/*
|
||||
* Then add the specific, supported combinations of size, source, and
|
||||
* type...
|
||||
*/
|
||||
|
||||
if (p->pc->num_sources > 0)
|
||||
{
|
||||
for (j = p->pc->num_sources, pwgsource = p->pc->sources;
|
||||
j > 0;
|
||||
j --, pwgsource ++)
|
||||
{
|
||||
ppdMarkOption(ppd, "InputSlot", pwgsource->ppd);
|
||||
|
||||
if (p->pc->num_types > 0)
|
||||
{
|
||||
for (k = p->pc->num_types, pwgtype = p->pc->types;
|
||||
k > 0;
|
||||
k --, pwgtype ++)
|
||||
{
|
||||
if (!ppdMarkOption(ppd, "MediaType", pwgtype->ppd))
|
||||
{
|
||||
val->collection = new_media_col(pwgsize, pwgsource->pwg,
|
||||
pwgtype->pwg);
|
||||
val ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!ppdConflicts(ppd))
|
||||
{
|
||||
val->collection = new_media_col(pwgsize, pwgsource->pwg, NULL);
|
||||
val ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (p->pc->num_types > 0)
|
||||
{
|
||||
for (j = p->pc->num_types, pwgtype = p->pc->types;
|
||||
j > 0;
|
||||
j --, pwgtype ++)
|
||||
{
|
||||
if (!ppdMarkOption(ppd, "MediaType", pwgtype->ppd))
|
||||
{
|
||||
val->collection = new_media_col(pwgsize, NULL, pwgtype->pwg);
|
||||
val ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Update the number of media-col-database values...
|
||||
* Adding each page size without source or type...
|
||||
*/
|
||||
|
||||
attr->num_values = val - attr->values;
|
||||
for (i = 0, pwgsize = p->pc->sizes; i < p->pc->num_sizes; i ++, pwgsize ++)
|
||||
{
|
||||
ipp_t *col = new_media_col(pwgsize);
|
||||
|
||||
ippSetCollection(p->ppd_attrs, &attr, i, col);
|
||||
ippDelete(col);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4613,7 +4523,7 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
|
||||
for (fin = (_pwg_finishings_t *)cupsArrayFirst(p->pc->finishings); fin; fin = (_pwg_finishings_t *)cupsArrayNext(p->pc->finishings))
|
||||
{
|
||||
if (num_finishings < (int)(sizeof(finishings) / sizeof(finishings[0])))
|
||||
finishings[num_finishings++] = fin->value;
|
||||
finishings[num_finishings++] = (int)fin->value;
|
||||
|
||||
switch (fin->value)
|
||||
{
|
||||
@@ -5060,9 +4970,7 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
|
||||
*/
|
||||
|
||||
static ipp_t * /* O - Collection value */
|
||||
new_media_col(pwg_size_t *size, /* I - media-size/margin values */
|
||||
const char *source, /* I - media-source value */
|
||||
const char *type) /* I - media-type value */
|
||||
new_media_col(pwg_size_t *size) /* I - media-size/margin values */
|
||||
{
|
||||
ipp_t *media_col, /* Collection value */
|
||||
*media_size; /* media-size value */
|
||||
@@ -5071,29 +4979,15 @@ new_media_col(pwg_size_t *size, /* I - media-size/margin values */
|
||||
media_col = ippNew();
|
||||
|
||||
media_size = ippNew();
|
||||
ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
|
||||
"x-dimension", size->width);
|
||||
ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
|
||||
"y-dimension", size->length);
|
||||
ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "x-dimension", size->width);
|
||||
ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "y-dimension", size->length);
|
||||
ippAddCollection(media_col, IPP_TAG_PRINTER, "media-size", media_size);
|
||||
ippDelete(media_size);
|
||||
|
||||
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
|
||||
"media-bottom-margin", size->bottom);
|
||||
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
|
||||
"media-left-margin", size->left);
|
||||
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
|
||||
"media-right-margin", size->right);
|
||||
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
|
||||
"media-top-margin", size->top);
|
||||
|
||||
if (source)
|
||||
ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source",
|
||||
NULL, source);
|
||||
|
||||
if (type)
|
||||
ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type",
|
||||
NULL, type);
|
||||
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-bottom-margin", size->bottom);
|
||||
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-left-margin", size->left);
|
||||
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-right-margin", size->right);
|
||||
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-top-margin", size->top);
|
||||
|
||||
return (media_col);
|
||||
}
|
||||
|
||||
+10
-1
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Server start/stop routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -176,6 +176,15 @@ cupsdStopServer(void)
|
||||
cupsdDestroyProfile(DefaultProfile);
|
||||
DefaultProfile = NULL;
|
||||
|
||||
/*
|
||||
* Expire subscriptions and clean out old jobs...
|
||||
*/
|
||||
|
||||
cupsdExpireSubscriptions(NULL, NULL);
|
||||
|
||||
if (JobHistoryUpdate)
|
||||
cupsdCleanJobs();
|
||||
|
||||
/*
|
||||
* Write out any dirty files...
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Subscription routines for the CUPS scheduler.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -174,7 +174,7 @@ cupsdAddEvent(
|
||||
"printer-name", NULL, dest->name);
|
||||
|
||||
ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
|
||||
"printer-state", dest->state);
|
||||
"printer-state", (int)dest->state);
|
||||
|
||||
if (dest->num_reasons == 0)
|
||||
ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
|
||||
@@ -199,7 +199,7 @@ cupsdAddEvent(
|
||||
ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
|
||||
"notify-job-id", job->id);
|
||||
ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
|
||||
"job-state", job->state_value);
|
||||
"job-state", (int)job->state_value);
|
||||
|
||||
if ((attr = ippFindAttribute(job->attrs, "job-name",
|
||||
IPP_TAG_NAME)) != NULL)
|
||||
@@ -652,6 +652,9 @@ cupsdExpireSubscriptions(
|
||||
time_t curtime; /* Current time */
|
||||
|
||||
|
||||
if (cupsArrayCount(Subscriptions) == 0)
|
||||
return;
|
||||
|
||||
curtime = time(NULL);
|
||||
update = 0;
|
||||
|
||||
@@ -1059,7 +1062,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 */
|
||||
@@ -1080,9 +1083,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);
|
||||
|
||||
+48
-7
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Scheduler control program for CUPS.
|
||||
*
|
||||
* Copyright 2007-2018 by Apple Inc.
|
||||
* Copyright 2007-2019 by Apple Inc.
|
||||
* Copyright 2006-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -36,11 +36,47 @@ int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line args */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
int i, j, /* Looping vars */
|
||||
num_settings; /* Number of settings */
|
||||
cups_option_t *settings; /* Settings */
|
||||
cups_option_t *settings, /* Settings */
|
||||
*setting; /* Current setting */
|
||||
const char *opt; /* Current option character */
|
||||
http_t *http; /* Connection to server */
|
||||
static const char * const disallowed[] =
|
||||
{ /* List of disallowed directives for cupsd.conf */
|
||||
"AccessLog",
|
||||
"CacheDir",
|
||||
"ConfigFilePerm",
|
||||
"DataDir",
|
||||
"DocumentRoot",
|
||||
"ErrorLog",
|
||||
"FatalErrors",
|
||||
"FileDevice",
|
||||
"FontPath",
|
||||
"Group",
|
||||
"Listen",
|
||||
"LogFilePerm",
|
||||
"LPDConfigFile",
|
||||
"PageLog",
|
||||
"PassEnv",
|
||||
"Port",
|
||||
"Printcap",
|
||||
"PrintcapFormat",
|
||||
"RemoteRoot",
|
||||
"RequestRoot",
|
||||
"ServerBin",
|
||||
"ServerCertificate",
|
||||
"ServerKey",
|
||||
"ServerKeychain",
|
||||
"ServerRoot",
|
||||
"SetEnv",
|
||||
"SMBConfigFile",
|
||||
"StateDir",
|
||||
"SystemGroup",
|
||||
"SystemGroupAuthKey",
|
||||
"TempDir",
|
||||
"User"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -128,11 +164,16 @@ main(int argc, /* I - Number of command-line args */
|
||||
usage(argv[i]);
|
||||
}
|
||||
|
||||
if (cupsGetOption("Listen", num_settings, settings) ||
|
||||
cupsGetOption("Port", num_settings, settings))
|
||||
for (i = num_settings, setting = settings; i > 0; i --, setting ++)
|
||||
{
|
||||
_cupsLangPuts(stderr, _("cupsctl: Cannot set Listen or Port directly."));
|
||||
return (1);
|
||||
for (j = 0; j < (int)(sizeof(disallowed) / sizeof(disallowed[0])); j ++)
|
||||
{
|
||||
if (!_cups_strcasecmp(setting->name, disallowed[j]))
|
||||
{
|
||||
_cupsLangPrintf(stderr, _("cupsctl: Cannot set %s directly."), disallowed[j]);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+11
-6
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "lpadmin" command for CUPS.
|
||||
*
|
||||
* Copyright © 2007-2018 by Apple Inc.
|
||||
* Copyright © 2007-2019 by Apple Inc.
|
||||
* Copyright © 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -1140,6 +1140,7 @@ enable_printer(http_t *http, /* I - Server connection */
|
||||
|
||||
request = ippNewRequest(IPP_OP_ENABLE_PRINTER);
|
||||
|
||||
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", ippPort(), "/printers/%s", printer);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
|
||||
|
||||
@@ -1194,9 +1195,7 @@ get_printer_ppd(
|
||||
int port; /* Port number */
|
||||
static const char * const pattrs[] = /* Attributes to use */
|
||||
{
|
||||
"job-template",
|
||||
"printer-defaults",
|
||||
"printer-description",
|
||||
"all",
|
||||
"media-col-database"
|
||||
};
|
||||
|
||||
@@ -1451,6 +1450,7 @@ set_printer_options(
|
||||
/* Status code */
|
||||
|
||||
_cupsLangPrintf(stderr, _("lpadmin: Unable to open PPD \"%s\": %s on line %d."), ppdfile, ppdErrorString(status), linenum);
|
||||
return (1);
|
||||
}
|
||||
|
||||
ppdMarkDefaults(ppd);
|
||||
@@ -1488,6 +1488,7 @@ set_printer_options(
|
||||
(boolval = cupsGetOption("cupsIPPSupplies", num_options,
|
||||
options)) != NULL)
|
||||
{
|
||||
ppdchanged = 1;
|
||||
wrote_ipp_supplies = 1;
|
||||
cupsFilePrintf(out, "*cupsIPPSupplies: %s\n",
|
||||
(!_cups_strcasecmp(boolval, "true") ||
|
||||
@@ -1498,6 +1499,7 @@ set_printer_options(
|
||||
(boolval = cupsGetOption("cupsSNMPSupplies", num_options,
|
||||
options)) != NULL)
|
||||
{
|
||||
ppdchanged = 1;
|
||||
wrote_snmp_supplies = 1;
|
||||
cupsFilePrintf(out, "*cupsSNMPSupplies: %s\n",
|
||||
(!_cups_strcasecmp(boolval, "true") ||
|
||||
@@ -1558,6 +1560,8 @@ set_printer_options(
|
||||
(boolval = cupsGetOption("cupsIPPSupplies", num_options,
|
||||
options)) != NULL)
|
||||
{
|
||||
ppdchanged = 1;
|
||||
|
||||
cupsFilePrintf(out, "*cupsIPPSupplies: %s\n",
|
||||
(!_cups_strcasecmp(boolval, "true") ||
|
||||
!_cups_strcasecmp(boolval, "yes") ||
|
||||
@@ -1568,6 +1572,8 @@ set_printer_options(
|
||||
(boolval = cupsGetOption("cupsSNMPSupplies", num_options,
|
||||
options)) != NULL)
|
||||
{
|
||||
ppdchanged = 1;
|
||||
|
||||
cupsFilePrintf(out, "*cupsSNMPSupplies: %s\n",
|
||||
(!_cups_strcasecmp(boolval, "true") ||
|
||||
!_cups_strcasecmp(boolval, "yes") ||
|
||||
@@ -1582,8 +1588,7 @@ set_printer_options(
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
ippDelete(cupsDoFileRequest(http, request, "/admin/",
|
||||
ppdchanged ? tempfile : file));
|
||||
ippDelete(cupsDoFileRequest(http, request, "/admin/", ppdchanged ? tempfile : file));
|
||||
|
||||
/*
|
||||
* Clean up temp files... (TODO: catch signals in case we CTRL-C during
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS und das CUPS-Logo sind Warenzeichen der <a href="https://www.apple.com/">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. Alle Rechte vorbehalten.</div>
|
||||
<div class="footer">CUPS und das CUPS-Logo sind Warenzeichen der <a href="https://www.apple.com/">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. Alle Rechte vorbehalten.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor © 2007-2018 Apple Inc. Todos los derechos reservados.</div>
|
||||
<div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor © 2007-2019 Apple Inc. Todos los derechos reservados.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS et le logo CUPS sont des marques déposées de <a href="http://www.apple.com">Apple Inc.</a> CUPS est sous copyright 2007-2018 Apple Inc. Tous droits réservés.</div>
|
||||
<div class="footer">CUPS et le logo CUPS sont des marques déposées de <a href="http://www.apple.com">Apple Inc.</a> CUPS est sous copyright 2007-2019 Apple Inc. Tous droits réservés.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. All rights reserved.</div>
|
||||
<div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. All rights reserved.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS e sua logo são marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. Todos os direitos reservados.</div>
|
||||
<div class="footer">CUPS e sua logo são marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. Todos os direitos reservados.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS, а так же логотип CUPS являются зарегистрированными торговыми марками
|
||||
<A HREF="http://www.apple.com">Apple Inc.</A> Авторские права на CUPS принадлежат (2007-2018) компании Apple Inc. Все права защищены.</div>
|
||||
<A HREF="http://www.apple.com">Apple Inc.</A> Авторские права на CUPS принадлежат (2007-2019) компании Apple Inc. Все права защищены.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. All rights reserved.</div>
|
||||
<div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. All rights reserved.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-2
@@ -1798,7 +1798,7 @@ eval_expr(ippfind_srv_t *service, /* I - Service */
|
||||
*/
|
||||
|
||||
if (expressions && expressions->parent)
|
||||
logic = expressions->parent->op;
|
||||
logic = (int)expressions->parent->op;
|
||||
else
|
||||
logic = IPPFIND_OP_AND;
|
||||
|
||||
@@ -2370,7 +2370,7 @@ list_service(ippfind_srv_t *service) /* I - Service */
|
||||
httpClose(http);
|
||||
|
||||
_cupsLangPrintf(stdout, "%s %s %s %s", service->uri,
|
||||
ippEnumString("printer-state", pstate),
|
||||
ippEnumString("printer-state", (int)pstate),
|
||||
paccepting ? "accepting-jobs" : "not-accepting-jobs",
|
||||
preasons);
|
||||
}
|
||||
|
||||
+7
-7
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Sample IPP Everywhere server for CUPS.
|
||||
*
|
||||
* Copyright 2010-2018 by Apple Inc.
|
||||
* Copyright 2010-2019 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -696,10 +696,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
fprintf(stderr, "Using spool directory \"%s\".\n", directory);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
cupsSetServerCredentials(keypath, servername, 1);
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
/*
|
||||
* Initialize Bonjour...
|
||||
*/
|
||||
@@ -715,6 +711,10 @@ main(int argc, /* I - Number of command-line args */
|
||||
subtype, directory, command, attrfile)) == NULL)
|
||||
return (1);
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
cupsSetServerCredentials(keypath, printer->hostname, 1);
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
/*
|
||||
* Run the print service...
|
||||
*/
|
||||
@@ -834,7 +834,7 @@ copy_job_attributes(
|
||||
|
||||
if (!ra || cupsArrayFind(ra, "job-state"))
|
||||
ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_ENUM,
|
||||
"job-state", job->state);
|
||||
"job-state", (int)job->state);
|
||||
|
||||
if (!ra || cupsArrayFind(ra, "job-state-message"))
|
||||
{
|
||||
@@ -3647,7 +3647,7 @@ ipp_get_printer_attributes(
|
||||
|
||||
if (!ra || cupsArrayFind(ra, "printer-state"))
|
||||
ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_ENUM,
|
||||
"printer-state", printer->state);
|
||||
"printer-state", (int)printer->state);
|
||||
|
||||
if (!ra || cupsArrayFind(ra, "printer-state-change-date-time"))
|
||||
ippAddDate(client->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time));
|
||||
|
||||
+3
-3
@@ -2619,7 +2619,7 @@ do_tests(cups_file_t *outfile, /* I - Output file */
|
||||
group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO;
|
||||
attrptr;
|
||||
attrptr = attrptr->next)
|
||||
print_attr(outfile, Output, attrptr, &group);
|
||||
print_attr(outfile, (int)Output, attrptr, &group);
|
||||
cupsFilePuts(outfile, "</dict>\n");
|
||||
}
|
||||
cupsFilePuts(outfile, "</array>\n");
|
||||
@@ -3388,7 +3388,7 @@ do_tests(cups_file_t *outfile, /* I - Output file */
|
||||
group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO;
|
||||
attrptr;
|
||||
attrptr = attrptr->next)
|
||||
print_attr(outfile, Output, attrptr, &group);
|
||||
print_attr(outfile, (int)Output, attrptr, &group);
|
||||
cupsFilePuts(outfile, "</dict>\n");
|
||||
cupsFilePuts(outfile, "</array>\n");
|
||||
}
|
||||
@@ -3494,7 +3494,7 @@ do_tests(cups_file_t *outfile, /* I - Output file */
|
||||
{
|
||||
if (!strcmp(displayed[i], attrptr->name))
|
||||
{
|
||||
print_attr(outfile, Output, attrptr, NULL);
|
||||
print_attr(outfile, (int)Output, attrptr, NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+71
-5
@@ -3,7 +3,7 @@
|
||||
# Perform the complete set of IPP compliance tests specified in the
|
||||
# CUPS Software Test Plan.
|
||||
#
|
||||
# Copyright © 2007-2018 by Apple Inc.
|
||||
# Copyright © 2007-2019 by Apple Inc.
|
||||
# Copyright © 1997-2007 by Easy Software Products, all rights reserved.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
@@ -482,6 +482,14 @@ else
|
||||
encryption=""
|
||||
fi
|
||||
|
||||
if test $testtype = 0; then
|
||||
jobhistory="30m"
|
||||
jobfiles="5m"
|
||||
else
|
||||
jobhistory="30"
|
||||
jobfiles="Off"
|
||||
fi
|
||||
|
||||
cat >$BASE/cupsd.conf <<EOF
|
||||
StrictConformance Yes
|
||||
Browsing Off
|
||||
@@ -492,8 +500,8 @@ MaxLogSize 0
|
||||
AccessLogLevel actions
|
||||
LogLevel $loglevel
|
||||
LogTimeFormat usecs
|
||||
PreserveJobHistory Yes
|
||||
PreserveJobFiles 5m
|
||||
PreserveJobHistory $jobhistory
|
||||
PreserveJobFiles $jobfiles
|
||||
<Policy default>
|
||||
<Limit All>
|
||||
Order Allow,Deny
|
||||
@@ -820,12 +828,70 @@ else
|
||||
echo PASS
|
||||
fi
|
||||
|
||||
echo " </pre>" >>$strfile
|
||||
|
||||
#
|
||||
# Perform job history test...
|
||||
#
|
||||
|
||||
echo $ac_n "Starting history test: $ac_c"
|
||||
echo "" >>$strfile
|
||||
echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.11-history\":" >>$strfile
|
||||
|
||||
echo " lp -d Test1 testfile.jpg" >>$strfile
|
||||
|
||||
$runcups ../systemv/lp -d Test1 testfile.jpg 2>&1 >>$strfile
|
||||
if test $? != 0; then
|
||||
echo "FAIL (unable to queue test job)"
|
||||
echo " FAILED" >>$strfile
|
||||
fail=`expr $fail + 1`
|
||||
else
|
||||
echo "PASS"
|
||||
echo " PASSED" >>$strfile
|
||||
|
||||
./waitjobs.sh >>$strfile
|
||||
|
||||
echo $ac_n "Verifying that history still exists: $ac_c"
|
||||
|
||||
echo " ls -l $BASE/spool" >>$strfile
|
||||
count=`ls -1 $BASE/spool | wc -l`
|
||||
if test $count = 1; then
|
||||
echo "FAIL"
|
||||
echo " FAILED (job control files not present)" >>$strfile
|
||||
ls -l $BASE/spool >>$strfile
|
||||
fail=`expr $fail + 1`
|
||||
else
|
||||
echo "PASS"
|
||||
echo " PASSED" >>$strfile
|
||||
|
||||
echo $ac_n "Waiting for job history to expire: $ac_c"
|
||||
echo "" >>$strfile
|
||||
echo " sleep 35" >>$strfile
|
||||
sleep 35
|
||||
|
||||
echo " lpstat" >>$strfile
|
||||
$runcups ../systemv/lpstat 2>&1 >>$strfile
|
||||
|
||||
echo " ls -l $BASE/spool" >>$strfile
|
||||
count=`ls -1 $BASE/spool | wc -l`
|
||||
if test $count != 1; then
|
||||
echo "FAIL"
|
||||
echo " FAILED (job control files still present)" >>$strfile
|
||||
ls -l $BASE/spool >>$strfile
|
||||
fail=`expr $fail + 1`
|
||||
else
|
||||
echo "PASS"
|
||||
echo " PASSED" >>$strfile
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# Stop the server...
|
||||
#
|
||||
|
||||
echo " </pre>" >>$strfile
|
||||
|
||||
kill $cupsd
|
||||
wait $cupsd
|
||||
cupsdstatus=$?
|
||||
@@ -898,7 +964,7 @@ fi
|
||||
|
||||
# Requests logged
|
||||
count=`wc -l $BASE/log/access_log | awk '{print $1}'`
|
||||
expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
|
||||
expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4 + 2`
|
||||
if test $count != $expected; then
|
||||
echo "FAIL: $count requests logged, expected $expected."
|
||||
echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
|
||||
|
||||
+17
-2
@@ -51,6 +51,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...
|
||||
@@ -94,8 +102,8 @@ typedef unsigned long useconds_t;
|
||||
* Version of software...
|
||||
*/
|
||||
|
||||
#define CUPS_SVERSION "CUPS v2.2.10"
|
||||
#define CUPS_MINIMAL "CUPS/2.2.10"
|
||||
#define CUPS_SVERSION "CUPS v2.2.13"
|
||||
#define CUPS_MINIMAL "CUPS/2.2.13"
|
||||
|
||||
|
||||
/*
|
||||
@@ -379,6 +387,13 @@ 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?
|
||||
*/
|
||||
|
||||
+9
-2
@@ -22,8 +22,8 @@
|
||||
* Version of software...
|
||||
*/
|
||||
|
||||
#define CUPS_SVERSION "CUPS v2.2.10"
|
||||
#define CUPS_MINIMAL "CUPS/2.2.10"
|
||||
#define CUPS_SVERSION "CUPS v2.2.13"
|
||||
#define CUPS_MINIMAL "CUPS/2.2.13"
|
||||
|
||||
|
||||
/*
|
||||
@@ -309,6 +309,13 @@
|
||||
#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