diff options
author | Didier Raboud <odyx@debian.org> | 2019-08-17 15:32:31 +0200 |
---|---|---|
committer | Didier Raboud <odyx@debian.org> | 2019-08-17 15:32:44 +0200 |
commit | fecb588399b17da2258dd7e31730f7d263ec955b (patch) | |
tree | bff2792084ceb2e2afd5c7951ba8c5aa605aa908 | |
parent | d8028e6c25bb0d343ee4e261ee0938147ab81706 (diff) | |
parent | 1cd07131ecfb487064814a2c315e89b38066d73c (diff) |
merge patched-debian/master into debian/master
132 files changed, 2190 insertions, 3488 deletions
diff --git a/CHANGES.md b/CHANGES.md index 65cbdb130..9cc2e206a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,11 +1,89 @@ -CHANGES - 2.2.10 - 2018-12-07 +CHANGES - 2.2.12 - 2019-08-15 ============================= +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) diff --git a/INSTALL.md b/INSTALL.md index 7d196cf66..63075dbb0 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,4 +1,4 @@ -INSTALL - CUPS v2.2.10 - 2018-12-07 +INSTALL - CUPS v2.2.12 - 2019-08-15 =================================== This file describes how to compile and install CUPS from source code. For more diff --git a/Makedefs.in b/Makedefs.in index d6fa23e89..4f6247a68 100644 --- a/Makedefs.in +++ b/Makedefs.in @@ -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 @@ -30,7 +30,7 @@ CHMOD = @CHMOD@ CXX = @LIBTOOL_CXX@ @CXX@ DSO = @DSO@ DSOXX = @DSOXX@ -GZIP = @GZIP@ +GZIPPROG = @GZIPPROG@ INSTALL = @INSTALL@ LD = @LD@ LD_CC = @LD_CC@ @@ -1,4 +1,4 @@ -README - CUPS v2.2.10 - 2018-12-07 +README - CUPS v2.2.12 - 2019-08-15 ================================== 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. diff --git a/backend/ipp.c b/backend/ipp.c index bc678f50a..e072249bd 100644 --- a/backend/ipp.c +++ b/backend/ipp.c @@ -2220,8 +2220,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 || diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks index 44d6bb8cb..cd684d33f 100644 --- a/backend/org.cups.usb-quirks +++ b/backend/org.cups.usb-quirks @@ -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 diff --git a/backend/usb-libusb.c b/backend/usb-libusb.c index 7fc95c27e..042854bba 100644 --- a/backend/usb-libusb.c +++ b/backend/usb-libusb.c @@ -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 @@ -1746,8 +1746,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, <)) diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c index 06199a96b..f0d01598d 100644 --- a/cgi-bin/admin.c +++ b/cgi-bin/admin.c @@ -3414,6 +3414,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)) { @@ -4013,6 +4016,9 @@ get_option_value( switch (cparam->type) { + case PPD_CUSTOM_UNKNOWN : + break; + case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_REAL : @@ -4091,6 +4097,9 @@ get_option_value( switch (cparam->type) { + case PPD_CUSTOM_UNKNOWN : + break; + case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_REAL : diff --git a/config-scripts/cups-common.m4 b/config-scripts/cups-common.m4 index a1185bccc..0859efe08 100644 --- a/config-scripts/cups-common.m4 +++ b/config-scripts/cups-common.m4 @@ -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) diff --git a/config-scripts/cups-ssl.m4 b/config-scripts/cups-ssl.m4 index 52f9c39f1..49fe42fe3 100644 --- a/config-scripts/cups-ssl.m4 +++ b/config-scripts/cups-ssl.m4 @@ -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" diff --git a/config.h.in b/config.h.in index f3b5e4c7a..d81c59e36 100644 --- a/config.h.in +++ b/config.h.in @@ -304,6 +304,13 @@ /* + * 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? */ @@ -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.12. # # 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.12' +PACKAGE_STRING='CUPS 2.2.12' 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.12 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.12:";; 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.12 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.12, 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.12" 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.12, 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.12 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index f57b97dbf..864ba340a 100644 --- a/configure.ac +++ b/configure.ac @@ -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.12], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/]) sinclude(config-scripts/cups-opsys.m4) sinclude(config-scripts/cups-common.m4) diff --git a/cups/auth.c b/cups/auth.c index e4328e025..a91b0dbe4 100644 --- a/cups/auth.c +++ b/cups/auth.c @@ -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 */ diff --git a/cups/cups-private.h b/cups/cups-private.h index 6fd66a9ce..4ec4e6864 100644 --- a/cups/cups-private.h +++ b/cups/cups-private.h @@ -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); diff --git a/cups/cups.h b/cups/cups.h index 37c610abf..c548bde19 100644 --- a/cups/cups.h +++ b/cups/cups.h @@ -47,10 +47,10 @@ extern "C" { * Constants... */ -# define CUPS_VERSION 2.0210 +# define CUPS_VERSION 2.0212 # define CUPS_VERSION_MAJOR 2 # define CUPS_VERSION_MINOR 2 -# define CUPS_VERSION_PATCH 10 +# define CUPS_VERSION_PATCH 12 # define CUPS_BC_FD 3 /* Back-channel file descriptor for diff --git a/cups/dest-options.c b/cups/dest-options.c index 51705a50c..e9361adf7 100644 --- a/cups/dest-options.c +++ b/cups/dest-options.c @@ -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; diff --git a/cups/dest.c b/cups/dest.c index d92d23d8e..fd635b111 100644 --- a/cups/dest.c +++ b/cups/dest.c @@ -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) + 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 (((flags & CUPS_DEST_FLAGS_DEVICE) || !printer_uri) && strstr(device_uri, "._tcp")) { - if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL) + if ((device_uri = cups_dnssd_resolve(dest, device_uri, 5000, NULL, NULL, NULL)) != NULL) { -#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 */ + DEBUG_printf(("1_cupsGetDestResource: Resolved device-uri=\"%s\".", device_uri)); } - - if (uri) + else { - DEBUG_printf(("1_cupsGetDestResource: Resolved printer-uri-supported=\"%s\"", uri)); + DEBUG_puts("1_cupsGetDestResource: Unable to resolve device."); - uri = _cupsCreateDest(dest->name, cupsGetOption("printer-info", dest->num_options, dest->options), NULL, uri, resource, resourcesize); + 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'; + if (!uri) + { + DEBUG_puts("1_cupsGetDestResource: No printer-uri-supported or device-uri found."); - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0); + if (resource) + *resource = '\0'; - return (NULL); - } + _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0); + + return (NULL); } - else + 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) { - DEBUG_printf(("1_cupsGetDestResource: printer-uri-supported=\"%s\"", uri)); + _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad URI."), 1); - 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); - - return (NULL); - } + 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)); @@ -1697,107 +1708,6 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_ } /* - * 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... */ @@ -1984,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); } /* @@ -2166,12 +2076,6 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_ if (getuid()) { /* - * Merge in server defaults... - */ - - num_temps = cups_get_dests(filename, NULL, NULL, 0, num_temps, &temps); - - /* * Point to user defaults... */ @@ -2231,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 ++) { @@ -2240,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; /* @@ -2269,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... @@ -2323,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) @@ -2756,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 : @@ -2992,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. @@ -3101,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 */ @@ -3114,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) */ @@ -3130,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 */ @@ -3579,29 +3393,26 @@ 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 */ + *dest, /* Current destination */ + *user_dest; /* User destination */ + cups_option_t *option; /* Current option */ + char *user_default; /* User default printer */ #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 */ @@ -3616,7 +3427,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)); @@ -3634,12 +3450,47 @@ cups_enum_dests( } /* - * Get ready to enumerate... + * Load the /etc/cups/lpoptions and ~/.cups/lpoptions files... */ -#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) memset(&data, 0, sizeof(data)); + if ((user_default = _cupsUserDefault(data.def_name, sizeof(data.def_name))) == NULL) + { + const char *defprinter = cupsGetDefault2(http); + /* Server default, if any */ + + if (defprinter) + strlcpy(data.def_name, defprinter, 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)); + + snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot); + data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests); + + if ((home = getenv("HOME")) != NULL) + { + snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home); + + data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests); + } + + /* + * Get ready to enumerate... + */ + +#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) data.type = type; data.mask = mask; data.cb = cb; @@ -3655,29 +3506,17 @@ 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; @@ -3688,6 +3527,16 @@ cups_enum_dests( 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; @@ -3750,6 +3599,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); } @@ -3760,14 +3612,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); } @@ -3777,14 +3624,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 */ @@ -3793,6 +3635,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); } @@ -3805,6 +3650,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); } @@ -3815,6 +3663,9 @@ cups_enum_dests( avahi_client_free(data.client); avahi_simple_poll_free(data.simple_poll); + + cupsFreeDests(data.num_dests, data.dests); + return (0); } @@ -3827,6 +3678,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 */ @@ -3939,8 +3793,26 @@ cups_enum_dests( if ((device->type & mask) == type) { + 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; @@ -3971,20 +3843,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) @@ -4202,6 +4072,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 */ @@ -4216,7 +4087,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... @@ -4284,8 +4155,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) @@ -4298,7 +4168,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; @@ -4326,8 +4196,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... diff --git a/cups/hash.c b/cups/hash.c index a31372595..621d119d4 100644 --- a/cups/hash.c +++ b/cups/hash.c @@ -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); +# 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); } diff --git a/cups/http.c b/cups/http.c index 5c14ef68e..3fadb5acb 100644 --- a/cups/http.c +++ b/cups/http.c @@ -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 { diff --git a/cups/ipp.c b/cups/ipp.c index 2c09f2703..b0762fdcb 100644 --- a/cups/ipp.c +++ b/cups/ipp.c @@ -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,10 +4561,7 @@ 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) @@ -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; diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c index 8b496e3b2..b1b53e4b3 100644 --- a/cups/ppd-cache.c +++ b/cups/ppd-cache.c @@ -2871,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; @@ -3101,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... */ @@ -3133,7 +3149,7 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */ pattern[maxlen] = '\0'; - cupsFilePrintf(fp, "*cupsPassword: \"%s\"\n", pattern); + cupsFilePrintf(fp, "*cupsJobPassword: \"%s\"\n", pattern); } /* diff --git a/cups/ppd-emit.c b/cups/ppd-emit.c index 4b153aca6..392b013b8 100644 --- a/cups/ppd-emit.c +++ b/cups/ppd-emit.c @@ -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 : diff --git a/cups/ppd-mark.c b/cups/ppd-mark.c index 2d106ba9e..4131ca6e2 100644 --- a/cups/ppd-mark.c +++ b/cups/ppd-mark.c @@ -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 : @@ -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 : diff --git a/cups/ppd.c b/cups/ppd.c index 435b992f4..58d92c128 100644 --- a/cups/ppd.c +++ b/cups/ppd.c @@ -716,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) @@ -735,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; } } @@ -999,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... */ @@ -1182,6 +1193,24 @@ _ppdOpen( else if (!strcmp(string, "Plus90")) ppd->landscape = 90; } + else if (!strcmp(keyword, "Emulators") && string && ppd->num_emulations == 0) + { + /* + * 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 = 1; + ppd->emulations = calloc(1, sizeof(ppd_emul_t)); + + strlcpy(ppd->emulations[0].name, string, sizeof(ppd->emulations[0].name)); + } else if (!strcmp(keyword, "JobPatchFile")) { /* @@ -1854,6 +1883,13 @@ _ppdOpen( } 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); @@ -1876,6 +1912,13 @@ _ppdOpen( } 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); @@ -1905,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")) { /* @@ -2629,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)); diff --git a/cups/ppd.h b/cups/ppd.h index ae63c0d66..b6326a59e 100644 --- a/cups/ppd.h +++ b/cups/ppd.h @@ -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) */ diff --git a/cups/pwg-media.c b/cups/pwg-media.c index 62455ea6d..0c6e44bc3 100644 --- a/cups/pwg-media.c +++ b/cups/pwg-media.c @@ -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)); } diff --git a/cups/snmp.c b/cups/snmp.c index 8437528dd..fc9396177 100644 --- a/cups/snmp.c +++ b/cups/snmp.c @@ -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) ++; diff --git a/cups/snprintf.c b/cups/snprintf.c index c5d8908c0..72b3fc87d 100644 --- a/cups/snprintf.c +++ b/cups/snprintf.c @@ -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; diff --git a/cups/testdest.c b/cups/testdest.c index 9eab8d2ef..a65e09960 100644 --- a/cups/testdest.c +++ b/cups/testdest.c @@ -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(""); diff --git a/cups/testipp.c b/cups/testipp.c index 2ef2496eb..a8d3662c3 100644 --- a/cups/testipp.c +++ b/cups/testipp.c @@ -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, @@ -590,11 +655,32 @@ 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; diff --git a/cups/testppd.c b/cups/testppd.c index e6cdea5ed..943e70033 100644 --- a/cups/testppd.c +++ b/cups/testppd.c @@ -1062,6 +1062,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, diff --git a/cups/tls-gnutls.c b/cups/tls-gnutls.c index 606b45afc..1dc1b2a1f 100644 --- a/cups/tls-gnutls.c +++ b/cups/tls-gnutls.c @@ -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); diff --git a/debian/.git-dpm b/debian/.git-dpm index f32b677be..9245c52a1 100644 --- a/debian/.git-dpm +++ b/debian/.git-dpm @@ -1,7 +1,7 @@ # see git-dpm(1) from git-dpm package -9615ef5f2b8374bfe2816f8ff4314234362ce841 -9615ef5f2b8374bfe2816f8ff4314234362ce841 -25b2338346ef3abbb93ea88476887cba7b2b86f8 +1cd07131ecfb487064814a2c315e89b38066d73c +1cd07131ecfb487064814a2c315e89b38066d73c +044594aca992c46aa4e23729124e5ed3c5dd6cfe 044594aca992c46aa4e23729124e5ed3c5dd6cfe cups_2.2.12.orig.tar.gz a6a89bd1dd3b7122913651698a89d795e3bfea80 diff --git a/debian/patches/0003-Install-root-backends-world-readable.patch b/debian/patches/0003-Install-root-backends-world-readable.patch index c9c130d02..b3d1fd7b1 100644 --- a/debian/patches/0003-Install-root-backends-world-readable.patch +++ b/debian/patches/0003-Install-root-backends-world-readable.patch @@ -1,4 +1,4 @@ -From ee92595c22b31cabc5a53268803fc8e53db14813 Mon Sep 17 00:00:00 2001 +From 03907fe3af14450016228a5f37f100c52c8c49d5 Mon Sep 17 00:00:00 2001 From: Martin Pitt <mpitt@debian.org> Date: Tue, 9 Aug 2016 18:11:06 +0200 Subject: Install root backends world-readable @@ -52,7 +52,7 @@ index 42eaa59ff..3bdb48302 100644 cupsDirClose(dir); diff --git a/scheduler/job.c b/scheduler/job.c -index 638f256db..bbef60c64 100644 +index 1a7a34ca9..dcee43d83 100644 --- a/scheduler/job.c +++ b/scheduler/job.c @@ -1250,7 +1250,7 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ diff --git a/debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch b/debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch index 5f18548c5..fa138ed4f 100644 --- a/debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch +++ b/debian/patches/0019-Let-snmp-backend-also-use-manufacturer-specific-MIBs.patch @@ -1,4 +1,4 @@ -From 3f8584b5142fccf1a495dc1d1e6ab66248a3f6a3 Mon Sep 17 00:00:00 2001 +From 23fedad956e4bb366e1da86cfc7994f7818fdd87 Mon Sep 17 00:00:00 2001 From: Tim Waugh <twaugh@redhat.com> Date: Tue, 9 Aug 2016 18:11:30 +0200 Subject: Let snmp backend also use manufacturer-specific MIBs diff --git a/debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch b/debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch index 09339f4e2..05bfb25fe 100644 --- a/debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch +++ b/debian/patches/0034-Build-mantohtml-with-the-build-architecture-compiler.patch @@ -1,4 +1,4 @@ -From 9c5b4d679e611fb391b58725076d936d2ec1ac9a Mon Sep 17 00:00:00 2001 +From d5966671d8b2ccbf1350589f2f9bd2f50835474e Mon Sep 17 00:00:00 2001 From: Helmut Grohne <helmut@subdivi.de> Date: Tue, 9 Aug 2016 18:11:49 +0200 Subject: Build mantohtml with the build architecture compiler @@ -18,7 +18,7 @@ Bug-Debian: https://bugs.debian.org/837936 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/Makedefs.in b/Makedefs.in -index 656d7b44c..d6fa23e89 100644 +index 83eae7ce8..4f6247a68 100644 --- a/Makedefs.in +++ b/Makedefs.in @@ -25,6 +25,7 @@ CUPS_VERSION = @CUPS_VERSION@ @@ -30,7 +30,7 @@ index 656d7b44c..d6fa23e89 100644 CXX = @LIBTOOL_CXX@ @CXX@ DSO = @DSO@ diff --git a/configure.ac b/configure.ac -index c7696c7b9..f57b97dbf 100644 +index 776259933..864ba340a 100644 --- a/configure.ac +++ b/configure.ac @@ -22,6 +22,15 @@ sinclude(config-scripts/cups-common.m4) diff --git a/debian/patches/0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch b/debian/patches/0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch deleted file mode 100644 index fcd175c95..000000000 --- a/debian/patches/0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch +++ /dev/null @@ -1,87 +0,0 @@ -From f67a4b249a53f91ecb70dce59a8c41ca1c3b04ed Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michaelrsweet@gmail.com> -Date: Wed, 1 Nov 2017 15:45:50 -0400 -Subject: =?UTF-8?q?The=20`lp`=20and=20`lpr`=20commands=20now=20provide=20b?= - =?UTF-8?q?etter=20error=20messages=20when=20the=20default=0Aprinter=20can?= - =?UTF-8?q?not=20be=20found=20(Issue=20#5096)?= - -- berkeley/lpr.c: Use cupsLastErrorMessage() for not-found errors. -- cups/dest.c: Set the last error message in cupsGetNamedDest(). -- systemv/lp.c: Use cupsLastErrorMessage() for not-found errors. - -Bug-Debian: #870463 ---- - cups/dest.c | 38 +++++++++++++++++++++++++++++++++++++- - 1 file changed, 37 insertions(+), 1 deletion(-) - -diff --git a/cups/dest.c b/cups/dest.c -index 7ef85a1b9..d92d23d8e 100644 ---- a/cups/dest.c -+++ b/cups/dest.c -@@ -1883,6 +1883,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 +1896,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 +1907,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 +1939,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)); diff --git a/debian/patches/0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch b/debian/patches/0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch deleted file mode 100644 index 61d370e84..000000000 --- a/debian/patches/0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 5b2890774c0879bd62ee4abb6c8d87e5c6abcb36 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Wed, 9 Jan 2019 13:26:37 -0500 -Subject: Protect against continuing to read from a file at EOF (Issue #5473) - -Fixed a potential memory leak when reading at the end of a file ---- - cups/file.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/cups/file.c b/cups/file.c -index 5c9ddf8fe..f67a6668e 100644 ---- a/cups/file.c -+++ b/cups/file.c -@@ -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... - */ diff --git a/debian/patches/0037-Use-the-same-requested-attributes-values-for-all-IPP.patch b/debian/patches/0037-Use-the-same-requested-attributes-values-for-all-IPP.patch deleted file mode 100644 index d26c4b69a..000000000 --- a/debian/patches/0037-Use-the-same-requested-attributes-values-for-all-IPP.patch +++ /dev/null @@ -1,111 +0,0 @@ -From 2f25fc8b426f4b97f549d8ad2b84be9850aa709a Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Mon, 21 Jan 2019 11:28:24 -0500 -Subject: Use the same requested-attributes values for all IPP Everywhere setup - requests (Issue #5484) - -The lpadmin command, web interface, and scheduler all queried an IPP -Everywhere printer differently, resulting in different PPDs for the same -printer - -Switch to using "all" and "media-col-database" because some vendors apparently -do not know how to read ---- - cgi-bin/admin.c | 10 ++++++++-- - scheduler/ipp.c | 9 +++++++-- - systemv/lpadmin.c | 6 ++---- - 3 files changed, 17 insertions(+), 8 deletions(-) - -diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c -index 00830e486..690fbbc73 100644 ---- a/cgi-bin/admin.c -+++ b/cgi-bin/admin.c -@@ -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 -@@ -4224,6 +4224,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" -+ }; - - - /* -@@ -4264,6 +4269,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)) -diff --git a/scheduler/ipp.c b/scheduler/ipp.c -index 6ea3e37f2..e00275b09 100644 ---- a/scheduler/ipp.c -+++ b/scheduler/ipp.c -@@ -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 -@@ -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(); -diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c -index ee2438c1d..e979e56c4 100644 ---- a/systemv/lpadmin.c -+++ b/systemv/lpadmin.c -@@ -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 -@@ -1194,9 +1194,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" - }; - diff --git a/debian/patches/0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch b/debian/patches/0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch deleted file mode 100644 index 480594d9a..000000000 --- a/debian/patches/0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 62283fab59e63c2be87171bc36c00717a91b7663 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Mon, 21 Jan 2019 11:32:42 -0500 -Subject: Add a USB quirk rule for the Lexmark E120n (Issue #5478) - ---- - backend/org.cups.usb-quirks | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks -index 3f99f60de..00d3b2545 100644 ---- a/backend/org.cups.usb-quirks -+++ b/backend/org.cups.usb-quirks -@@ -293,3 +293,6 @@ - - # Zebra ZD420 (Issue #5395) - 0x0a5f 0x0120 unidir no-reattach -+ -+# Lexmark E120n (Issue #5478) -+0x043d 0x00cc no-reattach diff --git a/debian/patches/0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch b/debian/patches/0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch deleted file mode 100644 index 73530b0c7..000000000 --- a/debian/patches/0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch +++ /dev/null @@ -1,34 +0,0 @@ -From d218d3e75bea23c39ab48cb44799db13267b9c94 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Wed, 23 Jan 2019 11:15:29 -0500 -Subject: Updated the USB quirks rule for Zebra label printers (Issue #5395) - -Now all Zebra label printers use unidir and no-reattach. ---- - backend/org.cups.usb-quirks | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks -index 00d3b2545..0586602ab 100644 ---- a/backend/org.cups.usb-quirks -+++ b/backend/org.cups.usb-quirks -@@ -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 -@@ -291,8 +291,5 @@ - # 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 diff --git a/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch b/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch deleted file mode 100644 index 515af009d..000000000 --- a/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch +++ /dev/null @@ -1,20 +0,0 @@ -From f8eac850dfbdb4a8d6a02f4d5eb2a473e7b088b4 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Tue, 19 Feb 2019 11:11:54 -0500 -Subject: Add USB quirks rule for Xerox printers (Issue #5523) - ---- - backend/org.cups.usb-quirks | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks -index 0586602ab..77233ea18 100644 ---- a/backend/org.cups.usb-quirks -+++ b/backend/org.cups.usb-quirks -@@ -293,3 +293,6 @@ - - # Lexmark E120n (Issue #5478) - 0x043d 0x00cc no-reattach -+ -+# All Xerox printers (Issue #5523) -+0x0924 no-reattach diff --git a/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch b/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch deleted file mode 100644 index ad790c8b8..000000000 --- a/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch +++ /dev/null @@ -1,20 +0,0 @@ -From d4d7ff4dad47ad4d278ca2c84efd602354a4e627 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Thu, 21 Feb 2019 09:54:59 -0500 -Subject: Add a USB quirks rule for the DYMO 450 Turbo (Issue #5521) - ---- - backend/org.cups.usb-quirks | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks -index 77233ea18..44d6bb8cb 100644 ---- a/backend/org.cups.usb-quirks -+++ b/backend/org.cups.usb-quirks -@@ -296,3 +296,6 @@ - - # All Xerox printers (Issue #5523) - 0x0924 no-reattach -+ -+# Dymo 450 Turbo (Issue #5521) -+0x0922 0x0021 unidir diff --git a/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch b/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch deleted file mode 100644 index d7810fd01..000000000 --- a/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 6f2402e51d47e9cebe27eec5bfdb0e5543127e2a Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Mon, 21 Jan 2019 11:54:58 -0500 -Subject: Fix compile error on Linux (Issue #5483) - ---- - cups/hash.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/cups/hash.c b/cups/hash.c -index 50dc5fb30..a31372595 100644 ---- a/cups/hash.c -+++ b/cups/hash.c -@@ -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 -@@ -235,7 +235,7 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */ - - gnutls_hash_fast(alg, data, datalen, hash); - -- return (gnutls_hash_get_len(alg)); -+ return ((ssize_t)gnutls_hash_get_len(alg)); - } - - #else diff --git a/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch b/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch deleted file mode 100644 index 95378ee79..000000000 --- a/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch +++ /dev/null @@ -1,159 +0,0 @@ -From fb2f9b86fabc11f9b0fad804199064bdd555201e Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Mon, 21 Jan 2019 13:44:43 -0500 -Subject: Stop parsing the Emulators keywords in PPD files (Issue #5475) - -This also addresses a potential memory leak... ---- - cups/ppd.c | 76 ++---------------------------------------------------- - cups/ppd.h | 8 +++--- - 2 files changed, 6 insertions(+), 78 deletions(-) - -diff --git a/cups/ppd.c b/cups/ppd.c -index 5f27484aa..968ea8bf3 100644 ---- a/cups/ppd.c -+++ b/cups/ppd.c -@@ -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 -@@ -117,7 +117,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 */ -@@ -144,21 +143,6 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - _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 any UI groups, subgroups, and options... - */ -@@ -443,7 +427,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 +444,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 */ -@@ -1203,60 +1185,6 @@ _ppdOpen( - else if (!strcmp(string, "Plus90")) - ppd->landscape = 90; - } -- else if (!strcmp(keyword, "Emulators") && string) -- { -- for (count = 1, sptr = string; sptr != NULL;) -- if ((sptr = strchr(sptr, ' ')) != NULL) -- { -- count ++; -- while (*sptr == ' ') -- sptr ++; -- } -- -- ppd->num_emulations = count; -- if ((ppd->emulations = calloc((size_t)count, sizeof(ppd_emul_t))) == NULL) -- { -- pg->ppd_status = PPD_ALLOC_ERROR; -- -- 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; -- } -- } - else if (!strcmp(keyword, "JobPatchFile")) - { - /* -diff --git a/cups/ppd.h b/cups/ppd.h -index 6e628cb60..ae63c0d66 100644 ---- a/cups/ppd.h -+++ b/cups/ppd.h -@@ -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 -@@ -304,8 +304,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 */ diff --git a/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch b/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch deleted file mode 100644 index 5f77f3cc8..000000000 --- a/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch +++ /dev/null @@ -1,1130 +0,0 @@ -From ffbb46708544f6408bc72f200aa7365ba1222f97 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Mon, 21 Jan 2019 14:21:57 -0500 -Subject: 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. - -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. ---- - cgi-bin/admin.c | 12 ++--- - cgi-bin/var.c | 42 +++++++-------- - cups/ppd-cache.c | 134 +++++++++++++++++++++-------------------------- - cups/ppd-mark.c | 12 ++--- - cups/ppd.c | 115 ++++++++++++++++++++-------------------- - cups/string.c | 21 ++++---- - scheduler/ipp.c | 8 +-- - 7 files changed, 161 insertions(+), 183 deletions(-) - -diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c -index 690fbbc73..06199a96b 100644 ---- a/cgi-bin/admin.c -+++ b/cgi-bin/admin.c -@@ -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)); - } - - /* -@@ -2417,7 +2417,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)); - } - - /* -@@ -2555,7 +2555,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); - } -@@ -2952,7 +2952,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... -@@ -3761,8 +3761,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, -diff --git a/cgi-bin/var.c b/cgi-bin/var.c -index 579f23ba3..8b8f26472 100644 ---- a/cgi-bin/var.c -+++ b/cgi-bin/var.c -@@ -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)); -diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c -index ab91f0fd4..8b496e3b2 100644 ---- a/cups/ppd-cache.c -+++ b/cups/ppd-cache.c -@@ -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); -- -- if (pc->custom_min_keyword) -- _cupsStrFree(pc->custom_min_keyword); -+ free(pc->custom_max_keyword); -+ free(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); - -diff --git a/cups/ppd-mark.c b/cups/ppd-mark.c -index 464c09a98..2d106ba9e 100644 ---- a/cups/ppd-mark.c -+++ b/cups/ppd-mark.c -@@ -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 -@@ -890,9 +890,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; - } - } -@@ -967,9 +967,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; - } - } -diff --git a/cups/ppd.c b/cups/ppd.c -index 968ea8bf3..435b992f4 100644 ---- a/cups/ppd.c -+++ b/cups/ppd.c -@@ -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 */ -@@ -135,13 +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(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... -@@ -152,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); -@@ -163,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... -@@ -185,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); - } - - /* -@@ -195,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... -@@ -205,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); -@@ -231,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 : -@@ -279,7 +276,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - * Free the whole record... - */ - -- ppd_free(ppd); -+ free(ppd); - } - - -@@ -617,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... -@@ -635,8 +632,8 @@ _ppdOpen( - { - pg->ppd_status = PPD_ALLOC_ERROR; - -- _cupsStrFree(string); -- ppd_free(line.buffer); -+ free(string); -+ free(line.buffer); - - return (NULL); - } -@@ -833,7 +830,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")) -@@ -854,10 +851,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; -@@ -867,17 +864,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")) -@@ -945,10 +942,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); -@@ -971,7 +968,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)) -@@ -1136,7 +1133,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); -@@ -1338,7 +1335,7 @@ _ppdOpen( - - option->section = PPD_ORDER_ANY; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - - /* -@@ -1366,7 +1363,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")) -@@ -1445,7 +1442,7 @@ _ppdOpen( - option->section = PPD_ORDER_JCL; - group = NULL; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - - /* -@@ -1469,7 +1466,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")) -@@ -1483,7 +1480,7 @@ _ppdOpen( - - option = NULL; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "JCLCloseUI")) -@@ -1497,7 +1494,7 @@ _ppdOpen( - - option = NULL; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "OpenGroup")) -@@ -1544,14 +1541,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")) -@@ -1609,7 +1606,7 @@ _ppdOpen( - option->order = order; - } - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strncmp(keyword, "Default", 7)) -@@ -1852,7 +1849,7 @@ _ppdOpen( - * Don't add this one as an attribute... - */ - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "PaperDimension")) -@@ -1874,7 +1871,7 @@ _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")) -@@ -1898,7 +1895,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 && -@@ -1954,7 +1951,7 @@ _ppdOpen( - (mask & (PPD_KEYWORD | PPD_STRING)) == (PPD_KEYWORD | PPD_STRING)) - ppd_add_attr(ppd, keyword, name, text, string); - else -- _cupsStrFree(string); -+ free(string); - } - - /* -@@ -1977,7 +1974,7 @@ _ppdOpen( - goto error; - } - -- ppd_free(line.buffer); -+ free(line.buffer); - - /* - * Reset language preferences... -@@ -2059,8 +2056,8 @@ _ppdOpen( - - error: - -- _cupsStrFree(string); -- ppd_free(line.buffer); -+ free(string); -+ free(line.buffer); - - ppdClose(ppd); - -@@ -2498,9 +2495,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; -@@ -2527,7 +2524,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) -@@ -2537,7 +2534,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); - } - } - -@@ -2559,10 +2556,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); - } - } - -@@ -3299,7 +3296,7 @@ ppd_read(cups_file_t *fp, /* I - File to read from */ - lineptr ++; - } - -- *string = _cupsStrAlloc(lineptr); -+ *string = strdup(lineptr); - - mask |= PPD_STRING; - } -@@ -3421,7 +3418,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); - -diff --git a/cups/string.c b/cups/string.c -index 0d4ed0f50..dd9c12ce8 100644 ---- a/cups/string.c -+++ b/cups/string.c -@@ -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 -@@ -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) -diff --git a/scheduler/ipp.c b/scheduler/ipp.c -index e00275b09..9be8a7f3b 100644 ---- a/scheduler/ipp.c -+++ b/scheduler/ipp.c -@@ -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") && -@@ -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, diff --git a/debian/patches/0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch b/debian/patches/0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch deleted file mode 100644 index e4a3f6a2b..000000000 --- a/debian/patches/0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 917e6f4ff70eed933c80d21eed4c6bfeb2cb68b7 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sweet@gmail.com> -Date: Mon, 11 Mar 2019 13:54:46 -0400 -Subject: Fix an issue with `PreserveJobHistory` and time values (Issue #5538) - -Closes: #921741 ---- - scheduler/job.c | 36 ++++++++++++++++++------------------ - 1 file changed, 18 insertions(+), 18 deletions(-) - -diff --git a/scheduler/job.c b/scheduler/job.c -index cc9283fb8..d4793cbb1 100644 ---- a/scheduler/job.c -+++ b/scheduler/job.c -@@ -437,10 +437,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 +466,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 +1727,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 +1738,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; - -@@ -2862,8 +2860,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 +2877,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; - -@@ -4693,7 +4693,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 +4701,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; - diff --git a/debian/patches/airprint-support.patch b/debian/patches/airprint-support.patch index 415227c60..8441efd23 100644 --- a/debian/patches/airprint-support.patch +++ b/debian/patches/airprint-support.patch @@ -1,4 +1,4 @@ -From 93864a81b630172c7d8162394c0fc9d2a2cb7f78 Mon Sep 17 00:00:00 2001 +From cd67c9b31e932eaa8cbbb4755b75cea4ef1ff4eb Mon Sep 17 00:00:00 2001 From: Till Kamppeter <till.kamppeter@gmail.com> Date: Tue, 9 Aug 2016 18:11:29 +0200 Subject: Patch to support Apple AirPrint (printing from iPhone, iPad, iPod @@ -48,7 +48,7 @@ index fa5371486..84cb0fffe 100644 # # Text files... diff --git a/scheduler/conf.c b/scheduler/conf.c -index 9c1be7089..52f2a6d35 100644 +index 11c94d2e4..2d02af752 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -745,7 +745,7 @@ cupsdReadConfiguration(void) @@ -78,10 +78,10 @@ index 3dab90ca9..f21942af3 100644 { keyvalue[count ][0] = "air"; diff --git a/scheduler/printers.c b/scheduler/printers.c -index 865e3693b..968005059 100644 +index 6f04711f1..1135b133f 100644 --- a/scheduler/printers.c +++ b/scheduler/printers.c -@@ -3765,7 +3765,9 @@ add_printer_formats(cupsd_printer_t *p) /* I - Printer */ +@@ -3759,7 +3759,9 @@ add_printer_formats(cupsd_printer_t *p) /* I - Printer */ } else if (!_cups_strcasecmp(type->super, "image")) { diff --git a/debian/patches/confdirperms.patch b/debian/patches/confdirperms.patch index afb824ee6..43e6cccc5 100644 --- a/debian/patches/confdirperms.patch +++ b/debian/patches/confdirperms.patch @@ -1,4 +1,4 @@ -From 2a03d964274a972df70409b72302ef65ff43b043 Mon Sep 17 00:00:00 2001 +From 743868ed0a64d376638adb5b454a18baf8a541ed Mon Sep 17 00:00:00 2001 From: Martin Pitt <mpitt@debian.org> Date: Tue, 9 Aug 2016 18:11:41 +0200 Subject: Do not mess with the permissions of cupsd.conf. @@ -11,7 +11,7 @@ Patch-Name: confdirperms.patch 1 file changed, 2 insertions(+) diff --git a/scheduler/conf.c b/scheduler/conf.c -index 03fc8ecd5..86e37582b 100644 +index a159b6ff8..6892085a4 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -1134,10 +1134,12 @@ cupsdReadConfiguration(void) diff --git a/debian/patches/cups-set-default-error-policy-retry-job.patch b/debian/patches/cups-set-default-error-policy-retry-job.patch index f96173a29..5f4c82a59 100644 --- a/debian/patches/cups-set-default-error-policy-retry-job.patch +++ b/debian/patches/cups-set-default-error-policy-retry-job.patch @@ -1,4 +1,4 @@ -From de6d00cd1b3c7a447281e09f7496f25efe5f0957 Mon Sep 17 00:00:00 2001 +From 6edfb5edc10c8fb5b8ade6db14c0efc642092fdb Mon Sep 17 00:00:00 2001 From: Martin Pitt <martin.pitt@ubuntu.com> Date: Tue, 9 Aug 2016 18:11:47 +0200 Subject: Set default job error policy to "retry-job", since it is less @@ -18,7 +18,7 @@ Patch-Name: cups-set-default-error-policy-retry-job.patch 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/help/man-cupsd.conf.html b/doc/help/man-cupsd.conf.html -index 4ba6ecf8f..7f7126475 100644 +index 8850f3523..e5a2d3dd4 100644 --- a/doc/help/man-cupsd.conf.html +++ b/doc/help/man-cupsd.conf.html @@ -91,9 +91,9 @@ The default value is "30". @@ -34,7 +34,7 @@ index 4ba6ecf8f..7f7126475 100644 <dd style="margin-left: 5.0em">Specifies the maximum cost of filters that are run concurrently, which can be used to minimize disk, memory, and CPU resource problems. A limit of 0 disables filter limiting. diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in -index 6cec33969..df2b5bbd5 100644 +index 2d6c5b89e..a870ff91d 100644 --- a/man/cupsd.conf.man.in +++ b/man/cupsd.conf.man.in @@ -136,10 +136,10 @@ Specifies that a failed print job should be aborted (discarded) unless otherwise @@ -51,7 +51,7 @@ index 6cec33969..df2b5bbd5 100644 .TP 5 \fBFilterLimit \fIlimit\fR diff --git a/scheduler/conf.c b/scheduler/conf.c -index 755243170..aae7443de 100644 +index 743f64cab..1b70afc94 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -751,7 +751,7 @@ cupsdReadConfiguration(void) diff --git a/debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch b/debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch index e435688a4..78104c861 100644 --- a/debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch +++ b/debian/patches/cupsd-set-default-for-SyncOnClose-to-Yes.patch @@ -1,4 +1,4 @@ -From e7fd9b04ab5847dc694607543ed8bbd4655044dd Mon Sep 17 00:00:00 2001 +From 71646b0c6c2caf1bb758dc3e500e53f76d2e243c Mon Sep 17 00:00:00 2001 From: Tim Waugh <twaugh@redhat.com> Date: Tue, 9 Aug 2016 18:11:46 +0200 Subject: Set the default for SyncOnClose to Yes @@ -53,7 +53,7 @@ index f5e6a9f39..c3d8eeb2b 100644 .TP 5 \fBSystemGroup \fIgroup-name \fR[ ... \fIgroup-name\fR ] diff --git a/scheduler/conf.c b/scheduler/conf.c -index b12bda1f6..755243170 100644 +index 898b84f3e..743f64cab 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -735,7 +735,7 @@ cupsdReadConfiguration(void) @@ -62,6 +62,6 @@ index b12bda1f6..755243170 100644 StrictConformance = FALSE; - SyncOnClose = FALSE; + SyncOnClose = TRUE; - Timeout = DEFAULT_TIMEOUT; + Timeout = 900; WebInterface = CUPS_DEFAULT_WEBIF; diff --git a/debian/patches/debianize_cups-config.patch b/debian/patches/debianize_cups-config.patch index b17824746..f14890ed5 100644 --- a/debian/patches/debianize_cups-config.patch +++ b/debian/patches/debianize_cups-config.patch @@ -1,4 +1,4 @@ -From 46797627880e057a4e6e35575636b93b8450d54d Mon Sep 17 00:00:00 2001 +From 7a2def69b1ef279ea750c661b0f95a24b3f1574f Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:49 +0200 Subject: Use dpkg-architecture in cups-config to make it diff --git a/debian/patches/default_log_settings.patch b/debian/patches/default_log_settings.patch index dce4c16bd..e99596564 100644 --- a/debian/patches/default_log_settings.patch +++ b/debian/patches/default_log_settings.patch @@ -1,4 +1,4 @@ -From 309d0a1a54ca11e25b545e9ba5903d59bbdce1b1 Mon Sep 17 00:00:00 2001 +From 4051e3ad3ccfb42fde52f612696b9edb4521f8d9 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:40 +0200 Subject: Deactivate CUPS' own log rotating as the system already provides a diff --git a/debian/patches/do-not-broadcast-with-hostnames.patch b/debian/patches/do-not-broadcast-with-hostnames.patch index dd521216c..ef0e16d29 100644 --- a/debian/patches/do-not-broadcast-with-hostnames.patch +++ b/debian/patches/do-not-broadcast-with-hostnames.patch @@ -1,4 +1,4 @@ -From 1779852a06df8333c948b745c3aa3f1f231be64f Mon Sep 17 00:00:00 2001 +From d3ec4d94e1f8c178c4a7d228da2dde11041f33ef Mon Sep 17 00:00:00 2001 From: Till Kampetter <till.kampetter@gmail.com> Date: Tue, 9 Aug 2016 18:11:35 +0200 Subject: Do not use host names for broadcasting print queues and @@ -13,7 +13,7 @@ Patch-Name: do-not-broadcast-with-hostnames.patch 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/conf.c b/scheduler/conf.c -index 52f2a6d35..03fc8ecd5 100644 +index 2d02af752..a159b6ff8 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -898,7 +898,7 @@ cupsdReadConfiguration(void) diff --git a/debian/patches/drop_unnecessary_dependencies.patch b/debian/patches/drop_unnecessary_dependencies.patch index bd18f89c3..a11d03796 100644 --- a/debian/patches/drop_unnecessary_dependencies.patch +++ b/debian/patches/drop_unnecessary_dependencies.patch @@ -1,4 +1,4 @@ -From f5a40c519699d77a7265fbe7993df890ab4c00c0 Mon Sep 17 00:00:00 2001 +From c9157cfdf76f24d00775745d9651716112972937 Mon Sep 17 00:00:00 2001 From: Martin Pitt <mpitt@debian.org> Date: Tue, 9 Aug 2016 18:11:25 +0200 Subject: Do not link libcups.so and libcupsimage.so unnecessarily @@ -16,7 +16,7 @@ Patch-Name: drop_unnecessary_dependencies.patch 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makedefs.in b/Makedefs.in -index f614c0c1d..431d14019 100644 +index 8541b4976..dd86cde4b 100644 --- a/Makedefs.in +++ b/Makedefs.in @@ -156,7 +156,7 @@ DBUS_NOTIFIER = @DBUS_NOTIFIER@ diff --git a/debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch b/debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch index 9e6a8d07d..db22baf1b 100644 --- a/debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch +++ b/debian/patches/fixes-for-jobs-with-multiple-files-and-multiple-formats.patch @@ -1,4 +1,4 @@ -From 958625d59f2ff723fbf4a535cee7e6ea251b8732 Mon Sep 17 00:00:00 2001 +From d07ce26c5b3a2a79a8e97821a1a88f2ad54b30ee Mon Sep 17 00:00:00 2001 From: Tim Waugh <twaugh@redhat.com> Date: Tue, 9 Aug 2016 18:11:07 +0200 Subject: Fix jobs with multiple files or multiple formats @@ -12,7 +12,7 @@ Patch-Name: fixes-for-jobs-with-multiple-files-and-multiple-formats.patch 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/ipp.c b/backend/ipp.c -index f14a44e66..bc678f50a 100644 +index c364e1978..e072249bd 100644 --- a/backend/ipp.c +++ b/backend/ipp.c @@ -1788,7 +1788,10 @@ main(int argc, /* I - Number of command-line args */ diff --git a/debian/patches/log-debug-history-nearly-unlimited.patch b/debian/patches/log-debug-history-nearly-unlimited.patch index a973aaae8..eabfc4b80 100644 --- a/debian/patches/log-debug-history-nearly-unlimited.patch +++ b/debian/patches/log-debug-history-nearly-unlimited.patch @@ -1,4 +1,4 @@ -From 833d317f0520b037c79ad4b1ceeca31529797641 Mon Sep 17 00:00:00 2001 +From 8d4d092df601951637c199a190666b1c11d7be43 Mon Sep 17 00:00:00 2001 From: Till Kampetter <till.kampetter@gmail.com> Date: Tue, 9 Aug 2016 18:11:45 +0200 Subject: Make log debug history nearly unlimited @@ -11,7 +11,7 @@ Patch-Name: log-debug-history-nearly-unlimited.patch 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scheduler/conf.c b/scheduler/conf.c -index 86e37582b..b12bda1f6 100644 +index 6892085a4..898b84f3e 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -721,7 +721,7 @@ cupsdReadConfiguration(void) diff --git a/debian/patches/logfiles_adm_readable.patch b/debian/patches/logfiles_adm_readable.patch index 27370c326..af03afba7 100644 --- a/debian/patches/logfiles_adm_readable.patch +++ b/debian/patches/logfiles_adm_readable.patch @@ -1,4 +1,4 @@ -From 868577abc6613d776682af81906a38cc2f68d5fb Mon Sep 17 00:00:00 2001 +From 48fcd4a99f5e75be488426a7aa01d2e393bd5520 Mon Sep 17 00:00:00 2001 From: Martin Pitt <mpitt@debian.org> Date: Tue, 9 Aug 2016 18:11:38 +0200 Subject: Make log files readable to group "adm", if present. diff --git a/debian/patches/man-cups-lpd-drop-dangling-references.patch b/debian/patches/man-cups-lpd-drop-dangling-references.patch index 3e11dd901..761339339 100644 --- a/debian/patches/man-cups-lpd-drop-dangling-references.patch +++ b/debian/patches/man-cups-lpd-drop-dangling-references.patch @@ -1,4 +1,4 @@ -From 361a21356d8f1bbb0794cad4509bfed141f1a721 Mon Sep 17 00:00:00 2001 +From 2e3633bed229ae17798c9456625591012469ef5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastien=20ROUCARI=C3=88S?= <bastien.roucaries@u-cergy.fr> Date: Tue, 9 Aug 2016 18:11:48 +0200 Subject: Drop dangling references from cups-lpd.man diff --git a/debian/patches/manpage-hyphen-minus.patch b/debian/patches/manpage-hyphen-minus.patch index 645cf7a6a..2c7134cee 100644 --- a/debian/patches/manpage-hyphen-minus.patch +++ b/debian/patches/manpage-hyphen-minus.patch @@ -1,4 +1,4 @@ -From 4d804d883eed3c12719fd830bb24a8e9bc638105 Mon Sep 17 00:00:00 2001 +From ca4c0f32fb4b03e8f1be9feb64abdfe367aac7a3 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:05 +0200 Subject: Fix hyphen-used-as-minus-sign manpage errors @@ -254,7 +254,7 @@ index 8672afa09..04ba12d35 100644 .BR cupsd (8), .BR cupsd.conf (5), diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in -index 15a5fa9e6..6cec33969 100644 +index 97bf87917..2d6c5b89e 100644 --- a/man/cupsd.conf.man.in +++ b/man/cupsd.conf.man.in @@ -443,7 +443,7 @@ The \fIAllowDH\fR option enables cipher suites using plain Diffie-Hellman key ne @@ -324,7 +324,7 @@ index 253e05799..ce26c50ca 100644 Expressions may also contain modifiers: .TP 5 diff --git a/man/ipptoolfile.man b/man/ipptoolfile.man -index 35b050419..c10254f64 100644 +index 5e8384b69..b7c594a0f 100644 --- a/man/ipptoolfile.man +++ b/man/ipptoolfile.man @@ -169,8 +169,8 @@ The following directives are understood within a \fItest\fR: diff --git a/debian/patches/manpage-translations.patch b/debian/patches/manpage-translations.patch index 480d1add0..1e326e7e0 100644 --- a/debian/patches/manpage-translations.patch +++ b/debian/patches/manpage-translations.patch @@ -1,4 +1,4 @@ -From 9615ef5f2b8374bfe2816f8ff4314234362ce841 Mon Sep 17 00:00:00 2001 +From 1cd07131ecfb487064814a2c315e89b38066d73c Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:50 +0200 Subject: po4a infrastructure and translations for manpages. diff --git a/debian/patches/move-cupsd-conf-default-to-share.patch b/debian/patches/move-cupsd-conf-default-to-share.patch index c181061f2..e437d81c4 100644 --- a/debian/patches/move-cupsd-conf-default-to-share.patch +++ b/debian/patches/move-cupsd-conf-default-to-share.patch @@ -1,4 +1,4 @@ -From 636736bf6b694603432da1f72f07754d29e1673d Mon Sep 17 00:00:00 2001 +From df76c461bbe020dade1881bcdaa3732182303092 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:24 +0200 Subject: Move cupsd.conf.default from SERVERROOT to DATADIR @@ -15,7 +15,7 @@ Patch-Name: move-cupsd-conf-default-to-share.patch 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c -index ce9297765..00830e486 100644 +index 43fad787e..f0d01598d 100644 --- a/cgi-bin/admin.c +++ b/cgi-bin/admin.c @@ -1922,6 +1922,7 @@ do_config_server(http_t *http) /* I - HTTP connection */ diff --git a/debian/patches/no-conffile-timestamp.patch b/debian/patches/no-conffile-timestamp.patch index 3915049d7..9ee7f150a 100644 --- a/debian/patches/no-conffile-timestamp.patch +++ b/debian/patches/no-conffile-timestamp.patch @@ -1,4 +1,4 @@ -From 1d450c07d37d9a44ebc8ee270e0dd322bfbeb7f0 Mon Sep 17 00:00:00 2001 +From cafaeeefc9d27d50954752525cd534069354df78 Mon Sep 17 00:00:00 2001 From: Joey Hess <joeyh@debian.org> Date: Tue, 9 Aug 2016 18:11:31 +0200 Subject: Disable time stamps in conffiles, to avoid ever-changing files in @@ -29,7 +29,7 @@ index 57f9a8f44..74036fd46 100644 /* diff --git a/scheduler/job.c b/scheduler/job.c -index bbef60c64..cc9283fb8 100644 +index dcee43d83..79142bc61 100644 --- a/scheduler/job.c +++ b/scheduler/job.c @@ -2205,7 +2205,7 @@ cupsdSaveAllJobs(void) @@ -42,10 +42,10 @@ index bbef60c64..cc9283fb8 100644 /* diff --git a/scheduler/printers.c b/scheduler/printers.c -index 968005059..fda5316ee 100644 +index 1135b133f..309c1cbe1 100644 --- a/scheduler/printers.c +++ b/scheduler/printers.c -@@ -1458,7 +1458,7 @@ cupsdSaveAllPrinters(void) +@@ -1452,7 +1452,7 @@ cupsdSaveAllPrinters(void) strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate); cupsFilePuts(fp, "# Printer configuration file for " CUPS_SVERSION "\n"); @@ -55,10 +55,10 @@ index 968005059..fda5316ee 100644 /* diff --git a/scheduler/subscriptions.c b/scheduler/subscriptions.c -index b2abf14ee..bf36ced4e 100644 +index cac340520..c0e03b8cb 100644 --- a/scheduler/subscriptions.c +++ b/scheduler/subscriptions.c -@@ -1085,7 +1085,7 @@ cupsdSaveAllSubscriptions(void) +@@ -1088,7 +1088,7 @@ cupsdSaveAllSubscriptions(void) strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate); cupsFilePuts(fp, "# Subscription configuration file for " CUPS_SVERSION "\n"); diff --git a/debian/patches/pwg-raster-attributes.patch b/debian/patches/pwg-raster-attributes.patch index 9fa2373d3..3ecf47a46 100644 --- a/debian/patches/pwg-raster-attributes.patch +++ b/debian/patches/pwg-raster-attributes.patch @@ -1,4 +1,4 @@ -From b19b9601ea12d001c2ae7f2ef3bdfe43eaca2a9f Mon Sep 17 00:00:00 2001 +From bfed0c1e33e103ccfe934be6eb525ba6aff73b85 Mon Sep 17 00:00:00 2001 From: Till Kamppeter <till.kamppeter@gmail.com> Date: Tue, 9 Aug 2016 18:11:04 +0200 Subject: For PWG Raster, add required IPP attributes @@ -14,10 +14,10 @@ Patch-Name: pwg-raster-attributes.patch 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/scheduler/printers.c b/scheduler/printers.c -index 68239d85d..865e3693b 100644 +index 937d0f3c9..6f04711f1 100644 --- a/scheduler/printers.c +++ b/scheduler/printers.c -@@ -2199,9 +2199,10 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */ +@@ -2193,9 +2193,10 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */ cupsd_location_t *auth; /* Pointer to authentication element */ const char *auth_supported; /* Authentication supported */ ipp_t *oldattrs; /* Old printer attributes */ @@ -29,7 +29,7 @@ index 68239d85d..865e3693b 100644 DEBUG_printf(("cupsdSetPrinterAttrs: entering name = %s, type = %x\n", p->name, -@@ -2538,6 +2539,80 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */ +@@ -2532,6 +2533,80 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */ DEBUG_printf(("cupsdSetPrinterAttrs: leaving name = %s, type = %x\n", p->name, p->type)); diff --git a/debian/patches/reactivate_recommended_driver.patch b/debian/patches/reactivate_recommended_driver.patch index 6df2d7f0c..aa2c93429 100644 --- a/debian/patches/reactivate_recommended_driver.patch +++ b/debian/patches/reactivate_recommended_driver.patch @@ -1,4 +1,4 @@ -From 04481c8139358649196c570bff2fb32132d408a2 Mon Sep 17 00:00:00 2001 +From d4f20a4097f2dda79d35df9a87935d8d74021f50 Mon Sep 17 00:00:00 2001 From: Till Kampetter <till.kampetter@gmail.com> Date: Tue, 9 Aug 2016 18:11:36 +0200 Subject: CUPS removes the "(recommended)" comments of the NickNames of @@ -13,10 +13,10 @@ Patch-Name: reactivate_recommended_driver.patch 1 file changed, 10 deletions(-) diff --git a/scheduler/cups-driverd.cxx b/scheduler/cups-driverd.cxx -index e6684a139..1d4291a73 100644 +index 81c447ad8..d48c75165 100644 --- a/scheduler/cups-driverd.cxx +++ b/scheduler/cups-driverd.cxx -@@ -246,7 +246,6 @@ add_ppd(const char *filename, /* I - PPD filename */ +@@ -243,7 +243,6 @@ add_ppd(const char *filename, /* I - PPD filename */ const char *scheme) /* I - PPD scheme */ { ppd_info_t *ppd; /* PPD */ @@ -24,7 +24,7 @@ index e6684a139..1d4291a73 100644 /* -@@ -284,15 +283,6 @@ add_ppd(const char *filename, /* I - PPD filename */ +@@ -281,15 +280,6 @@ add_ppd(const char *filename, /* I - PPD filename */ strlcpy(ppd->record.device_id, device_id, sizeof(ppd->record.device_id)); strlcpy(ppd->record.scheme, scheme, sizeof(ppd->record.scheme)); diff --git a/debian/patches/removecvstag.patch b/debian/patches/removecvstag.patch index ed8183f12..d7dfeae9f 100644 --- a/debian/patches/removecvstag.patch +++ b/debian/patches/removecvstag.patch @@ -1,4 +1,4 @@ -From 13c7f079928135d2fe90728ddb073d8571bb0150 Mon Sep 17 00:00:00 2001 +From 84da8ceb42cfed4b7cfe3ee6704d67593e7b0941 Mon Sep 17 00:00:00 2001 From: Kenshi Muto <kmuto@debian.org> Date: Tue, 9 Aug 2016 18:11:33 +0200 Subject: Do not write VCS tags into installed conffiles diff --git a/debian/patches/rename-systemd-units.patch b/debian/patches/rename-systemd-units.patch index 4e318e424..e32949304 100644 --- a/debian/patches/rename-systemd-units.patch +++ b/debian/patches/rename-systemd-units.patch @@ -1,4 +1,4 @@ -From 27e3f4429e71af41c18eabcd5e1436e8f40deec1 Mon Sep 17 00:00:00 2001 +From 5deeb9908be6bec764654b35ac23d379bfb5d024 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:34 +0200 Subject: Rename the systemd service file from org.cups.cups.* to cups.* @@ -36,10 +36,10 @@ index 0f1cc46f2..7c8509fa6 100644 [Path] PathExists=@CUPS_CACHEDIR@/org.cups.cupsd diff --git a/scheduler/org.cups.cupsd.service.in b/scheduler/org.cups.cupsd.service.in -index f2afa1124..3c273612a 100644 +index 5273762fb..cd2334396 100644 --- a/scheduler/org.cups.cupsd.service.in +++ b/scheduler/org.cups.cupsd.service.in -@@ -8,5 +8,5 @@ Type=simple +@@ -9,5 +9,5 @@ Type=simple Restart=on-failure [Install] diff --git a/debian/patches/series b/debian/patches/series index a25495ef7..ad63fbf33 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -32,15 +32,4 @@ cups-set-default-error-policy-retry-job.patch man-cups-lpd-drop-dangling-references.patch debianize_cups-config.patch 0034-Build-mantohtml-with-the-build-architecture-compiler.patch -0035-The-lp-and-lpr-commands-now-provide-better-error-mes.patch -0036-Protect-against-continuing-to-read-from-a-file-at-EO.patch -0037-Use-the-same-requested-attributes-values-for-all-IPP.patch -0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch -0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch -0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch -0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch -0042-Fix-compile-error-on-Linux-Issue-5483.patch -0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch -0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch -0045-Fix-an-issue-with-PreserveJobHistory-and-time-values.patch manpage-translations.patch diff --git a/debian/patches/show-compile-command-lines.patch b/debian/patches/show-compile-command-lines.patch index acfe678ea..2191590d8 100644 --- a/debian/patches/show-compile-command-lines.patch +++ b/debian/patches/show-compile-command-lines.patch @@ -1,4 +1,4 @@ -From 84cdb2bf1b52f1d2c874cb11e043d145b97f6dc8 Mon Sep 17 00:00:00 2001 +From 0baeb1d78fa49fa2656706f7951e59f520e8e98c Mon Sep 17 00:00:00 2001 From: Till Kampetter <till.kampetter@gmail.com> Date: Tue, 9 Aug 2016 18:11:43 +0200 Subject: Show compile command lines @@ -9,7 +9,7 @@ Patch-Name: show-compile-command-lines.patch 1 file changed, 1 deletion(-) diff --git a/Makedefs.in b/Makedefs.in -index 431d14019..656d7b44c 100644 +index dd86cde4b..83eae7ce8 100644 --- a/Makedefs.in +++ b/Makedefs.in @@ -261,7 +261,6 @@ USBQUIRKS = @USBQUIRKS@ diff --git a/debian/patches/test-i18n-nonlinux.patch b/debian/patches/test-i18n-nonlinux.patch index 69534b597..93368ff92 100644 --- a/debian/patches/test-i18n-nonlinux.patch +++ b/debian/patches/test-i18n-nonlinux.patch @@ -1,4 +1,4 @@ -From e80cf44f0e8306861e4a6cd501d9176ba6321ba8 Mon Sep 17 00:00:00 2001 +From 8db74bb2d98ae2cf7838bbcc080f22b59016a1c5 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:16 +0200 Subject: Tests: Do not run the CUPS_EUC_JP test case on BSD/Hurd either, as diff --git a/debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch b/debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch index 94a79c659..35caeb259 100644 --- a/debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch +++ b/debian/patches/tests-fix-ppdLocalize-on-unclean-env.patch @@ -1,4 +1,4 @@ -From ad183a459c66cc1bec8727a685235d9ae277ea46 Mon Sep 17 00:00:00 2001 +From 995b47b758bb86a184d923c3960bb8867254557a Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:18 +0200 Subject: Tests: Force LC_* environment variables when testing (non) @@ -13,7 +13,7 @@ Patch-Name: tests-fix-ppdLocalize-on-unclean-env.patch 1 file changed, 8 insertions(+) diff --git a/cups/testppd.c b/cups/testppd.c -index a127a7947..e6cdea5ed 100644 +index 776304b24..943e70033 100644 --- a/cups/testppd.c +++ b/cups/testppd.c @@ -503,6 +503,14 @@ main(int argc, /* I - Number of command-line arguments */ diff --git a/debian/patches/tests-ignore-ipv6-address-family-not-supported.patch b/debian/patches/tests-ignore-ipv6-address-family-not-supported.patch index 5acd26cb7..6531b364e 100644 --- a/debian/patches/tests-ignore-ipv6-address-family-not-supported.patch +++ b/debian/patches/tests-ignore-ipv6-address-family-not-supported.patch @@ -1,4 +1,4 @@ -From 216ab53fd4e0efbd4c9bff23e0db41aa0e89ff2f Mon Sep 17 00:00:00 2001 +From 97665110b28de873d64ce94779be5811907104ce Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:33:56 +0200 Subject: Tests: ignore errors triggered on ipv6-deprived hosts @@ -13,10 +13,10 @@ Patch-Name: tests-ignore-ipv6-address-family-not-supported.patch 1 file changed, 1 insertion(+) diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index fd4cf20d6..99239caea 100755 +index 41da930f0..8c6b2d617 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh -@@ -972,6 +972,7 @@ count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' +@@ -1038,6 +1038,7 @@ count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' $GREP -v '(dnssd) stopped with status 1' | \ $GREP -v 'loadFile failed: temp file: not a PDF file' | \ $GREP -v 'Failed to connect to system bus' | \ diff --git a/debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch b/debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch index b1d6359b0..3830b2e59 100644 --- a/debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch +++ b/debian/patches/tests-ignore-kfreebsd-amd64-not-a-pdf.patch @@ -1,4 +1,4 @@ -From 0c0de72ae34c09b6ec938d4a78be9bf190d16e7d Mon Sep 17 00:00:00 2001 +From 45897f280686076a46b2540cde47e80876354292 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:30:48 +0200 Subject: Tests: ignore loadFile failures @@ -13,10 +13,10 @@ Patch-Name: tests-ignore-kfreebsd-amd64-not-a-pdf.patch 1 file changed, 2 insertions(+) diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index 8219f1e26..fd4cf20d6 100755 +index c842cf530..41da930f0 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh -@@ -970,6 +970,8 @@ fi +@@ -1036,6 +1036,8 @@ fi count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | \ $GREP -v '(usb) crashed on signal 11' | \ $GREP -v '(dnssd) stopped with status 1' | \ diff --git a/debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch b/debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch index 23c7c2a2a..039733afa 100644 --- a/debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch +++ b/debian/patches/tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch @@ -1,4 +1,4 @@ -From 31de6465febf604c20afde267596e98e733ba990 Mon Sep 17 00:00:00 2001 +From e570284abae7d406a2c33b488a4fd0b20dfd93d0 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:36:02 +0200 Subject: Tests: ignore the failure to write uncompressed data @@ -14,10 +14,10 @@ Patch-Name: tests-ignore-kfreebsd-unable-to-write-uncompressed-print-data.patch 1 file changed, 1 insertion(+) diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index 99239caea..97dc3866f 100755 +index 8c6b2d617..b79149f23 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh -@@ -973,6 +973,7 @@ count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' +@@ -1039,6 +1039,7 @@ count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' $GREP -v 'loadFile failed: temp file: not a PDF file' | \ $GREP -v 'Failed to connect to system bus' | \ $GREP -v -E 'Unable to open listen socket for address .* Address family not supported by protocol.' | \ diff --git a/debian/patches/tests-ignore-usb-crash.patch b/debian/patches/tests-ignore-usb-crash.patch index 8faf1757f..3d1cb547d 100644 --- a/debian/patches/tests-ignore-usb-crash.patch +++ b/debian/patches/tests-ignore-usb-crash.patch @@ -1,4 +1,4 @@ -From a377691ca08b10ec3976300d5ad02b05f19307cf Mon Sep 17 00:00:00 2001 +From 31f3c8e45c30721385539cf035660a0b6969b82f Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:10 +0200 Subject: Tests: ignore usb & dnssd backend unexpected exits @@ -17,10 +17,10 @@ Patch-Name: tests-ignore-usb-crash.patch 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index c7de337ae..8219f1e26 100755 +index ce1f386c0..c842cf530 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh -@@ -967,7 +967,10 @@ else +@@ -1033,7 +1033,10 @@ else fi # Error log messages diff --git a/debian/patches/tests-ignore-warnings.patch b/debian/patches/tests-ignore-warnings.patch index fcfb94276..946197c76 100644 --- a/debian/patches/tests-ignore-warnings.patch +++ b/debian/patches/tests-ignore-warnings.patch @@ -1,4 +1,4 @@ -From 44d082e3a3d2f673801d8e78d66ce08a2cb2236d Mon Sep 17 00:00:00 2001 +From e2af6d00fedf677671093538f24fcca5b75e34bd Mon Sep 17 00:00:00 2001 From: Martin Pitt <mpitt@debian.org> Date: Tue, 9 Aug 2016 18:11:09 +0200 Subject: Tests: Ignore warnings from colord and Avahi @@ -13,10 +13,10 @@ Patch-Name: tests-ignore-warnings.patch 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index fc7e2525c..c7de337ae 100755 +index 9cf7bd08a..ce1f386c0 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh -@@ -982,7 +982,11 @@ else +@@ -1048,7 +1048,11 @@ else fi # Warning log messages diff --git a/debian/patches/tests-make-lpstat-call-reproducible.patch b/debian/patches/tests-make-lpstat-call-reproducible.patch index 4da028da5..389964326 100644 --- a/debian/patches/tests-make-lpstat-call-reproducible.patch +++ b/debian/patches/tests-make-lpstat-call-reproducible.patch @@ -1,4 +1,4 @@ -From d0b8a43d94dc57cb5363e48c3bcb18449d3b9505 Mon Sep 17 00:00:00 2001 +From 56a04f5d453be250b79670a09c1f85d96c8d4ad6 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:22 +0200 Subject: Force LC_ALL=C environment variable when grepping the output of @@ -13,10 +13,10 @@ Patch-Name: tests-make-lpstat-call-reproducible.patch 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index bcdfd5efe..1c7cc27e7 100755 +index 974da77a5..10ad26495 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh -@@ -695,7 +695,7 @@ else +@@ -703,7 +703,7 @@ else fi while true; do @@ -25,7 +25,7 @@ index bcdfd5efe..1c7cc27e7 100755 if test "x$running" = "xscheduler is running"; then break fi -@@ -809,13 +809,13 @@ kill -HUP $cupsd +@@ -817,13 +817,13 @@ kill -HUP $cupsd while true; do sleep 10 diff --git a/debian/patches/tests-no-pdftourf.patch b/debian/patches/tests-no-pdftourf.patch index 8d6bc089b..5e59b1198 100644 --- a/debian/patches/tests-no-pdftourf.patch +++ b/debian/patches/tests-no-pdftourf.patch @@ -1,4 +1,4 @@ -From 6a354c3169ea6469bb71e51fc6d7d23e62f7fcaa Mon Sep 17 00:00:00 2001 +From 8d7b0fef89aaf7e175ca5e2fb03851edbce2bb09 Mon Sep 17 00:00:00 2001 From: Michael Sweet <michael.r.sweet@gmail.com> Date: Tue, 9 Aug 2016 18:11:23 +0200 Subject: Revert pdftourf filter addition in tests @@ -18,7 +18,7 @@ Patch-Name: tests-no-pdftourf.patch delete mode 100644 test/test.types diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index 1c7cc27e7..7fd69652c 100755 +index 10ad26495..f7cf61c36 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh @@ -271,7 +271,7 @@ case "$usedebugprintfs" in diff --git a/debian/patches/tests-use-ipv4-lo-address.patch b/debian/patches/tests-use-ipv4-lo-address.patch index 4642a7213..481cce3f5 100644 --- a/debian/patches/tests-use-ipv4-lo-address.patch +++ b/debian/patches/tests-use-ipv4-lo-address.patch @@ -1,4 +1,4 @@ -From 1697ce7557145b73c55f1c82aec6b70f45228432 Mon Sep 17 00:00:00 2001 +From cbea213e73eb736d8bfa66fc8bea7522ee1ba526 Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:21 +0200 Subject: Use 127.0.0.1 instead of localhost in the test-suite. This should @@ -30,10 +30,10 @@ index 7efc39892..08b8c508f 100644 echo " FAILED" exit 1 diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index 411689141..bcdfd5efe 100755 +index d64bd89fc..974da77a5 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh -@@ -485,7 +485,7 @@ fi +@@ -493,7 +493,7 @@ fi cat >$BASE/cupsd.conf <<EOF StrictConformance Yes Browsing Off @@ -42,7 +42,7 @@ index 411689141..bcdfd5efe 100755 Listen $BASE/sock MaxSubscriptions 3 MaxLogSize 0 -@@ -599,7 +599,7 @@ fi +@@ -607,7 +607,7 @@ fi # These get exported because they don't have side-effects... CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT @@ -51,7 +51,7 @@ index 411689141..bcdfd5efe 100755 CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT CUPS_STATEDIR=$BASE; export CUPS_STATEDIR CUPS_DATADIR=$BASE/share; export CUPS_DATADIR -@@ -735,10 +735,10 @@ for file in 4*.test ipp-2.1.test; do +@@ -743,10 +743,10 @@ for file in 4*.test ipp-2.1.test; do echo $ac_n "`date '+[%d/%b/%Y:%H:%M:%S %z]'` $ac_c" >>$strfile if test $file = ipp-2.1.test; then diff --git a/debian/patches/tests-wait-on-unfinished-jobs-everytime.patch b/debian/patches/tests-wait-on-unfinished-jobs-everytime.patch index deee87c69..b010e02ea 100644 --- a/debian/patches/tests-wait-on-unfinished-jobs-everytime.patch +++ b/debian/patches/tests-wait-on-unfinished-jobs-everytime.patch @@ -1,4 +1,4 @@ -From faa9cfa7c22a95abb45d5ed38d894b518e934a2c Mon Sep 17 00:00:00 2001 +From 1b90626cfba63b97d53e17b2e9980ac17ea75e1c Mon Sep 17 00:00:00 2001 From: Didier Raboud <odyx@debian.org> Date: Tue, 9 Aug 2016 18:11:17 +0200 Subject: Tests: Make sure that all scheduled jobs are finished before @@ -14,10 +14,10 @@ Patch-Name: tests-wait-on-unfinished-jobs-everytime.patch 1 file changed, 5 insertions(+) diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index 97dc3866f..411689141 100755 +index b79149f23..d64bd89fc 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh -@@ -768,6 +768,11 @@ echo " $date by $user on `hostname`." >>$strfile +@@ -776,6 +776,11 @@ echo " $date by $user on `hostname`." >>$strfile echo " <pre>" >>$strfile for file in 5*.sh; do diff --git a/doc/cups.css b/doc/cups.css index da6ac1594..79774b104 100644 --- a/doc/cups.css +++ b/doc/cups.css @@ -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 { diff --git a/doc/de/index.html.in b/doc/de/index.html.in index cbae07b73..cdc29b158 100644 --- a/doc/de/index.html.in +++ b/doc/de/index.html.in @@ -50,6 +50,6 @@ </div> </div> </div> - <div class="footer">CUPS und das CUPS Logo sind Warenzeichen der <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. Alle Rechte vorbehalten.</div> + <div class="footer">CUPS und das CUPS Logo sind Warenzeichen der <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. Alle Rechte vorbehalten.</div> </body> </html> diff --git a/doc/es/index.html.in b/doc/es/index.html.in index 6c12f4fdd..6343c38a6 100644 --- a/doc/es/index.html.in +++ b/doc/es/index.html.in @@ -50,6 +50,6 @@ </div> </div> </div> - <div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor © 2007-2018 Apple Inc. Todos los derechos reservados.</div> + <div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor © 2007-2019 Apple Inc. Todos los derechos reservados.</div> </body> </html> diff --git a/doc/help/man-cupsd.conf.html b/doc/help/man-cupsd.conf.html index 7f7126475..e5a2d3dd4 100644 --- a/doc/help/man-cupsd.conf.html +++ b/doc/help/man-cupsd.conf.html @@ -219,7 +219,7 @@ The value "0" disables log rotation. The default is "1048576" (1MB). <dt><a name="MultipleOperationTimeout"></a><b>MultipleOperationTimeout </b><i>seconds</i> <dd style="margin-left: 5.0em">Specifies the maximum amount of time to allow between files in a multiple file print job. -The default is "300" (5 minutes). +The default is "900" (15 minutes). <dt><a name="Policy"></a><b><Policy </b><i>name</i><b>> </b>... <b></Policy></b> <dd style="margin-left: 5.0em">Specifies access control for the named policy. <dt><a name="Port"></a><b>Port </b><i>number</i> @@ -294,7 +294,7 @@ The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum p The default is "No". <dt><a name="Timeout"></a><b>Timeout </b><i>seconds</i> <dd style="margin-left: 5.0em">Specifies the HTTP request timeout. -The default is "300" (5 minutes). +The default is "900" (15 minutes). <dt><a name="WebInterface"></a><b>WebInterface yes</b> <dd style="margin-left: 5.0em"><dt><b>WebInterface no</b> <dd style="margin-left: 5.0em">Specifies whether the web interface is enabled. @@ -601,7 +601,7 @@ Require authentication for accesses from outside the 10. network: <a href="man-subscriptions.conf.html?TOPIC=Man+Pages"><b>subscriptions.conf</b>(5),</a> CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>) <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2> -Copyright © 2007-2018 by Apple Inc. +Copyright © 2007-2019 by Apple Inc. </body> </html> diff --git a/doc/help/man-ipptoolfile.html b/doc/help/man-ipptoolfile.html index c426af7d8..d8cae816e 100644 --- a/doc/help/man-ipptoolfile.html +++ b/doc/help/man-ipptoolfile.html @@ -230,7 +230,7 @@ The following predicates are understood following the <b>EXPECT</b> test directi <dd style="margin-left: 5.0em">Makes the <b>EXPECT</b> conditions apply only if the specified variable is not defined. <dt><b>IN-GROUP </b><i>tag</i> <dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to be in the specified group tag. -<dt><b>OF-TYPE </b><i>tag[,tag,...]</i> +<dt><b>OF-TYPE </b><i>tag[|tag,...]</i> <dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to use one of the specified value tag(s). <dt><b>REPEAT-LIMIT </b><i>number</i> <dd style="margin-left: 5.0em"><br> @@ -532,7 +532,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp-registrations)"> PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp)">http://www.pwg.org/ipp)</a>, RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011">http://tools.ietf.org/html/rfc8011</a>) <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2> -Copyright © 2007-2017 by Apple Inc. +Copyright © 2007-2019 by Apple Inc. </body> </html> diff --git a/doc/index.html.in b/doc/index.html.in index 0cb0164ba..48f18ada4 100644 --- a/doc/index.html.in +++ b/doc/index.html.in @@ -50,6 +50,6 @@ </div> </div> </div> - <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. All rights reserved.</div> + <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. All rights reserved.</div> </body> </html> diff --git a/doc/ja/index.html.in b/doc/ja/index.html.in index 08549f9f8..eacc15725 100644 --- a/doc/ja/index.html.in +++ b/doc/ja/index.html.in @@ -50,6 +50,6 @@ </div> </div> </div> - <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. All rights reserved.</div> + <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. All rights reserved.</div> </body> </html> diff --git a/doc/pt_BR/index.html.in b/doc/pt_BR/index.html.in index ace82269a..b3ea3582b 100644 --- a/doc/pt_BR/index.html.in +++ b/doc/pt_BR/index.html.in @@ -51,6 +51,6 @@ </div> </div> </div> - <div class="footer">CUPS e o logo do CUPS são marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. Todos os direitos reservados.</div> + <div class="footer">CUPS e o logo do CUPS são marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. Todos os direitos reservados.</div> </body> </html> diff --git a/doc/ru/index.html.in b/doc/ru/index.html.in index 7bfc5a37f..47dc6d8fd 100644 --- a/doc/ru/index.html.in +++ b/doc/ru/index.html.in @@ -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> diff --git a/filter/rastertolabel.c b/filter/rastertolabel.c index 6ad6c625a..b44f49057 100644 --- a/filter/rastertolabel.c +++ b/filter/rastertolabel.c @@ -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... diff --git a/locale/cups.pot b/locale/cups.pot index 46edb9d93..39ea967ee 100644 --- a/locale/cups.pot +++ b/locale/cups.pot @@ -26,9 +26,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: CUPS 2.2.9\n" +"Project-Id-Version: CUPS 2.2.11\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: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -976,23 +976,23 @@ msgstr "" msgid " ( expressions ) Group expressions." msgstr "" -#: systemv/cupsctl.c:203 +#: systemv/cupsctl.c:244 msgid " --[no-]debug-logging Turn debug logging on/off." msgstr "" -#: systemv/cupsctl.c:205 +#: systemv/cupsctl.c:246 msgid " --[no-]remote-admin Turn remote administration on/off." msgstr "" -#: systemv/cupsctl.c:207 +#: systemv/cupsctl.c:248 msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr "" -#: systemv/cupsctl.c:209 +#: systemv/cupsctl.c:250 msgid " --[no-]share-printers Turn printer sharing on/off." msgstr "" -#: systemv/cupsctl.c:211 +#: systemv/cupsctl.c:252 msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" @@ -1128,7 +1128,7 @@ msgstr "" msgid " -D name=value Set named variable to value." msgstr "" -#: systemv/cupsaddsmb.c:277 systemv/cupsctl.c:198 +#: systemv/cupsaddsmb.c:277 systemv/cupsctl.c:239 msgid " -E Encrypt the connection." msgstr "" @@ -1136,7 +1136,7 @@ msgstr "" msgid " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" -#: scheduler/main.c:2106 +#: scheduler/main.c:2100 msgid " -F Run in the foreground but detach from console." msgstr "" @@ -1188,7 +1188,7 @@ msgstr "" msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" -#: scheduler/cupsfilter.c:1484 systemv/cupsaddsmb.c:280 systemv/cupsctl.c:199 +#: scheduler/cupsfilter.c:1484 systemv/cupsaddsmb.c:280 systemv/cupsctl.c:240 msgid " -U username Specify username." msgstr "" @@ -1220,7 +1220,7 @@ msgstr "" msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr "" -#: scheduler/main.c:2104 +#: scheduler/main.c:2098 msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr "" @@ -1244,7 +1244,7 @@ msgstr "" msgid " -e Use every filter from the PPD file." msgstr "" -#: scheduler/main.c:2105 +#: scheduler/main.c:2099 msgid " -f Run in the foreground." msgstr "" @@ -1252,7 +1252,7 @@ msgstr "" msgid " -f filename Set default request filename." msgstr "" -#: scheduler/main.c:2107 +#: scheduler/main.c:2101 msgid " -h Show this usage message." msgstr "" @@ -1264,7 +1264,7 @@ msgstr "" msgid " -h regex Match hostname to regular expression." msgstr "" -#: systemv/cupsaddsmb.c:282 systemv/cupsctl.c:200 +#: systemv/cupsaddsmb.c:282 systemv/cupsctl.c:241 msgid " -h server[:port] Specify server address." msgstr "" @@ -1288,7 +1288,7 @@ msgstr "" msgid " -l Produce plain text output." msgstr "" -#: scheduler/main.c:2109 +#: scheduler/main.c:2103 msgid " -l Run cupsd on demand." msgstr "" @@ -1320,7 +1320,7 @@ msgstr "" msgid " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" -#: ppdc/ppdmerge.cxx:362 +#: ppdc/ppdmerge.cxx:360 msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" @@ -1356,7 +1356,7 @@ msgstr "" msgid " -s Print service name if true." msgstr "" -#: scheduler/main.c:2111 +#: scheduler/main.c:2105 msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" @@ -1368,7 +1368,7 @@ msgstr "" msgid " -t Test PPDs instead of generating them." msgstr "" -#: scheduler/main.c:2112 +#: scheduler/main.c:2106 msgid " -t Test the configuration file." msgstr "" @@ -1555,191 +1555,191 @@ msgstr "" msgid " PASS" msgstr "" -#: cups/ipp.c:5145 +#: cups/ipp.c:5129 #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" -#: cups/ipp.c:5152 +#: cups/ipp.c:5136 #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" -#: cups/ipp.c:4763 +#: cups/ipp.c:4759 #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" -#: cups/ipp.c:4755 +#: cups/ipp.c:4751 #, c-format msgid "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" -#: cups/ipp.c:4781 +#: cups/ipp.c:4777 #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" -#: cups/ipp.c:5204 +#: cups/ipp.c:5188 #, c-format msgid "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" -#: cups/ipp.c:5213 +#: cups/ipp.c:5197 #, c-format msgid "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" -#: cups/ipp.c:4881 +#: cups/ipp.c:4877 #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4889 +#: cups/ipp.c:4885 #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4873 +#: cups/ipp.c:4869 #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4833 +#: cups/ipp.c:4829 #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4865 +#: cups/ipp.c:4861 #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4841 +#: cups/ipp.c:4837 #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4849 +#: cups/ipp.c:4845 #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4825 +#: cups/ipp.c:4821 #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4857 +#: cups/ipp.c:4853 #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" -#: cups/ipp.c:4795 +#: cups/ipp.c:4791 #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" -#: cups/ipp.c:5124 +#: cups/ipp.c:5108 #, c-format msgid "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" -#: cups/ipp.c:5115 +#: cups/ipp.c:5099 #, c-format msgid "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section 5.1.4)." msgstr "" -#: cups/ipp.c:5313 +#: cups/ipp.c:5297 #, c-format msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)." msgstr "" -#: cups/ipp.c:5323 +#: cups/ipp.c:5307 #, c-format msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)." msgstr "" -#: cups/ipp.c:5087 +#: cups/ipp.c:5071 #, c-format msgid "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" -#: cups/ipp.c:5082 +#: cups/ipp.c:5066 #, c-format msgid "\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)." msgstr "" -#: cups/ipp.c:5095 +#: cups/ipp.c:5079 #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" -#: cups/ipp.c:5259 +#: cups/ipp.c:5243 #, c-format msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)." msgstr "" -#: cups/ipp.c:5269 +#: cups/ipp.c:5253 #, c-format msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)." msgstr "" -#: cups/ipp.c:4809 +#: cups/ipp.c:4805 #, c-format msgid "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" -#: cups/ipp.c:4952 +#: cups/ipp.c:4948 #, c-format msgid "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14)." msgstr "" -#: cups/ipp.c:4933 +#: cups/ipp.c:4929 #, c-format msgid "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16)." msgstr "" -#: cups/ipp.c:4902 +#: cups/ipp.c:4898 #, c-format msgid "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)." msgstr "" -#: cups/ipp.c:4917 +#: cups/ipp.c:4913 #, c-format msgid "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)." msgstr "" -#: cups/ipp.c:5022 +#: cups/ipp.c:5012 #, c-format msgid "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" -#: cups/ipp.c:5017 +#: cups/ipp.c:5007 #, c-format msgid "\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)." msgstr "" -#: cups/ipp.c:5030 +#: cups/ipp.c:5020 #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" -#: cups/ipp.c:5175 +#: cups/ipp.c:5159 #, c-format msgid "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" -#: cups/ipp.c:5184 +#: cups/ipp.c:5168 #, c-format msgid "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" -#: scheduler/ipp.c:377 +#: scheduler/ipp.c:375 msgid "\"requesting-user-name\" attribute in wrong group." msgstr "" -#: scheduler/ipp.c:383 scheduler/ipp.c:398 +#: scheduler/ipp.c:381 scheduler/ipp.c:396 msgid "\"requesting-user-name\" attribute with wrong syntax." msgstr "" @@ -1788,7 +1788,7 @@ msgstr "" msgid "%s accepting requests since %s" msgstr "" -#: scheduler/ipp.c:10349 +#: scheduler/ipp.c:10352 #, c-format msgid "%s cannot be changed." msgstr "" @@ -1824,7 +1824,7 @@ msgstr "" msgid "%s not accepting requests since %s -" msgstr "" -#: scheduler/ipp.c:620 +#: scheduler/ipp.c:618 #, c-format msgid "%s not supported." msgstr "" @@ -1847,8 +1847,8 @@ msgstr "" #. TRANSLATORS: Message is "subject: error" #: cups/langprintf.c:75 scheduler/cupsfilter.c:724 systemv/lpadmin.c:801 #: systemv/lpadmin.c:852 systemv/lpadmin.c:902 systemv/lpadmin.c:958 -#: systemv/lpadmin.c:1056 systemv/lpadmin.c:1108 systemv/lpadmin.c:1150 -#: systemv/lpadmin.c:1164 systemv/lpadmin.c:1614 +#: systemv/lpadmin.c:1056 systemv/lpadmin.c:1108 systemv/lpadmin.c:1151 +#: systemv/lpadmin.c:1165 systemv/lpadmin.c:1615 #, c-format msgid "%s: %s" msgstr "" @@ -1858,7 +1858,7 @@ msgstr "" msgid "%s: %s failed: %s" msgstr "" -#: systemv/lpadmin.c:1225 +#: systemv/lpadmin.c:1224 #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "%s: Sorry, no encryption support." msgstr "" -#: systemv/lpadmin.c:1232 +#: systemv/lpadmin.c:1231 #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "" @@ -2142,7 +2142,7 @@ msgstr "" msgid "%s: Unable to contact server." msgstr "" -#: systemv/lpadmin.c:1262 +#: systemv/lpadmin.c:1261 #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "" @@ -2157,17 +2157,17 @@ msgstr "" msgid "%s: Unable to open \"%s\": %s" msgstr "" -#: ppdc/ppdmerge.cxx:88 +#: ppdc/ppdmerge.cxx:89 #, c-format msgid "%s: Unable to open %s: %s" msgstr "" -#: scheduler/cupsfilter.c:672 ppdc/ppdmerge.cxx:104 +#: scheduler/cupsfilter.c:672 ppdc/ppdmerge.cxx:105 #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "" -#: systemv/lpadmin.c:1247 +#: systemv/lpadmin.c:1246 #, c-format msgid "%s: Unable to query printer: %s" msgstr "" @@ -2177,7 +2177,7 @@ msgstr "" msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "" -#: systemv/lpadmin.c:1216 +#: systemv/lpadmin.c:1215 #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "" @@ -2562,23 +2562,23 @@ msgstr "" msgid "2 inches/sec." msgstr "" -#: cups/ppd-cache.c:3012 +#: cups/ppd-cache.c:2996 msgid "2-Hole Punch (Landscape)" msgstr "" -#: cups/ppd-cache.c:3013 +#: cups/ppd-cache.c:2997 msgid "2-Hole Punch (Portrait)" msgstr "" -#: cups/ppd-cache.c:3011 +#: cups/ppd-cache.c:2995 msgid "2-Hole Punch (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:3010 +#: cups/ppd-cache.c:2994 msgid "2-Hole Punch (Reverse Portrait)" msgstr "" -#: cups/ppd-cache.c:3735 ppdc/sample.c:262 +#: cups/ppd-cache.c:3737 ppdc/sample.c:262 msgid "2-Sided Printing" msgstr "" @@ -2730,19 +2730,19 @@ msgstr "" msgid "3 x 5" msgstr "" -#: cups/ppd-cache.c:3023 +#: cups/ppd-cache.c:3007 msgid "3-Hole Punch (Landscape)" msgstr "" -#: cups/ppd-cache.c:3021 +#: cups/ppd-cache.c:3005 msgid "3-Hole Punch (Portrait)" msgstr "" -#: cups/ppd-cache.c:3020 +#: cups/ppd-cache.c:3004 msgid "3-Hole Punch (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:3022 +#: cups/ppd-cache.c:3006 msgid "3-Hole Punch (Reverse Portrait)" msgstr "" @@ -2834,19 +2834,19 @@ msgstr "" msgid "4 inches/sec." msgstr "" -#: cups/ppd-cache.c:3017 +#: cups/ppd-cache.c:3001 msgid "4-Hole Punch (Landscape)" msgstr "" -#: cups/ppd-cache.c:3015 +#: cups/ppd-cache.c:2999 msgid "4-Hole Punch (Portrait)" msgstr "" -#: cups/ppd-cache.c:3014 +#: cups/ppd-cache.c:2998 msgid "4-Hole Punch (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:3016 +#: cups/ppd-cache.c:3000 msgid "4-Hole Punch (Reverse Portrait)" msgstr "" @@ -3090,12 +3090,12 @@ msgstr "" msgid "A Samba username is required to export printer drivers" msgstr "" -#: scheduler/ipp.c:2298 +#: scheduler/ipp.c:2296 #, c-format msgid "A class named \"%s\" already exists." msgstr "" -#: scheduler/ipp.c:902 +#: scheduler/ipp.c:900 #, c-format msgid "A printer named \"%s\" already exists." msgstr "" @@ -3244,7 +3244,7 @@ msgstr "" msgid "Accepted" msgstr "" -#: cups/ppd-cache.c:2993 +#: cups/ppd-cache.c:2977 msgid "Accordian Fold" msgstr "" @@ -3269,19 +3269,19 @@ msgstr "" msgid "Administration" msgstr "" -#: cups/ppd-cache.c:3483 +#: cups/ppd-cache.c:3485 msgid "Advanced Photo Paper" msgstr "" -#: cups/ppd-cache.c:3396 +#: cups/ppd-cache.c:3398 msgid "Alternate" msgstr "" -#: cups/ppd-cache.c:3404 +#: cups/ppd-cache.c:3406 msgid "Alternate Roll" msgstr "" -#: cups/ppd-cache.c:3477 +#: cups/ppd-cache.c:3479 msgid "Aluminum" msgstr "" @@ -3297,43 +3297,43 @@ msgstr "" msgid "Applicator" msgstr "" -#: cups/ppd-cache.c:3511 +#: cups/ppd-cache.c:3513 msgid "Archival Envelope" msgstr "" -#: cups/ppd-cache.c:3523 +#: cups/ppd-cache.c:3525 msgid "Archival Fabric" msgstr "" -#: cups/ppd-cache.c:3600 +#: cups/ppd-cache.c:3602 msgid "Archival Paper" msgstr "" -#: cups/ppd-cache.c:3572 +#: cups/ppd-cache.c:3574 msgid "Archival Photo Paper" msgstr "" -#: scheduler/ipp.c:997 +#: scheduler/ipp.c:995 #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "" -#: scheduler/ipp.c:5455 scheduler/ipp.c:5481 +#: scheduler/ipp.c:5458 scheduler/ipp.c:5484 #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" -#: scheduler/ipp.c:5457 scheduler/ipp.c:5483 +#: scheduler/ipp.c:5460 scheduler/ipp.c:5486 #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" -#: scheduler/ipp.c:239 +#: scheduler/ipp.c:237 #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "" -#: cups/ppd-cache.c:3394 cups/ppd-cache.c:3478 cups/ppd-cache.c:3801 +#: cups/ppd-cache.c:3396 cups/ppd-cache.c:3480 cups/ppd-cache.c:3803 msgid "Automatic" msgstr "" @@ -3385,21 +3385,21 @@ msgstr "" msgid "B9" msgstr "" -#: cups/ppd-cache.c:3479 +#: cups/ppd-cache.c:3481 msgid "Back Print Film" msgstr "" -#: scheduler/ipp.c:10358 +#: scheduler/ipp.c:10361 #, c-format msgid "Bad '%s' value." msgstr "" -#: scheduler/ipp.c:11306 +#: scheduler/ipp.c:11309 #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "" -#: cups/ppd.c:337 +#: cups/ppd.c:318 msgid "Bad CloseUI/JCLCloseUI" msgstr "" @@ -3407,32 +3407,32 @@ msgstr "" msgid "Bad NULL dests pointer" msgstr "" -#: cups/ppd.c:320 +#: cups/ppd.c:301 msgid "Bad OpenGroup" msgstr "" -#: cups/ppd.c:322 +#: cups/ppd.c:303 msgid "Bad OpenUI/JCLOpenUI" msgstr "" -#: cups/ppd.c:324 +#: cups/ppd.c:305 msgid "Bad OrderDependency" msgstr "" -#: cups/ppd-cache.c:458 cups/ppd-cache.c:505 cups/ppd-cache.c:543 -#: cups/ppd-cache.c:549 cups/ppd-cache.c:565 cups/ppd-cache.c:581 -#: cups/ppd-cache.c:590 cups/ppd-cache.c:598 cups/ppd-cache.c:615 -#: cups/ppd-cache.c:623 cups/ppd-cache.c:638 cups/ppd-cache.c:646 -#: cups/ppd-cache.c:667 cups/ppd-cache.c:679 cups/ppd-cache.c:694 -#: cups/ppd-cache.c:706 cups/ppd-cache.c:728 cups/ppd-cache.c:736 -#: cups/ppd-cache.c:754 cups/ppd-cache.c:762 cups/ppd-cache.c:777 -#: cups/ppd-cache.c:785 cups/ppd-cache.c:803 cups/ppd-cache.c:811 -#: cups/ppd-cache.c:838 cups/ppd-cache.c:908 cups/ppd-cache.c:916 -#: cups/ppd-cache.c:924 +#: cups/ppd-cache.c:458 cups/ppd-cache.c:505 cups/ppd-cache.c:539 +#: cups/ppd-cache.c:545 cups/ppd-cache.c:561 cups/ppd-cache.c:577 +#: cups/ppd-cache.c:586 cups/ppd-cache.c:594 cups/ppd-cache.c:611 +#: cups/ppd-cache.c:619 cups/ppd-cache.c:634 cups/ppd-cache.c:642 +#: cups/ppd-cache.c:663 cups/ppd-cache.c:675 cups/ppd-cache.c:690 +#: cups/ppd-cache.c:702 cups/ppd-cache.c:724 cups/ppd-cache.c:732 +#: cups/ppd-cache.c:750 cups/ppd-cache.c:758 cups/ppd-cache.c:773 +#: cups/ppd-cache.c:781 cups/ppd-cache.c:799 cups/ppd-cache.c:807 +#: cups/ppd-cache.c:834 cups/ppd-cache.c:902 cups/ppd-cache.c:910 +#: cups/ppd-cache.c:918 msgid "Bad PPD cache file." msgstr "" -#: scheduler/ipp.c:2673 +#: scheduler/ipp.c:2670 msgid "Bad PPD file." msgstr "" @@ -3444,7 +3444,7 @@ msgstr "" msgid "Bad SNMP version number" msgstr "" -#: cups/ppd.c:325 +#: cups/ppd.c:306 msgid "Bad UIConstraints" msgstr "" @@ -3452,31 +3452,31 @@ msgstr "" msgid "Bad arguments to function" msgstr "" -#: scheduler/ipp.c:1382 +#: scheduler/ipp.c:1380 #, c-format msgid "Bad copies value %d." msgstr "" -#: cups/ppd.c:333 +#: cups/ppd.c:314 msgid "Bad custom parameter" msgstr "" -#: cups/http-support.c:1750 scheduler/ipp.c:2378 +#: cups/http-support.c:1750 scheduler/ipp.c:2376 #, c-format msgid "Bad device-uri \"%s\"." msgstr "" -#: scheduler/ipp.c:2423 +#: scheduler/ipp.c:2421 #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "" -#: scheduler/ipp.c:8504 scheduler/ipp.c:8522 scheduler/ipp.c:9750 +#: scheduler/ipp.c:8507 scheduler/ipp.c:8525 scheduler/ipp.c:9753 #, c-format msgid "Bad document-format \"%s\"." msgstr "" -#: scheduler/ipp.c:9768 +#: scheduler/ipp.c:9771 #, c-format msgid "Bad document-format-default \"%s\"." msgstr "" @@ -3489,56 +3489,56 @@ msgstr "" msgid "Bad hostname/address in URI" msgstr "" -#: scheduler/ipp.c:1564 +#: scheduler/ipp.c:1562 #, c-format msgid "Bad job-name value: %s" msgstr "" -#: scheduler/ipp.c:1550 +#: scheduler/ipp.c:1548 msgid "Bad job-name value: Wrong type or count." msgstr "" -#: scheduler/ipp.c:10396 +#: scheduler/ipp.c:10399 msgid "Bad job-priority value." msgstr "" -#: scheduler/ipp.c:1412 +#: scheduler/ipp.c:1410 #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "" -#: scheduler/ipp.c:1396 +#: scheduler/ipp.c:1394 msgid "Bad job-sheets value type." msgstr "" -#: scheduler/ipp.c:10426 +#: scheduler/ipp.c:10429 msgid "Bad job-state value." msgstr "" -#: scheduler/ipp.c:3014 scheduler/ipp.c:3476 scheduler/ipp.c:6286 -#: scheduler/ipp.c:6433 scheduler/ipp.c:7930 scheduler/ipp.c:8202 -#: scheduler/ipp.c:9068 scheduler/ipp.c:9292 scheduler/ipp.c:9644 -#: scheduler/ipp.c:10257 +#: scheduler/ipp.c:3011 scheduler/ipp.c:3473 scheduler/ipp.c:6289 +#: scheduler/ipp.c:6436 scheduler/ipp.c:7933 scheduler/ipp.c:8205 +#: scheduler/ipp.c:9071 scheduler/ipp.c:9295 scheduler/ipp.c:9647 +#: scheduler/ipp.c:10260 #, c-format msgid "Bad job-uri \"%s\"." msgstr "" -#: scheduler/ipp.c:2064 scheduler/ipp.c:5806 +#: scheduler/ipp.c:2062 scheduler/ipp.c:5809 #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "" -#: scheduler/ipp.c:2028 scheduler/ipp.c:5770 +#: scheduler/ipp.c:2026 scheduler/ipp.c:5773 #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "" -#: scheduler/ipp.c:5881 +#: scheduler/ipp.c:5884 #, c-format msgid "Bad notify-user-data \"%s\"." msgstr "" -#: scheduler/ipp.c:1428 +#: scheduler/ipp.c:1426 #, c-format msgid "Bad number-up value %d." msgstr "" @@ -3548,7 +3548,7 @@ msgstr "" msgid "Bad option + choice on line %d." msgstr "" -#: scheduler/ipp.c:1445 +#: scheduler/ipp.c:1443 #, c-format msgid "Bad page-ranges values %d-%d." msgstr "" @@ -3557,12 +3557,12 @@ msgstr "" msgid "Bad port number in URI" msgstr "" -#: scheduler/ipp.c:2469 +#: scheduler/ipp.c:2467 #, c-format msgid "Bad port-monitor \"%s\"." msgstr "" -#: scheduler/ipp.c:2550 +#: scheduler/ipp.c:2548 #, c-format msgid "Bad printer-state value %d." msgstr "" @@ -3571,12 +3571,12 @@ msgstr "" msgid "Bad printer-uri." msgstr "" -#: scheduler/ipp.c:213 +#: scheduler/ipp.c:211 #, c-format msgid "Bad request ID %d." msgstr "" -#: scheduler/ipp.c:203 +#: scheduler/ipp.c:201 #, c-format msgid "Bad request version number %d.%d." msgstr "" @@ -3597,7 +3597,7 @@ msgstr "" msgid "Bad username in URI" msgstr "" -#: cups/ppd.c:335 +#: cups/ppd.c:316 msgid "Bad value string" msgstr "" @@ -3605,7 +3605,7 @@ msgstr "" msgid "Bad/empty URI" msgstr "" -#: cups/ppd-cache.c:2978 +#: cups/ppd-cache.c:2962 msgid "Bale" msgstr "" @@ -3613,27 +3613,27 @@ msgstr "" msgid "Banners" msgstr "" -#: cups/ppd-cache.c:2979 +#: cups/ppd-cache.c:2963 msgid "Bind" msgstr "" -#: cups/ppd-cache.c:2983 +#: cups/ppd-cache.c:2967 msgid "Bind (Landscape)" msgstr "" -#: cups/ppd-cache.c:2981 +#: cups/ppd-cache.c:2965 msgid "Bind (Portrait)" msgstr "" -#: cups/ppd-cache.c:2980 +#: cups/ppd-cache.c:2964 msgid "Bind (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:2982 +#: cups/ppd-cache.c:2966 msgid "Bind (Reverse Portrait)" msgstr "" -#: cups/ppd-cache.c:3512 +#: cups/ppd-cache.c:3514 msgid "Bond Envelope" msgstr "" @@ -3641,11 +3641,11 @@ msgstr "" msgid "Bond Paper" msgstr "" -#: cups/ppd-cache.c:4061 +#: cups/ppd-cache.c:4063 msgid "Booklet" msgstr "" -#: cups/ppd-cache.c:2984 +#: cups/ppd-cache.c:2968 msgid "Booklet Maker" msgstr "" @@ -3654,19 +3654,19 @@ msgstr "" msgid "Boolean expected for waiteof option \"%s\"." msgstr "" -#: cups/ppd-cache.c:3407 +#: cups/ppd-cache.c:3409 msgid "Bottom" msgstr "" -#: cups/ppd-cache.c:3802 +#: cups/ppd-cache.c:3804 msgid "Bottom Tray" msgstr "" -#: filter/pstops.c:2032 +#: filter/pstops.c:2031 msgid "Buffer overflow detected, aborting." msgstr "" -#: cups/ppd-cache.c:3482 +#: cups/ppd-cache.c:3484 msgid "CD" msgstr "" @@ -3686,23 +3686,23 @@ msgstr "" msgid "Cancel RSS Subscription" msgstr "" -#: backend/ipp.c:2271 +#: backend/ipp.c:2272 msgid "Canceling print job." msgstr "" -#: scheduler/ipp.c:973 scheduler/ipp.c:2525 +#: scheduler/ipp.c:971 scheduler/ipp.c:2523 msgid "Cannot change printer-is-shared for remote queues." msgstr "" -#: scheduler/ipp.c:2512 +#: scheduler/ipp.c:2510 msgid "Cannot share a remote Kerberized printer." msgstr "" -#: cups/ppd-cache.c:3480 +#: cups/ppd-cache.c:3482 msgid "Cardboard" msgstr "" -#: cups/ppd-cache.c:3481 +#: cups/ppd-cache.c:3483 msgid "Cardstock" msgstr "" @@ -3710,11 +3710,11 @@ msgstr "" msgid "Cassette" msgstr "" -#: cups/ppd-cache.c:3411 +#: cups/ppd-cache.c:3413 msgid "Center" msgstr "" -#: cups/ppd-cache.c:3803 +#: cups/ppd-cache.c:3805 msgid "Center Tray" msgstr "" @@ -3723,7 +3723,7 @@ msgstr "" msgid "Change Settings" msgstr "" -#: scheduler/ipp.c:2076 scheduler/ipp.c:5818 +#: scheduler/ipp.c:2074 scheduler/ipp.c:5821 #, c-format msgid "Character set \"%s\" not supported." msgstr "" @@ -3736,32 +3736,32 @@ msgstr "" msgid "Clean Print Heads" msgstr "" -#: scheduler/ipp.c:3928 +#: scheduler/ipp.c:3925 msgid "Close-Job doesn't support the job-uri attribute." msgstr "" -#: cups/ppd-cache.c:2985 +#: cups/ppd-cache.c:2969 msgid "Coat" msgstr "" -#: cups/ppd-cache.c:3513 +#: cups/ppd-cache.c:3515 msgid "Coated Envelope" msgstr "" -#: cups/ppd-cache.c:3601 +#: cups/ppd-cache.c:3603 msgid "Coated Paper" msgstr "" -#: cups/ppd-cache.c:3694 ppdc/sample.c:276 +#: cups/ppd-cache.c:3696 ppdc/sample.c:276 msgid "Color" msgstr "" -#: cups/ppd-cache.c:3668 cups/ppd-cache.c:3680 cups/ppd-cache.c:3692 -#: cups/ppd-cache.c:3703 ppdc/sample.c:274 +#: cups/ppd-cache.c:3670 cups/ppd-cache.c:3682 cups/ppd-cache.c:3694 +#: cups/ppd-cache.c:3705 ppdc/sample.c:274 msgid "Color Mode" msgstr "" -#: cups/ppd-cache.c:3548 +#: cups/ppd-cache.c:3550 msgid "Colored Labels" msgstr "" @@ -3788,15 +3788,15 @@ msgstr "" msgid "Continue" msgstr "" -#: cups/ppd-cache.c:3496 ppdc/sample.c:360 +#: cups/ppd-cache.c:3498 ppdc/sample.c:360 msgid "Continuous" msgstr "" -#: cups/ppd-cache.c:3497 +#: cups/ppd-cache.c:3499 msgid "Continuous Long" msgstr "" -#: cups/ppd-cache.c:3498 +#: cups/ppd-cache.c:3500 msgid "Continuous Short" msgstr "" @@ -3808,15 +3808,15 @@ msgstr "" msgid "Copying print data." msgstr "" -#: cups/ppd-cache.c:3514 +#: cups/ppd-cache.c:3516 msgid "Cotton Envelope" msgstr "" -#: cups/ppd-cache.c:3602 +#: cups/ppd-cache.c:3604 msgid "Cotton Paper" msgstr "" -#: cups/ppd-cache.c:2986 +#: cups/ppd-cache.c:2970 msgid "Cover" msgstr "" @@ -3824,15 +3824,15 @@ msgstr "" msgid "Created" msgstr "" -#: cups/tls-darwin.c:730 cups/tls-gnutls.c:562 +#: cups/tls-darwin.c:730 cups/tls-gnutls.c:587 msgid "Credentials do not validate against site CA certificate." msgstr "" -#: cups/tls-darwin.c:741 cups/tls-gnutls.c:579 +#: cups/tls-darwin.c:741 cups/tls-gnutls.c:604 msgid "Credentials have expired." msgstr "" -#: cups/ppd.c:1154 cups/ppd.c:1194 cups/ppd.c:1439 cups/ppd.c:1542 +#: cups/ppd.c:1133 cups/ppd.c:1173 cups/ppd.c:1382 cups/ppd.c:1485 msgid "Custom" msgstr "" @@ -3848,7 +3848,7 @@ msgstr "" msgid "Cut" msgstr "" -#: cups/ppd-cache.c:3042 +#: cups/ppd-cache.c:3026 msgid "Cut Media" msgstr "" @@ -3856,7 +3856,7 @@ msgstr "" msgid "Cutter" msgstr "" -#: cups/ppd-cache.c:3507 +#: cups/ppd-cache.c:3509 msgid "DVD" msgstr "" @@ -3872,7 +3872,7 @@ msgstr "" msgid "Data file sent successfully." msgstr "" -#: cups/ppd-cache.c:3705 +#: cups/ppd-cache.c:3707 msgid "Deep Color" msgstr "" @@ -3888,7 +3888,7 @@ msgstr "" msgid "DeskJet Series" msgstr "" -#: scheduler/ipp.c:1311 +#: scheduler/ipp.c:1309 #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "" @@ -3908,27 +3908,27 @@ msgstr "" msgid "Direct Thermal Media" msgstr "" -#: cups/file.c:256 +#: cups/file.c:289 #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "" -#: cups/file.c:228 +#: cups/file.c:261 #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" -#: cups/file.c:245 +#: cups/file.c:278 #, c-format msgid "Directory \"%s\" is a file." msgstr "" -#: cups/file.c:216 +#: cups/file.c:249 #, c-format msgid "Directory \"%s\" not available: %s" msgstr "" -#: cups/file.c:201 +#: cups/file.c:234 #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" @@ -3937,45 +3937,45 @@ msgstr "" msgid "Disabled" msgstr "" -#: cups/ppd-cache.c:3400 +#: cups/ppd-cache.c:3402 msgid "Disc" msgstr "" -#: scheduler/ipp.c:6335 +#: scheduler/ipp.c:6338 #, c-format msgid "Document #%d does not exist in job #%d." msgstr "" -#: cups/ppd-cache.c:2994 +#: cups/ppd-cache.c:2978 msgid "Double Gate Fold" msgstr "" -#: cups/ppd-cache.c:3035 +#: cups/ppd-cache.c:3019 msgid "Double Staple (Landscape)" msgstr "" -#: cups/ppd-cache.c:3033 +#: cups/ppd-cache.c:3017 msgid "Double Staple (Portrait)" msgstr "" -#: cups/ppd-cache.c:3032 +#: cups/ppd-cache.c:3016 msgid "Double Staple (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:3034 +#: cups/ppd-cache.c:3018 msgid "Double Staple (Reverse Portrait)" msgstr "" -#: cups/ppd-cache.c:3505 +#: cups/ppd-cache.c:3507 msgid "Double Wall Cardboard" msgstr "" -#: cups/ppd-cache.c:4119 cups/ppd-cache.c:4121 cups/ppd-cache.c:4184 -#: cups/ppd-cache.c:4221 +#: cups/ppd-cache.c:4121 cups/ppd-cache.c:4123 cups/ppd-cache.c:4186 +#: cups/ppd-cache.c:4223 msgid "Draft" msgstr "" -#: cups/ppd-cache.c:3506 +#: cups/ppd-cache.c:3508 msgid "Dry Film" msgstr "" @@ -4001,7 +4001,7 @@ msgstr "" msgid "Edit Configuration File" msgstr "" -#: cups/ppd-cache.c:3508 +#: cups/ppd-cache.c:3510 msgid "Embossing Foil" msgstr "" @@ -4009,11 +4009,11 @@ msgstr "" msgid "Empty PPD file." msgstr "" -#: cups/http.c:4641 +#: cups/http.c:4688 msgid "Encryption is not supported." msgstr "" -#: cups/ppd-cache.c:3509 +#: cups/ppd-cache.c:3511 msgid "End Board" msgstr "" @@ -4022,7 +4022,7 @@ msgstr "" msgid "Ending Banner" msgstr "" -#: cups/ppd-cache.c:2995 +#: cups/ppd-cache.c:2979 msgid "Engineering Z Fold" msgstr "" @@ -4034,7 +4034,7 @@ msgstr "" msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket." msgstr "" -#: cups/ppd-cache.c:3399 cups/ppd-cache.c:3510 +#: cups/ppd-cache.c:3401 cups/ppd-cache.c:3512 msgid "Envelope" msgstr "" @@ -4323,11 +4323,11 @@ msgstr "" msgid "Every Label" msgstr "" -#: cups/ppd-cache.c:3488 +#: cups/ppd-cache.c:3490 msgid "Everyday Glossy Photo Paper" msgstr "" -#: cups/ppd-cache.c:3489 +#: cups/ppd-cache.c:3491 msgid "Everyday Matte Paper" msgstr "" @@ -4347,7 +4347,7 @@ msgstr "" msgid "Expressions:" msgstr "" -#: cups/ppd-cache.c:3490 +#: cups/ppd-cache.c:3492 msgid "Extra Heavyweight Paper" msgstr "" @@ -4361,43 +4361,43 @@ msgstr "" msgid "FAIL" msgstr "" -#: cups/ppd-cache.c:3522 +#: cups/ppd-cache.c:3524 msgid "Fabric" msgstr "" -#: cups/ppd-cache.c:3804 +#: cups/ppd-cache.c:3806 msgid "Face Down" msgstr "" -#: cups/ppd-cache.c:3805 +#: cups/ppd-cache.c:3807 msgid "Face Up" msgstr "" -#: cups/ppd-cache.c:3670 +#: cups/ppd-cache.c:3672 msgid "Fast Grayscale" msgstr "" -#: cups/file.c:260 +#: cups/file.c:293 #, c-format msgid "File \"%s\" contains a relative path." msgstr "" -#: cups/file.c:235 +#: cups/file.c:268 #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" -#: cups/file.c:249 +#: cups/file.c:282 #, c-format msgid "File \"%s\" is a directory." msgstr "" -#: cups/file.c:221 +#: cups/file.c:254 #, c-format msgid "File \"%s\" not available: %s" msgstr "" -#: cups/file.c:207 +#: cups/file.c:240 #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" @@ -4406,16 +4406,16 @@ msgstr "" msgid "File Folder" msgstr "" -#: scheduler/ipp.c:2399 +#: scheduler/ipp.c:2397 #, c-format msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"." msgstr "" -#: cups/ppd-cache.c:3529 +#: cups/ppd-cache.c:3531 msgid "Film" msgstr "" -#: cups/ppd-cache.c:3515 +#: cups/ppd-cache.c:3517 msgid "Fine Envelope" msgstr "" @@ -4425,23 +4425,23 @@ msgstr "" msgid "Finished page %d." msgstr "" -#: cups/ppd-cache.c:3530 +#: cups/ppd-cache.c:3532 msgid "Flexo Base" msgstr "" -#: cups/ppd-cache.c:3531 +#: cups/ppd-cache.c:3533 msgid "Flexo Photo Polymer" msgstr "" -#: cups/ppd-cache.c:3532 +#: cups/ppd-cache.c:3534 msgid "Flute" msgstr "" -#: cups/ppd-cache.c:3533 +#: cups/ppd-cache.c:3535 msgid "Foil" msgstr "" -#: cups/ppd-cache.c:2992 cups/ppd-cache.c:3970 +#: cups/ppd-cache.c:2976 cups/ppd-cache.c:3972 msgid "Fold" msgstr "" @@ -4457,15 +4457,15 @@ msgstr "" msgid "Found" msgstr "" -#: cups/ppd-cache.c:3534 +#: cups/ppd-cache.c:3536 msgid "Full Cut Tabs" msgstr "" -#: cups/ppd-cache.c:2996 +#: cups/ppd-cache.c:2980 msgid "Gate Fold" msgstr "" -#: cups/ppd.c:785 cups/ppd.c:1343 +#: cups/ppd.c:764 cups/ppd.c:1286 msgid "General" msgstr "" @@ -4477,39 +4477,39 @@ msgstr "" msgid "Get-Response-PDU uses indefinite length" msgstr "" -#: cups/ppd-cache.c:3535 +#: cups/ppd-cache.c:3537 msgid "Glass" msgstr "" -#: cups/ppd-cache.c:3536 +#: cups/ppd-cache.c:3538 msgid "Glass Colored" msgstr "" -#: cups/ppd-cache.c:3537 +#: cups/ppd-cache.c:3539 msgid "Glass Opaque" msgstr "" -#: cups/ppd-cache.c:3538 +#: cups/ppd-cache.c:3540 msgid "Glass Surfaced" msgstr "" -#: cups/ppd-cache.c:3539 +#: cups/ppd-cache.c:3541 msgid "Glass Textured" msgstr "" -#: cups/ppd-cache.c:3484 +#: cups/ppd-cache.c:3486 msgid "Glossy Brochure Paper" msgstr "" -#: cups/ppd-cache.c:3524 +#: cups/ppd-cache.c:3526 msgid "Glossy Fabric" msgstr "" -#: cups/ppd-cache.c:3549 +#: cups/ppd-cache.c:3551 msgid "Glossy Labels" msgstr "" -#: cups/ppd-cache.c:3500 +#: cups/ppd-cache.c:3502 msgid "Glossy Optical Disc" msgstr "" @@ -4517,22 +4517,22 @@ msgstr "" msgid "Glossy Paper" msgstr "" -#: cups/ppd-cache.c:3574 +#: cups/ppd-cache.c:3576 msgid "Glossy Photo Paper" msgstr "" -#: scheduler/ipp.c:2992 scheduler/ipp.c:3402 scheduler/ipp.c:3940 -#: scheduler/ipp.c:6264 scheduler/ipp.c:6411 scheduler/ipp.c:7907 -#: scheduler/ipp.c:9046 scheduler/ipp.c:9270 scheduler/ipp.c:9622 -#: scheduler/ipp.c:10235 +#: scheduler/ipp.c:2989 scheduler/ipp.c:3399 scheduler/ipp.c:3937 +#: scheduler/ipp.c:6267 scheduler/ipp.c:6414 scheduler/ipp.c:7910 +#: scheduler/ipp.c:9049 scheduler/ipp.c:9273 scheduler/ipp.c:9625 +#: scheduler/ipp.c:10238 msgid "Got a printer-uri attribute but no job-id." msgstr "" -#: cups/ppd-cache.c:3540 +#: cups/ppd-cache.c:3542 msgid "Gravure Cylinder" msgstr "" -#: cups/ppd-cache.c:3682 ppdc/sample.c:275 +#: cups/ppd-cache.c:3684 ppdc/sample.c:275 msgid "Grayscale" msgstr "" @@ -4540,15 +4540,15 @@ msgstr "" msgid "HP" msgstr "" -#: cups/ppd-cache.c:3402 +#: cups/ppd-cache.c:3404 msgid "Hagaki" msgstr "" -#: cups/ppd-cache.c:2997 +#: cups/ppd-cache.c:2981 msgid "Half Fold" msgstr "" -#: cups/ppd-cache.c:2998 +#: cups/ppd-cache.c:2982 msgid "Half Z Fold" msgstr "" @@ -4560,15 +4560,15 @@ msgstr "" msgid "Hash buffer too small." msgstr "" -#: cups/ppd-cache.c:3605 +#: cups/ppd-cache.c:3607 msgid "Heavyweight Coated Paper" msgstr "" -#: cups/ppd-cache.c:3516 +#: cups/ppd-cache.c:3518 msgid "Heavyweight Envelope" msgstr "" -#: cups/ppd-cache.c:3604 +#: cups/ppd-cache.c:3606 msgid "Heavyweight Paper" msgstr "" @@ -4576,115 +4576,115 @@ msgstr "" msgid "Help file not in index." msgstr "" -#: cups/ppd-cache.c:4126 cups/ppd-cache.c:4195 cups/ppd-cache.c:4226 +#: cups/ppd-cache.c:4128 cups/ppd-cache.c:4197 cups/ppd-cache.c:4228 msgid "High" msgstr "" -#: cups/ppd-cache.c:3525 +#: cups/ppd-cache.c:3527 msgid "High Gloss Fabric" msgstr "" -#: cups/ppd-cache.c:3550 +#: cups/ppd-cache.c:3552 msgid "High Gloss Labels" msgstr "" -#: cups/ppd-cache.c:3501 +#: cups/ppd-cache.c:3503 msgid "High Gloss Optical Disc" msgstr "" -#: cups/ppd-cache.c:3575 +#: cups/ppd-cache.c:3577 msgid "High Gloss Photo Paper" msgstr "" -#: cups/ipp.c:3097 cups/ipp.c:3124 cups/ipp.c:3147 +#: cups/ipp.c:3093 cups/ipp.c:3120 cups/ipp.c:3143 msgid "IPP 1setOf attribute with incompatible value tags." msgstr "" -#: cups/ipp.c:3060 +#: cups/ipp.c:3056 msgid "IPP attribute has no name." msgstr "" -#: cups/ipp.c:6932 +#: cups/ipp.c:6916 msgid "IPP attribute is not a member of the message." msgstr "" -#: cups/ipp.c:3510 +#: cups/ipp.c:3506 msgid "IPP begCollection value not 0 bytes." msgstr "" -#: cups/ipp.c:3288 +#: cups/ipp.c:3284 msgid "IPP boolean value not 1 byte." msgstr "" -#: cups/ipp.c:3353 +#: cups/ipp.c:3349 msgid "IPP date value not 11 bytes." msgstr "" -#: cups/ipp.c:3531 +#: cups/ipp.c:3527 msgid "IPP endCollection value not 0 bytes." msgstr "" -#: cups/ipp.c:3263 +#: cups/ipp.c:3259 msgid "IPP enum value not 4 bytes." msgstr "" -#: cups/ipp.c:2983 +#: cups/ipp.c:2979 msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "" -#: cups/ipp.c:3260 +#: cups/ipp.c:3256 msgid "IPP integer value not 4 bytes." msgstr "" -#: cups/ipp.c:3463 +#: cups/ipp.c:3459 msgid "IPP language length overflows value." msgstr "" -#: cups/ipp.c:3472 +#: cups/ipp.c:3468 msgid "IPP language length too large." msgstr "" -#: cups/ipp.c:3174 +#: cups/ipp.c:3170 msgid "IPP member name is not empty." msgstr "" -#: cups/ipp.c:3557 +#: cups/ipp.c:3553 msgid "IPP memberName value is empty." msgstr "" -#: cups/ipp.c:3549 +#: cups/ipp.c:3545 msgid "IPP memberName with no attribute." msgstr "" -#: cups/ipp.c:3043 +#: cups/ipp.c:3039 msgid "IPP name larger than 32767 bytes." msgstr "" -#: cups/ipp.c:3430 +#: cups/ipp.c:3426 msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "" -#: cups/ipp.c:3587 +#: cups/ipp.c:3583 msgid "IPP octetString length too large." msgstr "" -#: cups/ipp.c:3398 +#: cups/ipp.c:3394 msgid "IPP rangeOfInteger value not 8 bytes." msgstr "" -#: cups/ipp.c:3371 +#: cups/ipp.c:3367 msgid "IPP resolution value not 9 bytes." msgstr "" -#: cups/ipp.c:3490 +#: cups/ipp.c:3486 msgid "IPP string length overflows value." msgstr "" -#: cups/ipp.c:3426 +#: cups/ipp.c:3422 msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "" -#: cups/ipp.c:3246 +#: cups/ipp.c:3242 msgid "IPP value larger than 32767 bytes." msgstr "" @@ -4692,43 +4692,43 @@ msgstr "" msgid "ISOLatin1" msgstr "" -#: cups/ppd.c:328 +#: cups/ppd.c:309 msgid "Illegal control character" msgstr "" -#: cups/ppd.c:329 +#: cups/ppd.c:310 msgid "Illegal main keyword string" msgstr "" -#: cups/ppd.c:330 +#: cups/ppd.c:311 msgid "Illegal option keyword string" msgstr "" -#: cups/ppd.c:331 +#: cups/ppd.c:312 msgid "Illegal translation string" msgstr "" -#: cups/ppd.c:332 +#: cups/ppd.c:313 msgid "Illegal whitespace character" msgstr "" -#: cups/ppd-cache.c:3541 +#: cups/ppd-cache.c:3543 msgid "Image Setter Paper" msgstr "" -#: cups/ppd-cache.c:3542 +#: cups/ppd-cache.c:3544 msgid "Imaging Cylinder" msgstr "" -#: cups/ppd-cache.c:3517 +#: cups/ppd-cache.c:3519 msgid "Inkjet Envelope" msgstr "" -#: cups/ppd-cache.c:3551 +#: cups/ppd-cache.c:3553 msgid "Inkjet Labels" msgstr "" -#: cups/ppd-cache.c:3606 +#: cups/ppd-cache.c:3608 msgid "Inkjet Paper" msgstr "" @@ -4752,7 +4752,7 @@ msgstr "" msgid "Internal Server Error" msgstr "" -#: cups/ppd.c:319 +#: cups/ppd.c:300 msgid "Internal error" msgstr "" @@ -4768,19 +4768,19 @@ msgstr "" msgid "Internet Printing Protocol" msgstr "" -#: cups/ipp.c:3003 +#: cups/ipp.c:2999 msgid "Invalid group tag." msgstr "" -#: cups/pwg-media.c:291 cups/pwg-media.c:310 +#: cups/pwg-media.c:292 cups/pwg-media.c:311 msgid "Invalid media name arguments." msgstr "" -#: cups/dest-options.c:1099 +#: cups/dest-options.c:1108 msgid "Invalid media size." msgstr "" -#: scheduler/ipp.c:2719 scheduler/ipp.c:7078 +#: scheduler/ipp.c:2716 scheduler/ipp.c:7081 msgid "Invalid ppd-name value." msgstr "" @@ -4789,7 +4789,7 @@ msgstr "" msgid "Invalid printer command \"%s\"." msgstr "" -#: cups/ppd.c:1461 +#: cups/ppd.c:1404 msgid "JCL" msgstr "" @@ -4849,52 +4849,52 @@ msgstr "" msgid "JIS B9" msgstr "" -#: scheduler/ipp.c:9342 +#: scheduler/ipp.c:9345 #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "" -#: scheduler/ipp.c:3032 scheduler/ipp.c:3266 scheduler/ipp.c:3325 -#: scheduler/ipp.c:3504 scheduler/ipp.c:3950 scheduler/ipp.c:5923 -#: scheduler/ipp.c:6304 scheduler/ipp.c:6451 scheduler/ipp.c:6788 -#: scheduler/ipp.c:7748 scheduler/ipp.c:7770 scheduler/ipp.c:7948 -#: scheduler/ipp.c:8176 scheduler/ipp.c:8219 scheduler/ipp.c:9086 -#: scheduler/ipp.c:9310 scheduler/ipp.c:9662 scheduler/ipp.c:10275 +#: scheduler/ipp.c:3029 scheduler/ipp.c:3263 scheduler/ipp.c:3322 +#: scheduler/ipp.c:3501 scheduler/ipp.c:3947 scheduler/ipp.c:5926 +#: scheduler/ipp.c:6307 scheduler/ipp.c:6454 scheduler/ipp.c:6791 +#: scheduler/ipp.c:7751 scheduler/ipp.c:7773 scheduler/ipp.c:7951 +#: scheduler/ipp.c:8179 scheduler/ipp.c:8222 scheduler/ipp.c:9089 +#: scheduler/ipp.c:9313 scheduler/ipp.c:9665 scheduler/ipp.c:10278 #, c-format msgid "Job #%d does not exist." msgstr "" -#: scheduler/ipp.c:3536 +#: scheduler/ipp.c:3533 #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "" -#: scheduler/ipp.c:3530 +#: scheduler/ipp.c:3527 #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "" -#: scheduler/ipp.c:3542 +#: scheduler/ipp.c:3539 #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "" -#: scheduler/ipp.c:7974 scheduler/ipp.c:8261 scheduler/ipp.c:10290 +#: scheduler/ipp.c:7977 scheduler/ipp.c:8264 scheduler/ipp.c:10293 #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "" -#: scheduler/ipp.c:9324 +#: scheduler/ipp.c:9327 #, c-format msgid "Job #%d is not complete." msgstr "" -#: scheduler/ipp.c:3047 +#: scheduler/ipp.c:3044 #, c-format msgid "Job #%d is not held for authentication." msgstr "" -#: scheduler/ipp.c:9100 +#: scheduler/ipp.c:9103 #, c-format msgid "Job #%d is not held." msgstr "" @@ -4915,7 +4915,7 @@ msgstr "" msgid "Job Stopped" msgstr "" -#: scheduler/ipp.c:10404 +#: scheduler/ipp.c:10407 msgid "Job is completed and cannot be changed." msgstr "" @@ -4923,11 +4923,11 @@ msgstr "" msgid "Job operation failed" msgstr "" -#: scheduler/ipp.c:10440 scheduler/ipp.c:10457 scheduler/ipp.c:10468 +#: scheduler/ipp.c:10443 scheduler/ipp.c:10460 scheduler/ipp.c:10471 msgid "Job state cannot be changed." msgstr "" -#: scheduler/ipp.c:9190 +#: scheduler/ipp.c:9193 msgid "Job subscriptions cannot be renewed." msgstr "" @@ -4935,7 +4935,7 @@ msgstr "" msgid "Jobs" msgstr "" -#: cups/ppd-cache.c:3005 +#: cups/ppd-cache.c:2989 msgid "Jog" msgstr "" @@ -4951,19 +4951,19 @@ msgstr "" msgid "Label Top" msgstr "" -#: cups/ppd-cache.c:3547 +#: cups/ppd-cache.c:3549 msgid "Labels" msgstr "" -#: cups/ppd-cache.c:3006 +#: cups/ppd-cache.c:2990 msgid "Laminate" msgstr "" -#: cups/ppd-cache.c:3557 +#: cups/ppd-cache.c:3559 msgid "Laminating Foil" msgstr "" -#: scheduler/ipp.c:2085 scheduler/ipp.c:5827 +#: scheduler/ipp.c:2083 scheduler/ipp.c:5830 #, c-format msgid "Language \"%s\" not supported." msgstr "" @@ -4972,11 +4972,11 @@ msgstr "" msgid "Large Address" msgstr "" -#: cups/ppd-cache.c:3397 +#: cups/ppd-cache.c:3399 msgid "Large Capacity" msgstr "" -#: cups/ppd-cache.c:3806 +#: cups/ppd-cache.c:3808 msgid "Large Capacity Tray" msgstr "" @@ -4984,19 +4984,19 @@ msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "" -#: cups/ppd-cache.c:3409 +#: cups/ppd-cache.c:3411 msgid "Left" msgstr "" -#: cups/ppd-cache.c:2999 +#: cups/ppd-cache.c:2983 msgid "Left Gate Fold" msgstr "" -#: cups/ppd-cache.c:3807 +#: cups/ppd-cache.c:3809 msgid "Left Tray" msgstr "" -#: cups/ppd-cache.c:3000 +#: cups/ppd-cache.c:2984 msgid "Letter Fold" msgstr "" @@ -5008,7 +5008,7 @@ msgstr "" msgid "Letter Oversize Long Edge" msgstr "" -#: cups/ppd-cache.c:3558 cups/ppd-cache.c:3607 +#: cups/ppd-cache.c:3560 cups/ppd-cache.c:3609 msgid "Letterhead" msgstr "" @@ -5016,15 +5016,15 @@ msgstr "" msgid "Light" msgstr "" -#: cups/ppd-cache.c:3518 +#: cups/ppd-cache.c:3520 msgid "Lightweight Envelope" msgstr "" -#: cups/ppd-cache.c:3608 +#: cups/ppd-cache.c:3610 msgid "Lightweight Paper" msgstr "" -#: cups/ppd.c:327 +#: cups/ppd.c:308 msgid "Line longer than the maximum allowed (255 characters)" msgstr "" @@ -5036,67 +5036,67 @@ msgstr "" msgid "Load paper." msgstr "" -#: scheduler/ipp.c:5536 +#: scheduler/ipp.c:5539 msgid "Local printer created." msgstr "" -#: cups/ppd-cache.c:3735 ppdc/sample.c:264 +#: cups/ppd-cache.c:3737 ppdc/sample.c:264 msgid "Long-Edge (Portrait)" msgstr "" -#: cups/http-support.c:1877 +#: cups/http-support.c:1874 msgid "Looking for printer." msgstr "" -#: cups/ppd-cache.c:3808 +#: cups/ppd-cache.c:3810 msgid "Mailbox 1" msgstr "" -#: cups/ppd-cache.c:3817 +#: cups/ppd-cache.c:3819 msgid "Mailbox 10" msgstr "" -#: cups/ppd-cache.c:3809 +#: cups/ppd-cache.c:3811 msgid "Mailbox 2" msgstr "" -#: cups/ppd-cache.c:3810 +#: cups/ppd-cache.c:3812 msgid "Mailbox 3" msgstr "" -#: cups/ppd-cache.c:3811 +#: cups/ppd-cache.c:3813 msgid "Mailbox 4" msgstr "" -#: cups/ppd-cache.c:3812 +#: cups/ppd-cache.c:3814 msgid "Mailbox 5" msgstr "" -#: cups/ppd-cache.c:3813 +#: cups/ppd-cache.c:3815 msgid "Mailbox 6" msgstr "" -#: cups/ppd-cache.c:3814 +#: cups/ppd-cache.c:3816 msgid "Mailbox 7" msgstr "" -#: cups/ppd-cache.c:3815 +#: cups/ppd-cache.c:3817 msgid "Mailbox 8" msgstr "" -#: cups/ppd-cache.c:3816 +#: cups/ppd-cache.c:3818 msgid "Mailbox 9" msgstr "" -#: cups/ppd-cache.c:3395 +#: cups/ppd-cache.c:3397 msgid "Main" msgstr "" -#: cups/ppd-cache.c:3403 +#: cups/ppd-cache.c:3405 msgid "Main Roll" msgstr "" -#: cups/ppd-cache.c:3398 +#: cups/ppd-cache.c:3400 msgid "Manual" msgstr "" @@ -5104,35 +5104,35 @@ msgstr "" msgid "Manual Feed" msgstr "" -#: cups/ppd-cache.c:3485 +#: cups/ppd-cache.c:3487 msgid "Matte Brochure Paper" msgstr "" -#: cups/ppd-cache.c:3486 +#: cups/ppd-cache.c:3488 msgid "Matte Cover Paper" msgstr "" -#: cups/ppd-cache.c:3526 +#: cups/ppd-cache.c:3528 msgid "Matte Fabric" msgstr "" -#: cups/ppd-cache.c:3552 +#: cups/ppd-cache.c:3554 msgid "Matte Labels" msgstr "" -#: cups/ppd-cache.c:3502 +#: cups/ppd-cache.c:3504 msgid "Matte Optical Disc" msgstr "" -#: cups/ppd-cache.c:3576 +#: cups/ppd-cache.c:3578 msgid "Matte Photo Paper" msgstr "" -#: cups/ppd.c:832 cups/ppd.c:1398 +#: cups/ppd.c:811 cups/ppd.c:1341 msgid "Media Size" msgstr "" -#: cups/ppd.c:836 cups/ppd.c:1402 ppdc/sample.c:254 +#: cups/ppd.c:815 cups/ppd.c:1345 ppdc/sample.c:254 msgid "Media Source" msgstr "" @@ -5140,7 +5140,7 @@ msgstr "" msgid "Media Tracking" msgstr "" -#: cups/ppd.c:834 cups/ppd.c:1400 ppdc/sample.c:280 +#: cups/ppd.c:813 cups/ppd.c:1343 ppdc/sample.c:280 msgid "Media Type" msgstr "" @@ -5148,59 +5148,59 @@ msgstr "" msgid "Medium" msgstr "" -#: cups/ppd.c:316 +#: cups/ppd.c:297 msgid "Memory allocation error" msgstr "" -#: cups/ppd-cache.c:3559 +#: cups/ppd-cache.c:3561 msgid "Metal" msgstr "" -#: cups/ppd-cache.c:3560 +#: cups/ppd-cache.c:3562 msgid "Metal Glossy" msgstr "" -#: cups/ppd-cache.c:3561 +#: cups/ppd-cache.c:3563 msgid "Metal High Gloss" msgstr "" -#: cups/ppd-cache.c:3562 +#: cups/ppd-cache.c:3564 msgid "Metal Matte" msgstr "" -#: cups/ppd-cache.c:3563 +#: cups/ppd-cache.c:3565 msgid "Metal Satin" msgstr "" -#: cups/ppd-cache.c:3564 +#: cups/ppd-cache.c:3566 msgid "Metal Semi Gloss" msgstr "" -#: cups/ppd-cache.c:3492 +#: cups/ppd-cache.c:3494 msgid "Mid-Weight Paper" msgstr "" -#: cups/ppd-cache.c:3406 cups/ppd-cache.c:3818 +#: cups/ppd-cache.c:3408 cups/ppd-cache.c:3820 msgid "Middle" msgstr "" -#: cups/ppd.c:336 +#: cups/ppd.c:317 msgid "Missing CloseGroup" msgstr "" -#: cups/ppd.c:338 +#: cups/ppd.c:319 msgid "Missing CloseUI/JCLCloseUI" msgstr "" -#: cups/ppd.c:317 +#: cups/ppd.c:298 msgid "Missing PPD-Adobe-4.x header" msgstr "" -#: cups/ppd.c:326 +#: cups/ppd.c:307 msgid "Missing asterisk in column 1" msgstr "" -#: scheduler/ipp.c:6327 +#: scheduler/ipp.c:6330 msgid "Missing document-number attribute." msgstr "" @@ -5215,36 +5215,36 @@ msgstr "" msgid "Missing form variable" msgstr "" -#: scheduler/ipp.c:9716 +#: scheduler/ipp.c:9719 msgid "Missing last-document attribute in request." msgstr "" -#: cups/pwg-media.c:550 +#: cups/pwg-media.c:551 msgid "Missing media or media-col." msgstr "" -#: cups/pwg-media.c:469 +#: cups/pwg-media.c:470 msgid "Missing media-size in media-col." msgstr "" -#: scheduler/ipp.c:6928 +#: scheduler/ipp.c:6931 msgid "Missing notify-subscription-ids attribute." msgstr "" -#: cups/ppd.c:334 +#: cups/ppd.c:315 msgid "Missing option keyword" msgstr "" -#: scheduler/ipp.c:3173 scheduler/ipp.c:3198 +#: scheduler/ipp.c:3170 scheduler/ipp.c:3195 msgid "Missing requesting-user-name attribute." msgstr "" -#: scheduler/ipp.c:5453 scheduler/ipp.c:5479 +#: scheduler/ipp.c:5456 scheduler/ipp.c:5482 #, c-format msgid "Missing required attribute \"%s\"." msgstr "" -#: scheduler/ipp.c:359 +#: scheduler/ipp.c:357 msgid "Missing required attributes." msgstr "" @@ -5261,15 +5261,15 @@ msgstr "" msgid "Missing value on line %d." msgstr "" -#: cups/ppd.c:318 +#: cups/ppd.c:299 msgid "Missing value string" msgstr "" -#: cups/pwg-media.c:457 +#: cups/pwg-media.c:458 msgid "Missing x-dimension in media-size." msgstr "" -#: cups/pwg-media.c:463 +#: cups/pwg-media.c:464 msgid "Missing y-dimension in media-size." msgstr "" @@ -5294,7 +5294,7 @@ msgstr "" msgid "Modify Printer" msgstr "" -#: cups/ppd-cache.c:3565 +#: cups/ppd-cache.c:3567 msgid "Mounting Tape" msgstr "" @@ -5310,43 +5310,43 @@ msgstr "" msgid "Moved Permanently" msgstr "" -#: cups/ppd-cache.c:3566 +#: cups/ppd-cache.c:3568 msgid "Multi Layer" msgstr "" -#: cups/ppd-cache.c:3567 +#: cups/ppd-cache.c:3569 msgid "Multi Part Form" msgstr "" -#: cups/ppd-cache.c:3027 +#: cups/ppd-cache.c:3011 msgid "Multi-Hole Punch (Landscape)" msgstr "" -#: cups/ppd-cache.c:3025 +#: cups/ppd-cache.c:3009 msgid "Multi-Hole Punch (Portrait)" msgstr "" -#: cups/ppd-cache.c:3024 +#: cups/ppd-cache.c:3008 msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:3026 +#: cups/ppd-cache.c:3010 msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" -#: cups/ppd-cache.c:3413 +#: cups/ppd-cache.c:3415 msgid "Multipurpose" msgstr "" -#: cups/ppd-cache.c:3491 +#: cups/ppd-cache.c:3493 msgid "Multipurpose Paper" msgstr "" -#: cups/ppd-cache.c:3819 +#: cups/ppd-cache.c:3821 msgid "My Mailbox" msgstr "" -#: cups/ppd.c:315 +#: cups/ppd.c:296 msgid "NULL PPD file pointer" msgstr "" @@ -5354,7 +5354,7 @@ msgstr "" msgid "Name OID uses indefinite length" msgstr "" -#: scheduler/ipp.c:1066 +#: scheduler/ipp.c:1064 msgid "Nested classes are not allowed." msgstr "" @@ -5362,15 +5362,15 @@ msgstr "" msgid "Never" msgstr "" -#: cups/tls-darwin.c:672 cups/tls-gnutls.c:504 +#: cups/tls-darwin.c:672 cups/tls-gnutls.c:529 msgid "New credentials are not valid for name." msgstr "" -#: cups/tls-darwin.c:662 cups/tls-gnutls.c:494 +#: cups/tls-darwin.c:662 cups/tls-gnutls.c:519 msgid "New credentials are older than stored credentials." msgstr "" -#: cups/ppd.c:2010 +#: cups/ppd.c:1953 msgid "No" msgstr "" @@ -5378,7 +5378,7 @@ msgstr "" msgid "No Content" msgstr "" -#: cups/ppd-cache.c:3061 +#: cups/ppd-cache.c:3045 msgid "No IPP attributes." msgstr "" @@ -5402,20 +5402,20 @@ msgstr "" msgid "No active connection." msgstr "" -#: scheduler/ipp.c:3453 +#: scheduler/ipp.c:3450 #, c-format msgid "No active jobs on %s." msgstr "" -#: scheduler/ipp.c:219 +#: scheduler/ipp.c:217 msgid "No attributes in request." msgstr "" -#: scheduler/ipp.c:3074 +#: scheduler/ipp.c:3071 msgid "No authentication information provided." msgstr "" -#: cups/tls-darwin.c:612 cups/tls-gnutls.c:441 +#: cups/tls-darwin.c:612 cups/tls-gnutls.c:466 msgid "No common name specified." msgstr "" @@ -5423,11 +5423,11 @@ msgstr "" msgid "No community name" msgstr "" -#: scheduler/ipp.c:6127 +#: scheduler/ipp.c:6130 msgid "No default printer." msgstr "" -#: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7508 +#: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7511 msgid "No destinations added." msgstr "" @@ -5443,7 +5443,7 @@ msgstr "" msgid "No error-status" msgstr "" -#: scheduler/ipp.c:8466 scheduler/ipp.c:9730 +#: scheduler/ipp.c:8469 scheduler/ipp.c:9733 msgid "No file in print request." msgstr "" @@ -5472,15 +5472,15 @@ msgstr "" msgid "No printer-uri found for class" msgstr "" -#: scheduler/ipp.c:6534 +#: scheduler/ipp.c:6537 msgid "No printer-uri in request." msgstr "" -#: cups/http.c:2245 +#: cups/http.c:2257 msgid "No request URI." msgstr "" -#: cups/http.c:2262 +#: cups/http.c:2274 msgid "No request protocol version." msgstr "" @@ -5492,15 +5492,15 @@ msgstr "" msgid "No request-id" msgstr "" -#: cups/tls-darwin.c:692 cups/tls-gnutls.c:524 +#: cups/tls-darwin.c:692 cups/tls-gnutls.c:549 msgid "No stored credentials, not valid for name." msgstr "" -#: scheduler/ipp.c:5712 +#: scheduler/ipp.c:5715 msgid "No subscription attributes in request." msgstr "" -#: scheduler/ipp.c:7847 +#: scheduler/ipp.c:7850 msgid "No subscriptions found." msgstr "" @@ -5520,11 +5520,11 @@ msgstr "" msgid "Non-continuous (Web sensing)" msgstr "" -#: cups/ppd-cache.c:3923 cups/ppd-cache.c:3973 cups/ppd-cache.c:4023 +#: cups/ppd-cache.c:3925 cups/ppd-cache.c:3975 cups/ppd-cache.c:4025 msgid "None" msgstr "" -#: cups/ppd-cache.c:4123 cups/ppd-cache.c:4189 cups/ppd-cache.c:4223 +#: cups/ppd-cache.c:4125 cups/ppd-cache.c:4191 cups/ppd-cache.c:4225 #: ppdc/sample.c:238 msgid "Normal" msgstr "" @@ -5549,7 +5549,7 @@ msgstr "" msgid "Not Supported" msgstr "" -#: scheduler/ipp.c:1520 scheduler/ipp.c:11001 +#: scheduler/ipp.c:1518 scheduler/ipp.c:11004 msgid "Not allowed to print." msgstr "" @@ -5561,15 +5561,15 @@ msgstr "" msgid "Note: this program only validates the DSC comments, not the PostScript itself." msgstr "" -#: cups/http-support.c:1492 cups/http-support.c:1631 cups/ppd.c:313 +#: cups/http-support.c:1492 cups/http-support.c:1631 cups/ppd.c:294 msgid "OK" msgstr "" -#: cups/ppd-cache.c:3735 ppdc/sample.c:263 +#: cups/ppd-cache.c:3737 ppdc/sample.c:263 msgid "Off (1-Sided)" msgstr "" -#: cups/ppd-cache.c:3487 +#: cups/ppd-cache.c:3489 msgid "Office Recycled Paper" msgstr "" @@ -5581,7 +5581,7 @@ msgstr "" msgid "Online Help" msgstr "" -#: scheduler/ipp.c:5432 +#: scheduler/ipp.c:5435 msgid "Only local users can create a local printer." msgstr "" @@ -5590,11 +5590,11 @@ msgstr "" msgid "Open of %s failed: %s" msgstr "" -#: cups/ppd.c:321 +#: cups/ppd.c:302 msgid "OpenGroup without a CloseGroup first" msgstr "" -#: cups/ppd.c:323 +#: cups/ppd.c:304 msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "" @@ -5602,11 +5602,11 @@ msgstr "" msgid "Operation Policy" msgstr "" -#: cups/ppd-cache.c:3499 +#: cups/ppd-cache.c:3501 msgid "Optical Disc" msgstr "" -#: filter/pstops.c:2180 +#: filter/pstops.c:2179 #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "" @@ -5615,15 +5615,15 @@ msgstr "" msgid "Options Installed" msgstr "" -#: scheduler/cupsfilter.c:1480 scheduler/main.c:2103 systemv/cupsaddsmb.c:276 -#: systemv/cupsctl.c:196 systemv/cupstestdsc.c:421 systemv/cupstestppd.c:3859 +#: scheduler/cupsfilter.c:1480 scheduler/main.c:2097 systemv/cupsaddsmb.c:276 +#: systemv/cupsctl.c:237 systemv/cupstestdsc.c:421 systemv/cupstestppd.c:3859 #: test/ippfind.c:2802 test/ipptool.c:5063 ppdc/ppdc.cxx:430 -#: ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:123 ppdc/ppdmerge.cxx:361 +#: ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:123 ppdc/ppdmerge.cxx:359 #: ppdc/ppdpo.cxx:247 msgid "Options:" msgstr "" -#: cups/ppd-cache.c:3568 +#: cups/ppd-cache.c:3570 msgid "Other" msgstr "" @@ -5631,11 +5631,11 @@ msgstr "" msgid "Out of date PPD cache file." msgstr "" -#: cups/ppd-cache.c:1863 +#: cups/ppd-cache.c:1851 msgid "Out of memory." msgstr "" -#: cups/ppd.c:838 cups/ppd.c:1404 +#: cups/ppd.c:817 cups/ppd.c:1347 msgid "Output Mode" msgstr "" @@ -5691,7 +5691,7 @@ msgstr "" msgid "Packet does not start with SEQUENCE" msgstr "" -#: cups/ppd-cache.c:3569 +#: cups/ppd-cache.c:3571 msgid "Paper" msgstr "" @@ -5711,7 +5711,7 @@ msgstr "" msgid "Paper tray is missing." msgstr "" -#: cups/ppd-cache.c:3001 +#: cups/ppd-cache.c:2985 msgid "Parallel Fold" msgstr "" @@ -5723,7 +5723,7 @@ msgstr "" msgid "ParamCustominTearInterval" msgstr "" -#: cups/auth.c:222 cups/auth.c:370 +#: cups/auth.c:245 cups/auth.c:404 #, c-format msgid "Password for %s on %s? " msgstr "" @@ -5745,15 +5745,15 @@ msgstr "" msgid "Peel-Off" msgstr "" -#: cups/ppd-cache.c:3553 +#: cups/ppd-cache.c:3555 msgid "Permanent Labels" msgstr "" -#: cups/ppd-cache.c:3401 ppdc/sample.c:160 +#: cups/ppd-cache.c:3403 ppdc/sample.c:160 msgid "Photo" msgstr "" -#: cups/ppd-cache.c:3573 +#: cups/ppd-cache.c:3575 msgid "Photo Film" msgstr "" @@ -5761,59 +5761,59 @@ msgstr "" msgid "Photo Labels" msgstr "" -#: cups/ppd-cache.c:3570 cups/ppd-cache.c:3571 +#: cups/ppd-cache.c:3572 cups/ppd-cache.c:3573 msgid "Photo Paper" msgstr "" -#: cups/ppd-cache.c:3543 cups/ppd-cache.c:3545 +#: cups/ppd-cache.c:3545 cups/ppd-cache.c:3547 msgid "Photo Paper Plus Glossy II" msgstr "" -#: cups/ppd-cache.c:3544 cups/ppd-cache.c:3546 +#: cups/ppd-cache.c:3546 cups/ppd-cache.c:3548 msgid "Photo Paper Pro Platinum" msgstr "" -#: cups/ppd-cache.c:3519 +#: cups/ppd-cache.c:3521 msgid "Plain Envelope" msgstr "" -#: cups/ppd-cache.c:3599 ppdc/sample.c:281 +#: cups/ppd-cache.c:3601 ppdc/sample.c:281 msgid "Plain Paper" msgstr "" -#: cups/ppd-cache.c:3579 +#: cups/ppd-cache.c:3581 msgid "Plastic" msgstr "" -#: cups/ppd-cache.c:3580 +#: cups/ppd-cache.c:3582 msgid "Plastic Archival" msgstr "" -#: cups/ppd-cache.c:3581 +#: cups/ppd-cache.c:3583 msgid "Plastic Colored" msgstr "" -#: cups/ppd-cache.c:3582 +#: cups/ppd-cache.c:3584 msgid "Plastic Glossy" msgstr "" -#: cups/ppd-cache.c:3583 +#: cups/ppd-cache.c:3585 msgid "Plastic High Gloss" msgstr "" -#: cups/ppd-cache.c:3584 +#: cups/ppd-cache.c:3586 msgid "Plastic Matte" msgstr "" -#: cups/ppd-cache.c:3585 +#: cups/ppd-cache.c:3587 msgid "Plastic Satin" msgstr "" -#: cups/ppd-cache.c:3586 +#: cups/ppd-cache.c:3588 msgid "Plastic Semi Gloss" msgstr "" -#: cups/ppd-cache.c:3587 +#: cups/ppd-cache.c:3589 msgid "Plate" msgstr "" @@ -5821,7 +5821,7 @@ msgstr "" msgid "Policies" msgstr "" -#: cups/ppd-cache.c:3588 +#: cups/ppd-cache.c:3590 msgid "Polyester" msgstr "" @@ -5849,23 +5849,23 @@ msgstr "" msgid "Postcard Long Edge" msgstr "" -#: cups/ppd-cache.c:3002 +#: cups/ppd-cache.c:2986 msgid "Poster Fold" msgstr "" -#: cups/ppd-cache.c:3589 +#: cups/ppd-cache.c:3591 msgid "Pre Cut Tabs" msgstr "" -#: cups/ppd-cache.c:3493 +#: cups/ppd-cache.c:3495 msgid "Premium Inkjet Paper" msgstr "" -#: cups/ppd-cache.c:3494 +#: cups/ppd-cache.c:3496 msgid "Premium Photo Glossy Paper" msgstr "" -#: cups/ppd-cache.c:3495 +#: cups/ppd-cache.c:3497 msgid "Premium Presentation Matte Paper" msgstr "" @@ -5873,11 +5873,11 @@ msgstr "" msgid "Preparing to print." msgstr "" -#: cups/ppd-cache.c:3520 +#: cups/ppd-cache.c:3522 msgid "Preprinted Envelope" msgstr "" -#: cups/ppd-cache.c:3609 +#: cups/ppd-cache.c:3611 msgid "Preprinted Paper" msgstr "" @@ -5893,7 +5893,7 @@ msgstr "" msgid "Print Mode" msgstr "" -#: cups/ppd-cache.c:4117 cups/ppd-cache.c:4179 cups/ppd-cache.c:4219 +#: cups/ppd-cache.c:4119 cups/ppd-cache.c:4181 cups/ppd-cache.c:4221 msgid "Print Quality" msgstr "" @@ -5921,15 +5921,15 @@ msgstr "" msgid "Print and Tear" msgstr "" -#: backend/socket.c:409 backend/usb-unix.c:182 +#: backend/socket.c:411 backend/usb-unix.c:182 msgid "Print file sent." msgstr "" -#: backend/ipp.c:2245 +#: backend/ipp.c:2246 msgid "Print job canceled at printer." msgstr "" -#: backend/ipp.c:2237 +#: backend/ipp.c:2238 msgid "Print job too large." msgstr "" @@ -5937,7 +5937,7 @@ msgstr "" msgid "Print job was not accepted." msgstr "" -#: scheduler/ipp.c:5498 +#: scheduler/ipp.c:5501 #, c-format msgid "Printer \"%s\" already exists." msgstr "" @@ -5966,15 +5966,15 @@ msgstr "" msgid "Printer Settings" msgstr "" -#: backend/ipp.c:2240 +#: backend/ipp.c:2241 msgid "Printer cannot print supplied content." msgstr "" -#: backend/ipp.c:2243 +#: backend/ipp.c:2244 msgid "Printer cannot print with supplied options." msgstr "" -#: cups/ppd-cache.c:4248 +#: cups/ppd-cache.c:4250 msgid "Printer does not support required IPP attributes or document formats." msgstr "" @@ -5992,11 +5992,11 @@ msgstr "" msgid "Printing page %d, %u%% complete." msgstr "" -#: cups/ppd-cache.c:3007 cups/ppd-cache.c:4020 +#: cups/ppd-cache.c:2991 cups/ppd-cache.c:4022 msgid "Punch" msgstr "" -#: cups/ppd-cache.c:3610 +#: cups/ppd-cache.c:3612 msgid "Punched Paper" msgstr "" @@ -6004,7 +6004,7 @@ msgstr "" msgid "Quarto" msgstr "" -#: scheduler/ipp.c:1515 scheduler/ipp.c:10996 +#: scheduler/ipp.c:1513 scheduler/ipp.c:10999 msgid "Quota limit reached." msgstr "" @@ -6012,11 +6012,11 @@ msgstr "" msgid "Rank Owner Job File(s) Total Size" msgstr "" -#: cups/ppd-cache.c:3412 +#: cups/ppd-cache.c:3414 msgid "Rear" msgstr "" -#: cups/ppd-cache.c:3820 +#: cups/ppd-cache.c:3822 msgid "Rear Tray" msgstr "" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Request Entity Too Large" msgstr "" -#: cups/ppd.c:840 cups/ppd.c:1406 ppdc/sample.c:231 +#: cups/ppd.c:819 cups/ppd.c:1349 ppdc/sample.c:231 msgid "Resolution" msgstr "" @@ -6062,59 +6062,59 @@ msgstr "" msgid "Rewind" msgstr "" -#: cups/ppd-cache.c:3410 +#: cups/ppd-cache.c:3412 msgid "Right" msgstr "" -#: cups/ppd-cache.c:3003 +#: cups/ppd-cache.c:2987 msgid "Right Gate Fold" msgstr "" -#: cups/ppd-cache.c:3821 +#: cups/ppd-cache.c:3823 msgid "Right Tray" msgstr "" -#: cups/ppd-cache.c:3590 +#: cups/ppd-cache.c:3592 msgid "Roll" msgstr "" -#: cups/ppd-cache.c:3434 +#: cups/ppd-cache.c:3436 msgid "Roll 1" msgstr "" -#: cups/ppd-cache.c:3443 +#: cups/ppd-cache.c:3445 msgid "Roll 10" msgstr "" -#: cups/ppd-cache.c:3435 +#: cups/ppd-cache.c:3437 msgid "Roll 2" msgstr "" -#: cups/ppd-cache.c:3436 +#: cups/ppd-cache.c:3438 msgid "Roll 3" msgstr "" -#: cups/ppd-cache.c:3437 +#: cups/ppd-cache.c:3439 msgid "Roll 4" msgstr "" -#: cups/ppd-cache.c:3438 +#: cups/ppd-cache.c:3440 msgid "Roll 5" msgstr "" -#: cups/ppd-cache.c:3439 +#: cups/ppd-cache.c:3441 msgid "Roll 6" msgstr "" -#: cups/ppd-cache.c:3440 +#: cups/ppd-cache.c:3442 msgid "Roll 7" msgstr "" -#: cups/ppd-cache.c:3441 +#: cups/ppd-cache.c:3443 msgid "Roll 8" msgstr "" -#: cups/ppd-cache.c:3442 +#: cups/ppd-cache.c:3444 msgid "Roll 9" msgstr "" @@ -6131,31 +6131,31 @@ msgstr "" msgid "SSL/TLS Negotiation Error" msgstr "" -#: cups/ppd-cache.c:3028 +#: cups/ppd-cache.c:3012 msgid "Saddle Stitch" msgstr "" -#: cups/ppd-cache.c:3554 +#: cups/ppd-cache.c:3556 msgid "Satin Labels" msgstr "" -#: cups/ppd-cache.c:3503 +#: cups/ppd-cache.c:3505 msgid "Satin Optical Disc" msgstr "" -#: cups/ppd-cache.c:3577 +#: cups/ppd-cache.c:3579 msgid "Satin Photo Paper" msgstr "" -#: cups/ppd-cache.c:3591 +#: cups/ppd-cache.c:3593 msgid "Screen" msgstr "" -#: cups/ppd-cache.c:3592 +#: cups/ppd-cache.c:3594 msgid "Screen Paged" msgstr "" -#: cups/ppd-cache.c:3555 +#: cups/ppd-cache.c:3557 msgid "Security Labels" msgstr "" @@ -6163,35 +6163,35 @@ msgstr "" msgid "See Other" msgstr "" -#: scheduler/ipp.c:7132 scheduler/ipp.c:7151 +#: scheduler/ipp.c:7135 scheduler/ipp.c:7154 msgid "See remote printer." msgstr "" -#: cups/ppd-cache.c:3593 +#: cups/ppd-cache.c:3595 msgid "Self Adhesive" msgstr "" -#: cups/ppd-cache.c:3594 +#: cups/ppd-cache.c:3596 msgid "Self Adhesive Film" msgstr "" -#: cups/tls-darwin.c:747 cups/tls-gnutls.c:586 +#: cups/tls-darwin.c:747 cups/tls-gnutls.c:611 msgid "Self-signed credentials are blocked." msgstr "" -#: cups/ppd-cache.c:3527 +#: cups/ppd-cache.c:3529 msgid "Semi-Gloss Fabric" msgstr "" -#: cups/ppd-cache.c:3556 +#: cups/ppd-cache.c:3558 msgid "Semi-Gloss Labels" msgstr "" -#: cups/ppd-cache.c:3504 +#: cups/ppd-cache.c:3506 msgid "Semi-Gloss Optical Disc" msgstr "" -#: cups/ppd-cache.c:3578 +#: cups/ppd-cache.c:3580 msgid "Semi-Gloss Photo Paper" msgstr "" @@ -6215,7 +6215,7 @@ msgstr "" msgid "Server Stopped" msgstr "" -#: cups/tls-darwin.c:1191 cups/tls-gnutls.c:1282 +#: cups/tls-darwin.c:1191 cups/tls-gnutls.c:1307 msgid "Server credentials not set." msgstr "" @@ -6248,63 +6248,63 @@ msgstr "" msgid "Shipping Address" msgstr "" -#: cups/ppd-cache.c:3735 ppdc/sample.c:265 +#: cups/ppd-cache.c:3737 ppdc/sample.c:265 msgid "Short-Edge (Landscape)" msgstr "" -#: cups/ppd-cache.c:3595 +#: cups/ppd-cache.c:3597 msgid "Shrink Foil" msgstr "" -#: cups/ppd-cache.c:3408 +#: cups/ppd-cache.c:3410 msgid "Side" msgstr "" -#: cups/ppd-cache.c:3822 +#: cups/ppd-cache.c:3824 msgid "Side Tray" msgstr "" -#: cups/ppd-cache.c:3596 +#: cups/ppd-cache.c:3598 msgid "Single Face" msgstr "" -#: cups/ppd-cache.c:3019 +#: cups/ppd-cache.c:3003 msgid "Single Punch (Landscape)" msgstr "" -#: cups/ppd-cache.c:3018 +#: cups/ppd-cache.c:3002 msgid "Single Punch (Portrait)" msgstr "" -#: cups/ppd-cache.c:3008 +#: cups/ppd-cache.c:2992 msgid "Single Punch (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:3009 +#: cups/ppd-cache.c:2993 msgid "Single Punch (Reverse Portrait)" msgstr "" -#: cups/ppd-cache.c:3037 +#: cups/ppd-cache.c:3021 msgid "Single Staple (Landscape)" msgstr "" -#: cups/ppd-cache.c:3036 +#: cups/ppd-cache.c:3020 msgid "Single Staple (Portrait)" msgstr "" -#: cups/ppd-cache.c:3030 +#: cups/ppd-cache.c:3014 msgid "Single Staple (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:3031 +#: cups/ppd-cache.c:3015 msgid "Single Staple (Reverse Portrait)" msgstr "" -#: cups/ppd-cache.c:3597 +#: cups/ppd-cache.c:3599 msgid "Single Wall Cardboard" msgstr "" -#: cups/ppd-cache.c:3598 +#: cups/ppd-cache.c:3600 msgid "Sleeve" msgstr "" @@ -6317,43 +6317,43 @@ msgstr "" msgid "Spooling job, %.0f%% complete." msgstr "" -#: cups/ppd-cache.c:3823 +#: cups/ppd-cache.c:3825 msgid "Stacker 1" msgstr "" -#: cups/ppd-cache.c:3832 +#: cups/ppd-cache.c:3834 msgid "Stacker 10" msgstr "" -#: cups/ppd-cache.c:3824 +#: cups/ppd-cache.c:3826 msgid "Stacker 2" msgstr "" -#: cups/ppd-cache.c:3825 +#: cups/ppd-cache.c:3827 msgid "Stacker 3" msgstr "" -#: cups/ppd-cache.c:3826 +#: cups/ppd-cache.c:3828 msgid "Stacker 4" msgstr "" -#: cups/ppd-cache.c:3827 +#: cups/ppd-cache.c:3829 msgid "Stacker 5" msgstr "" -#: cups/ppd-cache.c:3828 +#: cups/ppd-cache.c:3830 msgid "Stacker 6" msgstr "" -#: cups/ppd-cache.c:3829 +#: cups/ppd-cache.c:3831 msgid "Stacker 7" msgstr "" -#: cups/ppd-cache.c:3830 +#: cups/ppd-cache.c:3832 msgid "Stacker 8" msgstr "" -#: cups/ppd-cache.c:3831 +#: cups/ppd-cache.c:3833 msgid "Stacker 9" msgstr "" @@ -6361,27 +6361,27 @@ msgstr "" msgid "Standard" msgstr "" -#: cups/ppd-cache.c:3029 cups/ppd-cache.c:3920 +#: cups/ppd-cache.c:3013 cups/ppd-cache.c:3922 msgid "Staple" msgstr "" -#: cups/ppd-cache.c:2987 +#: cups/ppd-cache.c:2971 msgid "Staple Edge" msgstr "" -#: cups/ppd-cache.c:2991 +#: cups/ppd-cache.c:2975 msgid "Staple Edge (Landscape)" msgstr "" -#: cups/ppd-cache.c:2989 +#: cups/ppd-cache.c:2973 msgid "Staple Edge (Portrait)" msgstr "" -#: cups/ppd-cache.c:2988 +#: cups/ppd-cache.c:2972 msgid "Staple Edge (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:2990 +#: cups/ppd-cache.c:2974 msgid "Staple Edge (Reverse Portrait)" msgstr "" @@ -6400,8 +6400,8 @@ msgstr "" msgid "Statement" msgstr "" -#: scheduler/ipp.c:3599 scheduler/ipp.c:6944 scheduler/ipp.c:7654 -#: scheduler/ipp.c:9178 +#: scheduler/ipp.c:3596 scheduler/ipp.c:6947 scheduler/ipp.c:7657 +#: scheduler/ipp.c:9181 #, c-format msgid "Subscription #%d does not exist." msgstr "" @@ -6426,7 +6426,7 @@ msgstr "" msgid "Switching Protocols" msgstr "" -#: cups/ppd-cache.c:3611 +#: cups/ppd-cache.c:3613 msgid "Tab Stock" msgstr "" @@ -6454,33 +6454,33 @@ msgstr "" msgid "Tear-Off Adjust Position" msgstr "" -#: scheduler/ipp.c:1351 +#: scheduler/ipp.c:1349 #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "" -#: scheduler/ipp.c:6605 scheduler/ipp.c:6685 scheduler/ipp.c:6698 -#: scheduler/ipp.c:6710 scheduler/ipp.c:6725 +#: scheduler/ipp.c:6608 scheduler/ipp.c:6688 scheduler/ipp.c:6701 +#: scheduler/ipp.c:6713 scheduler/ipp.c:6728 #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "" -#: scheduler/ipp.c:1330 +#: scheduler/ipp.c:1328 #, c-format msgid "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" -#: scheduler/ipp.c:5232 +#: scheduler/ipp.c:5230 #, c-format msgid "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" -#: scheduler/ipp.c:7174 +#: scheduler/ipp.c:7177 #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "" -#: scheduler/ipp.c:7163 +#: scheduler/ipp.c:7166 #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "" @@ -6510,11 +6510,11 @@ msgstr "" msgid "The fuser's temperature is low." msgstr "" -#: scheduler/ipp.c:2112 +#: scheduler/ipp.c:2110 msgid "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" -#: scheduler/ipp.c:2095 scheduler/ipp.c:5837 +#: scheduler/ipp.c:2093 scheduler/ipp.c:5840 #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "" @@ -6590,18 +6590,18 @@ msgstr "" msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." msgstr "" -#: scheduler/ipp.c:774 scheduler/ipp.c:1057 scheduler/ipp.c:3238 -#: scheduler/ipp.c:3419 scheduler/ipp.c:5215 scheduler/ipp.c:5671 -#: scheduler/ipp.c:6005 scheduler/ipp.c:6571 scheduler/ipp.c:7378 -#: scheduler/ipp.c:7434 scheduler/ipp.c:7760 scheduler/ipp.c:8035 -#: scheduler/ipp.c:8124 scheduler/ipp.c:8157 scheduler/ipp.c:8481 -#: scheduler/ipp.c:8888 scheduler/ipp.c:8970 scheduler/ipp.c:10144 -#: scheduler/ipp.c:10606 scheduler/ipp.c:10959 scheduler/ipp.c:11041 -#: scheduler/ipp.c:11370 +#: scheduler/ipp.c:772 scheduler/ipp.c:1055 scheduler/ipp.c:3235 +#: scheduler/ipp.c:3416 scheduler/ipp.c:5213 scheduler/ipp.c:5674 +#: scheduler/ipp.c:6008 scheduler/ipp.c:6574 scheduler/ipp.c:7381 +#: scheduler/ipp.c:7437 scheduler/ipp.c:7763 scheduler/ipp.c:8038 +#: scheduler/ipp.c:8127 scheduler/ipp.c:8160 scheduler/ipp.c:8484 +#: scheduler/ipp.c:8891 scheduler/ipp.c:8973 scheduler/ipp.c:10147 +#: scheduler/ipp.c:10609 scheduler/ipp.c:10962 scheduler/ipp.c:11044 +#: scheduler/ipp.c:11373 msgid "The printer or class does not exist." msgstr "" -#: scheduler/ipp.c:1269 +#: scheduler/ipp.c:1267 msgid "The printer or class is not shared." msgstr "" @@ -6625,20 +6625,20 @@ msgstr "" msgid "The printer's waste bin is full." msgstr "" -#: scheduler/ipp.c:880 scheduler/ipp.c:2276 +#: scheduler/ipp.c:878 scheduler/ipp.c:2274 #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "" -#: scheduler/ipp.c:3215 +#: scheduler/ipp.c:3212 msgid "The printer-uri attribute is required." msgstr "" -#: scheduler/ipp.c:864 +#: scheduler/ipp.c:862 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" -#: scheduler/ipp.c:2260 +#: scheduler/ipp.c:2258 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" @@ -6650,12 +6650,12 @@ msgstr "" msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it." msgstr "" -#: scheduler/ipp.c:6669 +#: scheduler/ipp.c:6672 #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "" -#: scheduler/ipp.c:5934 +#: scheduler/ipp.c:5937 msgid "There are too many subscriptions." msgstr "" @@ -6668,37 +6668,37 @@ msgstr "" msgid "Thermal Transfer Media" msgstr "" -#: scheduler/ipp.c:1509 +#: scheduler/ipp.c:1507 msgid "Too many active jobs." msgstr "" -#: scheduler/ipp.c:1403 +#: scheduler/ipp.c:1401 #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "" -#: scheduler/ipp.c:2587 +#: scheduler/ipp.c:2585 #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "" -#: cups/ppd-cache.c:3405 +#: cups/ppd-cache.c:3407 msgid "Top" msgstr "" -#: cups/ppd-cache.c:3833 +#: cups/ppd-cache.c:3835 msgid "Top Tray" msgstr "" -#: cups/ppd-cache.c:3612 +#: cups/ppd-cache.c:3614 msgid "Tractor" msgstr "" -#: cups/ppd-cache.c:3613 +#: cups/ppd-cache.c:3615 msgid "Transfer" msgstr "" -#: cups/ppd-cache.c:3614 ppdc/sample.c:284 +#: cups/ppd-cache.c:3616 ppdc/sample.c:284 msgid "Transparency" msgstr "" @@ -6706,108 +6706,108 @@ msgstr "" msgid "Tray" msgstr "" -#: cups/ppd-cache.c:3414 cups/ppd-cache.c:3834 ppdc/sample.c:256 +#: cups/ppd-cache.c:3416 cups/ppd-cache.c:3836 ppdc/sample.c:256 msgid "Tray 1" msgstr "" -#: cups/ppd-cache.c:3423 cups/ppd-cache.c:3843 +#: cups/ppd-cache.c:3425 cups/ppd-cache.c:3845 msgid "Tray 10" msgstr "" -#: cups/ppd-cache.c:3424 +#: cups/ppd-cache.c:3426 msgid "Tray 11" msgstr "" -#: cups/ppd-cache.c:3425 +#: cups/ppd-cache.c:3427 msgid "Tray 12" msgstr "" -#: cups/ppd-cache.c:3426 +#: cups/ppd-cache.c:3428 msgid "Tray 13" msgstr "" -#: cups/ppd-cache.c:3427 +#: cups/ppd-cache.c:3429 msgid "Tray 14" msgstr "" -#: cups/ppd-cache.c:3428 +#: cups/ppd-cache.c:3430 msgid "Tray 15" msgstr "" -#: cups/ppd-cache.c:3429 +#: cups/ppd-cache.c:3431 msgid "Tray 16" msgstr "" -#: cups/ppd-cache.c:3430 +#: cups/ppd-cache.c:3432 msgid "Tray 17" msgstr "" -#: cups/ppd-cache.c:3431 +#: cups/ppd-cache.c:3433 msgid "Tray 18" msgstr "" -#: cups/ppd-cache.c:3432 +#: cups/ppd-cache.c:3434 msgid "Tray 19" msgstr "" -#: cups/ppd-cache.c:3415 cups/ppd-cache.c:3835 ppdc/sample.c:257 +#: cups/ppd-cache.c:3417 cups/ppd-cache.c:3837 ppdc/sample.c:257 msgid "Tray 2" msgstr "" -#: cups/ppd-cache.c:3433 +#: cups/ppd-cache.c:3435 msgid "Tray 20" msgstr "" -#: cups/ppd-cache.c:3416 cups/ppd-cache.c:3836 ppdc/sample.c:258 +#: cups/ppd-cache.c:3418 cups/ppd-cache.c:3838 ppdc/sample.c:258 msgid "Tray 3" msgstr "" -#: cups/ppd-cache.c:3417 cups/ppd-cache.c:3837 ppdc/sample.c:259 +#: cups/ppd-cache.c:3419 cups/ppd-cache.c:3839 ppdc/sample.c:259 msgid "Tray 4" msgstr "" -#: cups/ppd-cache.c:3418 cups/ppd-cache.c:3838 +#: cups/ppd-cache.c:3420 cups/ppd-cache.c:3840 msgid "Tray 5" msgstr "" -#: cups/ppd-cache.c:3419 cups/ppd-cache.c:3839 +#: cups/ppd-cache.c:3421 cups/ppd-cache.c:3841 msgid "Tray 6" msgstr "" -#: cups/ppd-cache.c:3420 cups/ppd-cache.c:3840 +#: cups/ppd-cache.c:3422 cups/ppd-cache.c:3842 msgid "Tray 7" msgstr "" -#: cups/ppd-cache.c:3421 cups/ppd-cache.c:3841 +#: cups/ppd-cache.c:3423 cups/ppd-cache.c:3843 msgid "Tray 8" msgstr "" -#: cups/ppd-cache.c:3422 cups/ppd-cache.c:3842 +#: cups/ppd-cache.c:3424 cups/ppd-cache.c:3844 msgid "Tray 9" msgstr "" -#: cups/ppd-cache.c:3041 +#: cups/ppd-cache.c:3025 msgid "Triple Staple (Landscape)" msgstr "" -#: cups/ppd-cache.c:3039 +#: cups/ppd-cache.c:3023 msgid "Triple Staple (Portrait)" msgstr "" -#: cups/ppd-cache.c:3038 +#: cups/ppd-cache.c:3022 msgid "Triple Staple (Reverse Landscape)" msgstr "" -#: cups/ppd-cache.c:3040 +#: cups/ppd-cache.c:3024 msgid "Triple Staple (Reverse Portrait)" msgstr "" -#: cups/ppd-cache.c:3615 +#: cups/ppd-cache.c:3617 msgid "Triple Wall Cardboard" msgstr "" -#: cups/tls-darwin.c:652 cups/tls-darwin.c:734 cups/tls-gnutls.c:484 -#: cups/tls-gnutls.c:566 +#: cups/tls-darwin.c:652 cups/tls-darwin.c:734 cups/tls-gnutls.c:509 +#: cups/tls-gnutls.c:591 msgid "Trust on first use is disabled." msgstr "" @@ -6875,7 +6875,7 @@ msgstr "" msgid "Unable to add document to print job." msgstr "" -#: scheduler/ipp.c:1584 +#: scheduler/ipp.c:1582 #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "" @@ -6884,15 +6884,15 @@ msgstr "" msgid "Unable to add printer" msgstr "" -#: scheduler/ipp.c:1187 +#: scheduler/ipp.c:1185 msgid "Unable to allocate memory for file types." msgstr "" -#: filter/pstops.c:421 +#: filter/pstops.c:420 msgid "Unable to allocate memory for page info" msgstr "" -#: filter/pstops.c:415 +#: filter/pstops.c:414 msgid "Unable to allocate memory for pages array" msgstr "" @@ -6900,7 +6900,7 @@ msgstr "" msgid "Unable to cancel RSS subscription" msgstr "" -#: backend/ipp.c:2150 backend/ipp.c:2682 +#: backend/ipp.c:2150 backend/ipp.c:2683 msgid "Unable to cancel print job." msgstr "" @@ -6916,12 +6916,12 @@ msgstr "" msgid "Unable to change server settings" msgstr "" -#: cups/ipp.c:5303 +#: cups/ipp.c:5287 #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "" -#: cups/ipp.c:5249 +#: cups/ipp.c:5233 #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "" @@ -6954,12 +6954,12 @@ msgstr "" msgid "Unable to copy CUPS printer driver files (%d)." msgstr "" -#: scheduler/ipp.c:2690 +#: scheduler/ipp.c:2687 #, c-format msgid "Unable to copy PPD file - %s" msgstr "" -#: scheduler/ipp.c:2735 +#: scheduler/ipp.c:2732 msgid "Unable to copy PPD file." msgstr "" @@ -6973,7 +6973,7 @@ msgstr "" msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "" -#: cups/tls-darwin.c:618 cups/tls-gnutls.c:447 +#: cups/tls-darwin.c:618 cups/tls-gnutls.c:472 msgid "Unable to create credentials from array." msgstr "" @@ -6981,11 +6981,11 @@ msgstr "" msgid "Unable to create printer-uri" msgstr "" -#: scheduler/ipp.c:5508 +#: scheduler/ipp.c:5511 msgid "Unable to create printer." msgstr "" -#: cups/tls-darwin.c:1484 cups/tls-gnutls.c:1494 +#: cups/tls-darwin.c:1484 cups/tls-gnutls.c:1519 msgid "Unable to create server credentials." msgstr "" @@ -7045,7 +7045,7 @@ msgstr "" msgid "Unable to find destination for job" msgstr "" -#: cups/http-support.c:2101 +#: cups/http-support.c:2098 msgid "Unable to find printer." msgstr "" @@ -7053,7 +7053,7 @@ msgstr "" msgid "Unable to find server credentials." msgstr "" -#: backend/ipp.c:3345 +#: backend/ipp.c:3346 msgid "Unable to get backend exit status." msgstr "" @@ -7125,7 +7125,7 @@ msgstr "" msgid "Unable to move jobs" msgstr "" -#: cgi-bin/admin.c:3171 cups/ppd.c:314 +#: cgi-bin/admin.c:3171 cups/ppd.c:295 msgid "Unable to open PPD file" msgstr "" @@ -7137,7 +7137,7 @@ msgstr "" msgid "Unable to open device file" msgstr "" -#: scheduler/ipp.c:6348 +#: scheduler/ipp.c:6351 #, c-format msgid "Unable to open document #%d in job #%d." msgstr "" @@ -7148,7 +7148,7 @@ msgstr "" #: backend/ipp.c:386 backend/ipp.c:1605 backend/ipp.c:1818 backend/lpd.c:479 #: backend/socket.c:147 backend/usb.c:229 filter/gziptoany.c:71 -#: filter/pstops.c:268 +#: filter/pstops.c:267 msgid "Unable to open print file" msgstr "" @@ -7166,7 +7166,7 @@ msgstr "" msgid "Unable to read print data." msgstr "" -#: scheduler/ipp.c:8640 scheduler/ipp.c:9883 +#: scheduler/ipp.c:8643 scheduler/ipp.c:9886 msgid "Unable to rename job document file." msgstr "" @@ -7179,7 +7179,7 @@ msgstr "" msgid "Unable to run \"%s\": %s" msgstr "" -#: filter/pstops.c:533 +#: filter/pstops.c:532 msgid "Unable to see in file" msgstr "" @@ -7204,7 +7204,7 @@ msgstr "" msgid "Unable to set server default" msgstr "" -#: backend/ipp.c:3204 backend/ipp.c:3281 backend/ipp.c:3289 +#: backend/ipp.c:3205 backend/ipp.c:3282 backend/ipp.c:3290 msgid "Unable to start backend process." msgstr "" @@ -7233,11 +7233,11 @@ msgstr "" msgid "Units" msgstr "" -#: cups/http-support.c:1560 cups/http-support.c:1644 cups/ppd.c:343 +#: cups/http-support.c:1560 cups/http-support.c:1644 cups/ppd.c:324 msgid "Unknown" msgstr "" -#: filter/pstops.c:2188 +#: filter/pstops.c:2187 #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "" @@ -7261,7 +7261,7 @@ msgstr "" msgid "Unknown hash algorithm." msgstr "" -#: cups/dest-options.c:1024 +#: cups/dest-options.c:1033 msgid "Unknown media size name." msgstr "" @@ -7270,7 +7270,7 @@ msgstr "" msgid "Unknown option \"%s\" with value \"%s\"." msgstr "" -#: filter/pstops.c:2171 +#: filter/pstops.c:2170 #, c-format msgid "Unknown option \"%s\"." msgstr "" @@ -7280,21 +7280,21 @@ msgstr "" msgid "Unknown print mode: \"%s\"." msgstr "" -#: scheduler/ipp.c:10828 +#: scheduler/ipp.c:10831 #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "" -#: scheduler/ipp.c:10811 +#: scheduler/ipp.c:10814 #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "" -#: cups/http.c:2294 +#: cups/http.c:2306 msgid "Unknown request method." msgstr "" -#: cups/http.c:2314 +#: cups/http.c:2326 msgid "Unknown request version." msgstr "" @@ -7302,7 +7302,7 @@ msgstr "" msgid "Unknown scheme in URI" msgstr "" -#: cups/http-addrlist.c:822 +#: cups/http-addrlist.c:824 msgid "Unknown service name." msgstr "" @@ -7311,68 +7311,68 @@ msgstr "" msgid "Unknown version option value: \"%s\"." msgstr "" -#: scheduler/ipp.c:11287 +#: scheduler/ipp.c:11290 #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "" -#: scheduler/ipp.c:11317 +#: scheduler/ipp.c:11320 #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "" -#: scheduler/ipp.c:7987 scheduler/ipp.c:10370 scheduler/ipp.c:11331 +#: scheduler/ipp.c:7990 scheduler/ipp.c:10373 scheduler/ipp.c:11334 msgid "Unsupported 'job-hold-until' value." msgstr "" -#: scheduler/ipp.c:11347 +#: scheduler/ipp.c:11350 msgid "Unsupported 'job-name' value." msgstr "" -#: scheduler/ipp.c:310 +#: scheduler/ipp.c:308 #, c-format msgid "Unsupported character set \"%s\"." msgstr "" -#: scheduler/ipp.c:8447 scheduler/ipp.c:9695 +#: scheduler/ipp.c:8450 scheduler/ipp.c:9698 #, c-format msgid "Unsupported compression \"%s\"." msgstr "" -#: scheduler/ipp.c:8583 scheduler/ipp.c:9848 +#: scheduler/ipp.c:8586 scheduler/ipp.c:9851 #, c-format msgid "Unsupported document-format \"%s\"." msgstr "" -#: scheduler/ipp.c:9831 +#: scheduler/ipp.c:9834 #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "" -#: scheduler/ipp.c:1369 +#: scheduler/ipp.c:1367 #, c-format msgid "Unsupported format \"%s\"." msgstr "" -#: scheduler/ipp.c:1467 +#: scheduler/ipp.c:1465 msgid "Unsupported margins." msgstr "" -#: cups/pwg-media.c:544 +#: cups/pwg-media.c:545 msgid "Unsupported media value." msgstr "" -#: filter/pstops.c:2453 +#: filter/pstops.c:2452 #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "" -#: filter/pstops.c:2487 +#: filter/pstops.c:2486 #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" -#: filter/pstops.c:2538 +#: filter/pstops.c:2537 #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "" @@ -7404,7 +7404,7 @@ msgstr "" #: backend/dnssd.c:225 backend/ipp.c:334 backend/lpd.c:178 #: backend/socket.c:124 backend/usb.c:175 filter/commandtops.c:61 -#: filter/gziptoany.c:44 filter/pstops.c:229 monitor/bcp.c:54 +#: filter/gziptoany.c:44 filter/pstops.c:228 monitor/bcp.c:54 #: monitor/tbcp.c:53 #, c-format msgid "Usage: %s job-id user title copies options [file]" @@ -7414,11 +7414,11 @@ msgstr "" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "" -#: systemv/cupsctl.c:193 +#: systemv/cupsctl.c:234 msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "" -#: scheduler/main.c:2102 +#: scheduler/main.c:2096 msgid "Usage: cupsd [options]" msgstr "" @@ -7450,7 +7450,7 @@ msgstr "" msgid "Usage: lpmove job/src dest" msgstr "" -#: systemv/lpoptions.c:523 +#: systemv/lpoptions.c:536 msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" @@ -7474,7 +7474,7 @@ msgstr "" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" -#: ppdc/ppdmerge.cxx:359 +#: ppdc/ppdmerge.cxx:357 msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" @@ -7494,7 +7494,7 @@ msgstr "" msgid "VarBind uses indefinite length" msgstr "" -#: cups/ppd-cache.c:3603 +#: cups/ppd-cache.c:3605 msgid "Vellum Paper" msgstr "" @@ -7510,7 +7510,7 @@ msgstr "" msgid "Waiting for printer to become available." msgstr "" -#: backend/socket.c:420 +#: backend/socket.c:422 msgid "Waiting for printer to finish." msgstr "" @@ -7518,7 +7518,7 @@ msgstr "" msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "" -#: cups/ppd-cache.c:3528 +#: cups/ppd-cache.c:3530 msgid "Waterproof Fabric" msgstr "" @@ -7526,15 +7526,15 @@ msgstr "" msgid "Web Interface is Disabled" msgstr "" -#: cups/ppd-cache.c:3616 +#: cups/ppd-cache.c:3618 msgid "Wet Film" msgstr "" -#: cups/ppd-cache.c:3521 +#: cups/ppd-cache.c:3523 msgid "Windowed Envelope" msgstr "" -#: cups/ppd.c:2008 +#: cups/ppd.c:1951 msgid "Yes" msgstr "" @@ -7543,7 +7543,7 @@ msgstr "" msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>." msgstr "" -#: cups/ppd-cache.c:3004 +#: cups/ppd-cache.c:2988 msgid "Z Fold" msgstr "" @@ -7567,11 +7567,11 @@ msgstr "" msgid "completed" msgstr "" -#: scheduler/ipp.c:6220 +#: scheduler/ipp.c:6223 msgid "cups-deviced failed to execute." msgstr "" -#: scheduler/ipp.c:7106 scheduler/ipp.c:7345 +#: scheduler/ipp.c:7109 scheduler/ipp.c:7348 msgid "cups-driverd failed to execute." msgstr "" @@ -7580,21 +7580,22 @@ msgstr "" msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "" -#: systemv/cupsctl.c:134 -msgid "cupsctl: Cannot set Listen or Port directly." +#: systemv/cupsctl.c:173 +#, c-format +msgid "cupsctl: Cannot set %s directly." msgstr "" -#: systemv/cupsctl.c:145 +#: systemv/cupsctl.c:186 #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "" -#: systemv/cupsctl.c:188 +#: systemv/cupsctl.c:229 #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "" -#: systemv/cupsctl.c:190 +#: systemv/cupsctl.c:231 #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "" @@ -7836,7 +7837,7 @@ msgstr "" msgid "ipptool: Unknown option \"-%c\"." msgstr "" -#: scheduler/ipp.c:8113 +#: scheduler/ipp.c:8116 msgid "job-printer-uri attribute missing." msgstr "" @@ -7944,7 +7945,7 @@ msgstr "" msgid "lpadmin: Unable to connect to server: %s" msgstr "" -#: systemv/lpadmin.c:1460 +#: systemv/lpadmin.c:1461 msgid "lpadmin: Unable to create temporary file" msgstr "" @@ -7959,7 +7960,7 @@ msgstr "" msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" -#: systemv/lpadmin.c:1472 +#: systemv/lpadmin.c:1473 #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "" @@ -8050,12 +8051,12 @@ msgstr "" msgid "lpoptions: Unable to add printer or instance: %s" msgstr "" -#: systemv/lpoptions.c:491 +#: systemv/lpoptions.c:493 systemv/lpoptions.c:502 #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "" -#: systemv/lpoptions.c:499 +#: systemv/lpoptions.c:512 #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "" @@ -8082,16 +8083,16 @@ msgstr "" msgid "no system default destination" msgstr "" -#: scheduler/ipp.c:5905 +#: scheduler/ipp.c:5908 msgid "notify-events not specified." msgstr "" -#: scheduler/ipp.c:2049 scheduler/ipp.c:5791 +#: scheduler/ipp.c:2047 scheduler/ipp.c:5794 #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "" -#: scheduler/ipp.c:2039 scheduler/ipp.c:5781 +#: scheduler/ipp.c:2037 scheduler/ipp.c:5784 #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "" @@ -8558,17 +8559,17 @@ msgstr "" msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "" -#: ppdc/ppdmerge.cxx:128 +#: ppdc/ppdmerge.cxx:129 #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "" -#: ppdc/ppdmerge.cxx:168 +#: ppdc/ppdmerge.cxx:166 #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "" -#: ppdc/ppdmerge.cxx:152 +#: ppdc/ppdmerge.cxx:150 #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "" diff --git a/locale/cups.strings b/locale/cups.strings index 6a708f2c1..0c484f33b 100644 --- a/locale/cups.strings +++ b/locale/cups.strings @@ -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β"; diff --git a/locale/cups_ca.po b/locale/cups_ca.po index 248c4f227..a4b28a505 100644 --- a/locale/cups_ca.po +++ b/locale/cups_ca.po @@ -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 " diff --git a/locale/cups_cs.po b/locale/cups_cs.po index a2710919b..a38c8aa62 100644 --- a/locale/cups_cs.po +++ b/locale/cups_cs.po @@ -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 diff --git a/locale/cups_de.po b/locale/cups_de.po index 1d3e2c338..9349ae87b 100644 --- a/locale/cups_de.po +++ b/locale/cups_de.po @@ -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" diff --git a/locale/cups_es.po b/locale/cups_es.po index 0a8aa18e7..2eee2f0ac 100644 --- a/locale/cups_es.po +++ b/locale/cups_es.po @@ -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" diff --git a/locale/cups_fr.po b/locale/cups_fr.po index 8e0f4fa90..a8924357a 100644 --- a/locale/cups_fr.po +++ b/locale/cups_fr.po @@ -29,7 +29,7 @@ msgid "" msgstr "" "Project-Id-Version: CUPS 1.6\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" -"POT-Creation-Date: 2018-09-28 11:22-0400\n" +"POT-Creation-Date: 2019-05-15 10:31-0400\n" "PO-Revision-Date: 2012-12-12 11:12+0100\n" "Last-Translator: StΓ©phane Blondon <stephane.blondon@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -6069,7 +6069,8 @@ msgstr "LβexΓ©cution de Β« cups-driverdΒ Β» a Γ©chouΓ©." msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "" -msgid "cupsctl: Cannot set Listen or Port directly." +#, c-format +msgid "cupsctl: Cannot set %s directly." msgstr "" #, c-format diff --git a/locale/cups_it.po b/locale/cups_it.po index d83fa974f..cb3aa418a 100644 --- a/locale/cups_it.po +++ b/locale/cups_it.po @@ -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." diff --git a/locale/cups_ja.po b/locale/cups_ja.po index af7852bb7..035265e1e 100644 --- a/locale/cups_ja.po +++ b/locale/cups_ja.po @@ -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) γ΅γγΌγγγ³γ³γγ€γ«γγγ¦γγͺγγγ§γιεΈΈγ’γΌγγ§εδ½γ" diff --git a/locale/cups_pt_BR.po b/locale/cups_pt_BR.po index 3be06c4a5..2bfb92a63 100644 --- a/locale/cups_pt_BR.po +++ b/locale/cups_pt_BR.po @@ -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 " diff --git a/locale/cups_ru.po b/locale/cups_ru.po index 790b54ac5..35f13fcf7 100644 --- a/locale/cups_ru.po +++ b/locale/cups_ru.po @@ -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" diff --git a/locale/cups_zh_CN.po b/locale/cups_zh_CN.po index d9ef00639..99bc60b83 100644 --- a/locale/cups_zh_CN.po +++ b/locale/cups_zh_CN.po @@ -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" diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in index df2b5bbd5..a870ff91d 100644 --- a/man/cupsd.conf.man.in +++ b/man/cupsd.conf.man.in @@ -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. diff --git a/man/ipptoolfile.man b/man/ipptoolfile.man index c10254f64..b7c594a0f 100644 --- a/man/ipptoolfile.man +++ b/man/ipptoolfile.man @@ -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. diff --git a/packaging/cups.spec b/packaging/cups.spec index 84007d3f8..a15f03d74 100644 --- a/packaging/cups.spec +++ b/packaging/cups.spec @@ -43,12 +43,12 @@ Summary: CUPS Name: cups -Version: 2.2.10 +Version: 2.2.12 Release: 0 Epoch: 1 License: GPL Group: System Environment/Daemons -Source: https://github.com/apple/cups/releases/download/v2.2.10/cups-2.2.10-source.tar.gz +Source: https://github.com/apple/cups/releases/download/v2.2.12/cups-2.2.12-source.tar.gz Url: http://www.cups.org Packager: Anonymous <anonymous@example.com> Vendor: Example Corp diff --git a/ppdc/ppdc-array.cxx b/ppdc/ppdc-array.cxx index 2dd494490..b33cd627d 100644 --- a/ppdc/ppdc-array.cxx +++ b/ppdc/ppdc-array.cxx @@ -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 ++) diff --git a/ppdc/ppdc.h b/ppdc/ppdc.h index 6a69c6eb2..a5e1de953 100644 --- a/ppdc/ppdc.h +++ b/ppdc/ppdc.h @@ -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 diff --git a/ppdc/ppdmerge.cxx b/ppdc/ppdmerge.cxx index 3f6670f25..f8781827c 100644 --- a/ppdc/ppdmerge.cxx +++ b/ppdc/ppdmerge.cxx @@ -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)) diff --git a/ppdc/testcatalog.cxx b/ppdc/testcatalog.cxx index 71cbc3630..583601067 100644 --- a/ppdc/testcatalog.cxx +++ b/ppdc/testcatalog.cxx @@ -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; diff --git a/scheduler/auth.c b/scheduler/auth.c index fa4e2715d..1fb3ffcc0 100644 --- a/scheduler/auth.c +++ b/scheduler/auth.c @@ -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 diff --git a/scheduler/client.c b/scheduler/client.c index a21b909a8..680508047 100644 --- a/scheduler/client.c +++ b/scheduler/client.c @@ -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); diff --git a/scheduler/conf.c b/scheduler/conf.c index aae7443de..1b70afc94 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -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 = TRUE; - Timeout = DEFAULT_TIMEOUT; + Timeout = 900; WebInterface = CUPS_DEFAULT_WEBIF; BrowseLocalProtocols = parse_protocols(CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS); diff --git a/scheduler/cups-driverd.cxx b/scheduler/cups-driverd.cxx index 1d4291a73..d48c75165 100644 --- a/scheduler/cups-driverd.cxx +++ b/scheduler/cups-driverd.cxx @@ -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 */ @@ -362,8 +359,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(); @@ -1517,8 +1513,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", @@ -2101,22 +2109,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); diff --git a/scheduler/job.c b/scheduler/job.c index d4793cbb1..79142bc61 100644 --- a/scheduler/job.c +++ b/scheduler/job.c @@ -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."); } /* @@ -445,7 +447,7 @@ cupsdCleanJobs(void) { 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) + if ((job->history_time && job->history_time < JobHistoryUpdate) || !JobHistoryUpdate) JobHistoryUpdate = job->history_time; if ((job->file_time && job->file_time < JobHistoryUpdate) || !JobHistoryUpdate) @@ -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 : diff --git a/scheduler/main.c b/scheduler/main.c index a61592cd8..de3681566 100644 --- a/scheduler/main.c +++ b/scheduler/main.c @@ -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,10 @@ main(int argc, /* I - Number of command-line args */ #ifdef HAVE_ONDEMAND if (OnDemand) + { + stop_scheduler = 1; break; + } #endif /* HAVE_ONDEMAND */ DoingShutdown = 1; @@ -808,14 +811,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 +960,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(); @@ -983,6 +996,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... */ @@ -1015,23 +1045,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 +1625,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 +1713,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)) @@ -1738,22 +1744,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 * seconds (1 day) to avoid select() timeout limits present on some operating @@ -2046,13 +2036,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 diff --git a/scheduler/org.cups.cupsd.service.in b/scheduler/org.cups.cupsd.service.in index 3c273612a..cd2334396 100644 --- a/scheduler/org.cups.cupsd.service.in +++ b/scheduler/org.cups.cupsd.service.in @@ -1,6 +1,7 @@ [Unit] Description=CUPS Scheduler Documentation=man:cupsd(8) +After=sssd.service [Service] ExecStart=@sbindir@/cupsd -l diff --git a/scheduler/printers.c b/scheduler/printers.c index fda5316ee..309c1cbe1 100644 --- a/scheduler/printers.c +++ b/scheduler/printers.c @@ -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")) { @@ -3876,7 +3870,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 */ @@ -3888,9 +3882,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 */ @@ -4150,20 +4142,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); } @@ -4357,89 +4337,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); + } } } @@ -5137,9 +5047,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 */ @@ -5148,29 +5056,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); } diff --git a/scheduler/server.c b/scheduler/server.c index 63fcf90bf..4714a6150 100644 --- a/scheduler/server.c +++ b/scheduler/server.c @@ -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 @@ -177,6 +177,15 @@ cupsdStopServer(void) DefaultProfile = NULL; /* + * Expire subscriptions and clean out old jobs... + */ + + cupsdExpireSubscriptions(NULL, NULL); + + if (JobHistoryUpdate) + cupsdCleanJobs(); + + /* * Write out any dirty files... */ diff --git a/scheduler/subscriptions.c b/scheduler/subscriptions.c index bf36ced4e..c0e03b8cb 100644 --- a/scheduler/subscriptions.c +++ b/scheduler/subscriptions.c @@ -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 @@ -652,6 +652,9 @@ cupsdExpireSubscriptions( time_t curtime; /* Current time */ + if (cupsArrayCount(Subscriptions) == 0) + return; + curtime = time(NULL); update = 0; diff --git a/systemv/cupsctl.c b/systemv/cupsctl.c index c60c21885..f8d9dc82d 100644 --- a/systemv/cupsctl.c +++ b/systemv/cupsctl.c @@ -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); + } + } } /* diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c index e979e56c4..a69647493 100644 --- a/systemv/lpadmin.c +++ b/systemv/lpadmin.c @@ -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()); @@ -1449,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); @@ -1486,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") || @@ -1496,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") || @@ -1556,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") || @@ -1566,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") || @@ -1580,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 diff --git a/templates/de/trailer.tmpl b/templates/de/trailer.tmpl index 54f03ac78..c1f5d38d8 100644 --- a/templates/de/trailer.tmpl +++ b/templates/de/trailer.tmpl @@ -1,5 +1,5 @@ </div> </div> - <div class="footer">CUPS und das CUPS-Logo sind Warenzeichen der <a href="https://www.apple.com/">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. Alle Rechte vorbehalten.</div> + <div class="footer">CUPS und das CUPS-Logo sind Warenzeichen der <a href="https://www.apple.com/">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. Alle Rechte vorbehalten.</div> </body> </html> diff --git a/templates/es/trailer.tmpl b/templates/es/trailer.tmpl index 399189ec2..c1cb58ff5 100644 --- a/templates/es/trailer.tmpl +++ b/templates/es/trailer.tmpl @@ -1,5 +1,5 @@ </div> </div> - <div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor © 2007-2018 Apple Inc. Todos los derechos reservados.</div> + <div class="footer">CUPS y el logo de CUPS son marcas registradas de <a href="http://www.apple.com">Apple Inc.</a> Derechos de autor © 2007-2019 Apple Inc. Todos los derechos reservados.</div> </body> </html> diff --git a/templates/fr/trailer.tmpl b/templates/fr/trailer.tmpl index 907155ecf..6e9b8b1fe 100644 --- a/templates/fr/trailer.tmpl +++ b/templates/fr/trailer.tmpl @@ -1,5 +1,5 @@ </div> </div> - <div class="footer">CUPS et le logo CUPS sont des marques déposées de <a href="http://www.apple.com">Apple Inc.</a> CUPS est sous copyright 2007-2018 Apple Inc. Tous droits réservés.</div> + <div class="footer">CUPS et le logo CUPS sont des marques déposées de <a href="http://www.apple.com">Apple Inc.</a> CUPS est sous copyright 2007-2019 Apple Inc. Tous droits réservés.</div> </body> </html> diff --git a/templates/ja/trailer.tmpl b/templates/ja/trailer.tmpl index 04a205e0a..a4f86b1a6 100644 --- a/templates/ja/trailer.tmpl +++ b/templates/ja/trailer.tmpl @@ -1,5 +1,5 @@ </div> </div> - <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. All rights reserved.</div> + <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. All rights reserved.</div> </body> </html> diff --git a/templates/pt_BR/trailer.tmpl b/templates/pt_BR/trailer.tmpl index d1a1e64dc..673a55557 100644 --- a/templates/pt_BR/trailer.tmpl +++ b/templates/pt_BR/trailer.tmpl @@ -1,5 +1,5 @@ </div> </div> - <div class="footer">CUPS e sua logo são marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. Todos os direitos reservados.</div> + <div class="footer">CUPS e sua logo são marcas registradas da <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. Todos os direitos reservados.</div> </body> </html> diff --git a/templates/ru/trailer.tmpl b/templates/ru/trailer.tmpl index 0da429890..260d0e9c2 100644 --- a/templates/ru/trailer.tmpl +++ b/templates/ru/trailer.tmpl @@ -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> diff --git a/templates/trailer.tmpl b/templates/trailer.tmpl index 04a205e0a..a4f86b1a6 100644 --- a/templates/trailer.tmpl +++ b/templates/trailer.tmpl @@ -1,5 +1,5 @@ </div> </div> - <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2018 Apple Inc. All rights reserved.</div> + <div class="footer">CUPS and the CUPS logo are trademarks of <a href="http://www.apple.com">Apple Inc.</a> Copyright © 2007-2019 Apple Inc. All rights reserved.</div> </body> </html> diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh index 7fd69652c..f7cf61c36 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh @@ -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 @@ -480,6 +480,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 @@ -490,8 +498,8 @@ MaxLogSize 0 AccessLogLevel actions LogLevel $loglevel LogTimeFormat usecs -PreserveJobHistory Yes -PreserveJobFiles 5m +PreserveJobHistory $jobhistory +PreserveJobFiles $jobfiles <Policy default> <Limit All> Order Allow,Deny @@ -823,12 +831,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=$? @@ -901,7 +967,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 diff --git a/vcnet/config.h b/vcnet/config.h index 753f38063..3a6b3fc7b 100644 --- a/vcnet/config.h +++ b/vcnet/config.h @@ -94,8 +94,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.12" +#define CUPS_MINIMAL "CUPS/2.2.12" /* @@ -380,6 +380,13 @@ typedef unsigned long useconds_t; /* + * 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? */ diff --git a/xcode/config.h b/xcode/config.h index ea8b067a1..490b606cd 100644 --- a/xcode/config.h +++ b/xcode/config.h @@ -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.12" +#define CUPS_MINIMAL "CUPS/2.2.12" /* @@ -310,6 +310,13 @@ /* + * 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? */ |