Comparar commits

...

85 Commits

Autor SHA1 Mensagem Data
Michael R Sweet 0ad6ac55da Bump version numbers. 2019-12-13 09:42:18 -05:00
Michael R Sweet 339d33b8e6 Revert the IPP part of the compiler warning fixes from master. 2019-12-13 09:39:42 -05:00
Michael R Sweet e93ab4a004 Fix some new compiler warnings (Issue #5700) 2019-12-13 09:38:49 -05:00
Michael R Sweet 8c9b3606cc CVE-2019-2228: Fix ippSetValueTag validation of default language. 2019-12-13 09:30:46 -05:00
Michael R Sweet 25a9f95813 Fix off-by-one error in ippEnumString (Issue #5695) 2019-12-04 13:45:24 -05:00
Michael R Sweet 197bfe6ab4 Mirror Apple Raster fixes from master. 2019-12-02 10:37:31 -05:00
Michael R Sweet 619af39389 Changelog. 2019-11-18 13:58:06 -05:00
Michael R Sweet 457d534a9c Refactor the defaults code so that the correct order of precedence is respected in all cases (Issue #5683) 2019-11-18 13:57:19 -05:00
Michael R Sweet b796104425 Address multiple minor issues reported by the LGTM security scanner:
- Lots of usage of localtime and gmtime (use _r/_s versions instead -
  Issue #5685)
- Some unnecessary comparisons
- Suppress checks that are not useful (header guards, short global names, and
  the integer overflow checks which don't reflect the actual range of values)
2019-11-17 10:25:36 -05:00
Michael R Sweet 9645531eeb Fix lpoptions defaults (Issue #5681) 2019-11-14 14:21:39 -05:00
Michael R Sweet b1bc79753d Fix compiler warnings. 2019-11-14 14:21:13 -05:00
Michael R Sweet 72288f3069 Fix compiler warnings from new clang - lots of enums being assigned to ints but
the compiler deciding that was worthy of a warning (even though the range of
values clearly falls within the range of an int...)
2019-10-07 15:12:22 -04:00
Michael R Sweet 891e14ed26 The IPP backend did not detect all cases where a job should be retried using
a raster format (rdar://56021091)

- Look for document-xxx reasons and client-error-document-xxx status codes from
  Send-Document and Print-Job requests.
2019-10-07 15:05:30 -04:00
Michael R Sweet f5e07479b2 Change DEBUG message to ERROR for libusb_init issues (Issue #5658) 2019-10-07 13:15:23 -04:00
Michael R Sweet 6946292516 Fix typos in comments. 2019-09-05 18:16:05 -04:00
Michael R Sweet 40a54a37ae Add workaround for systemd's lack of true launch-on-demand support (Issue #5640) 2019-09-05 12:44:44 -04:00
Michael R Sweet 81d39a9fd3 Mirror TLS certificate fix from master for ippserver. 2019-09-05 12:35:53 -04:00
Michael R Sweet 250c2783c0 Bump version. 2019-08-27 22:27:40 -04:00
Michael R Sweet affc6e3ba6 Fix spelling of accordion.
Bump version to 2.2.13.
2019-08-27 22:24:22 -04:00
Michael R Sweet c8cb6400e3 Update for CUPS 2.2.12 release. 2019-08-15 18:35:30 -04:00
Michael R Sweet f24e6cf6a3 Fix multiple security/disclosure issues:
- CVE-2019-8696 and CVE-2019-8675: Fixed SNMP buffer overflows (rdar://51685251)
- Fixed IPP buffer overflow (rdar://50035411)
- Fixed memory disclosure issue in the scheduler (rdar://51373853)
- Fixed DoS issues in the scheduler (rdar://51373929)
2019-08-15 14:08:31 -04:00
Michael R Sweet ad312a0c66 Stop accepting attributes in collections (Issue #5630) 2019-08-07 13:02:32 -04:00
Michael R Sweet e1eb4a8495 Fix man page typo... 2019-08-05 20:11:33 -04:00
Michael R Sweet 04fef0e213 USB quirk (Issue #5617) 2019-08-01 14:30:55 -04:00
Michael R Sweet 86cf8118f7 Changelog 2019-08-01 14:26:19 -04:00
Michael R Sweet 2f26c6b713 GNU TLS FIPS140 support (Issue #5601, Issue #5622) 2019-08-01 14:25:35 -04:00
Michael R Sweet d11af547d1 Fix some PPD parser issues discovered via fuzzing (Issue #5623, Issue #5624) 2019-08-01 14:00:03 -04:00
Michael R Sweet b4909ef014 Fix memory leak in ppdOpen. 2019-08-01 13:02:35 -04:00
Michael R Sweet 2062d366ea Don't default printer-info, printer-location, printer-geo-location (Issue #5603) 2019-07-16 10:43:58 -04:00
Michael R Sweet c507739347 Fix lpadmin with cupsIPPSupplies and cupsSNMPSupplies (Issue #5610) 2019-07-16 09:27:32 -04:00
Michael R Sweet 666d07699b Always check the group membership list (Issue #5613) 2019-07-16 09:17:04 -04:00
Michael R Sweet c1a310ffdc The scheduler would restart continuously when idle and printers were not
shared (rdar://52561199)
2019-07-16 09:07:56 -04:00
Michael R Sweet 3676fc318a Use GZIPPROG instead of GZIP to avoid install issues (Issue #5595) 2019-06-12 08:37:06 -04:00
Michael R Sweet 669659ca88 Mirror bug fix from master (Issue #5588) 2019-05-30 10:22:51 -04:00
Michael R Sweet 9b48d16c1d Back-port more compatibility fixes from CUPS 2.3.x - IPP/1.1 compatibility with
old versions of CUPS... (Issue #5587)
2019-05-28 14:54:01 -04:00
Michael R Sweet c5b991fdaa Put IDR command in its own XA/XZ section. 2019-05-24 09:25:35 -04:00
Michael R Sweet fd8245cd01 Mirror ZPL fix from master. 2019-05-24 08:15:14 -04:00
Michael R Sweet 35e927f835 Enforce USB read limits (Issue #5583) 2019-05-17 07:53:42 -04:00
Michael R Sweet a0096a2f73 Block cups-files.conf directives (Issue #5530) 2019-05-15 10:31:24 -04:00
Michael R Sweet 6235f36a95 Update copyrights. 2019-05-08 11:36:01 -04:00
Michael R Sweet 971bdfe043 Fix CSS on short browsers (Issue #5574) 2019-05-08 11:32:27 -04:00
Michael R Sweet 9d6f1bb6c6 Bump the default Timeout to 15 minutes as well (Issue #5570) 2019-05-02 09:03:47 -04:00
Michael R Sweet d76e57f8c6 Mirror changes from master. 2019-05-01 16:02:34 -04:00
Michael R Sweet a2eba04317 Update the hold expiration logging - one case is an error, the other is normal (Issue #5570) 2019-05-01 14:58:28 -04:00
Michael R Sweet c1b133728b Increase the MultipleOperationTimeOut default to 15 minutes, log an error if
the job submission times out (Issue #5570)
2019-05-01 14:39:52 -04:00
Michael R Sweet 8829edfef0 Add a workaround for old Samsung drivers (Issue #5562) 2019-04-15 16:50:24 -04:00
Michael R Sweet 0ad7895cff For octetString values, compare the length against the -supported value
(Issue #5557)
2019-04-15 16:28:06 -04:00
Michael R Sweet aaebca5660 Update systemd service file for cupsd (Issue #5551) 2019-04-15 16:16:04 -04:00
Michael R Sweet ee5419f6df Bump version. 2019-04-15 16:06:35 -04:00
Michael R Sweet 803b6de89a Correctly encode octetString values for print filters (Issue #5558)
scheduler/job.c:
- get_options(): Correctly encode IPP_TAG_STRING as a quoted string or a hex
  string depending on the value.
- ipp_length(): Handle IPP_TAG_STRING separately.
2019-04-15 16:04:28 -04:00
Michael R Sweet 35064a2596 Fix changelog (Issue #5561) 2019-04-15 09:24:53 -04:00
Michael R Sweet e4a0aa86c9 Prep for 2.2.11 release. 2019-03-22 15:51:36 -04:00
Michael R Sweet ba9d68cc74 Fix an issue with and time values (Issue #5538) 2019-03-11 13:54:46 -04:00
Michael R Sweet 488ec102c1 Mirror test suite changes from master. 2019-03-11 12:06:05 -04:00
Michael R Sweet c7b37f21eb Fix PPD caching and IPP Everywhere PPDs (Issue #5535) 2019-02-27 15:35:32 -05:00
Michael R Sweet 88c131a16f Fix another compiler warning. 2019-02-25 15:12:29 -05:00
Michael R Sweet 74dece9c5a Use iterator for CRL (Issue #5532) 2019-02-25 15:09:04 -05:00
Michael R Sweet 17675b0d73 Fix compiler warning from newer GCC (Issue #5533) 2019-02-25 11:58:34 -05:00
Michael R Sweet 816b3bfd42 Media size matching now uses a tolerance of 0.5mm (rdar://33822024) 2019-02-21 12:46:09 -05:00
Michael R Sweet 1178267306 Fix typo. 2019-02-21 12:35:04 -05:00
Michael R Sweet 469b6abcd8 Rework the idle exit fix after some discussion. 2019-02-21 12:31:38 -05:00
Michael R Sweet 606cfe8cb9 The lpadmin command would hang with a bad PPD file (rdar://41495016) 2019-02-21 11:14:12 -05:00
Michael R Sweet 4c94126876 The scheduler did not always idle exit as quickly as it could... 2019-02-21 11:04:14 -05:00
Michael R Sweet 3a66aedf8a Don't stop a printer after a job is canceled/aborted (Issue #5517) 2019-02-21 10:44:23 -05:00
Michael R Sweet 534af3a30b Add a USB quirks rule for the DYMO 450 Turbo (Issue #5521) 2019-02-21 09:54:59 -05:00
Michael R Sweet f7d8c89ecc Add subject alternate names for self-signed certificates (Issue #5525) 2019-02-19 15:04:49 -05:00
Michael R Sweet 9f6cee7e3f Add USB quirks rule for Xerox printers (Issue #5523) 2019-02-19 11:11:54 -05:00
Michael R Sweet bafbb263f8 Non-Kerberized IPP printing to Windows was broken (Issue #5515) 2019-02-15 17:07:10 -05:00
Michael R Sweet 019198b76b Missing printer-uri when enabling printer (mirror fix from master). 2019-02-15 17:04:53 -05:00
Michael R Sweet 324a11611a Fix a GNU TLS certificate problem (Issue #5506) 2019-02-05 13:04:13 -05:00
Michael R Sweet 949c21788d Fix UTF-8 validation (Issue #5509) 2019-02-05 12:03:10 -05:00
Michael R Sweet b1648391cb Updated the USB quirks rule for Zebra label printers (Issue #5395)
Now all Zebra label printers use unidir and no-reattach.
2019-01-23 11:15:29 -05:00
Michael R Sweet ddcb034a2b Clean out some more _cupsStr cruft that might potentially cause an unaligned memory access (Issue #5474)
Don't directly use the string pool in the CGI programs or scheduler.
2019-01-21 16:08:16 -05:00
Michael R Sweet 6844678902 Fix potential unaligned accesses in the string pool (Issue #5474)
This set of changes makes the PPD functions use strdup and free - they were
modifying the contents of the string in places and doing other things that
were not safe for (immutable) strings in the pool.
2019-01-21 14:21:57 -05:00
Michael R Sweet 558bba72fe Stop parsing the Emulators keywords in PPD files (Issue #5475)
This also addresses a potential memory leak...
2019-01-21 13:44:43 -05:00
Michael R Sweet 6cf21c3b87 Switch to using "all" and "media-col-database" because some vendors apparently
do not know how to read (Issue #5484)
2019-01-21 12:02:19 -05:00
Michael R Sweet 328d863971 Fix compile error on Linux (Issue #5483) 2019-01-21 11:54:58 -05:00
Michael R Sweet 907afa29b7 Add a USB quirk rule for the Lexmark E120n (Issue #5478) 2019-01-21 11:32:42 -05:00
Michael R Sweet f3693bb315 Use the same requested-attributes values for all IPP Everywhere setup
requests (Issue #5484)
2019-01-21 11:28:24 -05:00
Michael R Sweet bad9fef486 Fix a performance regression with large PPDs (rdar://47040759)
Changes mirrored from master...
2019-01-10 17:15:47 -05:00
Michael R Sweet 21cbc2f292 Allow ippSetXxx from no-value and unknown to corresponding type. 2019-01-10 11:54:15 -05:00
Michael R Sweet 18518f3b94 Protect against continuing to read from a file at EOF (Issue #5473) 2019-01-09 13:26:37 -05:00
Michael R Sweet ddaef0f518 Fix potential crash in cups-driverd (rdar://46625579) 2018-12-14 14:29:57 -05:00
Michael R Sweet b7724e9966 Bump version. 2018-12-10 09:21:03 -05:00
Michael R Sweet f7d4caccaf Fix ppdmerge backup filename (Issue #5455) 2018-12-10 09:19:57 -05:00
100 arquivos alterados com 2642 adições e 2071 exclusões
+99 -2
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
+13 -4
Ver Arquivo
@@ -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
+4 -6
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
+10 -10
Ver Arquivo
@@ -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)
+1
Ver Arquivo
@@ -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"
+7
Ver Arquivo
@@ -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
Ver Arquivo
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for CUPS 2.2.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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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 */
+1 -2
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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...
+12
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
}
+4 -6
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
{
+4 -4
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
}
/*
+12
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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;
+4
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
+2
Ver Arquivo
@@ -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 {
+1 -1
Ver Arquivo
@@ -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 &copy; 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 &copy; 2007-2019 Apple Inc. Alle Rechte vorbehalten.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -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 &copy; 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 &copy; 2007-2019 Apple Inc. Todos los derechos reservados.</div>
</body>
</html>
+3 -3
Ver Arquivo
@@ -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>&lt;Policy </b><i>name</i><b>> </b>... <b>&lt;/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 &copy; 2007-2018 by Apple Inc.
Copyright &copy; 2007-2019 by Apple Inc.
</body>
</html>
+2 -2
Ver Arquivo
@@ -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 &copy; 2007-2017 by Apple Inc.
Copyright &copy; 2007-2019 by Apple Inc.
</body>
</html>
+1 -1
Ver Arquivo
@@ -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 &copy; 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 &copy; 2007-2019 Apple Inc. All rights reserved.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -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 &copy; 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 &copy; 2007-2019 Apple Inc. All rights reserved.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -51,6 +51,6 @@
</div>
</div>
</div>
<div class="footer">CUPS e o logo do CUPS s&atilde;o marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. Todos os direitos reservados.</div>
<div class="footer">CUPS e o logo do CUPS s&atilde;o marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. Todos os direitos reservados.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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;
}
+1 -1
Ver Arquivo
@@ -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)
+8 -1
Ver Arquivo
@@ -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...
+2 -2
Ver Arquivo
@@ -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));
+5 -1
Ver Arquivo
@@ -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
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+1 -1
Ver Arquivo
@@ -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
Ver Arquivo
@@ -32,7 +32,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.4.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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
Ver Arquivo
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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
Ver Arquivo
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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
Ver Arquivo
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.2\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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
Ver Arquivo
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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 "Lexé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
Ver Arquivo
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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
Ver Arquivo
@@ -28,7 +28,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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) サポートがコンパイルされていないので、通常モードで動作し"
+7 -3
Ver Arquivo
@@ -40,7 +40,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.1.2\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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
Ver Arquivo
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 2018-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"
+7 -3
Ver Arquivo
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
"POT-Creation-Date: 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"
+5 -5
Ver Arquivo
@@ -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.
+4 -4
Ver Arquivo
@@ -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.
+4 -4
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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))
+2 -2
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
+4 -4
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
+21 -29
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -1,6 +1,7 @@
[Unit]
Description=CUPS Scheduler
Documentation=man:cupsd(8)
After=sssd.service
[Service]
ExecStart=@sbindir@/cupsd -l
+32 -138
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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...
*/
+10 -7
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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 -1
Ver Arquivo
@@ -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 &copy; 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 &copy; 2007-2019 Apple Inc. Alle Rechte vorbehalten.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -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 &copy; 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 &copy; 2007-2019 Apple Inc. Todos los derechos reservados.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -1,5 +1,5 @@
</div>
</div>
<div class="footer">CUPS et le logo CUPS sont des marques d&eacute;pos&eacute;es de <a href="http://www.apple.com">Apple Inc.</a> CUPS est sous copyright 2007-2018 Apple Inc. Tous droits r&eacute;serv&eacute;s.</div>
<div class="footer">CUPS et le logo CUPS sont des marques d&eacute;pos&eacute;es de <a href="http://www.apple.com">Apple Inc.</a> CUPS est sous copyright 2007-2019 Apple Inc. Tous droits r&eacute;serv&eacute;s.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -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 &copy; 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 &copy; 2007-2019 Apple Inc. All rights reserved.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -1,5 +1,5 @@
</div>
</div>
<div class="footer">CUPS e sua logo s&atilde;o marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2018 Apple Inc. Todos os direitos reservados.</div>
<div class="footer">CUPS e sua logo s&atilde;o marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright &copy; 2007-2019 Apple Inc. Todos os direitos reservados.</div>
</body>
</html>
+1 -1
Ver Arquivo
@@ -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 -1
Ver Arquivo
@@ -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 &copy; 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 &copy; 2007-2019 Apple Inc. All rights reserved.</div>
</body>
</html>
+2 -2
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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?
*/