From: Michael Sweet
Date: Tue, 15 Mar 2016 14:40:26 +0000 (-0400)
Subject: Import CUPS v2.0rc1
X-Git-Tag: release-2.0rc1^0
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d2cc5d32da88d72b6e9bbf5e89e05ca23f0a067;p=thirdparty%2Fcups.git
Import CUPS v2.0rc1
---
diff --git a/CHANGES.txt b/CHANGES.txt
index eb812c4d7f..b7c0b26a0c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,28 @@
-CHANGES.txt - 2.0b1 - 2014-07-30
---------------------------------
+CHANGES.txt - 2.0rc1 - 2014-09-02
+---------------------------------
+
+CHANGES IN CUPS V2.0rc1
+
+ - Documentation updates (STR #4464)
+ - The scheduler now monitors the AC power status on OS X, allowing for
+ "sleep printing" when sharing printers ()
+ - The scheduler incorrectly called launch_activate_socket multiple times
+ on OS X ()
+ - The ippserver test program now passes the IPP Everywhere self-
+ certification tests (STR #4101)
+ - Relaxed the new OS X filter sandbox slightly (STR #4471,
+ )
+ - Dropped the old Epson Stylus Color/Photo sample drivers since they
+ don't work with any current printers and there are free alternatives
+ that produce much better output ()
+ - Log and configuration files that are not world-readable are again
+ accessible via the web interface (STR #4461)
+ - PPD files are now created using the permissions specified by the
+ ConfigFilePerm directive.
+ - Fixed RPM build issues (STR #4459)
+ - Fixed the spinner image and restart page when reconfiguring the
+ scheduler through the web interface (STR #4475)
+
CHANGES IN CUPS V2.0b1
diff --git a/INSTALL.txt b/INSTALL.txt
index feeafe7c2d..77b1628c14 100644
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -1,5 +1,5 @@
-INSTALL - CUPS v2.0b1 - 2014-07-30
-----------------------------------
+INSTALL - CUPS v2.0rc1 - 2014-09-02
+-----------------------------------
This file describes how to compile and install CUPS from source code. For more
information on CUPS see the file called "README.txt". A complete change log can
@@ -165,17 +165,11 @@ CREATING BINARY DISTRIBUTIONS WITH EPM
following:
epm - Builds a script + tarfile package
- aix - Builds an AIX package
bsd - Builds a *BSD package
deb - Builds a Debian package
- depot - Builds a HP-UX package (also swinstall)
- inst - Builds an IRIX package (also tardist)
pkg - Builds a Solaris package
rpm - Builds a RPM package
- setld - Build a Tru64 UNIX package
slackware - Build a Slackware package
- swinstall - Build a HP-UX package (also depot)
- tardist - Builds an IRIX package (also inst)
GETTING DEBUG LOGGING FROM CUPS
diff --git a/Makefile b/Makefile
index 79e46a3aa3..84d3cce028 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
#
-# "$Id: Makefile 12074 2014-07-31 01:10:14Z msweet $"
+# "$Id: Makefile 12145 2014-09-02 15:00:50Z msweet $"
#
# Top-level Makefile for CUPS.
#
@@ -319,7 +319,7 @@ sloc:
EPMFLAGS = -v --output-dir dist $(EPMARCH)
-bsd deb pkg slackware tardist:
+bsd deb pkg slackware:
epm $(EPMFLAGS) -f $@ cups packaging/cups.list
epm:
@@ -348,5 +348,5 @@ dist: all
#
-# End of "$Id: Makefile 12074 2014-07-31 01:10:14Z msweet $".
+# End of "$Id: Makefile 12145 2014-09-02 15:00:50Z msweet $".
#
diff --git a/README.txt b/README.txt
index 2f5722c1fc..d9c0adb55a 100644
--- a/README.txt
+++ b/README.txt
@@ -1,5 +1,5 @@
-README - CUPS v2.0b1 - 2014-07-30
----------------------------------
+README - CUPS v2.0rc1 - 2014-09-02
+----------------------------------
********************************************************************************
********************************************************************************
@@ -54,10 +54,10 @@ READING THE DOCUMENTATION
GETTING SUPPORT AND OTHER RESOURCES
- If you have problems, READ THE DOCUMENTATION FIRST! We also provide many
- discussion forums which are available at:
+ If you have problems, READ THE DOCUMENTATION FIRST! We also provide two
+ mailing lists which are available at:
- http://www.cups.org/newsgroups.php
+ http://www.cups.org/lists.php
See the CUPS web site at "http://www.cups.org/" for other resources.
@@ -91,10 +91,6 @@ SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE
----------------------------- ------------------------------
Dymo Label Printers drv:///sample.drv/dymo.ppd
Intellitech Intellibar drv:///sample.drv/intelbar.ppd
- EPSON Stylus Color Series drv:///sample.drv/stcolor.ppd
- EPSON Stylus Photo Series drv:///sample.drv/stphoto.ppd
- EPSON Stylus New Color Series drv:///sample.drv/stcolor2.ppd
- EPSON Stylus New Photo Series drv:///sample.drv/stphoto2.ppd
EPSON 9-pin Series drv:///sample.drv/epson9.ppd
EPSON 24-pin Series drv:///sample.drv/epson24.ppd
Generic PCL Laser Printer drv:///sample.drv/generpcl.ppd
@@ -126,11 +122,7 @@ SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE
lpadmin -p printername -E -v lpd://11.22.33.44/ -m ppd-name
The sample drivers provide basic printing capabilities, but generally do not
- exercise the full potential of the printers or CUPS. The CUPS web site
- provides links and drivers:
-
- http://www.cups.org/ppd.php PPD files
- http://www.cups.org/links.php Links to other drivers
+ exercise the full potential of the printers or CUPS.
PRINTING FILES
@@ -147,8 +139,8 @@ PRINTING FILES
lpr -o media=A4 -o resolution=600dpi filename
CUPS recognizes many types of images files as well as PDF, PostScript,
- HP-GL/2, and text files, so you can print those files directly rather than
- through an application.
+ and text files, so you can print those files directly rather than through
+ an application.
If you have an application that generates output specifically for your
printer then you need to use the "-oraw" or "-l" options:
@@ -156,8 +148,7 @@ PRINTING FILES
lp -o raw filename
lpr -l filename
- This will prevent the filters from misinterpreting your print
- file.
+ This will prevent the filters from misinterpreting your print file.
LEGAL STUFF
@@ -167,8 +158,6 @@ LEGAL STUFF
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
- This software is based in part on the work of the Independent JPEG Group.
-
CUPS is provided under the terms of version 2 of the GNU General Public
License and GNU Library General Public License. This program is distributed
in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
diff --git a/backend/network.c b/backend/network.c
index fa016c655c..2cf5f72b9c 100644
--- a/backend/network.c
+++ b/backend/network.c
@@ -1,5 +1,5 @@
/*
- * "$Id: network.c 11970 2014-07-01 14:35:25Z msweet $"
+ * "$Id: network.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Common backend network APIs for CUPS.
*
@@ -175,13 +175,13 @@ backendNetworkSideCB(
{
case CUPS_ASN1_BOOLEAN :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%d", packet.object_value.boolean);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_INTEGER :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%d",
packet.object_value.integer);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_BIT_STRING :
@@ -193,13 +193,13 @@ backendNetworkSideCB(
memcpy(dataptr, packet.object_value.string.bytes, i);
- datalen += i;
+ datalen += (int)i;
break;
case CUPS_ASN1_OID :
_cupsSNMPOIDToString(packet.object_value.oid, dataptr,
sizeof(data) - (size_t)(dataptr - data));
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_HEX_STRING :
@@ -208,22 +208,22 @@ backendNetworkSideCB(
dataptr < (data + sizeof(data) - 3);
i ++, dataptr += 2)
sprintf(dataptr, "%02X", packet.object_value.string.bytes[i]);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_COUNTER :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.counter);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_GAUGE :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.gauge);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_TIMETICKS :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.timeticks);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
default :
@@ -304,5 +304,5 @@ backendNetworkSideCB(
/*
- * End of "$Id: network.c 11970 2014-07-01 14:35:25Z msweet $".
+ * End of "$Id: network.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/backend/usb-unix.c b/backend/usb-unix.c
index 5e63a0e41e..813039d1eb 100644
--- a/backend/usb-unix.c
+++ b/backend/usb-unix.c
@@ -1,5 +1,5 @@
/*
- * "$Id: usb-unix.c 11342 2013-10-18 20:36:01Z msweet $"
+ * "$Id: usb-unix.c 12124 2014-08-28 15:37:22Z msweet $"
*
* USB port backend for CUPS.
*
@@ -146,7 +146,7 @@ print_device(const char *uri, /* I - Device URI */
tcgetattr(device_fd, &opts);
- opts.c_lflag &= ~(ICANON | ECHO | ISIG); /* Raw mode */
+ opts.c_lflag &= ~(unsigned)(ICANON | ECHO | ISIG); /* Raw mode */
/**** No options supported yet ****/
@@ -603,5 +603,5 @@ side_cb(int print_fd, /* I - Print file */
/*
- * End of "$Id: usb-unix.c 11342 2013-10-18 20:36:01Z msweet $".
+ * End of "$Id: usb-unix.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
index b4ed294f5a..9de2424c3c 100644
--- a/cgi-bin/admin.c
+++ b/cgi-bin/admin.c
@@ -1,5 +1,5 @@
/*
- * "$Id: admin.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: admin.c 12123 2014-08-28 14:24:45Z msweet $"
*
* Administration CGI for CUPS.
*
@@ -1897,7 +1897,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
}
else
{
- cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect");
+ cgiSetVariable("refresh_page", "5;URL=/admin/");
cgiStartHTML(cgiText(_("Edit Configuration File")));
cgiCopyTemplateLang("restart.tmpl");
@@ -4198,5 +4198,5 @@ get_points(double number, /* I - Original number */
/*
- * End of "$Id: admin.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: admin.c 12123 2014-08-28 14:24:45Z msweet $".
*/
diff --git a/config-scripts/cups-common.m4 b/config-scripts/cups-common.m4
index 5822fe53ec..20168172cc 100644
--- a/config-scripts/cups-common.m4
+++ b/config-scripts/cups-common.m4
@@ -1,5 +1,5 @@
dnl
-dnl "$Id: cups-common.m4 12073 2014-07-31 00:58:00Z msweet $"
+dnl "$Id: cups-common.m4 12140 2014-08-30 01:51:22Z msweet $"
dnl
dnl Common configuration stuff for CUPS.
dnl
@@ -20,7 +20,7 @@ dnl Set the name of the config header file...
AC_CONFIG_HEADER(config.h)
dnl Version number information...
-CUPS_VERSION=2.0b1
+CUPS_VERSION=2.0rc1
CUPS_REVISION=
#if test -z "$CUPS_REVISION" -a -d .svn; then
# CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
@@ -369,9 +369,6 @@ case $uname in
AC_CHECK_HEADER(membershipPriv.h,AC_DEFINE(HAVE_MEMBERSHIPPRIV_H))
AC_CHECK_FUNCS(mbr_uid_to_uuid)
- dnl Check for the vproc_transaction_begin/end stuff...
- AC_CHECK_FUNCS(vproc_transaction_begin)
-
dnl Need header...
AC_CHECK_HEADER(dlfcn.h,AC_DEFINE(HAVE_DLFCN_H))
@@ -465,5 +462,5 @@ esac
AC_SUBST(BUILDDIRS)
dnl
-dnl End of "$Id: cups-common.m4 12073 2014-07-31 00:58:00Z msweet $".
+dnl End of "$Id: cups-common.m4 12140 2014-08-30 01:51:22Z msweet $".
dnl
diff --git a/config-scripts/cups-compiler.m4 b/config-scripts/cups-compiler.m4
index 421bfe7753..ca3bae8e07 100644
--- a/config-scripts/cups-compiler.m4
+++ b/config-scripts/cups-compiler.m4
@@ -1,5 +1,5 @@
dnl
-dnl "$Id: cups-compiler.m4 11683 2014-03-05 20:00:54Z msweet $"
+dnl "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $"
dnl
dnl Compiler stuff for CUPS.
dnl
@@ -110,7 +110,7 @@ if test -n "$GCC"; then
# The -fstack-protector option is available with some versions of
# GCC and adds "stack canaries" which detect when the return address
# has been overwritten, preventing many types of exploit attacks.
- AC_MSG_CHECKING(if GCC supports -fstack-protector)
+ AC_MSG_CHECKING(whether compiler supports -fstack-protector)
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fstack-protector"
AC_TRY_LINK(,,
@@ -130,7 +130,7 @@ if test -n "$GCC"; then
# exploits that depend on a fixed address for common functions.
#
# Not available to LSB binaries...
- AC_MSG_CHECKING(if GCC supports -fPIE)
+ AC_MSG_CHECKING(whether compiler supports -fPIE)
OLDCFLAGS="$CFLAGS"
case "$uname" in
Darwin*)
@@ -154,9 +154,18 @@ if test -n "$GCC"; then
if test "x$with_optim" = x; then
# Add useful warning options for tracking down problems...
- OPTIM="-Wall -Wno-format-y2k -Wsign-conversion -Wunused $OPTIM"
+ OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
- AC_MSG_CHECKING(if GCC supports -Wno-tautological-compare)
+ AC_MSG_CHECKING(whether compiler supports -Wsign-conversion)
+ OLDCFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wsign-conversion"
+ AC_TRY_COMPILE(,,
+ [OPTIM="$OPTIM -Wsign-conversion"
+ AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))
+ CFLAGS="$OLDCFLAGS"
+
+ AC_MSG_CHECKING(whether compiler supports -Wno-tautological-compare)
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
AC_TRY_COMPILE(,,
@@ -211,7 +220,7 @@ else
# should contribute the necessary options to
# cups-support@cups.org...
echo "Building CUPS with default compiler optimizations; contact"
- echo "cups-bugs@cups.org with uname and compiler options needed"
+ echo "cups-devel@cups.org with uname and compiler options needed"
echo "for your platform, or set the CFLAGS and LDFLAGS environment"
echo "variables before running configure."
;;
@@ -228,5 +237,5 @@ case $uname in
esac
dnl
-dnl End of "$Id: cups-compiler.m4 11683 2014-03-05 20:00:54Z msweet $".
+dnl End of "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $".
dnl
diff --git a/config-scripts/cups-ssl.m4 b/config-scripts/cups-ssl.m4
index cdd035c5ae..97760ca241 100644
--- a/config-scripts/cups-ssl.m4
+++ b/config-scripts/cups-ssl.m4
@@ -1,5 +1,5 @@
dnl
-dnl "$Id: cups-ssl.m4 11911 2014-06-10 13:54:53Z msweet $"
+dnl "$Id: cups-ssl.m4 12122 2014-08-28 12:55:52Z msweet $"
dnl
dnl TLS stuff for CUPS.
dnl
@@ -78,6 +78,11 @@ if test x$enable_ssl != xno; then
if test $have_ssl = 1; then
CUPS_SERVERCERT="ssl/server.crt"
CUPS_SERVERKEY="ssl/server.key"
+
+ SAVELIBS="$LIBS"
+ LIBS="$LIBS $SSLLIBS"
+ AC_CHECK_FUNC(gnutls_transport_set_pull_timeout_function, AC_DEFINE(HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION))
+ LIBS="$SAVELIBS"
fi
fi
fi
@@ -101,5 +106,5 @@ EXPORT_SSLLIBS="$SSLLIBS"
AC_SUBST(EXPORT_SSLLIBS)
dnl
-dnl End of "$Id: cups-ssl.m4 11911 2014-06-10 13:54:53Z msweet $".
+dnl End of "$Id: cups-ssl.m4 12122 2014-08-28 12:55:52Z msweet $".
dnl
diff --git a/config.h.in b/config.h.in
index c3347945ba..0d11eff695 100644
--- a/config.h.in
+++ b/config.h.in
@@ -1,5 +1,5 @@
/*
- * "$Id: config.h.in 11717 2014-03-21 16:42:53Z msweet $"
+ * "$Id: config.h.in 12140 2014-08-30 01:51:22Z msweet $"
*
* Configuration file for CUPS.
*
@@ -93,7 +93,7 @@
* Default MaxCopies value...
*/
-#define CUPS_DEFAULT_MAX_COPIES 100
+#define CUPS_DEFAULT_MAX_COPIES 9999
/*
@@ -150,10 +150,7 @@
* Do we have PAM stuff?
*/
-#ifndef HAVE_LIBPAM
#define HAVE_LIBPAM 0
-#endif /* !HAVE_LIBPAM */
-
#undef HAVE_PAM_PAM_APPL_H
#undef HAVE_PAM_SET_ITEM
#undef HAVE_PAM_SETCRED
@@ -297,9 +294,17 @@
#undef HAVE_CDSASSL
#undef HAVE_GNUTLS
+#undef HAVE_SSPISSL
#undef HAVE_SSL
+/*
+ * Do we have the gnutls_transport_set_pull_timeout_function function?
+ */
+
+#undef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION
+
+
/*
* What Security framework headers do we have?
*/
@@ -632,13 +637,6 @@
#endif /* HAVE_ARC4RANDOM */
-/*
- * Do we have vproc_transaction_begin/end?
- */
-
-#undef HAVE_VPROC_TRANSACTION_BEGIN
-
-
/*
* Do we have libusb?
*/
@@ -714,5 +712,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
#endif /* !_CUPS_CONFIG_H_ */
/*
- * End of "$Id: config.h.in 11717 2014-03-21 16:42:53Z msweet $".
+ * End of "$Id: config.h.in 12140 2014-08-30 01:51:22Z msweet $".
*/
diff --git a/configure b/configure
index 4b270fee79..dab003f8ca 100755
--- a/configure
+++ b/configure
@@ -2520,7 +2520,7 @@ esac
ac_config_headers="$ac_config_headers config.h"
-CUPS_VERSION=2.0b1
+CUPS_VERSION=2.0rc1
CUPS_REVISION=
#if test -z "$CUPS_REVISION" -a -d .svn; then
# CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
@@ -5692,18 +5692,6 @@ if test "x$ac_cv_func_mbr_uid_to_uuid" = xyes; then :
#define HAVE_MBR_UID_TO_UUID 1
_ACEOF
-fi
-done
-
-
- for ac_func in vproc_transaction_begin
-do :
- ac_fn_c_check_func "$LINENO" "vproc_transaction_begin" "ac_cv_func_vproc_transaction_begin"
-if test "x$ac_cv_func_vproc_transaction_begin" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_VPROC_TRANSACTION_BEGIN 1
-_ACEOF
-
fi
done
@@ -6625,8 +6613,8 @@ if test -n "$GCC"; then
# The -fstack-protector option is available with some versions of
# GCC and adds "stack canaries" which detect when the return address
# has been overwritten, preventing many types of exploit attacks.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fstack-protector" >&5
-$as_echo_n "checking if GCC supports -fstack-protector... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fstack-protector" >&5
+$as_echo_n "checking whether compiler supports -fstack-protector... " >&6; }
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fstack-protector"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6663,8 +6651,8 @@ rm -f core conftest.err conftest.$ac_objext \
# exploits that depend on a fixed address for common functions.
#
# Not available to LSB binaries...
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fPIE" >&5
-$as_echo_n "checking if GCC supports -fPIE... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fPIE" >&5
+$as_echo_n "checking whether compiler supports -fPIE... " >&6; }
OLDCFLAGS="$CFLAGS"
case "$uname" in
Darwin*)
@@ -6722,10 +6710,36 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
if test "x$with_optim" = x; then
# Add useful warning options for tracking down problems...
- OPTIM="-Wall -Wno-format-y2k -Wsign-conversion -Wunused $OPTIM"
+ OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wsign-conversion" >&5
+$as_echo_n "checking whether compiler supports -Wsign-conversion... " >&6; }
+ OLDCFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wsign-conversion"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ OPTIM="$OPTIM -Wsign-conversion"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$OLDCFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -Wno-tautological-compare" >&5
-$as_echo_n "checking if GCC supports -Wno-tautological-compare... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wno-tautological-compare" >&5
+$as_echo_n "checking whether compiler supports -Wno-tautological-compare... " >&6; }
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6796,7 +6810,7 @@ else
# should contribute the necessary options to
# cups-support@cups.org...
echo "Building CUPS with default compiler optimizations; contact"
- echo "cups-bugs@cups.org with uname and compiler options needed"
+ echo "cups-devel@cups.org with uname and compiler options needed"
echo "for your platform, or set the CFLAGS and LDFLAGS environment"
echo "variables before running configure."
;;
@@ -8295,6 +8309,16 @@ fi
if test $have_ssl = 1; then
CUPS_SERVERCERT="ssl/server.crt"
CUPS_SERVERKEY="ssl/server.key"
+
+ SAVELIBS="$LIBS"
+ LIBS="$LIBS $SSLLIBS"
+ 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
+
+fi
+
+ LIBS="$SAVELIBS"
fi
fi
fi
diff --git a/cups/Dependencies b/cups/Dependencies
index 54bd08c7c6..64a0d19d10 100644
--- a/cups/Dependencies
+++ b/cups/Dependencies
@@ -4,8 +4,9 @@ adminutil.o: adminutil.c cups-private.h string-private.h ../config.h \
md5-private.h language-private.h ../cups/transcode.h pwg-private.h \
../cups/cups.h file.h pwg.h ppd-private.h ../cups/ppd.h \
thread-private.h adminutil.h
-array.o: array.c string-private.h ../config.h debug-private.h \
- ../cups/versioning.h array-private.h ../cups/array.h
+array.o: array.c ../cups/cups.h file.h versioning.h ipp.h http.h array.h \
+ language.h pwg.h string-private.h ../config.h debug-private.h \
+ array-private.h
attr.o: attr.c cups-private.h string-private.h ../config.h \
debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \
ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \
@@ -223,8 +224,12 @@ snmp.o: snmp.c cups-private.h string-private.h ../config.h \
../cups/cups.h file.h pwg.h ppd-private.h ../cups/ppd.h \
thread-private.h snmp-private.h
snprintf.o: snprintf.c string-private.h ../config.h
-string.o: string.c string-private.h ../config.h debug-private.h \
- ../cups/versioning.h thread-private.h array.h
+string.o: string.c cups-private.h string-private.h ../config.h \
+ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \
+ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \
+ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \
+ ../cups/cups.h file.h pwg.h ppd-private.h ../cups/ppd.h \
+ thread-private.h
tempfile.o: tempfile.c cups-private.h string-private.h ../config.h \
debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \
ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \
diff --git a/cups/api-filter.shtml b/cups/api-filter.shtml
index 4b8372edda..7c33179c8e 100644
--- a/cups/api-filter.shtml
+++ b/cups/api-filter.shtml
@@ -3,7 +3,7 @@
Filter and backend programming introduction for CUPS.
- Copyright 2007-2013 by Apple Inc.
+ Copyright 2007-2014 by Apple Inc.
Copyright 1997-2006 by Easy Software Products, all rights reserved.
These coded instructions, statements, and computer programs are the
@@ -81,7 +81,7 @@ directory to write to.
In addition, some operating systems provide additional security mechanisms
that further limit file system access, even for backends running as root. On
-OS X, for example, no backend may write to a user's home directory.
+OS X, for example, no backend may write to a user's home directory. See the Sandboxing on OS X section for more information.
@@ -852,3 +852,25 @@ void *my_data;
cupsSNMPSideChannelWalk(".1.3.6.1.2.1.43", 5.0, my_callback, my_data);
+
+
+
+Starting with OS X 10.6, filters and backends are run inside a security "sandbox" which further limits (beyond the normal UNIX user/group permissions) what a filter or backend can do. This helps to both secure the printing system from malicious software and enforce the functional separation of components in the CUPS filter chain. What follows is a list of actions that are explicitly allowed for all filters and backends:
+
+
+
+ - Reading of files: pursuant to normal UNIX file permissions, filters and backends can read files for the current job from the /private/var/spool/cups directory and other files on mounted filesystems except for user home directories under /Users.
+
+ - Writing of files: pursuant to normal UNIX file permissions, filters and backends can read/write files to the cache directory specified by the
CUPS_CACHEDIR
environment variable, to the state directory specified by the CUPS_STATEDIR
environment variable, to the temporary directory specified by the TMPDIR
environment variable, and under the /private/var/db, /private/var/folders, /private/var/lib, /private/var/mysql, /private/var/run, /private/var/spool (except /private/var/spool/cups), /Library/Application Support, /Library/Caches, /Library/Logs, /Library/Preferences, /Library/WebServer, and /Users/Shared directories.
+
+ - Execution of programs: pursuant to normal UNIX file permissions, filters and backends can execute any program not located under the /Users directory. Child processes inherit the sandbox and are subject to the same restrictions as the parent.
+
+ - Bluetooth and USB: backends can access Bluetooth and USB printers through IOKit. Filters cannot access Bluetooth and USB printers directly.
+
+ - Network: filters and backends can access UNIX domain sockets under the /private/tmp, /private/var/run, and /private/var/tmp directories. Backends can also create IPv4 and IPv6 TCP (outgoing) and UDP (incoming and outgoing) socket, and bind to local source ports. Filters cannot directly create IPv4 and IPv6 TCP or UDP sockets.
+
+ - Notifications: filters and backends can send notifications via the Darwin
notify_post()
API.
+
+
+
+Note: The sandbox profile used in CUPS 2.0 still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.
diff --git a/cups/cups.h b/cups/cups.h
index 77e824d0bc..b7047dae5b 100644
--- a/cups/cups.h
+++ b/cups/cups.h
@@ -1,5 +1,5 @@
/*
- * "$Id: cups.h 11884 2014-05-16 21:54:22Z msweet $"
+ * "$Id: cups.h 12094 2014-08-19 12:15:11Z msweet $"
*
* API definitions for CUPS.
*
@@ -615,7 +615,7 @@ extern int cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest,
extern void cupsSetUserAgent(const char *user_agent) _CUPS_API_1_7;
extern const char *cupsUserAgent(void) _CUPS_API_1_7;
-/* New in CUPS 2.0 */
+/* New in CUPS 2.0/OS X 10.10 */
extern cups_dest_t *cupsGetDestWithURI(const char *name, const char *uri) _CUPS_API_2_0;
extern const char *cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, unsigned flags, cups_size_t *size) _CUPS_API_2_0;
extern int cupsMakeServerCredentials(const char *path, const char *common_name, int num_alt_names, const char **alt_names, time_t expiration_date) _CUPS_API_2_0;
@@ -628,5 +628,5 @@ extern int cupsSetServerCredentials(const char *path, const char *common_name,
#endif /* !_CUPS_CUPS_H_ */
/*
- * End of "$Id: cups.h 11884 2014-05-16 21:54:22Z msweet $".
+ * End of "$Id: cups.h 12094 2014-08-19 12:15:11Z msweet $".
*/
diff --git a/cups/dest-localization.c b/cups/dest-localization.c
index f2bb9eb066..d76ae2b243 100644
--- a/cups/dest-localization.c
+++ b/cups/dest-localization.c
@@ -1,5 +1,5 @@
/*
- * "$Id: dest-localization.c 11894 2014-05-23 03:18:00Z msweet $"
+ * "$Id: dest-localization.c 12094 2014-08-19 12:15:11Z msweet $"
*
* Destination localization support for CUPS.
*
@@ -38,7 +38,7 @@ static char *cups_scan_strings(char *buffer);
* The returned string is stored in the destination information and will become
* invalid if the destination information is deleted.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
const char * /* O - Localized string */
@@ -535,5 +535,5 @@ cups_scan_strings(char *buffer) /* I - Start of string */
/*
- * End of "$Id: dest-localization.c 11894 2014-05-23 03:18:00Z msweet $".
+ * End of "$Id: dest-localization.c 12094 2014-08-19 12:15:11Z msweet $".
*/
diff --git a/cups/dest.c b/cups/dest.c
index ab36a06600..9e88aede6c 100644
--- a/cups/dest.c
+++ b/cups/dest.c
@@ -1,5 +1,5 @@
/*
- * "$Id: dest.c 11959 2014-06-26 18:30:19Z msweet $"
+ * "$Id: dest.c 12094 2014-08-19 12:15:11Z msweet $"
*
* User-defined destination (and option) support for CUPS.
*
@@ -1310,7 +1310,7 @@ _cupsGetDestResource(
*
* "uri" is the "ipp" or "ipps" URI for the printer.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
cups_dest_t * /* O - Destination or @code NULL@ */
@@ -3942,5 +3942,5 @@ cups_make_string(
/*
- * End of "$Id: dest.c 11959 2014-06-26 18:30:19Z msweet $".
+ * End of "$Id: dest.c 12094 2014-08-19 12:15:11Z msweet $".
*/
diff --git a/cups/globals.c b/cups/globals.c
index 40727381d0..374f85005e 100644
--- a/cups/globals.c
+++ b/cups/globals.c
@@ -1,5 +1,5 @@
/*
- * "$Id: globals.c 11851 2014-05-07 23:55:35Z msweet $"
+ * "$Id: globals.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Global variable access routines for CUPS.
*
@@ -361,7 +361,9 @@ cups_globals_free(_cups_globals_t *cg) /* I - Pointer to global data */
httpClose(cg->http);
+#ifdef HAVE_SSL
_httpFreeCredentials(cg->tls_credentials);
+#endif /* HAVE_SSL */
cupsFileClose(cg->stdio_files[0]);
cupsFileClose(cg->stdio_files[1]);
@@ -392,5 +394,5 @@ cups_globals_init(void)
/*
- * End of "$Id: globals.c 11851 2014-05-07 23:55:35Z msweet $".
+ * End of "$Id: globals.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/cups/http-addr.c b/cups/http-addr.c
index 51bf039a58..3f68d0d498 100644
--- a/cups/http-addr.c
+++ b/cups/http-addr.c
@@ -1,5 +1,5 @@
/*
- * "$Id: http-addr.c 11627 2014-02-20 16:15:09Z msweet $"
+ * "$Id: http-addr.c 12129 2014-08-28 19:26:31Z msweet $"
*
* HTTP address routines for CUPS.
*
@@ -64,7 +64,7 @@ httpAddrAny(const http_addr_t *addr) /* I - Address to check */
* listen address for sockets created with @link httpAddrListen@. This will
* ensure that domain sockets are removed when closed.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 0 on success, -1 on failure */
@@ -653,7 +653,7 @@ httpAddrString(const http_addr_t *addr, /* I - Address to convert */
*
* Returns @code NULL@ if the socket is currently unconnected.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_addr_t * /* O - Connected address or @code NULL@ */
@@ -865,6 +865,13 @@ httpGetHostname(http_t *http, /* I - HTTP connection or NULL */
}
#endif /* HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME */
}
+
+ /*
+ * Make sure .local hostnames end with a period...
+ */
+
+ if (strlen(s) > 6 && !strcmp(s + strlen(s) - 6, ".local"))
+ strlcat(s, ".", (size_t)slen);
}
/*
@@ -879,7 +886,7 @@ httpGetHostname(http_t *http, /* I - HTTP connection or NULL */
* 'httpResolveHostname()' - Resolve the hostname of the HTTP connection
* address.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
const char * /* O - Resolved hostname or @code NULL@ */
@@ -917,5 +924,5 @@ httpResolveHostname(http_t *http, /* I - HTTP connection */
/*
- * End of "$Id: http-addr.c 11627 2014-02-20 16:15:09Z msweet $".
+ * End of "$Id: http-addr.c 12129 2014-08-28 19:26:31Z msweet $".
*/
diff --git a/cups/http-private.h b/cups/http-private.h
index 23aee761f2..2c18052c5c 100644
--- a/cups/http-private.h
+++ b/cups/http-private.h
@@ -1,5 +1,5 @@
/*
- * "$Id: http-private.h 12044 2014-07-17 21:21:21Z msweet $"
+ * "$Id: http-private.h 12126 2014-08-28 16:02:00Z msweet $"
*
* Private HTTP definitions for CUPS.
*
@@ -76,7 +76,6 @@ typedef int socklen_t;
# ifdef HAVE_GNUTLS
# include
# include
-# include
# elif defined(HAVE_CDSASSL)
# include
# include
@@ -439,5 +438,5 @@ extern int _httpWait(http_t *http, int msec, int usessl);
#endif /* !_CUPS_HTTP_PRIVATE_H_ */
/*
- * End of "$Id: http-private.h 12044 2014-07-17 21:21:21Z msweet $".
+ * End of "$Id: http-private.h 12126 2014-08-28 16:02:00Z msweet $".
*/
diff --git a/cups/http-support.c b/cups/http-support.c
index 0f224097a0..7e30608ceb 100644
--- a/cups/http-support.c
+++ b/cups/http-support.c
@@ -1,5 +1,5 @@
/*
- * "$Id: http-support.c 11844 2014-05-02 11:58:54Z msweet $"
+ * "$Id: http-support.c 12124 2014-08-28 15:37:22Z msweet $"
*
* HTTP support routines for CUPS.
*
@@ -649,7 +649,7 @@ httpDecode64_2(char *out, /* I - String to write to */
break;
case 3 :
if (outptr < outend)
- *outptr++ |= base64;
+ *outptr++ |= (char)base64;
pos = 0;
break;
}
@@ -1300,7 +1300,7 @@ httpSeparateURI(
/*
* 'httpStateString()' - Return the string describing a HTTP state value.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
const char * /* O - State string */
@@ -1433,7 +1433,7 @@ httpStatus(http_status_t status) /* I - HTTP status code */
/*
* 'httpURIStatusString()' - Return a string describing a URI status code.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
const char * /* O - Localized status string */
@@ -2544,5 +2544,5 @@ http_resolve_cb(
/*
- * End of "$Id: http-support.c 11844 2014-05-02 11:58:54Z msweet $".
+ * End of "$Id: http-support.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/cups/http.c b/cups/http.c
index b4c9d71fb8..b5cf4e167b 100644
--- a/cups/http.c
+++ b/cups/http.c
@@ -1,5 +1,5 @@
/*
- * "$Id: http.c 12034 2014-07-16 19:37:34Z msweet $"
+ * "$Id: http.c 12125 2014-08-28 15:49:29Z msweet $"
*
* HTTP routines for CUPS.
*
@@ -393,7 +393,7 @@ httpClose(http_t *http) /* I - HTTP connection */
/*
* 'httpCompareCredentials()' - Compare two sets of X.509 credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if they match, 0 if they do not */
@@ -759,7 +759,7 @@ httpGet(http_t *http, /* I - HTTP connection */
*
* The return value is the UNIX time of the last read or write.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
time_t /* O - Time of last read or write */
@@ -911,7 +911,7 @@ httpGetCookie(http_t *http) /* I - HTTP connecion */
* @link httpIsEncrypted@ function to determine whether a TLS session has
* been established.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_encryption_t /* O - Current encryption mode */
@@ -995,7 +995,7 @@ httpGetField(http_t *http, /* I - HTTP connection */
/*
* 'httpGetKeepAlive()' - Get the current Keep-Alive state of the connection.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_keepalive_t /* O - Keep-Alive state */
@@ -1104,7 +1104,7 @@ httpGetLength2(http_t *http) /* I - HTTP connection */
/*
* 'httpGetPending()' - Get the number of bytes that are buffered for writing.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Number of bytes buffered */
@@ -1117,7 +1117,7 @@ httpGetPending(http_t *http) /* I - HTTP connection */
/*
* 'httpGetReady()' - Get the number of bytes that can be read without blocking.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Number of bytes available */
@@ -1143,7 +1143,7 @@ httpGetReady(http_t *http) /* I - HTTP connection */
* The @link httpIsChunked@ function can be used to determine whether the
* message body is chunked or fixed-length.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Remaining bytes */
@@ -1582,7 +1582,7 @@ httpInitialize(void)
* This function returns non-zero if the message body is composed of
* variable-length chunks.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if chunked, 0 if not */
@@ -1597,7 +1597,7 @@ httpIsChunked(http_t *http) /* I - HTTP connection */
*
* This function returns non-zero if the connection is currently encrypted.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if encrypted, 0 if not */
@@ -1793,8 +1793,8 @@ httpPeek(http_t *http, /* I - HTTP connection */
memcpy(http->sbuffer + http->stream.avail_in, http->buffer, buflen);
http->stream.avail_in += buflen;
- http->used -= buflen;
- http->data_remaining -= buflen;
+ http->used -= (int)buflen;
+ http->data_remaining -= (off_t)buflen;
if (http->used > 0)
memmove(http->buffer, http->buffer + buflen, (size_t)http->used);
@@ -2557,9 +2557,11 @@ httpSetCredentials(http_t *http, /* I - HTTP connection */
if (!http || cupsArrayCount(credentials) < 1)
return (-1);
+#ifdef HAVE_SSL
_httpFreeCredentials(http->tls_credentials);
http->tls_credentials = _httpCreateCredentials(credentials);
+#endif /* HAVE_SSL */
return (http->tls_credentials ? 0 : -1);
}
@@ -2769,7 +2771,7 @@ httpSetField(http_t *http, /* I - HTTP connection */
/*
* 'httpSetKeepAlive()' - Set the current Keep-Alive state of a connection.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
void
@@ -2847,7 +2849,7 @@ httpSetTimeout(
/*
* 'httpShutdown()' - Shutdown one side of an HTTP connection.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
void
@@ -2856,8 +2858,10 @@ httpShutdown(http_t *http) /* I - HTTP connection */
if (!http || http->fd < 0)
return;
+#ifdef HAVE_SSL
if (http->tls)
_httpTLSStop(http);
+#endif /* HAVE_SSL */
#ifdef WIN32
shutdown(http->fd, SD_RECEIVE); /* Microsoft-ism... */
@@ -4822,5 +4826,5 @@ http_write_chunk(http_t *http, /* I - HTTP connection */
/*
- * End of "$Id: http.c 12034 2014-07-16 19:37:34Z msweet $".
+ * End of "$Id: http.c 12125 2014-08-28 15:49:29Z msweet $".
*/
diff --git a/cups/http.h b/cups/http.h
index bce03ca8ec..867517b719 100644
--- a/cups/http.h
+++ b/cups/http.h
@@ -1,5 +1,5 @@
/*
- * "$Id: http.h 11850 2014-05-07 23:12:48Z msweet $"
+ * "$Id: http.h 12094 2014-08-19 12:15:11Z msweet $"
*
* Hyper-Text Transport Protocol definitions for CUPS.
*
@@ -342,7 +342,7 @@ typedef enum http_status_e /**** HTTP status codes ****/
# endif /* !_CUPS_NO_DEPRECATED */
} http_status_t;
-typedef enum http_trust_e /**** Level of trust for credentials @since CUPS 2.0@ */
+typedef enum http_trust_e /**** Level of trust for credentials @since CUPS 2.0/OS 10.10@ */
{
HTTP_TRUST_OK = 0, /* Credentials are OK/trusted */
HTTP_TRUST_INVALID, /* Credentials are invalid */
@@ -620,7 +620,7 @@ extern void httpSetDefaultField(http_t *http, http_field_t field,
extern http_state_t httpWriteResponse(http_t *http,
http_status_t status) _CUPS_API_1_7;
-/* New in CUPS 2.0 */
+/* New in CUPS 2.0/OS X 10.10 */
extern int httpAddrClose(http_addr_t *addr, int fd) _CUPS_API_2_0;
extern int httpAddrFamily(http_addr_t *addr) _CUPS_API_2_0;
extern int httpCompareCredentials(cups_array_t *cred1, cups_array_t *cred2) _CUPS_API_2_0;
@@ -656,5 +656,5 @@ extern const char *httpURIStatusString(http_uri_status_t status) _CUPS_API_2_0;
#endif /* !_CUPS_HTTP_H_ */
/*
- * End of "$Id: http.h 11850 2014-05-07 23:12:48Z msweet $".
+ * End of "$Id: http.h 12094 2014-08-19 12:15:11Z msweet $".
*/
diff --git a/cups/ipp-support.c b/cups/ipp-support.c
index a94888160d..926be7a5ee 100644
--- a/cups/ipp-support.c
+++ b/cups/ipp-support.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp-support.c 11806 2014-04-09 16:12:27Z msweet $"
+ * "$Id: ipp-support.c 12095 2014-08-19 16:16:06Z msweet $"
*
* Internet Printing Protocol support functions for CUPS.
*
@@ -669,7 +669,14 @@ ippAttributeString(
break;
case IPP_TAG_RESOLUTION :
- if (buffer && bufptr < bufend)
+ if (val->resolution.xres == val->resolution.yres)
+ {
+ if (buffer && bufptr < bufend)
+ bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%d%s", val->resolution.xres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ else
+ bufptr += snprintf(temp, sizeof(temp), "%d%s", val->resolution.xres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ }
+ else if (buffer && bufptr < bufend)
bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%dx%d%s", val->resolution.xres, val->resolution.yres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
else
bufptr += snprintf(temp, sizeof(temp), "%dx%d%s", val->resolution.xres, val->resolution.yres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
@@ -2122,7 +2129,7 @@ ippSetPort(int p) /* I - Port number to use */
/*
* 'ippStateString()' - Return the name corresponding to a state value.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
const char * /* O - State name */
@@ -2256,5 +2263,5 @@ ipp_col_string(ipp_t *col, /* I - Collection attribute */
/*
- * End of "$Id: ipp-support.c 11806 2014-04-09 16:12:27Z msweet $".
+ * End of "$Id: ipp-support.c 12095 2014-08-19 16:16:06Z msweet $".
*/
diff --git a/cups/ipp.c b/cups/ipp.c
index fab3384533..cc5eebcf89 100644
--- a/cups/ipp.c
+++ b/cups/ipp.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp.c 11840 2014-04-29 15:57:26Z msweet $"
+ * "$Id: ipp.c 12093 2014-08-19 12:10:17Z msweet $"
*
* Internet Printing Protocol functions for CUPS.
*
@@ -1728,7 +1728,7 @@ ippCopyAttribute(
/*
* 'ippCopyAttributes()' - Copy attributes from one IPP message to another.
*
- * Zero or more attributes are copied from the source IPP message, @code@ src, to the
+ * Zero or more attributes are copied from the source IPP message, @code src@, to the
* destination IPP message, @code dst@. When @code quickcopy@ is non-zero, a "shallow"
* reference copy of the attribute is created - this should only be done as long as the
* original source IPP message will not be freed for the life of the destination.
@@ -7046,5 +7046,5 @@ ipp_write_file(int *fd, /* I - File descriptor */
/*
- * End of "$Id: ipp.c 11840 2014-04-29 15:57:26Z msweet $".
+ * End of "$Id: ipp.c 12093 2014-08-19 12:10:17Z msweet $".
*/
diff --git a/cups/md5.c b/cups/md5.c
index 5f473cb365..8c87ac7eae 100644
--- a/cups/md5.c
+++ b/cups/md5.c
@@ -1,5 +1,5 @@
/*
- * "$Id: md5.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: md5.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Private MD5 implementation for CUPS.
*
@@ -333,7 +333,7 @@ _cupsMD5Finish(_cups_md5_state_t *pms, unsigned char digest[16])
for (i = 0; i < 8; ++i)
data[i] = (unsigned char)(pms->count[i >> 2] >> ((i & 3) << 3));
/* Pad to 56 bytes mod 64. */
- _cupsMD5Append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
+ _cupsMD5Append(pms, pad, (int)((55 - (pms->count[0] >> 3)) & 63) + 1);
/* Append the length. */
_cupsMD5Append(pms, data, 8);
for (i = 0; i < 16; ++i)
@@ -342,5 +342,5 @@ _cupsMD5Finish(_cups_md5_state_t *pms, unsigned char digest[16])
/*
- * End of "$Id: md5.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: md5.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c
index 7b3a9e5bf6..f72fc9bf01 100644
--- a/cups/ppd-cache.c
+++ b/cups/ppd-cache.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ppd-cache.c 11832 2014-04-24 15:04:00Z msweet $"
+ * "$Id: ppd-cache.c 12124 2014-08-28 15:37:22Z msweet $"
*
* PPD cache implementation for CUPS.
*
@@ -2630,7 +2630,7 @@ pwg_compare_finishings(
_pwg_finishings_t *a, /* I - First finishings value */
_pwg_finishings_t *b) /* I - Second finishings value */
{
- return (b->value - a->value);
+ return ((int)b->value - (int)a->value);
}
@@ -2712,5 +2712,5 @@ pwg_unppdize_name(const char *ppd, /* I - PPD keyword */
/*
- * End of "$Id: ppd-cache.c 11832 2014-04-24 15:04:00Z msweet $".
+ * End of "$Id: ppd-cache.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/cups/sidechannel.c b/cups/sidechannel.c
index 8ecfbfc122..d9517e9dbe 100644
--- a/cups/sidechannel.c
+++ b/cups/sidechannel.c
@@ -1,5 +1,5 @@
/*
- * "$Id: sidechannel.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: sidechannel.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Side-channel API code for CUPS.
*
@@ -490,7 +490,7 @@ cupsSideChannelSNMPWalk(
real_data[real_datalen] = '\0';
real_oidlen = strlen(real_data) + 1;
- real_datalen -= real_oidlen;
+ real_datalen -= (int)real_oidlen;
/*
* Call the callback with the OID and data...
@@ -625,5 +625,5 @@ cupsSideChannelWrite(
/*
- * End of "$Id: sidechannel.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: sidechannel.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/cups/tls-darwin.c b/cups/tls-darwin.c
index 9fa0465dc5..dab7ba9e6c 100644
--- a/cups/tls-darwin.c
+++ b/cups/tls-darwin.c
@@ -1,5 +1,5 @@
/*
- * "$Id: tls-darwin.c 12029 2014-07-15 18:59:26Z msweet $"
+ * "$Id: tls-darwin.c 12094 2014-08-19 12:15:11Z msweet $"
*
* TLS support code for CUPS on OS X.
*
@@ -61,7 +61,7 @@ static OSStatus http_cdsa_write(SSLConnectionRef connection, const void *data,
/*
* 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
@@ -283,7 +283,7 @@ cleanup:
* Note: The server credentials are used by all threads in the running process.
* This function is threadsafe.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
int /* O - 1 on success, 0 on failure */
@@ -452,7 +452,7 @@ _httpCreateCredentials(
/*
* 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
int /* O - 1 if valid, 0 otherwise */
@@ -515,7 +515,7 @@ httpCredentialsAreValidForName(
/*
* 'httpCredentialsGetTrust()' - Return the trust of credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
http_trust_t /* O - Level of trust */
@@ -599,7 +599,7 @@ httpCredentialsGetTrust(
/*
* 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
time_t /* O - Expiration date of credentials */
@@ -624,7 +624,7 @@ httpCredentialsGetExpiration(
/*
* 'httpCredentialsString()' - Return a string representing the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
size_t /* O - Total size of credentials string */
@@ -697,7 +697,7 @@ _httpFreeCredentials(
/*
* 'httpLoadCredentials()' - Load X.509 credentials from a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 0 on success, -1 on error */
@@ -803,7 +803,7 @@ httpLoadCredentials(
/*
* 'httpSaveCredentials()' - Save X.509 credentials to a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - -1 on error, 0 on success */
@@ -1660,5 +1660,5 @@ http_cdsa_write(
/*
- * End of "$Id: tls-darwin.c 12029 2014-07-15 18:59:26Z msweet $".
+ * End of "$Id: tls-darwin.c 12094 2014-08-19 12:15:11Z msweet $".
*/
diff --git a/cups/tls-gnutls.c b/cups/tls-gnutls.c
index c69327226b..5b32a8a675 100644
--- a/cups/tls-gnutls.c
+++ b/cups/tls-gnutls.c
@@ -1,5 +1,5 @@
/*
- * "$Id: tls-gnutls.c 12050 2014-07-18 16:51:12Z msweet $"
+ * "$Id: tls-gnutls.c 12125 2014-08-28 15:49:29Z msweet $"
*
* TLS support code for CUPS using GNU TLS.
*
@@ -51,7 +51,7 @@ static ssize_t http_gnutls_write(gnutls_transport_ptr_t ptr, const void *data,
/*
* 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
@@ -228,7 +228,7 @@ cupsMakeServerCredentials(
* Note: The server credentials are used by all threads in the running process.
* This function is threadsafe.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
@@ -357,7 +357,7 @@ _httpFreeCredentials(
/*
* 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if valid, 0 otherwise */
@@ -383,7 +383,7 @@ httpCredentialsAreValidForName(
/*
* 'httpCredentialsGetTrust()' - Return the trust of credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_trust_t /* O - Level of trust */
@@ -475,7 +475,7 @@ httpCredentialsGetTrust(
/*
* 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
time_t /* O - Expiration date of credentials */
@@ -500,7 +500,7 @@ httpCredentialsGetExpiration(
/*
* 'httpCredentialsString()' - Return a string representing the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Total size of credentials string */
@@ -556,7 +556,7 @@ httpCredentialsString(
/*
* 'httpLoadCredentials()' - Load X.509 credentials from a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 0 on success, -1 on error */
@@ -682,7 +682,7 @@ httpLoadCredentials(
/*
* 'httpSaveCredentials()' - Save X.509 credentials to a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - -1 on error, 0 on success */
@@ -1186,7 +1186,9 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
gnutls_transport_set_ptr(http->tls, (gnutls_transport_ptr_t)http);
gnutls_transport_set_pull_function(http->tls, http_gnutls_read);
+#ifdef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION
gnutls_transport_set_pull_timeout_function(http->tls, (gnutls_pull_timeout_func)httpWait);
+#endif /* HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION */
gnutls_transport_set_push_function(http->tls, http_gnutls_write);
while ((status = gnutls_handshake(http->tls)) != GNUTLS_E_SUCCESS)
@@ -1289,5 +1291,5 @@ _httpTLSWrite(http_t *http, /* I - Connection to server */
/*
- * End of "$Id: tls-gnutls.c 12050 2014-07-18 16:51:12Z msweet $".
+ * End of "$Id: tls-gnutls.c 12125 2014-08-28 15:49:29Z msweet $".
*/
diff --git a/cups/tls-sspi.c b/cups/tls-sspi.c
index 868e6027a7..a676830d14 100644
--- a/cups/tls-sspi.c
+++ b/cups/tls-sspi.c
@@ -1,5 +1,5 @@
/*
- * "$Id: tls-sspi.c 12047 2014-07-18 13:53:34Z msweet $"
+ * "$Id: tls-sspi.c 12094 2014-08-19 12:15:11Z msweet $"
*
* TLS support for CUPS on Windows using SSPI.
*
@@ -66,7 +66,7 @@ static DWORD http_sspi_verify(PCCERT_CONTEXT cert, const char *common_name, DWOR
/*
* 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
@@ -102,7 +102,7 @@ cupsMakeServerCredentials(
* Note: The server credentials are used by all threads in the running process.
* This function is threadsafe.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
@@ -165,7 +165,7 @@ _httpCreateCredentials(
/*
* 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if valid, 0 otherwise */
@@ -230,7 +230,7 @@ httpCredentialsAreValidForName(
/*
* 'httpCredentialsGetTrust()' - Return the trust of credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_trust_t /* O - Level of trust */
@@ -272,7 +272,7 @@ httpCredentialsGetTrust(
/*
* 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
time_t /* O - Expiration date of credentials */
@@ -309,7 +309,7 @@ httpCredentialsGetExpiration(
/*
* 'httpCredentialsString()' - Return a string representing the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Total size of credentials string */
@@ -399,7 +399,7 @@ _httpFreeCredentials(
/*
* 'httpLoadCredentials()' - Load X.509 credentials from a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 0 on success, -1 on error */
@@ -523,7 +523,7 @@ cleanup:
/*
* 'httpSaveCredentials()' - Save X.509 credentials to a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - -1 on error, 0 on success */
@@ -2359,5 +2359,5 @@ http_sspi_verify(
/*
- * End of "$Id: tls-sspi.c 12047 2014-07-18 13:53:34Z msweet $".
+ * End of "$Id: tls-sspi.c 12094 2014-08-19 12:15:11Z msweet $".
*/
diff --git a/cups/tls.c b/cups/tls.c
index e7937a07fe..14b0260ed1 100644
--- a/cups/tls.c
+++ b/cups/tls.c
@@ -1,5 +1,5 @@
/*
- * "$Id: tls.c 11841 2014-04-29 16:39:25Z msweet $"
+ * "$Id: tls.c 12136 2014-08-29 15:19:40Z msweet $"
*
* TLS routines for CUPS.
*
@@ -46,12 +46,67 @@
# include "tls-gnutls.c"
# elif defined(HAVE_CDSASSL)
# include "tls-darwin.c"
-# else
+# elif defined(HAVE_SSPISSL)
# include "tls-sspi.c"
# endif /* HAVE_GNUTLS */
+#else
+/* Stubs for when TLS is not supported/available */
+int
+httpCopyCredentials(http_t *http, cups_array_t **credentials)
+{
+ (void)http;
+ if (credentials)
+ *credentials = NULL;
+ return (-1);
+}
+int
+httpCredentialsAreValidForName(cups_array_t *credentials, const char *common_name)
+{
+ (void)credentials;
+ (void)common_name;
+ return (1);
+}
+time_t
+httpCredentialsGetExpiration(cups_array_t *credentials)
+{
+ (void)credentials;
+ return (INT_MAX);
+}
+http_trust_t
+httpCredentialsGetTrust(cups_array_t *credentials, const char *common_name)
+{
+ (void)credentials;
+ (void)common_name;
+ return (HTTP_TRUST_OK);
+}
+size_t
+httpCredentialsString(cups_array_t *credentials, char *buffer, size_t bufsize)
+{
+ (void)credentials;
+ (void)bufsize;
+ if (buffer)
+ *buffer = '\0';
+ return (0);
+}
+int
+httpLoadCredentials(const char *path, cups_array_t **credentials, const char *common_name)
+{
+ (void)path;
+ (void)credentials;
+ (void)common_name;
+ return (-1);
+}
+int
+httpSaveCredentials(const char *path, cups_array_t *credentials, const char *common_name)
+{
+ (void)path;
+ (void)credentials;
+ (void)common_name;
+ return (-1);
+}
#endif /* HAVE_SSL */
/*
- * End of "$Id: tls.c 11841 2014-04-29 16:39:25Z msweet $".
+ * End of "$Id: tls.c 12136 2014-08-29 15:19:40Z msweet $".
*/
diff --git a/cups/usersys.c b/cups/usersys.c
index eef1b311e0..8b00cb8cd7 100644
--- a/cups/usersys.c
+++ b/cups/usersys.c
@@ -1,5 +1,5 @@
/*
- * "$Id: usersys.c 11908 2014-06-09 18:57:44Z msweet $"
+ * "$Id: usersys.c 12124 2014-08-28 15:37:22Z msweet $"
*
* User, system, and password routines for CUPS.
*
@@ -211,8 +211,10 @@ cupsSetCredentials(
if (cupsArrayCount(credentials) < 1)
return (-1);
+#ifdef HAVE_SSL
_httpFreeCredentials(cg->tls_credentials);
cg->tls_credentials = _httpCreateCredentials(credentials);
+#endif /* HAVE_SSL */
return (cg->tls_credentials ? 0 : -1);
}
@@ -1127,5 +1129,5 @@ cups_read_client_conf(
/*
- * End of "$Id: usersys.c 11908 2014-06-09 18:57:44Z msweet $".
+ * End of "$Id: usersys.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/doc/help/api-cups.html b/doc/help/api-cups.html
index dd9a4fb12d..19f7ccb908 100644
--- a/doc/help/api-cups.html
+++ b/doc/help/api-cups.html
@@ -2097,7 +2097,7 @@ example, passing CUPS_MEDIA_FLAGS_BORDERLESS
will return the defaul
borderless size, typically US Letter or A4, but sometimes 4x6 photo media.
-
+
Get a destination associated with a URI.
cups_dest_t *cupsGetDestWithURI (
@@ -2525,7 +2525,7 @@ cups_lang_t *cupsLangGet (
Return Value
Language data
-
+
Get the localized string for a destination media
size.
diff --git a/doc/help/api-filter.html b/doc/help/api-filter.html
index 416e2fbab4..1ab935b51e 100644
--- a/doc/help/api-filter.html
+++ b/doc/help/api-filter.html
@@ -408,6 +408,7 @@ div.contents ul.subcontents li {
Communicating with Filters
Doing SNMP Queries with Network Printers
+Sandboxing on OS X
Functions
- cupsBackChannelRead
- cupsBackChannelWrite
@@ -442,7 +443,7 @@ div.contents ul.subcontents li {
Filter and backend programming introduction for CUPS.
- Copyright 2007-2013 by Apple Inc.
+ Copyright 2007-2014 by Apple Inc.
Copyright 1997-2006 by Easy Software Products, all rights reserved.
These coded instructions, statements, and computer programs are the
@@ -520,7 +521,7 @@ directory to write to.
In addition, some operating systems provide additional security mechanisms
that further limit file system access, even for backends running as root. On
-OS X, for example, no backend may write to a user's home directory.
+OS X, for example, no backend may write to a user's home directory. See the Sandboxing on OS X section for more information.
@@ -1291,6 +1292,28 @@ void *my_data;
cupsSNMPSideChannelWalk(".1.3.6.1.2.1.43", 5.0, my_callback, my_data);
+
+
+
+Starting with OS X 10.6, filters and backends are run inside a security "sandbox" which further limits (beyond the normal UNIX user/group permissions) what a filter or backend can do. This helps to both secure the printing system from malicious software and enforce the functional separation of components in the CUPS filter chain. What follows is a list of actions that are explicitly allowed for all filters and backends:
+
+
+
+ - Reading of files: pursuant to normal UNIX file permissions, filters and backends can read files for the current job from the /private/var/spool/cups directory and other files on mounted filesystems except for user home directories under /Users.
+
+ - Writing of files: pursuant to normal UNIX file permissions, filters and backends can read/write files to the cache directory specified by the
CUPS_CACHEDIR
environment variable, to the state directory specified by the CUPS_STATEDIR
environment variable, to the temporary directory specified by the TMPDIR
environment variable, and under the /private/var/db, /private/var/folders, /private/var/lib, /private/var/mysql, /private/var/run, /private/var/spool (except /private/var/spool/cups), /Library/Application Support, /Library/Caches, /Library/Logs, /Library/Preferences, /Library/WebServer, and /Users/Shared directories.
+
+ - Execution of programs: pursuant to normal UNIX file permissions, filters and backends can execute any program not located under the /Users directory. Child processes inherit the sandbox and are subject to the same restrictions as the parent.
+
+ - Bluetooth and USB: backends can access Bluetooth and USB printers through IOKit. Filters cannot access Bluetooth and USB printers directly.
+
+ - Network: filters and backends can access UNIX domain sockets under the /private/tmp, /private/var/run, and /private/var/tmp directories. Backends can also create IPv4 and IPv6 TCP (outgoing) and UDP (incoming and outgoing) socket, and bind to local source ports. Filters cannot directly create IPv4 and IPv6 TCP or UDP sockets.
+
+ - Notifications: filters and backends can send notifications via the Darwin
notify_post()
API.
+
+
+
+Note: The sandbox profile used in CUPS 2.0 still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.
Read data from the backchannel.
diff --git a/doc/help/api-httpipp.html b/doc/help/api-httpipp.html
index 083794489d..ef21b674c1 100644
--- a/doc/help/api-httpipp.html
+++ b/doc/help/api-httpipp.html
@@ -1490,7 +1490,7 @@ int httpAddrAny (
Return Value
1 if "any", 0 otherwise
-
+
Close a socket created by httpAddrConnect
or
httpAddrListen
.
@@ -1820,7 +1820,7 @@ void httpClose (
- http
- HTTP connection
-
+
Compare two sets of X.509 credentials.
int httpCompareCredentials (
@@ -2107,7 +2107,7 @@ int httpGet (
Return Value
Status of call (0 = success)
-
+
Get the most recent activity for a connection.
time_t httpGetActivity (
@@ -2124,7 +2124,7 @@ time_t httpGetActivity (
The return value is the UNIX time of the last read or write.
-
+
Get the address of the connected peer of a connection.
http_addr_t *httpGetAddress (
@@ -2255,7 +2255,7 @@ time_t httpGetDateTime (
Return Value
UNIX time
-
+
Get the current encryption mode of a connection.
http_encryption_t httpGetEncryption (
@@ -2362,7 +2362,7 @@ Otherwise, return the FQDN for the local system using both gethostname()
and gethostbyname() to get the local hostname with domain.
-
+
Get the current Keep-Alive state of the connection.
http_keepalive_t httpGetKeepAlive (
@@ -2413,7 +2413,7 @@ off_t httpGetLength2 (
content larger than 2^31 - 1.
-
+
Get the number of bytes that are buffered for writing.
size_t httpGetPending (
@@ -2426,7 +2426,7 @@ size_t httpGetPending (
Return Value
Number of bytes buffered
-
+
Get the number of bytes that can be read without blocking.
size_t httpGetReady (
@@ -2439,7 +2439,7 @@ size_t httpGetReady (
Return Value
Number of bytes available
-
+
Get the number of remaining bytes in the message
body or current chunk.
@@ -2584,7 +2584,7 @@ int httpHead (
default HTTP proxy (if any).
void httpInitialize (void);
-
+
Report whether a message body is chunked.
int httpIsChunked (
@@ -2602,7 +2602,7 @@ int httpIsChunked (
variable-length chunks.
-
+
Report whether a connection is encrypted.
int httpIsEncrypted (
@@ -2856,7 +2856,7 @@ int httpReconnect2 (
Return Value
0 on success, non-zero on failure
-
+
Resolve the hostname of the HTTP connection
address.
@@ -3109,7 +3109,7 @@ void httpSetField (
- value
- Value
-
+
Set the current Keep-Alive state of a connection.
void httpSetKeepAlive (
@@ -3163,7 +3163,7 @@ must be greater than 0
data pointer and must return 1 to continue or 0 to error (time) out.
-
+
Shutdown one side of an HTTP connection.
void httpShutdown (
@@ -3174,7 +3174,7 @@ void httpShutdown (
- http
- HTTP connection
-
+
Return the string describing a HTTP state value.
const char *httpStateString (
@@ -3219,7 +3219,7 @@ int httpTrace (
Return Value
Status of call (0 = success)
-
+
Return a string describing a URI status code.
const char *httpURIStatusString (
@@ -4140,7 +4140,7 @@ int ippCopyAttributes (
Return Value
1 on success, 0 on error
Discussion
-Zero or more attributes are copied from the source IPP message, @code@ src, to the
+
Zero or more attributes are copied from the source IPP message, src
, to the
destination IPP message, dst
. When quickcopy
is non-zero, a "shallow"
reference copy of the attribute is created - this should only be done as long as the
original source IPP message will not be freed for the life of the destination.
@@ -5393,7 +5393,7 @@ the ippNew
, ip
The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2.
-
+
Return the name corresponding to a state value.
const char *ippStateString (
@@ -5616,7 +5616,7 @@ typedef struct _http_s http_t;
typedef int (*http_timeout_cb_t)(http_t *http, void *user_data);
-
+
Level of trust for credentials
typedef enum http_trust_e http_trust_t;
@@ -6018,7 +6018,7 @@ are server-oriented...
- HTTP_STATUS_USE_PROXY
- Must use a proxy to access this URI
-
+
Level of trust for credentials
Constants
diff --git a/doc/help/man-ipptool.html b/doc/help/man-ipptool.html
index fc6ac1b702..aba14e5510 100644
--- a/doc/help/man-ipptool.html
+++ b/doc/help/man-ipptool.html
@@ -71,9 +71,12 @@ ipptool - perform internet printing protocol requests
ipptool
sends IPP requests to the specified
printer-uri
-and tests and/or displays the results. Each named
+and tests and/or displays the results.
+Each named
testfile
-defines one or more requests, including the expected response status, attributes, and values. Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed. The
+defines one or more requests, including the expected response status, attributes, and values.
+Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed.
+The
testfile
format is described in
ipptoolfile(5).
@@ -102,7 +105,8 @@ must connect to the printer or server using IPv4.
ipptool
must connect to the printer or server using IPv6.
- -C
-
- Specifies that requests should be sent using the HTTP/1.1 "Transfer-Encoding: chunked" header, which is required for conformance by all versions of IPP. The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
+
- Specifies that requests should be sent using the HTTP/1.1 "Transfer-Encoding: chunked" header, which is required for conformance by all versions of IPP.
+The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
- -E
- Forces TLS encryption when connecting to the server using the HTTP "Upgrade" header.
- -I
@@ -110,9 +114,11 @@ must connect to the printer or server using IPv6.
ipptool
will continue past errors.
- -L
-
- Specifies that requests should be sent using the HTTP/1.0 "Content-Length:" header, which is required for conformance by all versions of IPP. The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
+
- Specifies that requests should be sent using the HTTP/1.0 "Content-Length:" header, which is required for conformance by all versions of IPP.
+The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
- -P filename.plist
-
- Specifies that the test results should be written to the named XML (Apple plist) file in addition to the plain text report. This option is incompatible with the -i (interval) and -n (repeat-count) options.
+
- Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (-t).
+This option is incompatible with the -i (interval) and -n (repeat-count) options.
- -S
- Forces (dedicated) TLS encryption when connecting to the server.
- -T seconds
@@ -120,7 +126,8 @@ will continue past errors.
- -V version
- Specifies the default IPP version to use: 1.0, 1.1, 2.0, 2.1, or 2.2. If not specified, version 1.1 is used.
- -X
-
- Specifies that XML (Apple plist) output is desired instead of the plain text report. This option is incompatible with the -i (interval) and -n (repeat-count) options.
+
- Specifies that XML (Apple plist) output is desired instead of the plain text report.
+This option is incompatible with the -i (interval) and -n (repeat-count) options.
- -c
- Specifies that CSV (comma-separated values) output is desired instead of the plain text output.
- -d name=value
@@ -130,17 +137,22 @@ will continue past errors.
- -i seconds
- Specifies that the (last)
testfile
-should be repeated at the specified interval. This option is incompatible with the -X (XML plist output) option.
+should be repeated at the specified interval.
+This option is incompatible with the -X (XML plist output) option.
- -l
- Specifies that plain text output is desired.
- -n repeat-count
- Specifies that the (last)
testfile
-should be repeated the specified number of times. This option is incompatible with the -X (XML plist output) option.
+should be repeated the specified number of times.
+This option is incompatible with the -X (XML plist output) option.
+
- -q
+
- Be quiet and produce no output.
- -t
- Specifies that CUPS test report output is desired instead of the plain text output.
- -v
-
- Specifies that all request and response attributes should be output in CUPS test mode (-t). This is the default for XML output.
+
- Specifies that all request and response attributes should be output in CUPS test mode (-t).
+This is the default for XML output.
The
diff --git a/filter/raster.c b/filter/raster.c
index 8905a83d99..827215c686 100644
--- a/filter/raster.c
+++ b/filter/raster.c
@@ -1,5 +1,5 @@
/*
- * "$Id: raster.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: raster.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Raster file routines for CUPS.
*
@@ -378,7 +378,7 @@ cupsRasterReadPixels(cups_raster_t *r, /* I - Raster stream */
if (!cups_raster_read(r, &byte, 1))
return (0);
- r->count = byte + 1;
+ r->count = (unsigned)byte + 1;
if (r->count > 1)
ptr = r->pixels;
@@ -418,7 +418,7 @@ cupsRasterReadPixels(cups_raster_t *r, /* I - Raster stream */
* Repeat the next N bytes...
*/
- count = (byte + 1) * r->bpp;
+ count = ((unsigned)byte + 1) * r->bpp;
if (count > (unsigned)bytes)
count = (unsigned)bytes;
@@ -1448,5 +1448,5 @@ cups_write_fd(void *ctx, /* I - File descriptor pointer */
/*
- * End of "$Id: raster.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: raster.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/filter/rastertoepson.c b/filter/rastertoepson.c
index 908ec48527..7d4cacd33b 100644
--- a/filter/rastertoepson.c
+++ b/filter/rastertoepson.c
@@ -1,5 +1,5 @@
/*
- * "$Id: rastertoepson.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: rastertoepson.c 12124 2014-08-28 15:37:22Z msweet $"
*
* EPSON ESC/P and ESC/P2 filter for CUPS.
*
@@ -201,14 +201,14 @@ StartPage(
if (Model < EPSON_ICOLOR)
{
pwrite("\033(U\001\000", 5); /* Resolution/units */
- putchar(3600 / header->HWResolution[1]);
+ putchar((int)(3600 / header->HWResolution[1]));
}
else
{
pwrite("\033(U\005\000", 5);
- putchar(1440 / header->HWResolution[1]);
- putchar(1440 / header->HWResolution[1]);
- putchar(1440 / header->HWResolution[0]);
+ putchar((int)(1440 / header->HWResolution[1]));
+ putchar((int)(1440 / header->HWResolution[1]));
+ putchar((int)(1440 / header->HWResolution[0]));
putchar(0xa0); /* n/1440ths... */
putchar(0x05);
}
@@ -811,8 +811,8 @@ OutputRows(
{
putchar(0x1b);
putchar('$');
- putchar(i & 255);
- putchar(i >> 8);
+ putchar((int)(i & 255));
+ putchar((int)(i >> 8));
}
/*
@@ -853,8 +853,8 @@ OutputRows(
}
n = dot_count / DotBytes;
- putchar(n & 255);
- putchar(n / 256);
+ putchar((int)(n & 255));
+ putchar((int)(n / 256));
/*
* Write the graphics data...
@@ -883,8 +883,8 @@ OutputRows(
{
putchar(0x1b);
putchar('$');
- putchar(i & 255);
- putchar(i >> 8);
+ putchar((int)(i & 255));
+ putchar((int)(i >> 8));
}
if (header->HWResolution[0] == 120)
@@ -893,8 +893,8 @@ OutputRows(
printf("\033*\003"); /* Select bit image */
n = (unsigned)dot_count / DotBytes;
- putchar(n & 255);
- putchar(n / 256);
+ putchar((int)(n & 255));
+ putchar((int)(n / 256));
for (n = dot_count / 2, ptr = dot_ptr + 1; n > 0; n --, ptr += 2)
{
@@ -1138,5 +1138,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * End of "$Id: rastertoepson.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: rastertoepson.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/locale/cups.pot b/locale/cups.pot
index 40b972896e..591989b866 100644
--- a/locale/cups.pot
+++ b/locale/cups.pot
@@ -30,7 +30,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -39,12 +39,12 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: systemv/lpstat.c:1864 systemv/lpstat.c:1987
+#: systemv/lpstat.c:1867 systemv/lpstat.c:1990
msgid "\t\t(all)"
msgstr ""
-#: systemv/lpstat.c:1867 systemv/lpstat.c:1870 systemv/lpstat.c:1990
-#: systemv/lpstat.c:1993
+#: systemv/lpstat.c:1870 systemv/lpstat.c:1873 systemv/lpstat.c:1993
+#: systemv/lpstat.c:1996
msgid "\t\t(none)"
msgstr ""
@@ -58,99 +58,99 @@ msgstr ""
msgid "\t%s"
msgstr ""
-#: systemv/lpstat.c:1845 systemv/lpstat.c:1968
+#: systemv/lpstat.c:1848 systemv/lpstat.c:1971
msgid "\tAfter fault: continue"
msgstr ""
-#: systemv/lpstat.c:1468 systemv/lpstat.c:1814 systemv/lpstat.c:1938
+#: systemv/lpstat.c:1471 systemv/lpstat.c:1817 systemv/lpstat.c:1941
#, c-format
msgid "\tAlerts: %s"
msgstr ""
-#: systemv/lpstat.c:1868 systemv/lpstat.c:1991
+#: systemv/lpstat.c:1871 systemv/lpstat.c:1994
msgid "\tBanner required"
msgstr ""
-#: systemv/lpstat.c:1869 systemv/lpstat.c:1992
+#: systemv/lpstat.c:1872 systemv/lpstat.c:1995
msgid "\tCharset sets:"
msgstr ""
-#: systemv/lpstat.c:1833 systemv/lpstat.c:1956
+#: systemv/lpstat.c:1836 systemv/lpstat.c:1959
msgid "\tConnection: direct"
msgstr ""
-#: systemv/lpstat.c:1824 systemv/lpstat.c:1948
+#: systemv/lpstat.c:1827 systemv/lpstat.c:1951
msgid "\tConnection: remote"
msgstr ""
-#: systemv/lpstat.c:1790 systemv/lpstat.c:1914
+#: systemv/lpstat.c:1793 systemv/lpstat.c:1917
msgid "\tContent types: any"
msgstr ""
-#: systemv/lpstat.c:1872 systemv/lpstat.c:1995
+#: systemv/lpstat.c:1875 systemv/lpstat.c:1998
msgid "\tDefault page size:"
msgstr ""
-#: systemv/lpstat.c:1871 systemv/lpstat.c:1994
+#: systemv/lpstat.c:1874 systemv/lpstat.c:1997
msgid "\tDefault pitch:"
msgstr ""
-#: systemv/lpstat.c:1873 systemv/lpstat.c:1996
+#: systemv/lpstat.c:1876 systemv/lpstat.c:1999
msgid "\tDefault port settings:"
msgstr ""
-#: systemv/lpstat.c:1796 systemv/lpstat.c:1920
+#: systemv/lpstat.c:1799 systemv/lpstat.c:1923
#, c-format
msgid "\tDescription: %s"
msgstr ""
-#: systemv/lpstat.c:1789 systemv/lpstat.c:1913
+#: systemv/lpstat.c:1792 systemv/lpstat.c:1916
msgid "\tForm mounted:"
msgstr ""
-#: systemv/lpstat.c:1866 systemv/lpstat.c:1989
+#: systemv/lpstat.c:1869 systemv/lpstat.c:1992
msgid "\tForms allowed:"
msgstr ""
-#: systemv/lpstat.c:1828 systemv/lpstat.c:1952
+#: systemv/lpstat.c:1831 systemv/lpstat.c:1955
#, c-format
msgid "\tInterface: %s.ppd"
msgstr ""
-#: systemv/lpstat.c:1837 systemv/lpstat.c:1960
+#: systemv/lpstat.c:1840 systemv/lpstat.c:1963
#, c-format
msgid "\tInterface: %s/interfaces/%s"
msgstr ""
-#: systemv/lpstat.c:1841 systemv/lpstat.c:1964
+#: systemv/lpstat.c:1844 systemv/lpstat.c:1967
#, c-format
msgid "\tInterface: %s/ppd/%s.ppd"
msgstr ""
-#: systemv/lpstat.c:1819 systemv/lpstat.c:1943
+#: systemv/lpstat.c:1822 systemv/lpstat.c:1946
#, c-format
msgid "\tLocation: %s"
msgstr ""
-#: systemv/lpstat.c:1844 systemv/lpstat.c:1967
+#: systemv/lpstat.c:1847 systemv/lpstat.c:1970
msgid "\tOn fault: no alert"
msgstr ""
-#: systemv/lpstat.c:1791 systemv/lpstat.c:1915
+#: systemv/lpstat.c:1794 systemv/lpstat.c:1918
msgid "\tPrinter types: unknown"
msgstr ""
-#: systemv/lpstat.c:1451
+#: systemv/lpstat.c:1454
#, c-format
msgid "\tStatus: %s"
msgstr ""
-#: systemv/lpstat.c:1849 systemv/lpstat.c:1863 systemv/lpstat.c:1972
-#: systemv/lpstat.c:1986
+#: systemv/lpstat.c:1852 systemv/lpstat.c:1866 systemv/lpstat.c:1975
+#: systemv/lpstat.c:1989
msgid "\tUsers allowed:"
msgstr ""
-#: systemv/lpstat.c:1856 systemv/lpstat.c:1979
+#: systemv/lpstat.c:1859 systemv/lpstat.c:1982
msgid "\tUsers denied:"
msgstr ""
@@ -175,7 +175,7 @@ msgstr ""
msgid "\tprinting is enabled"
msgstr ""
-#: systemv/lpstat.c:1471
+#: systemv/lpstat.c:1474
#, c-format
msgid "\tqueued for %s"
msgstr ""
@@ -188,7 +188,7 @@ msgstr ""
msgid "\tqueuing is enabled"
msgstr ""
-#: systemv/lpstat.c:1782 systemv/lpstat.c:1906
+#: systemv/lpstat.c:1785 systemv/lpstat.c:1909
msgid "\treason unknown"
msgstr ""
@@ -975,11 +975,11 @@ msgstr ""
msgid " Warning: obsolete DSC version %.1f in file."
msgstr ""
-#: test/ippfind.c:2758
+#: test/ippfind.c:2788
msgid " ! expression Unary NOT of expression."
msgstr ""
-#: test/ippfind.c:2757
+#: test/ippfind.c:2787
msgid " ( expressions ) Group expressions."
msgstr ""
@@ -1011,25 +1011,29 @@ msgstr ""
msgid " --crlf End lines with CR + LF (Windows)."
msgstr ""
-#: test/ippfind.c:2739
+#: test/ippfind.c:2769
msgid " --domain regex Match domain to regular expression."
msgstr ""
-#: test/ippfind.c:2740
+#: test/ippfind.c:2770
msgid ""
" --exec utility [argument ...] ;\n"
" Execute program if true."
msgstr ""
-#: test/ippfind.c:2760
+#: test/ippfind.c:2790
msgid " --false Always false."
msgstr ""
-#: test/ippfind.c:2722
+#: test/ipptool.c:4806
+msgid " --help Show help."
+msgstr ""
+
+#: test/ippfind.c:2752
msgid " --help Show this help."
msgstr ""
-#: test/ippfind.c:2742
+#: test/ippfind.c:2772
msgid " --host regex Match hostname to regular expression."
msgstr ""
@@ -1041,75 +1045,85 @@ msgstr ""
msgid " --list-filters List filters that will be used."
msgstr ""
-#: test/ippfind.c:2744
+#: test/ippfind.c:2774
msgid " --local True if service is local."
msgstr ""
-#: test/ippfind.c:2743
+#: test/ippfind.c:2773
msgid " --ls List attributes."
msgstr ""
-#: test/ippfind.c:2745
+#: test/ippfind.c:2775
msgid " --name regex Match service name to regular expression."
msgstr ""
-#: test/ippfind.c:2759
+#: test/ippfind.c:2789
msgid " --not expression Unary NOT of expression."
msgstr ""
-#: test/ippfind.c:2746
+#: test/ippfind.c:2776
msgid " --path regex Match resource path to regular expression."
msgstr ""
-#: test/ippfind.c:2747
+#: test/ippfind.c:2777
msgid " --port number[-number] Match port to number or range."
msgstr ""
-#: test/ippfind.c:2748
+#: test/ippfind.c:2778
msgid " --print Print URI if true."
msgstr ""
-#: test/ippfind.c:2749
+#: test/ippfind.c:2779
msgid " --print-name Print service name if true."
msgstr ""
-#: test/ippfind.c:2750
+#: test/ippfind.c:2780
msgid " --quiet Quietly report match via exit code."
msgstr ""
-#: test/ippfind.c:2751
+#: test/ippfind.c:2781
msgid " --remote True if service is remote."
msgstr ""
-#: test/ippfind.c:2761
+#: test/ipptool.c:4807
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
+#: test/ippfind.c:2791
msgid " --true Always true."
msgstr ""
-#: test/ippfind.c:2752
+#: test/ippfind.c:2782
msgid " --txt key True if the TXT record contains the key."
msgstr ""
-#: test/ippfind.c:2753
+#: test/ippfind.c:2783
msgid " --txt-* regex Match TXT record key to regular expression."
msgstr ""
-#: test/ippfind.c:2754
+#: test/ippfind.c:2784
msgid " --uri regex Match URI to regular expression."
msgstr ""
-#: test/ippfind.c:2723
+#: test/ippfind.c:2753
msgid " --version Show program version."
msgstr ""
-#: test/ippfind.c:2716 test/ipptool.c:4714
+#: test/ipptool.c:4809
+msgid " --version Show version."
+msgstr ""
+
+#: test/ippfind.c:2746 test/ipptool.c:4810
msgid " -4 Connect using IPv4."
msgstr ""
-#: test/ippfind.c:2717 test/ipptool.c:4715
+#: test/ippfind.c:2747 test/ipptool.c:4811
msgid " -6 Connect using IPv6."
msgstr ""
-#: test/ipptool.c:4716
+#: test/ipptool.c:4812
msgid " -C Send requests using chunking (default)."
msgstr ""
@@ -1125,11 +1139,11 @@ msgstr ""
msgid " -E Encrypt the connection."
msgstr ""
-#: test/ipptool.c:4718
+#: test/ipptool.c:4814
msgid " -E Test with HTTP Upgrade to TLS."
msgstr ""
-#: scheduler/main.c:2161
+#: scheduler/main.c:2149
msgid " -F Run in the foreground but detach from console."
msgstr ""
@@ -1137,7 +1151,7 @@ msgstr ""
msgid " -H samba-server Use the named SAMBA server."
msgstr ""
-#: test/ipptool.c:4720
+#: test/ipptool.c:4816
msgid " -I Ignore errors."
msgstr ""
@@ -1149,15 +1163,19 @@ msgstr ""
msgid " -I {filename,filters,none,profiles}"
msgstr ""
-#: test/ipptool.c:4721
+#: test/ipptool.c:4817
msgid " -L Send requests using content-length."
msgstr ""
+#: test/ipptool.c:4819
+msgid " -P filename.plist Produce XML plist to a file and test report to standard output."
+msgstr ""
+
#: scheduler/cupsfilter.c:1485
msgid " -P filename.ppd Set PPD file."
msgstr ""
-#: test/ippfind.c:2726
+#: test/ippfind.c:2756
msgid " -P number[-number] Match port to number or range."
msgstr ""
@@ -1165,15 +1183,15 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr ""
-#: test/ipptool.c:4723
+#: test/ipptool.c:4820
msgid " -S Test with SSL encryption."
msgstr ""
-#: test/ippfind.c:2718
+#: test/ippfind.c:2748
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
-#: test/ipptool.c:4725
+#: test/ipptool.c:4822
msgid " -T seconds Set the receive/send timeout in seconds."
msgstr ""
@@ -1181,7 +1199,7 @@ msgstr ""
msgid " -U username Specify username."
msgstr ""
-#: test/ippfind.c:2720 test/ipptool.c:4727
+#: test/ippfind.c:2750 test/ipptool.c:4824
msgid " -V version Set default IPP version."
msgstr ""
@@ -1189,7 +1207,7 @@ msgstr ""
msgid " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}"
msgstr ""
-#: test/ipptool.c:4729
+#: test/ipptool.c:4826
msgid " -X Produce XML plist instead of plain text."
msgstr ""
@@ -1201,6 +1219,10 @@ msgstr ""
msgid " -a Export all printers."
msgstr ""
+#: test/ipptool.c:4828
+msgid " -c Produce CSV output."
+msgstr ""
+
#: ppdc/ppdc.cxx:437
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
@@ -1209,7 +1231,7 @@ msgstr ""
msgid " -c cups-files.conf Set cups-files.conf file to use."
msgstr ""
-#: scheduler/main.c:2159
+#: scheduler/main.c:2147
msgid " -c cupsd.conf Set cupsd.conf file to use."
msgstr ""
@@ -1217,7 +1239,7 @@ msgstr ""
msgid " -d domain Browse/resolve in specified domain."
msgstr ""
-#: test/ipptool.c:4731
+#: test/ipptool.c:4829
msgid " -d name=value Set named variable to value."
msgstr ""
@@ -1229,7 +1251,7 @@ msgstr ""
msgid " -d printer Use the named printer."
msgstr ""
-#: test/ippfind.c:2727
+#: test/ippfind.c:2757
msgid " -d regex Match domain to regular expression."
msgstr ""
@@ -1237,19 +1259,19 @@ msgstr ""
msgid " -e Use every filter from the PPD file."
msgstr ""
-#: scheduler/main.c:2160
+#: scheduler/main.c:2148
msgid " -f Run in the foreground."
msgstr ""
-#: test/ipptool.c:4733
+#: test/ipptool.c:4831
msgid " -f filename Set default request filename."
msgstr ""
-#: scheduler/main.c:2163
+#: scheduler/main.c:2151
msgid " -h Show this usage message."
msgstr ""
-#: test/ippfind.c:2728
+#: test/ippfind.c:2758
msgid " -h regex Match hostname to regular expression."
msgstr ""
@@ -1261,7 +1283,7 @@ msgstr ""
msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
msgstr ""
-#: test/ipptool.c:4735
+#: test/ipptool.c:4833
msgid " -i seconds Repeat the last file with the given time interval."
msgstr ""
@@ -1269,11 +1291,15 @@ msgstr ""
msgid " -j job-id[,N] Filter file N from the specified job (default is file 1)."
msgstr ""
-#: test/ippfind.c:2729
+#: test/ippfind.c:2759
msgid " -l List attributes."
msgstr ""
-#: scheduler/main.c:2164
+#: test/ipptool.c:4835
+msgid " -l Produce plain text output."
+msgstr ""
+
+#: scheduler/main.c:2152
msgid " -l Run cupsd on demand."
msgstr ""
@@ -1293,11 +1319,11 @@ msgstr ""
msgid " -n copies Set number of copies."
msgstr ""
-#: test/ipptool.c:4737
+#: test/ipptool.c:4836
msgid " -n count Repeat the last file the given number of times."
msgstr ""
-#: test/ippfind.c:2730
+#: test/ippfind.c:2760
msgid " -n regex Match service name to regular expression."
msgstr ""
@@ -1313,7 +1339,7 @@ msgstr ""
msgid " -o name=value Set option(s)."
msgstr ""
-#: test/ippfind.c:2731
+#: test/ippfind.c:2761
msgid " -p Print URI if true."
msgstr ""
@@ -1325,15 +1351,15 @@ msgstr ""
msgid " -p program Run specified program for each service."
msgstr ""
-#: test/ippfind.c:2732
+#: test/ippfind.c:2762
msgid " -q Quietly report match via exit code."
msgstr ""
-#: systemv/cupstestppd.c:3826 test/ipptool.c:4739
+#: systemv/cupstestppd.c:3826 test/ipptool.c:4838
msgid " -q Run silently."
msgstr ""
-#: test/ippfind.c:2733
+#: test/ippfind.c:2763
msgid " -r True if service is remote."
msgstr ""
@@ -1341,11 +1367,11 @@ msgstr ""
msgid " -r Use 'relaxed' open mode."
msgstr ""
-#: test/ippfind.c:2734
+#: test/ippfind.c:2764
msgid " -s Print service name if true."
msgstr ""
-#: test/ipptool.c:4740
+#: test/ipptool.c:4839
msgid " -t Produce a test report."
msgstr ""
@@ -1353,11 +1379,11 @@ msgstr ""
msgid " -t Test PPDs instead of generating them."
msgstr ""
-#: scheduler/main.c:2165
+#: scheduler/main.c:2153
msgid " -t Test the configuration file."
msgstr ""
-#: test/ippfind.c:2735
+#: test/ippfind.c:2765
msgid " -t key True if the TXT record contains the key."
msgstr ""
@@ -1373,11 +1399,11 @@ msgstr ""
msgid " -u Remove the PPD file when finished."
msgstr ""
-#: test/ippfind.c:2736
+#: test/ippfind.c:2766
msgid " -u regex Match URI to regular expression."
msgstr ""
-#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4741
+#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4840
#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:259
msgid " -v Be verbose."
msgstr ""
@@ -1386,7 +1412,7 @@ msgstr ""
msgid " -vv Be very verbose."
msgstr ""
-#: test/ippfind.c:2737
+#: test/ippfind.c:2767
msgid ""
" -x utility [argument ...] ;\n"
" Execute program if true."
@@ -1396,89 +1422,89 @@ msgstr ""
msgid " -z Compress PPD files using GNU zip."
msgstr ""
-#: test/ippfind.c:2780
+#: test/ippfind.c:2810
msgid " IPPFIND_SERVICE_DOMAIN Domain name"
msgstr ""
-#: test/ippfind.c:2781
+#: test/ippfind.c:2811
msgid ""
" IPPFIND_SERVICE_HOSTNAME\n"
" Fully-qualified domain name"
msgstr ""
-#: test/ippfind.c:2783
+#: test/ippfind.c:2813
msgid " IPPFIND_SERVICE_NAME Service instance name"
msgstr ""
-#: test/ippfind.c:2784
+#: test/ippfind.c:2814
msgid " IPPFIND_SERVICE_PORT Port number"
msgstr ""
-#: test/ippfind.c:2785
+#: test/ippfind.c:2815
msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
msgstr ""
-#: test/ippfind.c:2786
+#: test/ippfind.c:2816
msgid " IPPFIND_SERVICE_SCHEME URI scheme"
msgstr ""
-#: test/ippfind.c:2787
+#: test/ippfind.c:2817
msgid " IPPFIND_SERVICE_URI URI"
msgstr ""
-#: test/ippfind.c:2788
+#: test/ippfind.c:2818
msgid " IPPFIND_TXT_* Value of TXT record key"
msgstr ""
-#: test/ippfind.c:2763
+#: test/ippfind.c:2793
msgid ""
" expression --and expression\n"
" Logical AND."
msgstr ""
-#: test/ippfind.c:2765
+#: test/ippfind.c:2795
msgid ""
" expression --or expression\n"
" Logical OR."
msgstr ""
-#: test/ippfind.c:2762
+#: test/ippfind.c:2792
msgid " expression expression Logical AND."
msgstr ""
-#: test/ippfind.c:2770
+#: test/ippfind.c:2800
msgid " {service_domain} Domain name"
msgstr ""
-#: test/ippfind.c:2771
+#: test/ippfind.c:2801
msgid " {service_hostname} Fully-qualified domain name"
msgstr ""
-#: test/ippfind.c:2772
+#: test/ippfind.c:2802
msgid " {service_name} Service instance name"
msgstr ""
-#: test/ippfind.c:2773
+#: test/ippfind.c:2803
msgid " {service_port} Port number"
msgstr ""
-#: test/ippfind.c:2774
+#: test/ippfind.c:2804
msgid " {service_regtype} DNS-SD registration type"
msgstr ""
-#: test/ippfind.c:2775
+#: test/ippfind.c:2805
msgid " {service_scheme} URI scheme"
msgstr ""
-#: test/ippfind.c:2776
+#: test/ippfind.c:2806
msgid " {service_uri} URI"
msgstr ""
-#: test/ippfind.c:2777
+#: test/ippfind.c:2807
msgid " {txt_*} Value of TXT record key"
msgstr ""
-#: test/ippfind.c:2769
+#: test/ippfind.c:2799
msgid " {} URI"
msgstr ""
@@ -1758,7 +1784,7 @@ msgstr ""
msgid "%s accepting requests since %s"
msgstr ""
-#: scheduler/ipp.c:9841
+#: scheduler/ipp.c:9952
#, c-format
msgid "%s cannot be changed."
msgstr ""
@@ -1828,7 +1854,7 @@ msgstr ""
msgid "%s: %s failed: %s"
msgstr ""
-#: test/ippfind.c:773 test/ipptool.c:376
+#: test/ippfind.c:777 test/ipptool.c:378
#, c-format
msgid "%s: Bad version %s for \"-V\"."
msgstr ""
@@ -1848,8 +1874,8 @@ msgstr ""
#: systemv/lpstat.c:195 systemv/lpstat.c:241 systemv/lpstat.c:332
#: systemv/lpstat.c:361 systemv/lpstat.c:385 systemv/lpstat.c:444
#: systemv/lpstat.c:510 systemv/lpstat.c:571 systemv/lpstat.c:696
-#: systemv/lpstat.c:880 systemv/lpstat.c:1141 systemv/lpstat.c:1338
-#: systemv/lpstat.c:1576
+#: systemv/lpstat.c:880 systemv/lpstat.c:1141 systemv/lpstat.c:1339
+#: systemv/lpstat.c:1579
#, c-format
msgid "%s: Error - add '/version=1.1' to server name."
msgstr ""
@@ -2043,17 +2069,17 @@ msgstr ""
msgid "%s: Invalid filter string \"%s\"."
msgstr ""
-#: test/ipptool.c:307
+#: test/ipptool.c:309
#, c-format
msgid "%s: Missing filename for \"-P\"."
msgstr ""
-#: test/ippfind.c:745 test/ipptool.c:344
+#: test/ippfind.c:749 test/ipptool.c:346
#, c-format
msgid "%s: Missing timeout for \"-T\"."
msgstr ""
-#: test/ippfind.c:758 test/ipptool.c:358
+#: test/ippfind.c:762 test/ipptool.c:360
#, c-format
msgid "%s: Missing version for \"-V\"."
msgstr ""
@@ -2076,7 +2102,7 @@ msgstr ""
#: berkeley/lpq.c:83 berkeley/lpr.c:67 berkeley/lprm.c:67 systemv/cancel.c:82
#: systemv/cupsaccept.c:88 systemv/cupsaddsmb.c:86 systemv/lp.c:96
#: systemv/lpadmin.c:225 systemv/lpinfo.c:88 systemv/lpmove.c:73
-#: systemv/lpstat.c:88 test/ipptool.c:289 test/ipptool.c:333
+#: systemv/lpstat.c:88 test/ipptool.c:291 test/ipptool.c:335
#, c-format
msgid "%s: Sorry, no encryption support."
msgstr ""
@@ -2097,7 +2123,7 @@ msgstr ""
msgid "%s: Unable to determine MIME type of \"%s\"."
msgstr ""
-#: test/ipptool.c:316
+#: test/ipptool.c:318
#, c-format
msgid "%s: Unable to open \"%s\": %s"
msgstr ""
@@ -2132,12 +2158,12 @@ msgstr ""
msgid "%s: Unknown option \"%c\"."
msgstr ""
-#: test/ippfind.c:644
+#: test/ippfind.c:648
#, c-format
msgid "%s: Unknown option \"%s\"."
msgstr ""
-#: test/ippfind.c:924
+#: test/ippfind.c:928
#, c-format
msgid "%s: Unknown option \"-%c\"."
msgstr ""
@@ -2172,159 +2198,159 @@ msgstr ""
msgid "%s: Warning - mode option ignored."
msgstr ""
-#: ppdc/sample.c:310
+#: ppdc/sample.c:305
msgid "-1"
msgstr ""
-#: ppdc/sample.c:301
+#: ppdc/sample.c:296
msgid "-10"
msgstr ""
-#: ppdc/sample.c:393
+#: ppdc/sample.c:388
msgid "-100"
msgstr ""
-#: ppdc/sample.c:392
+#: ppdc/sample.c:387
msgid "-105"
msgstr ""
-#: ppdc/sample.c:300
+#: ppdc/sample.c:295
msgid "-11"
msgstr ""
-#: ppdc/sample.c:391
+#: ppdc/sample.c:386
msgid "-110"
msgstr ""
-#: ppdc/sample.c:390
+#: ppdc/sample.c:385
msgid "-115"
msgstr ""
-#: ppdc/sample.c:299
+#: ppdc/sample.c:294
msgid "-12"
msgstr ""
-#: ppdc/sample.c:389
+#: ppdc/sample.c:384
msgid "-120"
msgstr ""
-#: ppdc/sample.c:298
+#: ppdc/sample.c:293
msgid "-13"
msgstr ""
-#: ppdc/sample.c:297
+#: ppdc/sample.c:292
msgid "-14"
msgstr ""
-#: ppdc/sample.c:296
+#: ppdc/sample.c:291
msgid "-15"
msgstr ""
-#: ppdc/sample.c:309
+#: ppdc/sample.c:304
msgid "-2"
msgstr ""
-#: ppdc/sample.c:409
+#: ppdc/sample.c:404
msgid "-20"
msgstr ""
-#: ppdc/sample.c:408
+#: ppdc/sample.c:403
msgid "-25"
msgstr ""
-#: ppdc/sample.c:308
+#: ppdc/sample.c:303
msgid "-3"
msgstr ""
-#: ppdc/sample.c:407
+#: ppdc/sample.c:402
msgid "-30"
msgstr ""
-#: ppdc/sample.c:406
+#: ppdc/sample.c:401
msgid "-35"
msgstr ""
-#: ppdc/sample.c:307
+#: ppdc/sample.c:302
msgid "-4"
msgstr ""
-#: ppdc/sample.c:405
+#: ppdc/sample.c:400
msgid "-40"
msgstr ""
-#: ppdc/sample.c:404
+#: ppdc/sample.c:399
msgid "-45"
msgstr ""
-#: ppdc/sample.c:306
+#: ppdc/sample.c:301
msgid "-5"
msgstr ""
-#: ppdc/sample.c:403
+#: ppdc/sample.c:398
msgid "-50"
msgstr ""
-#: ppdc/sample.c:402
+#: ppdc/sample.c:397
msgid "-55"
msgstr ""
-#: ppdc/sample.c:305
+#: ppdc/sample.c:300
msgid "-6"
msgstr ""
-#: ppdc/sample.c:401
+#: ppdc/sample.c:396
msgid "-60"
msgstr ""
-#: ppdc/sample.c:400
+#: ppdc/sample.c:395
msgid "-65"
msgstr ""
-#: ppdc/sample.c:304
+#: ppdc/sample.c:299
msgid "-7"
msgstr ""
-#: ppdc/sample.c:399
+#: ppdc/sample.c:394
msgid "-70"
msgstr ""
-#: ppdc/sample.c:398
+#: ppdc/sample.c:393
msgid "-75"
msgstr ""
-#: ppdc/sample.c:303
+#: ppdc/sample.c:298
msgid "-8"
msgstr ""
-#: ppdc/sample.c:397
+#: ppdc/sample.c:392
msgid "-80"
msgstr ""
-#: ppdc/sample.c:396
+#: ppdc/sample.c:391
msgid "-85"
msgstr ""
-#: ppdc/sample.c:302
+#: ppdc/sample.c:297
msgid "-9"
msgstr ""
-#: ppdc/sample.c:395
+#: ppdc/sample.c:390
msgid "-90"
msgstr ""
-#: ppdc/sample.c:394
+#: ppdc/sample.c:389
msgid "-95"
msgstr ""
-#: ppdc/sample.c:311
+#: ppdc/sample.c:306
msgid "0"
msgstr ""
-#: ppdc/sample.c:312
+#: ppdc/sample.c:307
msgid "1"
msgstr ""
-#: ppdc/sample.c:384
+#: ppdc/sample.c:379
msgid "1 inch/sec."
msgstr ""
@@ -2336,7 +2362,7 @@ msgstr ""
msgid "1.25x2.25\""
msgstr ""
-#: ppdc/sample.c:432
+#: ppdc/sample.c:427
msgid "1.5 inch/sec."
msgstr ""
@@ -2356,11 +2382,11 @@ msgstr ""
msgid "1.50x2.00\""
msgstr ""
-#: ppdc/sample.c:321
+#: ppdc/sample.c:316
msgid "10"
msgstr ""
-#: ppdc/sample.c:443
+#: ppdc/sample.c:438
msgid "10 inches/sec."
msgstr ""
@@ -2376,39 +2402,39 @@ msgstr ""
msgid "10 x 14"
msgstr ""
-#: ppdc/sample.c:423
+#: ppdc/sample.c:418
msgid "100"
msgstr ""
-#: ppdc/sample.c:334
+#: ppdc/sample.c:329
msgid "100 mm/sec."
msgstr ""
-#: ppdc/sample.c:424
+#: ppdc/sample.c:419
msgid "105"
msgstr ""
-#: ppdc/sample.c:322
+#: ppdc/sample.c:317
msgid "11"
msgstr ""
-#: ppdc/sample.c:444
+#: ppdc/sample.c:439
msgid "11 inches/sec."
msgstr ""
-#: ppdc/sample.c:425
+#: ppdc/sample.c:420
msgid "110"
msgstr ""
-#: ppdc/sample.c:426
+#: ppdc/sample.c:421
msgid "115"
msgstr ""
-#: ppdc/sample.c:323
+#: ppdc/sample.c:318
msgid "12"
msgstr ""
-#: ppdc/sample.c:445
+#: ppdc/sample.c:440
msgid "12 inches/sec."
msgstr ""
@@ -2416,11 +2442,11 @@ msgstr ""
msgid "12 x 11"
msgstr ""
-#: ppdc/sample.c:427
+#: ppdc/sample.c:422
msgid "120"
msgstr ""
-#: ppdc/sample.c:335
+#: ppdc/sample.c:330
msgid "120 mm/sec."
msgstr ""
@@ -2432,7 +2458,7 @@ msgstr ""
msgid "120x72dpi"
msgstr ""
-#: ppdc/sample.c:324
+#: ppdc/sample.c:319
msgid "13"
msgstr ""
@@ -2440,15 +2466,15 @@ msgstr ""
msgid "136dpi"
msgstr ""
-#: ppdc/sample.c:325
+#: ppdc/sample.c:320
msgid "14"
msgstr ""
-#: ppdc/sample.c:326
+#: ppdc/sample.c:321
msgid "15"
msgstr ""
-#: ppdc/sample.c:328
+#: ppdc/sample.c:323
msgid "15 mm/sec."
msgstr ""
@@ -2456,23 +2482,23 @@ msgstr ""
msgid "15 x 11"
msgstr ""
-#: ppdc/sample.c:336
+#: ppdc/sample.c:331
msgid "150 mm/sec."
msgstr ""
-#: ppdc/sample.c:283
+#: ppdc/sample.c:278
msgid "150dpi"
msgstr ""
-#: ppdc/sample.c:368
+#: ppdc/sample.c:363
msgid "16"
msgstr ""
-#: ppdc/sample.c:369
+#: ppdc/sample.c:364
msgid "17"
msgstr ""
-#: ppdc/sample.c:370
+#: ppdc/sample.c:365
msgid "18"
msgstr ""
@@ -2480,19 +2506,19 @@ msgstr ""
msgid "180dpi"
msgstr ""
-#: ppdc/sample.c:371
+#: ppdc/sample.c:366
msgid "19"
msgstr ""
-#: ppdc/sample.c:313
+#: ppdc/sample.c:308
msgid "2"
msgstr ""
-#: ppdc/sample.c:385
+#: ppdc/sample.c:380
msgid "2 inches/sec."
msgstr ""
-#: ppdc/sample.c:270
+#: ppdc/sample.c:262
msgid "2-Sided Printing"
msgstr ""
@@ -2548,7 +2574,7 @@ msgstr ""
msgid "2.38x5.50\""
msgstr ""
-#: ppdc/sample.c:433
+#: ppdc/sample.c:428
msgid "2.5 inches/sec."
msgstr ""
@@ -2568,15 +2594,15 @@ msgstr ""
msgid "2.9 x 1\""
msgstr ""
-#: ppdc/sample.c:372
+#: ppdc/sample.c:367
msgid "20"
msgstr ""
-#: ppdc/sample.c:329
+#: ppdc/sample.c:324
msgid "20 mm/sec."
msgstr ""
-#: ppdc/sample.c:337
+#: ppdc/sample.c:332
msgid "200 mm/sec."
msgstr ""
@@ -2584,19 +2610,19 @@ msgstr ""
msgid "203dpi"
msgstr ""
-#: ppdc/sample.c:373
+#: ppdc/sample.c:368
msgid "21"
msgstr ""
-#: ppdc/sample.c:374
+#: ppdc/sample.c:369
msgid "22"
msgstr ""
-#: ppdc/sample.c:375
+#: ppdc/sample.c:370
msgid "23"
msgstr ""
-#: ppdc/sample.c:376
+#: ppdc/sample.c:371
msgid "24"
msgstr ""
@@ -2608,35 +2634,35 @@ msgstr ""
msgid "240x72dpi"
msgstr ""
-#: ppdc/sample.c:377
+#: ppdc/sample.c:372
msgid "25"
msgstr ""
-#: ppdc/sample.c:338
+#: ppdc/sample.c:333
msgid "250 mm/sec."
msgstr ""
-#: ppdc/sample.c:378
+#: ppdc/sample.c:373
msgid "26"
msgstr ""
-#: ppdc/sample.c:379
+#: ppdc/sample.c:374
msgid "27"
msgstr ""
-#: ppdc/sample.c:380
+#: ppdc/sample.c:375
msgid "28"
msgstr ""
-#: ppdc/sample.c:381
+#: ppdc/sample.c:376
msgid "29"
msgstr ""
-#: ppdc/sample.c:314
+#: ppdc/sample.c:309
msgid "3"
msgstr ""
-#: ppdc/sample.c:386
+#: ppdc/sample.c:381
msgid "3 inches/sec."
msgstr ""
@@ -2696,15 +2722,15 @@ msgstr ""
msgid "3.50x1.00\""
msgstr ""
-#: ppdc/sample.c:382
+#: ppdc/sample.c:377
msgid "30"
msgstr ""
-#: ppdc/sample.c:330
+#: ppdc/sample.c:325
msgid "30 mm/sec."
msgstr ""
-#: ppdc/sample.c:339
+#: ppdc/sample.c:334
msgid "300 mm/sec."
msgstr ""
@@ -2712,7 +2738,7 @@ msgstr ""
msgid "300dpi"
msgstr ""
-#: ppdc/sample.c:410
+#: ppdc/sample.c:405
msgid "35"
msgstr ""
@@ -2724,11 +2750,11 @@ msgstr ""
msgid "360x180dpi"
msgstr ""
-#: ppdc/sample.c:315
+#: ppdc/sample.c:310
msgid "4"
msgstr ""
-#: ppdc/sample.c:387
+#: ppdc/sample.c:382
msgid "4 inches/sec."
msgstr ""
@@ -2768,23 +2794,23 @@ msgstr ""
msgid "4.00x6.50\""
msgstr ""
-#: ppdc/sample.c:411
+#: ppdc/sample.c:406
msgid "40"
msgstr ""
-#: ppdc/sample.c:331
+#: ppdc/sample.c:326
msgid "40 mm/sec."
msgstr ""
-#: ppdc/sample.c:412
+#: ppdc/sample.c:407
msgid "45"
msgstr ""
-#: ppdc/sample.c:316
+#: ppdc/sample.c:311
msgid "5"
msgstr ""
-#: ppdc/sample.c:437
+#: ppdc/sample.c:432
msgid "5 inches/sec."
msgstr ""
@@ -2792,19 +2818,19 @@ msgstr ""
msgid "5 x 7"
msgstr ""
-#: ppdc/sample.c:413
+#: ppdc/sample.c:408
msgid "50"
msgstr ""
-#: ppdc/sample.c:414
+#: ppdc/sample.c:409
msgid "55"
msgstr ""
-#: ppdc/sample.c:317
+#: ppdc/sample.c:312
msgid "6"
msgstr ""
-#: ppdc/sample.c:438
+#: ppdc/sample.c:433
msgid "6 inches/sec."
msgstr ""
@@ -2836,15 +2862,15 @@ msgstr ""
msgid "6.00x6.50\""
msgstr ""
-#: ppdc/sample.c:415
+#: ppdc/sample.c:410
msgid "60"
msgstr ""
-#: ppdc/sample.c:332
+#: ppdc/sample.c:327
msgid "60 mm/sec."
msgstr ""
-#: ppdc/sample.c:261
+#: ppdc/sample.c:253
msgid "600dpi"
msgstr ""
@@ -2856,15 +2882,15 @@ msgstr ""
msgid "60x72dpi"
msgstr ""
-#: ppdc/sample.c:416
+#: ppdc/sample.c:411
msgid "65"
msgstr ""
-#: ppdc/sample.c:318
+#: ppdc/sample.c:313
msgid "7"
msgstr ""
-#: ppdc/sample.c:440
+#: ppdc/sample.c:435
msgid "7 inches/sec."
msgstr ""
@@ -2872,23 +2898,19 @@ msgstr ""
msgid "7 x 9"
msgstr ""
-#: ppdc/sample.c:417
+#: ppdc/sample.c:412
msgid "70"
msgstr ""
-#: ppdc/sample.c:252
-msgid "720dpi"
-msgstr ""
-
-#: ppdc/sample.c:418
+#: ppdc/sample.c:413
msgid "75"
msgstr ""
-#: ppdc/sample.c:319
+#: ppdc/sample.c:314
msgid "8"
msgstr ""
-#: ppdc/sample.c:441
+#: ppdc/sample.c:436
msgid "8 inches/sec."
msgstr ""
@@ -2924,23 +2946,23 @@ msgstr ""
msgid "8.00x6.50\""
msgstr ""
-#: ppdc/sample.c:419
+#: ppdc/sample.c:414
msgid "80"
msgstr ""
-#: ppdc/sample.c:333
+#: ppdc/sample.c:328
msgid "80 mm/sec."
msgstr ""
-#: ppdc/sample.c:420
+#: ppdc/sample.c:415
msgid "85"
msgstr ""
-#: ppdc/sample.c:320
+#: ppdc/sample.c:315
msgid "9"
msgstr ""
-#: ppdc/sample.c:442
+#: ppdc/sample.c:437
msgid "9 inches/sec."
msgstr ""
@@ -2956,11 +2978,11 @@ msgstr ""
msgid "9-Pin Series"
msgstr ""
-#: ppdc/sample.c:421
+#: ppdc/sample.c:416
msgid "90"
msgstr ""
-#: ppdc/sample.c:422
+#: ppdc/sample.c:417
msgid "95"
msgstr ""
@@ -2976,7 +2998,7 @@ msgstr ""
msgid "A Samba username is required to export printer drivers"
msgstr ""
-#: scheduler/ipp.c:2273
+#: scheduler/ipp.c:2274
#, c-format
msgid "A class named \"%s\" already exists."
msgstr ""
@@ -3151,7 +3173,7 @@ msgstr ""
msgid "Administration"
msgstr ""
-#: ppdc/sample.c:429
+#: ppdc/sample.c:424
msgid "Always"
msgstr ""
@@ -3159,7 +3181,7 @@ msgstr ""
msgid "AppSocket/HP JetDirect"
msgstr ""
-#: ppdc/sample.c:450
+#: ppdc/sample.c:445
msgid "Applicator"
msgstr ""
@@ -3221,7 +3243,7 @@ msgstr ""
msgid "B9"
msgstr ""
-#: scheduler/ipp.c:10764
+#: scheduler/ipp.c:10877
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
@@ -3280,27 +3302,27 @@ msgstr ""
msgid "Bad custom parameter"
msgstr ""
-#: cups/http-support.c:1598 scheduler/ipp.c:2359
+#: cups/http-support.c:1598 scheduler/ipp.c:2360
#, c-format
msgid "Bad device-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2398
+#: scheduler/ipp.c:2399
#, c-format
msgid "Bad device-uri scheme \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8016 scheduler/ipp.c:8032 scheduler/ipp.c:9250
+#: scheduler/ipp.c:8125 scheduler/ipp.c:8141 scheduler/ipp.c:9360
#, c-format
msgid "Bad document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9266
+#: scheduler/ipp.c:9376
#, c-format
msgid "Bad document-format-default \"%s\"."
msgstr ""
-#: cups/util.c:896
+#: cups/util.c:823
msgid "Bad filename buffer"
msgstr ""
@@ -3308,16 +3330,16 @@ msgstr ""
msgid "Bad hostname/address in URI"
msgstr ""
-#: scheduler/ipp.c:1528
+#: scheduler/ipp.c:1527
#, c-format
msgid "Bad job-name value: %s"
msgstr ""
-#: scheduler/ipp.c:1521
+#: scheduler/ipp.c:1520
msgid "Bad job-name value: Wrong type or count."
msgstr ""
-#: scheduler/ipp.c:9856
+#: scheduler/ipp.c:9967
msgid "Bad job-priority value."
msgstr ""
@@ -3330,24 +3352,24 @@ msgstr ""
msgid "Bad job-sheets value type."
msgstr ""
-#: scheduler/ipp.c:9886
+#: scheduler/ipp.c:9997
msgid "Bad job-state value."
msgstr ""
-#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5881
-#: scheduler/ipp.c:6028 scheduler/ipp.c:7450 scheduler/ipp.c:7719
-#: scheduler/ipp.c:8568 scheduler/ipp.c:8794 scheduler/ipp.c:9146
-#: scheduler/ipp.c:9749
+#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5930
+#: scheduler/ipp.c:6077 scheduler/ipp.c:7559 scheduler/ipp.c:7828
+#: scheduler/ipp.c:8678 scheduler/ipp.c:8904 scheduler/ipp.c:9256
+#: scheduler/ipp.c:9860
#, c-format
msgid "Bad job-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2039 scheduler/ipp.c:5419
+#: scheduler/ipp.c:2040 scheduler/ipp.c:5468
#, c-format
msgid "Bad notify-pull-method \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2003 scheduler/ipp.c:5383
+#: scheduler/ipp.c:2004 scheduler/ipp.c:5432
#, c-format
msgid "Bad notify-recipient-uri \"%s\"."
msgstr ""
@@ -3371,12 +3393,12 @@ msgstr ""
msgid "Bad port number in URI"
msgstr ""
-#: scheduler/ipp.c:2441
+#: scheduler/ipp.c:2442
#, c-format
msgid "Bad port-monitor \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2502
+#: scheduler/ipp.c:2503
#, c-format
msgid "Bad printer-state value %d."
msgstr ""
@@ -3423,7 +3445,7 @@ msgstr ""
msgid "Banners"
msgstr ""
-#: ppdc/sample.c:287
+#: ppdc/sample.c:282
msgid "Bond Paper"
msgstr ""
@@ -3436,11 +3458,11 @@ msgstr ""
msgid "Buffer overflow detected, aborting."
msgstr ""
-#: ppdc/sample.c:254
+#: ppdc/sample.c:277
msgid "CMYK"
msgstr ""
-#: ppdc/sample.c:363
+#: ppdc/sample.c:358
msgid "CPCL Label Printer"
msgstr ""
@@ -3452,15 +3474,15 @@ msgstr ""
msgid "Cancel RSS Subscription"
msgstr ""
-#: backend/ipp.c:2186
+#: backend/ipp.c:2198
msgid "Canceling print job."
msgstr ""
-#: scheduler/ipp.c:2482
+#: scheduler/ipp.c:2483
msgid "Cannot share a remote Kerberized printer."
msgstr ""
-#: ppdc/sample.c:279
+#: ppdc/sample.c:271
msgid "Cassette"
msgstr ""
@@ -3469,7 +3491,7 @@ msgstr ""
msgid "Change Settings"
msgstr ""
-#: scheduler/ipp.c:2051 scheduler/ipp.c:5431
+#: scheduler/ipp.c:2052 scheduler/ipp.c:5480
#, c-format
msgid "Character set \"%s\" not supported."
msgstr ""
@@ -3486,11 +3508,11 @@ msgstr ""
msgid "Close-Job doesn't support the job-uri attribute."
msgstr ""
-#: ppdc/sample.c:282
+#: ppdc/sample.c:276
msgid "Color"
msgstr ""
-#: ppdc/sample.c:253
+#: ppdc/sample.c:274
msgid "Color Mode"
msgstr ""
@@ -3505,11 +3527,11 @@ msgstr ""
msgid "Community name uses indefinite length"
msgstr ""
-#: backend/ipp.c:842 backend/lpd.c:879 backend/socket.c:400
+#: backend/ipp.c:854 backend/lpd.c:879 backend/socket.c:400
msgid "Connected to printer."
msgstr ""
-#: backend/ipp.c:747 backend/lpd.c:702 backend/socket.c:319
+#: backend/ipp.c:759 backend/lpd.c:702 backend/socket.c:319
msgid "Connecting to printer."
msgstr ""
@@ -3517,7 +3539,7 @@ msgstr ""
msgid "Continue"
msgstr ""
-#: ppdc/sample.c:365
+#: ppdc/sample.c:360
msgid "Continuous"
msgstr ""
@@ -3525,7 +3547,7 @@ msgstr ""
msgid "Control file sent successfully."
msgstr ""
-#: backend/ipp.c:1337 backend/lpd.c:472
+#: backend/ipp.c:1349 backend/lpd.c:472
msgid "Copying print data."
msgstr ""
@@ -3537,19 +3559,19 @@ msgstr ""
msgid "Custom"
msgstr ""
-#: ppdc/sample.c:359
+#: ppdc/sample.c:354
msgid "CustominCutInterval"
msgstr ""
-#: ppdc/sample.c:357
+#: ppdc/sample.c:352
msgid "CustominTearInterval"
msgstr ""
-#: ppdc/sample.c:343
+#: ppdc/sample.c:338
msgid "Cut"
msgstr ""
-#: ppdc/sample.c:451
+#: ppdc/sample.c:446
msgid "Cutter"
msgstr ""
@@ -3573,7 +3595,7 @@ msgstr ""
msgid "Delete Printer"
msgstr ""
-#: ppdc/sample.c:281
+#: ppdc/sample.c:273
msgid "DeskJet Series"
msgstr ""
@@ -3593,7 +3615,7 @@ msgid ""
" location = %s"
msgstr ""
-#: ppdc/sample.c:436
+#: ppdc/sample.c:431
msgid "Direct Thermal Media"
msgstr ""
@@ -3622,16 +3644,16 @@ msgstr ""
msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
msgstr ""
-#: ppdc/sample.c:345
+#: ppdc/sample.c:340
msgid "Disabled"
msgstr ""
-#: scheduler/ipp.c:5930
+#: scheduler/ipp.c:5979
#, c-format
msgid "Document #%d does not exist in job #%d."
msgstr ""
-#: ppdc/sample.c:275
+#: ppdc/sample.c:267
msgid "Duplexer"
msgstr ""
@@ -3639,11 +3661,11 @@ msgstr ""
msgid "Dymo"
msgstr ""
-#: ppdc/sample.c:431
+#: ppdc/sample.c:426
msgid "EPL1 Label Printer"
msgstr ""
-#: ppdc/sample.c:434
+#: ppdc/sample.c:429
msgid "EPL2 Label Printer"
msgstr ""
@@ -3657,7 +3679,7 @@ msgstr ""
msgid "Empty PPD file."
msgstr ""
-#: cups/http.c:4609
+#: cups/http.c:4624
msgid "Encryption is not supported."
msgstr ""
@@ -3670,7 +3692,7 @@ msgstr ""
msgid "English"
msgstr ""
-#: scheduler/client.c:2203
+#: scheduler/client.c:2209
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 ""
@@ -3762,7 +3784,7 @@ msgstr ""
msgid "Envelope DL"
msgstr ""
-#: ppdc/sample.c:269
+#: ppdc/sample.c:261
msgid "Envelope Feed"
msgstr ""
@@ -3886,7 +3908,7 @@ msgstr ""
msgid "Envelope You4 Long Edge"
msgstr ""
-#: test/ippfind.c:2779
+#: test/ippfind.c:2809
msgid "Environment Variables:"
msgstr ""
@@ -3907,43 +3929,43 @@ msgstr ""
msgid "Error: need hostname after \"-h\" option."
msgstr ""
-#: ppdc/sample.c:355
+#: ppdc/sample.c:350
msgid "Every 10 Labels"
msgstr ""
-#: ppdc/sample.c:347
+#: ppdc/sample.c:342
msgid "Every 2 Labels"
msgstr ""
-#: ppdc/sample.c:348
+#: ppdc/sample.c:343
msgid "Every 3 Labels"
msgstr ""
-#: ppdc/sample.c:349
+#: ppdc/sample.c:344
msgid "Every 4 Labels"
msgstr ""
-#: ppdc/sample.c:350
+#: ppdc/sample.c:345
msgid "Every 5 Labels"
msgstr ""
-#: ppdc/sample.c:351
+#: ppdc/sample.c:346
msgid "Every 6 Labels"
msgstr ""
-#: ppdc/sample.c:352
+#: ppdc/sample.c:347
msgid "Every 7 Labels"
msgstr ""
-#: ppdc/sample.c:353
+#: ppdc/sample.c:348
msgid "Every 8 Labels"
msgstr ""
-#: ppdc/sample.c:354
+#: ppdc/sample.c:349
msgid "Every 9 Labels"
msgstr ""
-#: ppdc/sample.c:346
+#: ppdc/sample.c:341
msgid "Every Label"
msgstr ""
@@ -3959,7 +3981,7 @@ msgstr ""
msgid "Export Printers to Samba"
msgstr ""
-#: test/ippfind.c:2725
+#: test/ippfind.c:2755
msgid "Expressions:"
msgstr ""
@@ -4014,7 +4036,7 @@ msgstr ""
msgid "File Folder "
msgstr ""
-#: scheduler/ipp.c:2377
+#: scheduler/ipp.c:2378
#, c-format
msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"."
msgstr ""
@@ -4037,7 +4059,7 @@ msgstr ""
msgid "General"
msgstr ""
-#: ppdc/sample.c:259
+#: ppdc/sample.c:251
msgid "Generic"
msgstr ""
@@ -4045,22 +4067,22 @@ msgstr ""
msgid "Get-Response-PDU uses indefinite length"
msgstr ""
-#: ppdc/sample.c:290
+#: ppdc/sample.c:285
msgid "Glossy Paper"
msgstr ""
#: scheduler/ipp.c:2959 scheduler/ipp.c:3367 scheduler/ipp.c:3905
-#: scheduler/ipp.c:5859 scheduler/ipp.c:6006 scheduler/ipp.c:7427
-#: scheduler/ipp.c:8546 scheduler/ipp.c:8772 scheduler/ipp.c:9124
-#: scheduler/ipp.c:9727
+#: scheduler/ipp.c:5908 scheduler/ipp.c:6055 scheduler/ipp.c:7536
+#: scheduler/ipp.c:8656 scheduler/ipp.c:8882 scheduler/ipp.c:9234
+#: scheduler/ipp.c:9838
msgid "Got a printer-uri attribute but no job-id."
msgstr ""
-#: ppdc/sample.c:255
+#: ppdc/sample.c:275
msgid "Grayscale"
msgstr ""
-#: ppdc/sample.c:280
+#: ppdc/sample.c:272
msgid "HP"
msgstr ""
@@ -4188,19 +4210,19 @@ msgstr ""
msgid "Illegal whitespace character"
msgstr ""
-#: ppdc/sample.c:274
+#: ppdc/sample.c:266
msgid "Installable Options"
msgstr ""
-#: ppdc/sample.c:277
+#: ppdc/sample.c:269
msgid "Installed"
msgstr ""
-#: ppdc/sample.c:293
+#: ppdc/sample.c:288
msgid "IntelliBar Label Printer"
msgstr ""
-#: ppdc/sample.c:292
+#: ppdc/sample.c:287
msgid "Intellitech"
msgstr ""
@@ -4297,17 +4319,17 @@ msgstr ""
msgid "JIS B9"
msgstr ""
-#: scheduler/ipp.c:8844
+#: scheduler/ipp.c:8954
#, c-format
msgid "Job #%d cannot be restarted - no files."
msgstr ""
#: scheduler/ipp.c:2999 scheduler/ipp.c:3233 scheduler/ipp.c:3292
-#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5517
-#: scheduler/ipp.c:5899 scheduler/ipp.c:6046 scheduler/ipp.c:6335
-#: scheduler/ipp.c:7274 scheduler/ipp.c:7296 scheduler/ipp.c:7468
-#: scheduler/ipp.c:7693 scheduler/ipp.c:7736 scheduler/ipp.c:8586
-#: scheduler/ipp.c:8812 scheduler/ipp.c:9164 scheduler/ipp.c:9767
+#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5566
+#: scheduler/ipp.c:5948 scheduler/ipp.c:6095 scheduler/ipp.c:6433
+#: scheduler/ipp.c:7383 scheduler/ipp.c:7405 scheduler/ipp.c:7577
+#: scheduler/ipp.c:7802 scheduler/ipp.c:7845 scheduler/ipp.c:8696
+#: scheduler/ipp.c:8922 scheduler/ipp.c:9274 scheduler/ipp.c:9878
#, c-format
msgid "Job #%d does not exist."
msgstr ""
@@ -4327,12 +4349,12 @@ msgstr ""
msgid "Job #%d is already completed - can't cancel."
msgstr ""
-#: scheduler/ipp.c:7494 scheduler/ipp.c:7778 scheduler/ipp.c:9782
+#: scheduler/ipp.c:7603 scheduler/ipp.c:7887 scheduler/ipp.c:9893
#, c-format
msgid "Job #%d is finished and cannot be altered."
msgstr ""
-#: scheduler/ipp.c:8826
+#: scheduler/ipp.c:8936
#, c-format
msgid "Job #%d is not complete."
msgstr ""
@@ -4342,7 +4364,7 @@ msgstr ""
msgid "Job #%d is not held for authentication."
msgstr ""
-#: scheduler/ipp.c:8600
+#: scheduler/ipp.c:8710
#, c-format
msgid "Job #%d is not held."
msgstr ""
@@ -4363,7 +4385,7 @@ msgstr ""
msgid "Job Stopped"
msgstr ""
-#: scheduler/ipp.c:9864
+#: scheduler/ipp.c:9975
msgid "Job is completed and cannot be changed."
msgstr ""
@@ -4371,11 +4393,11 @@ msgstr ""
msgid "Job operation failed"
msgstr ""
-#: scheduler/ipp.c:9900 scheduler/ipp.c:9917 scheduler/ipp.c:9928
+#: scheduler/ipp.c:10011 scheduler/ipp.c:10028 scheduler/ipp.c:10039
msgid "Job state cannot be changed."
msgstr ""
-#: scheduler/ipp.c:8692
+#: scheduler/ipp.c:8802
msgid "Job subscriptions cannot be renewed."
msgstr ""
@@ -4391,11 +4413,11 @@ msgstr ""
msgid "Label Printer"
msgstr ""
-#: ppdc/sample.c:446
+#: ppdc/sample.c:441
msgid "Label Top"
msgstr ""
-#: scheduler/ipp.c:2060 scheduler/ipp.c:5440
+#: scheduler/ipp.c:2061 scheduler/ipp.c:5489
#, c-format
msgid "Language \"%s\" not supported."
msgstr ""
@@ -4404,7 +4426,7 @@ msgstr ""
msgid "Large Address"
msgstr ""
-#: ppdc/sample.c:291
+#: ppdc/sample.c:286
msgid "LaserJet Series PCL 4/5"
msgstr ""
@@ -4432,7 +4454,7 @@ msgstr ""
msgid "Load paper."
msgstr ""
-#: ppdc/sample.c:272
+#: ppdc/sample.c:264
msgid "Long-Edge (Portrait)"
msgstr ""
@@ -4440,7 +4462,7 @@ msgstr ""
msgid "Looking for printer."
msgstr ""
-#: ppdc/sample.c:268
+#: ppdc/sample.c:260
msgid "Manual Feed"
msgstr ""
@@ -4448,15 +4470,15 @@ msgstr ""
msgid "Media Size"
msgstr ""
-#: cups/ppd.c:751 cups/ppd.c:1317 ppdc/sample.c:262
+#: cups/ppd.c:751 cups/ppd.c:1317 ppdc/sample.c:254
msgid "Media Source"
msgstr ""
-#: ppdc/sample.c:364
+#: ppdc/sample.c:359
msgid "Media Tracking"
msgstr ""
-#: cups/ppd.c:749 cups/ppd.c:1315 ppdc/sample.c:285
+#: cups/ppd.c:749 cups/ppd.c:1315 ppdc/sample.c:280
msgid "Media Type"
msgstr ""
@@ -4480,7 +4502,7 @@ msgstr ""
msgid "Missing asterisk in column 1"
msgstr ""
-#: scheduler/ipp.c:5922
+#: scheduler/ipp.c:5971
msgid "Missing document-number attribute."
msgstr ""
@@ -4495,7 +4517,7 @@ msgstr ""
msgid "Missing form variable"
msgstr ""
-#: scheduler/ipp.c:9218
+#: scheduler/ipp.c:9328
msgid "Missing last-document attribute in request."
msgstr ""
@@ -4507,7 +4529,7 @@ msgstr ""
msgid "Missing media-size in media-col."
msgstr ""
-#: scheduler/ipp.c:6465
+#: scheduler/ipp.c:6574
msgid "Missing notify-subscription-ids attribute."
msgstr ""
@@ -4557,7 +4579,7 @@ msgid ""
" device-id = %s"
msgstr ""
-#: test/ippfind.c:2756
+#: test/ippfind.c:2786
msgid "Modifiers:"
msgstr ""
@@ -4593,18 +4615,10 @@ msgstr ""
msgid "Nested classes are not allowed."
msgstr ""
-#: ppdc/sample.c:430
+#: ppdc/sample.c:425
msgid "Never"
msgstr ""
-#: ppdc/sample.c:256
-msgid "New Stylus Color Series"
-msgstr ""
-
-#: ppdc/sample.c:258
-msgid "New Stylus Photo Series"
-msgstr ""
-
#: cups/ppd.c:1904
msgid "No"
msgstr ""
@@ -4613,7 +4627,7 @@ msgstr ""
msgid "No Content"
msgstr ""
-#: cups/util.c:1283
+#: cups/util.c:1123
msgid "No PPD name"
msgstr ""
@@ -4650,11 +4664,11 @@ msgstr ""
msgid "No community name"
msgstr ""
-#: scheduler/ipp.c:5722
+#: scheduler/ipp.c:5771
msgid "No default printer."
msgstr ""
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7040
+#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7149
msgid "No destinations added."
msgstr ""
@@ -4670,11 +4684,11 @@ msgstr ""
msgid "No error-status"
msgstr ""
-#: scheduler/ipp.c:7982 scheduler/ipp.c:9232
+#: scheduler/ipp.c:8091 scheduler/ipp.c:9342
msgid "No file in print request."
msgstr ""
-#: cups/util.c:890
+#: cups/util.c:817
msgid "No modification time"
msgstr ""
@@ -4687,19 +4701,19 @@ msgstr ""
msgid "No pages were found."
msgstr ""
-#: cups/util.c:884
+#: cups/util.c:811
msgid "No printer name"
msgstr ""
-#: cups/util.c:1807
+#: cups/util.c:1647
msgid "No printer-uri found"
msgstr ""
-#: cups/util.c:1791
+#: cups/util.c:1631
msgid "No printer-uri found for class"
msgstr ""
-#: scheduler/ipp.c:6125
+#: scheduler/ipp.c:6179
msgid "No printer-uri in request."
msgstr ""
@@ -4719,11 +4733,11 @@ msgstr ""
msgid "No request-id"
msgstr ""
-#: scheduler/ipp.c:5325
+#: scheduler/ipp.c:5374
msgid "No subscription attributes in request."
msgstr ""
-#: scheduler/ipp.c:7367
+#: scheduler/ipp.c:7476
msgid "No subscriptions found."
msgstr ""
@@ -4735,11 +4749,11 @@ msgstr ""
msgid "No version number"
msgstr ""
-#: ppdc/sample.c:367
+#: ppdc/sample.c:362
msgid "Non-continuous (Mark sensing)"
msgstr ""
-#: ppdc/sample.c:366
+#: ppdc/sample.c:361
msgid "Non-continuous (Web sensing)"
msgstr ""
@@ -4755,7 +4769,7 @@ msgstr ""
msgid "Not Implemented"
msgstr ""
-#: ppdc/sample.c:276
+#: ppdc/sample.c:268
msgid "Not Installed"
msgstr ""
@@ -4767,7 +4781,7 @@ msgstr ""
msgid "Not Supported"
msgstr ""
-#: scheduler/ipp.c:1490 scheduler/ipp.c:10461
+#: scheduler/ipp.c:1490 scheduler/ipp.c:10572
msgid "Not allowed to print."
msgstr ""
@@ -4783,11 +4797,11 @@ msgstr ""
msgid "OK"
msgstr ""
-#: ppdc/sample.c:271
+#: ppdc/sample.c:263
msgid "Off (1-Sided)"
msgstr ""
-#: ppdc/sample.c:361
+#: ppdc/sample.c:356
msgid "Oki"
msgstr ""
@@ -4821,9 +4835,9 @@ msgstr ""
msgid "Options Installed"
msgstr ""
-#: scheduler/cupsfilter.c:1482 scheduler/main.c:2158 systemv/cupsaddsmb.c:284
+#: scheduler/cupsfilter.c:1482 scheduler/main.c:2146 systemv/cupsaddsmb.c:284
#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3817
-#: test/ippfind.c:2715 test/ipptool.c:4713 ppdc/ppdc.cxx:432
+#: test/ippfind.c:2745 test/ipptool.c:4805 ppdc/ppdc.cxx:432
#: ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
#: ppdc/ppdpo.cxx:254
msgid "Options:"
@@ -4857,7 +4871,7 @@ msgstr ""
msgid "PASS"
msgstr ""
-#: ppdc/sample.c:260
+#: ppdc/sample.c:252
msgid "PCL Laser Printer"
msgstr ""
@@ -4909,11 +4923,11 @@ msgstr ""
msgid "Paper tray is missing."
msgstr ""
-#: ppdc/sample.c:360
+#: ppdc/sample.c:355
msgid "ParamCustominCutInterval"
msgstr ""
-#: ppdc/sample.c:358
+#: ppdc/sample.c:353
msgid "ParamCustominTearInterval"
msgstr ""
@@ -4935,7 +4949,7 @@ msgstr ""
msgid "Pause Printer"
msgstr ""
-#: ppdc/sample.c:448
+#: ppdc/sample.c:443
msgid "Peel-Off"
msgstr ""
@@ -4947,7 +4961,7 @@ msgstr ""
msgid "Photo Labels"
msgstr ""
-#: ppdc/sample.c:286
+#: ppdc/sample.c:281
msgid "Plain Paper"
msgstr ""
@@ -4959,7 +4973,7 @@ msgstr ""
msgid "Port Monitor"
msgstr ""
-#: ppdc/sample.c:278
+#: ppdc/sample.c:270
msgid "PostScript Printer"
msgstr ""
@@ -4979,11 +4993,11 @@ msgstr ""
msgid "Postcard Long Edge"
msgstr ""
-#: backend/ipp.c:949 backend/ipp.c:957
+#: backend/ipp.c:961 backend/ipp.c:969
msgid "Preparing to print."
msgstr ""
-#: ppdc/sample.c:295
+#: ppdc/sample.c:290
msgid "Print Density"
msgstr ""
@@ -4991,11 +5005,11 @@ msgstr ""
msgid "Print Job:"
msgstr ""
-#: ppdc/sample.c:340
+#: ppdc/sample.c:335
msgid "Print Mode"
msgstr ""
-#: ppdc/sample.c:383
+#: ppdc/sample.c:378
msgid "Print Rate"
msgstr ""
@@ -5003,7 +5017,7 @@ msgstr ""
msgid "Print Self-Test Page"
msgstr ""
-#: ppdc/sample.c:327
+#: ppdc/sample.c:322
msgid "Print Speed"
msgstr ""
@@ -5011,11 +5025,11 @@ msgstr ""
msgid "Print Test Page"
msgstr ""
-#: ppdc/sample.c:356
+#: ppdc/sample.c:351
msgid "Print and Cut"
msgstr ""
-#: ppdc/sample.c:344
+#: ppdc/sample.c:339
msgid "Print and Tear"
msgstr ""
@@ -5023,15 +5037,15 @@ msgstr ""
msgid "Print file sent."
msgstr ""
-#: backend/ipp.c:2160
+#: backend/ipp.c:2172
msgid "Print job canceled at printer."
msgstr ""
-#: backend/ipp.c:2152
+#: backend/ipp.c:2164
msgid "Print job too large."
msgstr ""
-#: backend/ipp.c:1630
+#: backend/ipp.c:1642
msgid "Print job was not accepted."
msgstr ""
@@ -5039,7 +5053,7 @@ msgstr ""
msgid "Printer Added"
msgstr ""
-#: ppdc/sample.c:263
+#: ppdc/sample.c:255
msgid "Printer Default"
msgstr ""
@@ -5055,15 +5069,15 @@ msgstr ""
msgid "Printer Paused"
msgstr ""
-#: ppdc/sample.c:294
+#: ppdc/sample.c:289
msgid "Printer Settings"
msgstr ""
-#: backend/ipp.c:2155
+#: backend/ipp.c:2167
msgid "Printer cannot print supplied content."
msgstr ""
-#: backend/ipp.c:2158
+#: backend/ipp.c:2170
msgid "Printer cannot print with supplied options."
msgstr ""
@@ -5085,7 +5099,7 @@ msgstr ""
msgid "Quarto"
msgstr ""
-#: scheduler/ipp.c:1485 scheduler/ipp.c:10456
+#: scheduler/ipp.c:1485 scheduler/ipp.c:10567
msgid "Quota limit reached."
msgstr ""
@@ -5107,7 +5121,7 @@ msgstr ""
msgid "Remote host did not accept data file (%d)."
msgstr ""
-#: ppdc/sample.c:428
+#: ppdc/sample.c:423
msgid "Reprint After Error"
msgstr ""
@@ -5131,7 +5145,7 @@ msgstr ""
msgid "Return Address"
msgstr ""
-#: ppdc/sample.c:449
+#: ppdc/sample.c:444
msgid "Rewind"
msgstr ""
@@ -5172,7 +5186,7 @@ msgstr ""
msgid "Server Stopped"
msgstr ""
-#: cups/tls-darwin.c:1028
+#: cups/tls-darwin.c:1008 cups/tls-gnutls.c:1024
msgid "Server credentials not set."
msgstr ""
@@ -5205,11 +5219,11 @@ msgstr ""
msgid "Shipping Address"
msgstr ""
-#: ppdc/sample.c:273
+#: ppdc/sample.c:265
msgid "Short-Edge (Landscape)"
msgstr ""
-#: ppdc/sample.c:288
+#: ppdc/sample.c:283
msgid "Special Paper"
msgstr ""
@@ -5218,7 +5232,7 @@ msgstr ""
msgid "Spooling job, %.0f%% complete."
msgstr ""
-#: ppdc/sample.c:341
+#: ppdc/sample.c:336
msgid "Standard"
msgstr ""
@@ -5237,21 +5251,13 @@ msgstr ""
msgid "Statement"
msgstr ""
-#: ppdc/sample.c:251
-msgid "Stylus Color Series"
-msgstr ""
-
-#: ppdc/sample.c:257
-msgid "Stylus Photo Series"
-msgstr ""
-
-#: scheduler/ipp.c:3564 scheduler/ipp.c:6481 scheduler/ipp.c:7180
-#: scheduler/ipp.c:8680
+#: scheduler/ipp.c:3564 scheduler/ipp.c:6590 scheduler/ipp.c:7289
+#: scheduler/ipp.c:8790
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
-#: test/ippfind.c:2768
+#: test/ippfind.c:2798
msgid "Substitutions:"
msgstr ""
@@ -5283,15 +5289,15 @@ msgstr ""
msgid "Tabloid Oversize Long Edge"
msgstr ""
-#: ppdc/sample.c:342
+#: ppdc/sample.c:337
msgid "Tear"
msgstr ""
-#: ppdc/sample.c:447
+#: ppdc/sample.c:442
msgid "Tear-Off"
msgstr ""
-#: ppdc/sample.c:388
+#: ppdc/sample.c:383
msgid "Tear-Off Adjust Position"
msgstr ""
@@ -5300,8 +5306,8 @@ msgstr ""
msgid "The \"%s\" attribute is required for print jobs."
msgstr ""
-#: scheduler/ipp.c:6196 scheduler/ipp.c:6274 scheduler/ipp.c:6290
-#: scheduler/ipp.c:6308
+#: scheduler/ipp.c:6250 scheduler/ipp.c:6330 scheduler/ipp.c:6343
+#: scheduler/ipp.c:6355 scheduler/ipp.c:6370
#, c-format
msgid "The %s attribute cannot be provided with job-ids."
msgstr ""
@@ -5311,17 +5317,17 @@ msgstr ""
msgid "The '%s' Job Description attribute cannot be supplied in a job creation request."
msgstr ""
-#: scheduler/ipp.c:5134
+#: scheduler/ipp.c:5183
#, c-format
msgid "The '%s' operation attribute cannot be supplied in a Create-Job request."
msgstr ""
-#: scheduler/ipp.c:6711
+#: scheduler/ipp.c:6820
#, c-format
msgid "The PPD file \"%s\" could not be found."
msgstr ""
-#: scheduler/ipp.c:6698
+#: scheduler/ipp.c:6807
#, c-format
msgid "The PPD file \"%s\" could not be opened: %s"
msgstr ""
@@ -5351,11 +5357,11 @@ msgstr ""
msgid "The fuser's temperature is low."
msgstr ""
-#: scheduler/ipp.c:2087
+#: scheduler/ipp.c:2088
msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
msgstr ""
-#: scheduler/ipp.c:2070 scheduler/ipp.c:5450
+#: scheduler/ipp.c:2071 scheduler/ipp.c:5499
#, c-format
msgid "The notify-user-data value is too large (%d > 63 octets)."
msgstr ""
@@ -5368,7 +5374,7 @@ msgstr ""
msgid "The optical photoconductor will need to be replaced soon."
msgstr ""
-#: backend/ipp.c:969
+#: backend/ipp.c:981
msgid "The printer configuration is incorrect or the printer no longer exists."
msgstr ""
@@ -5376,8 +5382,8 @@ msgstr ""
msgid "The printer did not respond."
msgstr ""
-#: backend/ipp.c:813 backend/ipp.c:932 backend/ipp.c:1046 backend/ipp.c:1437
-#: backend/ipp.c:1602 backend/lpd.c:836 backend/socket.c:379
+#: backend/ipp.c:825 backend/ipp.c:944 backend/ipp.c:1058 backend/ipp.c:1449
+#: backend/ipp.c:1614 backend/lpd.c:836 backend/socket.c:379
#: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
msgid "The printer is in use."
msgstr ""
@@ -5394,7 +5400,7 @@ msgstr ""
msgid "The printer is not connected."
msgstr ""
-#: backend/ipp.c:791 backend/ipp.c:824 backend/ipp.c:928 backend/lpd.c:815
+#: backend/ipp.c:803 backend/ipp.c:836 backend/ipp.c:940 backend/lpd.c:815
#: backend/lpd.c:856 backend/socket.c:358 backend/socket.c:391
msgid "The printer is not responding."
msgstr ""
@@ -5411,7 +5417,7 @@ msgstr ""
msgid "The printer is offline."
msgstr ""
-#: backend/ipp.c:806 backend/lpd.c:829 backend/socket.c:372
+#: backend/ipp.c:818 backend/lpd.c:829 backend/socket.c:372
msgid "The printer is unreachable at this time."
msgstr ""
@@ -5423,7 +5429,7 @@ msgstr ""
msgid "The printer may be out of toner."
msgstr ""
-#: backend/ipp.c:800 backend/lpd.c:823 backend/socket.c:366
+#: backend/ipp.c:812 backend/lpd.c:823 backend/socket.c:366
msgid "The printer may not exist or is unavailable at this time."
msgstr ""
@@ -5432,13 +5438,13 @@ msgid "The printer name may only contain up to 127 printable characters and may
msgstr ""
#: scheduler/ipp.c:788 scheduler/ipp.c:1048 scheduler/ipp.c:3205
-#: scheduler/ipp.c:3384 scheduler/ipp.c:5117 scheduler/ipp.c:5284
-#: scheduler/ipp.c:5598 scheduler/ipp.c:6162 scheduler/ipp.c:6916
-#: scheduler/ipp.c:6972 scheduler/ipp.c:7286 scheduler/ipp.c:7552
-#: scheduler/ipp.c:7641 scheduler/ipp.c:7674 scheduler/ipp.c:7997
-#: scheduler/ipp.c:8390 scheduler/ipp.c:8472 scheduler/ipp.c:9636
-#: scheduler/ipp.c:10088 scheduler/ipp.c:10419 scheduler/ipp.c:10501
-#: scheduler/ipp.c:10874
+#: scheduler/ipp.c:3384 scheduler/ipp.c:5166 scheduler/ipp.c:5333
+#: scheduler/ipp.c:5647 scheduler/ipp.c:6216 scheduler/ipp.c:7025
+#: scheduler/ipp.c:7081 scheduler/ipp.c:7395 scheduler/ipp.c:7661
+#: scheduler/ipp.c:7750 scheduler/ipp.c:7783 scheduler/ipp.c:8106
+#: scheduler/ipp.c:8500 scheduler/ipp.c:8582 scheduler/ipp.c:9747
+#: scheduler/ipp.c:10199 scheduler/ipp.c:10530 scheduler/ipp.c:10612
+#: scheduler/ipp.c:10987
msgid "The printer or class does not exist."
msgstr ""
@@ -5466,7 +5472,7 @@ msgstr ""
msgid "The printer's waste bin is full."
msgstr ""
-#: scheduler/ipp.c:894 scheduler/ipp.c:2251
+#: scheduler/ipp.c:894 scheduler/ipp.c:2252
#, c-format
msgid "The printer-uri \"%s\" contains invalid characters."
msgstr ""
@@ -5479,7 +5485,7 @@ msgstr ""
msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
msgstr ""
-#: scheduler/ipp.c:2235
+#: scheduler/ipp.c:2236
msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
msgstr ""
@@ -5487,16 +5493,16 @@ msgstr ""
msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
msgstr ""
-#: scheduler/client.c:2226
+#: scheduler/client.c:2232
msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
msgstr ""
-#: scheduler/ipp.c:6257
+#: scheduler/ipp.c:6314
#, c-format
msgid "The which-jobs value \"%s\" is not supported."
msgstr ""
-#: scheduler/ipp.c:5528
+#: scheduler/ipp.c:5577
msgid "There are too many subscriptions."
msgstr ""
@@ -5505,7 +5511,7 @@ msgstr ""
msgid "There was an unrecoverable USB error."
msgstr ""
-#: ppdc/sample.c:435
+#: ppdc/sample.c:430
msgid "Thermal Transfer Media"
msgstr ""
@@ -5518,32 +5524,32 @@ msgstr ""
msgid "Too many job-sheets values (%d > 2)."
msgstr ""
-#: scheduler/ipp.c:2536
+#: scheduler/ipp.c:2537
#, c-format
msgid "Too many printer-state-reasons values (%d > %d)."
msgstr ""
-#: ppdc/sample.c:289
+#: ppdc/sample.c:284
msgid "Transparency"
msgstr ""
-#: ppdc/sample.c:284
+#: ppdc/sample.c:279
msgid "Tray"
msgstr ""
-#: ppdc/sample.c:264
+#: ppdc/sample.c:256
msgid "Tray 1"
msgstr ""
-#: ppdc/sample.c:265
+#: ppdc/sample.c:257
msgid "Tray 2"
msgstr ""
-#: ppdc/sample.c:266
+#: ppdc/sample.c:258
msgid "Tray 3"
msgstr ""
-#: ppdc/sample.c:267
+#: ppdc/sample.c:259
msgid "Tray 4"
msgstr ""
@@ -5603,11 +5609,11 @@ msgstr ""
msgid "Unable to add class"
msgstr ""
-#: backend/ipp.c:1784
+#: backend/ipp.c:1796
msgid "Unable to add document to print job."
msgstr ""
-#: scheduler/ipp.c:1538
+#: scheduler/ipp.c:1537
#, c-format
msgid "Unable to add job for destination \"%s\"."
msgstr ""
@@ -5632,7 +5638,7 @@ msgstr ""
msgid "Unable to cancel RSS subscription"
msgstr ""
-#: backend/ipp.c:2065 backend/ipp.c:2500
+#: backend/ipp.c:2077 backend/ipp.c:2512
msgid "Unable to cancel print job."
msgstr ""
@@ -5666,7 +5672,7 @@ msgstr ""
msgid "Unable to connect to host."
msgstr ""
-#: backend/ipp.c:769 backend/ipp.c:1242 backend/lpd.c:795 backend/socket.c:338
+#: backend/ipp.c:781 backend/ipp.c:1254 backend/lpd.c:795 backend/socket.c:338
#: backend/usb-unix.c:110
msgid "Unable to contact printer, queuing on next printer in class."
msgstr ""
@@ -5686,12 +5692,12 @@ msgstr ""
msgid "Unable to copy CUPS printer driver files (%d)."
msgstr ""
-#: scheduler/ipp.c:2656
+#: scheduler/ipp.c:2657
#, c-format
msgid "Unable to copy PPD file - %s"
msgstr ""
-#: scheduler/ipp.c:2711
+#: scheduler/ipp.c:2712
msgid "Unable to copy PPD file."
msgstr ""
@@ -5705,16 +5711,16 @@ msgstr ""
msgid "Unable to copy Windows 9x printer driver files (%d)."
msgstr ""
-#: scheduler/ipp.c:2633
+#: scheduler/ipp.c:2634
#, c-format
msgid "Unable to copy interface script - %s"
msgstr ""
-#: cups/util.c:569 cups/util.c:1639
+#: cups/util.c:496 cups/util.c:1479
msgid "Unable to create printer-uri"
msgstr ""
-#: cups/tls-darwin.c:1136
+#: cups/tls-darwin.c:1116 cups/tls-gnutls.c:1157
msgid "Unable to create server credentials."
msgstr ""
@@ -5738,36 +5744,35 @@ msgstr ""
msgid "Unable to edit cupsd.conf files larger than 1MB"
msgstr ""
-#: cups/tls-darwin.c:1304 cups/tls-sspi.c:493
+#: cups/tls-darwin.c:1284
msgid "Unable to establish a secure connection to host (certificate chain invalid)."
msgstr ""
-#: cups/tls-darwin.c:1294 cups/tls-sspi.c:483
+#: cups/tls-darwin.c:1274
msgid "Unable to establish a secure connection to host (certificate not yet valid)."
msgstr ""
-#: cups/tls-darwin.c:1289 cups/tls-sspi.c:478
+#: cups/tls-darwin.c:1269
msgid "Unable to establish a secure connection to host (expired certificate)."
msgstr ""
-#: cups/tls-darwin.c:1299 cups/tls-sspi.c:488
+#: cups/tls-darwin.c:1279
msgid "Unable to establish a secure connection to host (host name mismatch)."
msgstr ""
-#: cups/tls-darwin.c:1309 cups/tls-sspi.c:498
+#: cups/tls-darwin.c:1289
msgid "Unable to establish a secure connection to host (peer dropped connection before responding)."
msgstr ""
-#: cups/tls-darwin.c:1284 cups/tls-sspi.c:473
+#: cups/tls-darwin.c:1264
msgid "Unable to establish a secure connection to host (self-signed certificate)."
msgstr ""
-#: cups/tls-darwin.c:1279 cups/tls-sspi.c:468
+#: cups/tls-darwin.c:1259
msgid "Unable to establish a secure connection to host (untrusted certificate)."
msgstr ""
-#: cups/tls-darwin.c:1336 cups/tls-sspi.c:269 cups/tls-sspi.c:525
-#: cups/tls-sspi.c:558 cups/tls-sspi.c:575
+#: cups/tls-darwin.c:1316 cups/tls-sspi.c:1247 cups/tls-sspi.c:1264
msgid "Unable to establish a secure connection to host."
msgstr ""
@@ -5779,11 +5784,11 @@ msgstr ""
msgid "Unable to find printer."
msgstr ""
-#: cups/tls-darwin.c:1150
+#: cups/tls-darwin.c:1130
msgid "Unable to find server credentials."
msgstr ""
-#: backend/ipp.c:3481
+#: backend/ipp.c:3493
msgid "Unable to get backend exit status."
msgstr ""
@@ -5811,7 +5816,7 @@ msgstr ""
msgid "Unable to get printer status"
msgstr ""
-#: backend/ipp.c:993
+#: backend/ipp.c:1005
msgid "Unable to get printer status."
msgstr ""
@@ -5867,7 +5872,7 @@ msgstr ""
msgid "Unable to open device file"
msgstr ""
-#: scheduler/ipp.c:5943
+#: scheduler/ipp.c:5992
#, c-format
msgid "Unable to open document #%d in job #%d."
msgstr ""
@@ -5876,7 +5881,7 @@ msgstr ""
msgid "Unable to open help file."
msgstr ""
-#: backend/ipp.c:378 backend/ipp.c:1531 backend/ipp.c:1739 backend/lpd.c:496
+#: backend/ipp.c:378 backend/ipp.c:1543 backend/ipp.c:1751 backend/lpd.c:496
#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:67
#: filter/pstops.c:267
msgid "Unable to open print file"
@@ -5930,7 +5935,7 @@ msgstr ""
msgid "Unable to set server default"
msgstr ""
-#: backend/ipp.c:3340 backend/ipp.c:3417 backend/ipp.c:3425
+#: backend/ipp.c:3352 backend/ipp.c:3429 backend/ipp.c:3437
msgid "Unable to start backend process."
msgstr ""
@@ -6002,12 +6007,12 @@ msgstr ""
msgid "Unknown print mode: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10290
+#: scheduler/ipp.c:10401
#, c-format
msgid "Unknown printer-error-policy \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10273
+#: scheduler/ipp.c:10384
#, c-format
msgid "Unknown printer-op-policy \"%s\"."
msgstr ""
@@ -6033,17 +6038,17 @@ msgstr ""
msgid "Unknown version option value: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10745
+#: scheduler/ipp.c:10858
#, c-format
msgid "Unsupported 'compression' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10775
+#: scheduler/ipp.c:10888
#, c-format
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10850
+#: scheduler/ipp.c:10963
msgid "Unsupported 'job-name' value."
msgstr ""
@@ -6052,17 +6057,17 @@ msgstr ""
msgid "Unsupported character set \"%s\"."
msgstr ""
-#: scheduler/ipp.c:7963 scheduler/ipp.c:9197
+#: scheduler/ipp.c:8072 scheduler/ipp.c:9307
#, c-format
msgid "Unsupported compression \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8097 scheduler/ipp.c:9347
+#: scheduler/ipp.c:8206 scheduler/ipp.c:9457
#, c-format
msgid "Unsupported document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9330
+#: scheduler/ipp.c:9440
#, c-format
msgid "Unsupported document-format \"%s/%s\"."
msgstr ""
@@ -6135,7 +6140,7 @@ msgstr ""
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
msgstr ""
-#: scheduler/main.c:2157
+#: scheduler/main.c:2145
msgid "Usage: cupsd [options]"
msgstr ""
@@ -6159,7 +6164,7 @@ msgid ""
"Options:"
msgstr ""
-#: test/ippfind.c:2708
+#: test/ippfind.c:2738
msgid ""
"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
" ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
@@ -6167,7 +6172,7 @@ msgid ""
" ippfind --version"
msgstr ""
-#: test/ipptool.c:4711
+#: test/ipptool.c:4803
msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
msgstr ""
@@ -6223,7 +6228,7 @@ msgstr ""
msgid "Version uses indefinite length"
msgstr ""
-#: backend/ipp.c:1901
+#: backend/ipp.c:1913
msgid "Waiting for job to complete."
msgstr ""
@@ -6247,16 +6252,16 @@ msgstr ""
msgid "Yes"
msgstr ""
-#: scheduler/client.c:2213
+#: scheduler/client.c:2219
#, c-format
msgid "You must access this page using the URL https://%s:%d%s."
msgstr ""
-#: ppdc/sample.c:439
+#: ppdc/sample.c:434
msgid "ZPL Label Printer"
msgstr ""
-#: ppdc/sample.c:362
+#: ppdc/sample.c:357
msgid "Zebra"
msgstr ""
@@ -6272,11 +6277,11 @@ msgstr ""
msgid "completed"
msgstr ""
-#: scheduler/ipp.c:5815
+#: scheduler/ipp.c:5864
msgid "cups-deviced failed to execute."
msgstr ""
-#: scheduler/ipp.c:6634 scheduler/ipp.c:6883
+#: scheduler/ipp.c:6743 scheduler/ipp.c:6992
msgid "cups-driverd failed to execute."
msgstr ""
@@ -6304,36 +6309,36 @@ msgstr ""
msgid "cupsctl: Unknown option \"-%c\""
msgstr ""
-#: scheduler/main.c:172
+#: scheduler/main.c:171
msgid "cupsd: Expected config filename after \"-c\" option."
msgstr ""
-#: scheduler/main.c:259
+#: scheduler/main.c:258
msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
msgstr ""
-#: scheduler/main.c:237
+#: scheduler/main.c:236
msgid "cupsd: On-demand support not compiled in, running in normal mode."
msgstr ""
-#: scheduler/main.c:270
+#: scheduler/main.c:269
msgid "cupsd: Relative cups-files.conf filename not allowed."
msgstr ""
-#: scheduler/main.c:203 scheduler/main.c:210
+#: scheduler/main.c:202 scheduler/main.c:209
msgid "cupsd: Unable to get current directory."
msgstr ""
-#: scheduler/main.c:317 scheduler/main.c:326
+#: scheduler/main.c:316 scheduler/main.c:325
msgid "cupsd: Unable to get path to cups-files.conf file."
msgstr ""
-#: scheduler/main.c:299
+#: scheduler/main.c:298
#, c-format
msgid "cupsd: Unknown argument \"%s\" - aborting."
msgstr ""
-#: scheduler/main.c:292
+#: scheduler/main.c:291
#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting."
msgstr ""
@@ -6395,148 +6400,148 @@ msgstr ""
msgid "idle"
msgstr ""
-#: test/ippfind.c:2435
+#: test/ippfind.c:2465
#, c-format
msgid "ippfind: Bad regular expression: %s"
msgstr ""
-#: test/ippfind.c:324
+#: test/ippfind.c:328
msgid "ippfind: Cannot use --and after --or."
msgstr ""
-#: test/ippfind.c:597
+#: test/ippfind.c:601
#, c-format
msgid "ippfind: Expected key name after %s."
msgstr ""
-#: test/ippfind.c:547 test/ippfind.c:730
+#: test/ippfind.c:551 test/ippfind.c:734
#, c-format
msgid "ippfind: Expected port range after %s."
msgstr ""
-#: test/ippfind.c:357
+#: test/ippfind.c:361
#, c-format
msgid "ippfind: Expected program after %s."
msgstr ""
-#: test/ippfind.c:374
+#: test/ippfind.c:378
#, c-format
msgid "ippfind: Expected semi-colon after %s."
msgstr ""
-#: test/ippfind.c:1958
+#: test/ippfind.c:1965
msgid "ippfind: Missing close brace in substitution."
msgstr ""
-#: test/ippfind.c:1049
+#: test/ippfind.c:1053
msgid "ippfind: Missing close parenthesis."
msgstr ""
-#: test/ippfind.c:331
+#: test/ippfind.c:335
msgid "ippfind: Missing expression before \"--and\"."
msgstr ""
-#: test/ippfind.c:444
+#: test/ippfind.c:448
msgid "ippfind: Missing expression before \"--or\"."
msgstr ""
-#: test/ippfind.c:867
+#: test/ippfind.c:871
#, c-format
msgid "ippfind: Missing key name after %s."
msgstr ""
-#: test/ippfind.c:1020
+#: test/ippfind.c:1024
msgid "ippfind: Missing open parenthesis."
msgstr ""
-#: test/ippfind.c:897
+#: test/ippfind.c:901
#, c-format
msgid "ippfind: Missing program after %s."
msgstr ""
-#: test/ippfind.c:343 test/ippfind.c:397 test/ippfind.c:426 test/ippfind.c:532
-#: test/ippfind.c:614 test/ippfind.c:629 test/ippfind.c:784 test/ippfind.c:799
-#: test/ippfind.c:822 test/ippfind.c:882
+#: test/ippfind.c:347 test/ippfind.c:401 test/ippfind.c:430 test/ippfind.c:536
+#: test/ippfind.c:618 test/ippfind.c:633 test/ippfind.c:788 test/ippfind.c:803
+#: test/ippfind.c:826 test/ippfind.c:886
#, c-format
msgid "ippfind: Missing regular expression after %s."
msgstr ""
-#: test/ippfind.c:915
+#: test/ippfind.c:919
#, c-format
msgid "ippfind: Missing semi-colon after %s."
msgstr ""
-#: test/ippfind.c:1905 test/ippfind.c:1930
+#: test/ippfind.c:1912 test/ippfind.c:1937
msgid "ippfind: Out of memory."
msgstr ""
-#: test/ippfind.c:993
+#: test/ippfind.c:997
msgid "ippfind: Too many parenthesis."
msgstr ""
-#: test/ippfind.c:1262 test/ippfind.c:1398 test/ippfind.c:2527
+#: test/ippfind.c:1266 test/ippfind.c:1402 test/ippfind.c:2557
#, c-format
msgid "ippfind: Unable to browse or resolve: %s"
msgstr ""
-#: test/ippfind.c:2017 test/ippfind.c:2044
+#: test/ippfind.c:2035 test/ippfind.c:2062
#, c-format
msgid "ippfind: Unable to execute \"%s\": %s"
msgstr ""
-#: test/ippfind.c:1139 test/ippfind.c:1147 test/ippfind.c:1158
+#: test/ippfind.c:1143 test/ippfind.c:1151 test/ippfind.c:1162
#, c-format
msgid "ippfind: Unable to use Bonjour: %s"
msgstr ""
-#: test/ippfind.c:1987
+#: test/ippfind.c:1994
#, c-format
msgid "ippfind: Unknown variable \"{%s}\"."
msgstr ""
-#: test/ipptool.c:324 test/ipptool.c:387 test/ipptool.c:542 test/ipptool.c:565
+#: test/ipptool.c:326 test/ipptool.c:389 test/ipptool.c:544 test/ipptool.c:567
msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
msgstr ""
-#: test/ipptool.c:621
+#: test/ipptool.c:623
#, c-format
msgid "ipptool: Bad URI - %s."
msgstr ""
-#: test/ipptool.c:535
+#: test/ipptool.c:537
msgid "ipptool: Invalid seconds for \"-i\"."
msgstr ""
-#: test/ipptool.c:602
+#: test/ipptool.c:604
msgid "ipptool: May only specify a single URI."
msgstr ""
-#: test/ipptool.c:557
+#: test/ipptool.c:559
msgid "ipptool: Missing count for \"-n\"."
msgstr ""
-#: test/ipptool.c:421
+#: test/ipptool.c:423
msgid "ipptool: Missing filename for \"-f\"."
msgstr ""
-#: test/ipptool.c:402
+#: test/ipptool.c:404
msgid "ipptool: Missing name=value for \"-d\"."
msgstr ""
-#: test/ipptool.c:525
+#: test/ipptool.c:527
msgid "ipptool: Missing seconds for \"-i\"."
msgstr ""
-#: test/ipptool.c:647
+#: test/ipptool.c:649
msgid "ipptool: URI required before test file."
msgstr ""
-#: test/ipptool.c:583
+#: test/ipptool.c:585
#, c-format
msgid "ipptool: Unknown option \"-%c\"."
msgstr ""
-#: scheduler/ipp.c:7630
+#: scheduler/ipp.c:7739
msgid "job-printer-uri attribute missing."
msgstr ""
@@ -6788,16 +6793,16 @@ msgstr ""
msgid "no system default destination"
msgstr ""
-#: scheduler/ipp.c:5499
+#: scheduler/ipp.c:5548
msgid "notify-events not specified."
msgstr ""
-#: scheduler/ipp.c:2024 scheduler/ipp.c:5404
+#: scheduler/ipp.c:2025 scheduler/ipp.c:5453
#, c-format
msgid "notify-recipient-uri URI \"%s\" is already used."
msgstr ""
-#: scheduler/ipp.c:2014 scheduler/ipp.c:5394
+#: scheduler/ipp.c:2015 scheduler/ipp.c:5443
#, c-format
msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
msgstr ""
@@ -7279,32 +7284,32 @@ msgstr ""
msgid "ppdmerge: Unable to backup %s to %s - %s"
msgstr ""
-#: systemv/lpstat.c:1774
+#: systemv/lpstat.c:1777
#, c-format
msgid "printer %s disabled since %s -"
msgstr ""
-#: systemv/lpstat.c:1763
+#: systemv/lpstat.c:1766
#, c-format
msgid "printer %s is idle. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1768
+#: systemv/lpstat.c:1771
#, c-format
msgid "printer %s now printing %s-%d. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1897
+#: systemv/lpstat.c:1900
#, c-format
msgid "printer %s/%s disabled since %s -"
msgstr ""
-#: systemv/lpstat.c:1883
+#: systemv/lpstat.c:1886
#, c-format
msgid "printer %s/%s is idle. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1890
+#: systemv/lpstat.c:1893
#, c-format
msgid "printer %s/%s now printing %s-%d. enabled since %s"
msgstr ""
@@ -7322,11 +7327,11 @@ msgstr ""
msgid "request-id uses indefinite length"
msgstr ""
-#: systemv/lpstat.c:2029
+#: systemv/lpstat.c:2032
msgid "scheduler is not running"
msgstr ""
-#: systemv/lpstat.c:2025
+#: systemv/lpstat.c:2028
msgid "scheduler is running"
msgstr ""
diff --git a/locale/cups.strings b/locale/cups.strings
index faaa462c24..33e9891aed 100644
--- a/locale/cups.strings
+++ b/locale/cups.strings
@@ -189,6 +189,7 @@
" --domain regex Match domain to regular expression." = " --domain regex Match domain to regular expression.";
" --exec utility [argument ...] ;\n Execute program if true." = " --exec utility [argument ...] ;\n Execute program if true.";
" --false Always false." = " --false Always false.";
+" --help Show help." = " --help Show help.";
" --help Show this help." = " --help Show this help.";
" --host regex Match hostname to regular expression." = " --host regex Match hostname to regular expression.";
" --lf End lines with LF (UNIX/Linux/OS X)." = " --lf End lines with LF (UNIX/Linux/OS X).";
@@ -203,11 +204,13 @@
" --print-name Print service name if true." = " --print-name Print service name if true.";
" --quiet Quietly report match via exit code." = " --quiet Quietly report match via exit code.";
" --remote True if service is remote." = " --remote True if service is remote.";
+" --stop-after-include-error\n Stop tests after a failed INCLUDE." = " --stop-after-include-error\n Stop tests after a failed INCLUDE.";
" --true Always true." = " --true Always true.";
" --txt key True if the TXT record contains the key." = " --txt key True if the TXT record contains the key.";
" --txt-* regex Match TXT record key to regular expression." = " --txt-* regex Match TXT record key to regular expression.";
" --uri regex Match URI to regular expression." = " --uri regex Match URI to regular expression.";
" --version Show program version." = " --version Show program version.";
+" --version Show version." = " --version Show version.";
" -4 Connect using IPv4." = " -4 Connect using IPv4.";
" -6 Connect using IPv6." = " -6 Connect using IPv6.";
" -C Send requests using chunking (default)." = " -C Send requests using chunking (default).";
@@ -221,6 +224,7 @@
" -I include-dir Add include directory to search path." = " -I include-dir Add include directory to search path.";
" -I {filename,filters,none,profiles}" = " -I {filename,filters,none,profiles}";
" -L Send requests using content-length." = " -L Send requests using content-length.";
+" -P filename.plist Produce XML plist to a file and test report to standard output." = " -P filename.plist Produce XML plist to a file and test report to standard output.";
" -P filename.ppd Set PPD file." = " -P filename.ppd Set PPD file.";
" -P number[-number] Match port to number or range." = " -P number[-number] Match port to number or range.";
" -R root-directory Set alternate root." = " -R root-directory Set alternate root.";
@@ -233,6 +237,7 @@
" -X Produce XML plist instead of plain text." = " -X Produce XML plist instead of plain text.";
" -a Browse for all services." = " -a Browse for all services.";
" -a Export all printers." = " -a Export all printers.";
+" -c Produce CSV output." = " -c Produce CSV output.";
" -c catalog.po Load the specified message catalog." = " -c catalog.po Load the specified message catalog.";
" -c cups-files.conf Set cups-files.conf file to use." = " -c cups-files.conf Set cups-files.conf file to use.";
" -c cupsd.conf Set cupsd.conf file to use." = " -c cupsd.conf Set cupsd.conf file to use.";
@@ -251,6 +256,7 @@
" -i seconds Repeat the last file with the given time interval." = " -i seconds Repeat the last file with the given time interval.";
" -j job-id[,N] Filter file N from the specified job (default is file 1)." = " -j job-id[,N] Filter file N from the specified job (default is file 1).";
" -l List attributes." = " -l List attributes.";
+" -l Produce plain text output." = " -l Produce plain text output.";
" -l Run cupsd on demand." = " -l Run cupsd on demand.";
" -l lang[,lang,...] Specify the output language(s) (locale)." = " -l lang[,lang,...] Specify the output language(s) (locale).";
" -m Use the ModelName value as the filename." = " -m Use the ModelName value as the filename.";
@@ -602,7 +608,6 @@
"7 inches/sec." = "7 inches/sec.";
"7 x 9" = "7 x 9";
"70" = "70";
-"720dpi" = "720dpi";
"75" = "75";
"8" = "8";
"8 inches/sec." = "8 inches/sec.";
@@ -1008,8 +1013,6 @@
"Name OID uses indefinite length" = "Name OID uses indefinite length";
"Nested classes are not allowed." = "Nested classes are not allowed.";
"Never" = "Never";
-"New Stylus Color Series" = "New Stylus Color Series";
-"New Stylus Photo Series" = "New Stylus Photo Series";
"No" = "No";
"No Content" = "No Content";
"No PPD name" = "No PPD name";
@@ -1164,8 +1167,6 @@
"Starting Banner" = "Starting Banner";
"Starting page %d." = "Starting page %d.";
"Statement" = "Statement";
-"Stylus Color Series" = "Stylus Color Series";
-"Stylus Photo Series" = "Stylus Photo Series";
"Subscription #%d does not exist." = "Subscription #%d does not exist.";
"Substitutions:" = "Substitutions:";
"Super A" = "Super A";
diff --git a/locale/cups_ca.po b/locale/cups_ca.po
index 8e524fc35c..9c6985f289 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: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2012-09-29 11:21+0200\n"
"Last-Translator: Ãngel Mompó \n"
"Language-Team: Catalan \n"
@@ -973,6 +973,9 @@ msgstr ""
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
@@ -1015,6 +1018,11 @@ msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
@@ -1030,6 +1038,9 @@ msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr " -4 Connecta fent servir IPv4."
@@ -1075,6 +1086,11 @@ msgid " -L Send requests using content-length."
msgstr ""
" -L Envia les peticions fent servir content-length."
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr " -P nomfitxer.ppd Estableix el fitxer PPD."
@@ -1118,6 +1134,9 @@ msgstr ""
msgid " -a Export all printers."
msgstr " -a Exporta totes les impressores."
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr " -c catà leg.po Carrega el catà leg de missatges indicat."
@@ -1183,6 +1202,9 @@ msgstr ""
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
@@ -2422,9 +2444,6 @@ msgstr "7 x 9"
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720ppp"
-
msgid "75"
msgstr "75"
@@ -3734,12 +3753,6 @@ msgstr "No es permeten les classes imbricades."
msgid "Never"
msgstr "Mai"
-msgid "New Stylus Color Series"
-msgstr "Sèrie New Stylus Color"
-
-msgid "New Stylus Photo Series"
-msgstr "Sèrie New Stylus Photo"
-
msgid "No"
msgstr "No"
@@ -4217,12 +4230,6 @@ msgstr "S'està començant la pà gina %d."
msgid "Statement"
msgstr "Declaració"
-msgid "Stylus Color Series"
-msgstr "Sèrie Stylus Color"
-
-msgid "Stylus Photo Series"
-msgstr "Sèrie Stylus Photo"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr "La subscripció #%d no existeix."
@@ -6080,6 +6087,9 @@ msgstr "La variable-bindings fa servir una longitud indefinida"
#~ msgid "3.5\" Disk - 2 1/8 x 2 3/4\""
#~ msgstr "Disc de 3.5 - 2 1/8 x 2 3/4\""
+#~ msgid "720dpi"
+#~ msgstr "720ppp"
+
#~ msgid "Address - 1 1/8 x 3 1/2\""
#~ msgstr "Adreça - 1 1/8 x 3 1/2\""
@@ -6117,6 +6127,12 @@ msgstr "La variable-bindings fa servir una longitud indefinida"
#~ msgid "Large Address - 1 4/10 x 3 1/2\""
#~ msgstr "Adreça gran - 1 4/10 x 3 1/2\""
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Sèrie New Stylus Color"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Sèrie New Stylus Photo"
+
#~ msgid "Output for printer %s is sent to %s"
#~ msgstr "La sortida de la impressora %s s'envia a %s"
@@ -6181,6 +6197,12 @@ msgstr "La variable-bindings fa servir una longitud indefinida"
#~ msgid "Shipping Address - 2 5/16 x 4\""
#~ msgstr "Adreça de lliurament - 2 5/16 x 4\""
+#~ msgid "Stylus Color Series"
+#~ msgstr "Sèrie Stylus Color"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Sèrie Stylus Photo"
+
#~ msgid "The output bin is almost full."
#~ msgstr "La safata de sortida és gairebé plena."
diff --git a/locale/cups_cs.po b/locale/cups_cs.po
index d72c190473..307c15fa84 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: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2012-09-14 10:26+0100\n"
"Last-Translator: Jan Bartos \n"
"Language-Team: Czech\n"
@@ -826,6 +826,9 @@ msgstr ""
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
@@ -868,6 +871,11 @@ msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
@@ -883,6 +891,9 @@ msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr ""
@@ -923,6 +934,11 @@ msgstr ""
msgid " -L Send requests using content-length."
msgstr ""
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr ""
@@ -961,6 +977,9 @@ msgstr ""
msgid " -a Export all printers."
msgstr ""
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
@@ -1018,6 +1037,9 @@ msgstr ""
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
@@ -2234,9 +2256,6 @@ msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720 dpi"
-
msgid "75"
msgstr "75"
@@ -3524,12 +3543,6 @@ msgstr ""
msgid "Never"
msgstr "Nikdy"
-msgid "New Stylus Color Series"
-msgstr "New Stylus Color Series"
-
-msgid "New Stylus Photo Series"
-msgstr "New Stylus Photo Series"
-
msgid "No"
msgstr "Ne"
@@ -4003,12 +4016,6 @@ msgstr ""
msgid "Statement"
msgstr "ProhlášenÃ"
-msgid "Stylus Color Series"
-msgstr "Stylus Color Series"
-
-msgid "Stylus Photo Series"
-msgstr "Stylus Photo Series"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
@@ -5675,6 +5682,9 @@ msgstr "nepojmenovaný"
msgid "variable-bindings uses indefinite length"
msgstr "\"variable-bindings\" má neomezenou délku"
+#~ msgid "720dpi"
+#~ msgstr "720 dpi"
+
#~ msgid "Enter old password:"
#~ msgstr "Zadejte původnà heslo:"
@@ -5684,5 +5694,17 @@ msgstr "\"variable-bindings\" má neomezenou délku"
#~ msgid "Enter password:"
#~ msgstr "Zadejte heslo:"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "New Stylus Color Series"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "New Stylus Photo Series"
+
#~ msgid "Purge Jobs"
#~ msgstr "Výmaz úloh"
+
+#~ msgid "Stylus Color Series"
+#~ msgstr "Stylus Color Series"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Stylus Photo Series"
diff --git a/locale/cups_es.po b/locale/cups_es.po
index 461553c9ab..47885aec10 100644
--- a/locale/cups_es.po
+++ b/locale/cups_es.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2012-07-01 20:21+0100\n"
"Last-Translator: Juan Pablo González Riopedre \n"
"Language-Team: Spanish\n"
@@ -965,6 +965,9 @@ msgstr ""
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
@@ -1007,6 +1010,11 @@ msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
@@ -1022,6 +1030,9 @@ msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr " -4 Conectar usando IPv4."
@@ -1067,6 +1078,11 @@ msgstr " -I {filename,filters,none,profiles}"
msgid " -L Send requests using content-length."
msgstr " -L EnvÃa peticiones usando content-length."
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr " -P nombre_archivo.ppd Establece archivo PPD."
@@ -1110,6 +1126,9 @@ msgstr ""
msgid " -a Export all printers."
msgstr " -a Exporta todas las impresoras."
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr " -c catálogo.po Carga el catálogo de mensajes especificado."
@@ -1174,6 +1193,9 @@ msgstr ""
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
@@ -2411,9 +2433,6 @@ msgstr "7 x 9"
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720ppp"
-
msgid "75"
msgstr "75"
@@ -3721,12 +3740,6 @@ msgstr "No se permiten clases anidadas."
msgid "Never"
msgstr "Nunca"
-msgid "New Stylus Color Series"
-msgstr "Nueva Stylus Color Series"
-
-msgid "New Stylus Photo Series"
-msgstr "Nueva Stylus Photo Series"
-
msgid "No"
msgstr "No"
@@ -4203,12 +4216,6 @@ msgstr "Iniciando página %d."
msgid "Statement"
msgstr "Declaración"
-msgid "Stylus Color Series"
-msgstr "Stylus Color Series"
-
-msgid "Stylus Photo Series"
-msgstr "Stylus Photo Series"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr "Subscripción #%d no existe."
@@ -5993,6 +6000,9 @@ msgstr "variable-bindings usa una longitud indefinida"
#~ msgid "%s: Error - expected destination after \"-b\" option."
#~ msgstr "%s: Error - se esperaba un destino tras la opción \"-b\"."
+#~ msgid "720dpi"
+#~ msgstr "720ppp"
+
#~ msgid "Bad printer URI."
#~ msgstr "URI de impresora incorrecto."
@@ -6005,6 +6015,12 @@ msgstr "variable-bindings usa una longitud indefinida"
#~ msgid "Enter password:"
#~ msgstr "Introduzca la contraseña:"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Nueva Stylus Color Series"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Nueva Stylus Photo Series"
+
#~ msgid "Output for printer %s is sent to %s"
#~ msgstr "La salida de la impresora %s se ha enviado a %s"
@@ -6040,6 +6056,12 @@ msgstr "variable-bindings usa una longitud indefinida"
#~ msgstr ""
#~ "Rango Propiet. Pri Trabajo Archivos Tamaño total"
+#~ msgid "Stylus Color Series"
+#~ msgstr "Stylus Color Series"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Stylus Photo Series"
+
#~ msgid "The output bin is almost full."
#~ msgstr "Recipiente de salida casi lleno"
diff --git a/locale/cups_fr.po b/locale/cups_fr.po
index 402e54a396..98433845bb 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: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2012-12-12 11:12+0100\n"
"Last-Translator: denis meramdjougoma \n"
"Language-Team: LANGUAGE \n"
@@ -826,6 +826,9 @@ msgstr ""
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
@@ -868,6 +871,11 @@ msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
@@ -883,6 +891,9 @@ msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr ""
@@ -923,6 +934,11 @@ msgstr ""
msgid " -L Send requests using content-length."
msgstr ""
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr ""
@@ -961,6 +977,9 @@ msgstr ""
msgid " -a Export all printers."
msgstr ""
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
@@ -1018,6 +1037,9 @@ msgstr ""
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
@@ -2234,9 +2256,6 @@ msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720 ppp"
-
msgid "75"
msgstr "75"
@@ -3521,12 +3540,6 @@ msgstr ""
msgid "Never"
msgstr "Jamais"
-msgid "New Stylus Color Series"
-msgstr "Nouvelles série Stylus Color"
-
-msgid "New Stylus Photo Series"
-msgstr "Nouvelles série Stylus Photo"
-
msgid "No"
msgstr "Non"
@@ -4000,12 +4013,6 @@ msgstr ""
msgid "Statement"
msgstr "Déclaration"
-msgid "Stylus Color Series"
-msgstr "Série Stylus Color"
-
-msgid "Stylus Photo Series"
-msgstr "Série Stylus Photo"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
@@ -5677,6 +5684,9 @@ msgstr "sans titre"
msgid "variable-bindings uses indefinite length"
msgstr ""
+#~ msgid "720dpi"
+#~ msgstr "720 ppp"
+
#~ msgid "Enter old password:"
#~ msgstr "Ancien mot de passe :"
@@ -5686,5 +5696,17 @@ msgstr ""
#~ msgid "Enter password:"
#~ msgstr "Entrez le nouveau mot de passe :"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Nouvelles série Stylus Color"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Nouvelles série Stylus Photo"
+
#~ msgid "Purge Jobs"
#~ msgstr "Purger les tâches"
+
+#~ msgid "Stylus Color Series"
+#~ msgstr "Série Stylus Color"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Série Stylus Photo"
diff --git a/locale/cups_it.po b/locale/cups_it.po
index 30b1027723..ad81332396 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: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2013-07-14 12:00+0200\n"
"Last-Translator: Giovanni Scafora \n"
"Language-Team: Arch Linux Italian Team \n"
@@ -974,6 +974,9 @@ msgstr ""
msgid " --false Always false."
msgstr " --false Sempre falso."
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr " --help Mostra questo aiuto."
@@ -1026,6 +1029,11 @@ msgstr ""
msgid " --remote True if service is remote."
msgstr " --remote Vero se il servizio è remoto."
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr " --true Sempre vero."
@@ -1044,6 +1052,9 @@ msgstr ""
msgid " --version Show program version."
msgstr " --version Mostra la versione del programma."
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr " -4 Connetti utilizzando IPv4."
@@ -1089,6 +1100,11 @@ msgstr " -I {file,filtri,nessuno,profili}"
msgid " -L Send requests using content-length."
msgstr " -L Invia richieste utilizzando content-length."
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr " -P filename.ppd Imposta il file PPD."
@@ -1134,6 +1150,9 @@ msgstr " -a Mostra tutti i servizi."
msgid " -a Export all printers."
msgstr " -a Esporta tutte le stampanti."
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
" -c catalog.po Carica il catalogo del messaggio specificato."
@@ -1202,6 +1221,9 @@ msgstr ""
msgid " -l List attributes."
msgstr " -l Elenca gli attributi."
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
@@ -2500,9 +2522,6 @@ msgstr "7 x 9"
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720dpi"
-
msgid "75"
msgstr "75"
@@ -3808,12 +3827,6 @@ msgstr "Le classi nidificate non sono consentite."
msgid "Never"
msgstr "Mai"
-msgid "New Stylus Color Series"
-msgstr "Nuova Stylus Color Series"
-
-msgid "New Stylus Photo Series"
-msgstr "Nuova Stylus Photo Series"
-
msgid "No"
msgstr "No"
@@ -4291,12 +4304,6 @@ msgstr "Pagina iniziale %d."
msgid "Statement"
msgstr "Rapporto"
-msgid "Stylus Color Series"
-msgstr "Stylus Color Series"
-
-msgid "Stylus Photo Series"
-msgstr "Stylus Photo Series"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr "La sottoscrizione #%d non esiste."
@@ -6066,6 +6073,9 @@ msgstr "variable-bindings utilizza una lunghezza indefinita"
#~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes"
#~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f byte"
+#~ msgid "720dpi"
+#~ msgstr "720dpi"
+
#~ msgid "Bad printer URI."
#~ msgstr "L'URI della stampante non è valido."
@@ -6078,6 +6088,12 @@ msgstr "variable-bindings utilizza una lunghezza indefinita"
#~ msgid "Enter password:"
#~ msgstr "Digitare la password:"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Nuova Stylus Color Series"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Nuova Stylus Photo Series"
+
#~ msgid "Output for printer %s is sent to %s"
#~ msgstr "L'output della stampante %s è stato inviato a %s"
@@ -6104,6 +6120,12 @@ msgstr "variable-bindings utilizza una lunghezza indefinita"
#~ msgstr ""
#~ "Rank Owner Pri Job Files Total Size"
+#~ msgid "Stylus Color Series"
+#~ msgstr "Stylus Color Series"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Stylus Photo Series"
+
#~ msgid "The output bin is almost full."
#~ msgstr "Il raccoglitore di uscita è quasi pieno."
diff --git a/locale/cups_ja.po b/locale/cups_ja.po
index 9f3dd4f8e2..d4b9f1b48a 100644
--- a/locale/cups_ja.po
+++ b/locale/cups_ja.po
@@ -28,7 +28,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.7\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2013-08-19 11:51+0900\n"
"Last-Translator: OPFC TRANSCUPS \n"
"Language-Team: OPFC TRANSCUPS \n"
@@ -972,6 +972,9 @@ msgstr ""
msgid " --false Always false."
msgstr " --false 常ã«å¤±æã"
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr " --help ãã®ãã«ãã表示ããã"
@@ -1016,6 +1019,11 @@ msgstr ""
msgid " --remote True if service is remote."
msgstr " --remote ãµã¼ãã¹ããªã¢ã¼ããªãçã"
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr " --true 常ã«çã"
@@ -1032,6 +1040,9 @@ msgstr " --uri <æ£è¦è¡¨ç¾> URI ãæ£è¦è¡¨ç¾ã¨ãããããã
msgid " --version Show program version."
msgstr " --version ããã°ã©ã ã®ãã¼ã¸ã§ã³ã表示ã"
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr " -4 IPv4 ã§æ¥ç¶ããã"
@@ -1078,6 +1089,11 @@ msgstr " -I {filename,filters,none,profiles}"
msgid " -L Send requests using content-length."
msgstr " -L content-length ãç¨ãã¦ãªã¯ã¨ã¹ããéãã"
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr " -P filename.ppd PPD ãã¡ã¤ã«ãæå®ããã"
@@ -1119,6 +1135,9 @@ msgstr " -a ãã¹ã¦ã®ãµã¼ãã¹ããã©ã¦ãºãã
msgid " -a Export all printers."
msgstr " -a ãã¹ã¦ã®ããªã³ã¿ã¼ãã¨ã¯ã¹ãã¼ãããã"
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr " -c catalog.po æå®ããã¡ãã»ã¼ã¸ã«ã¿ãã°ããã¼ãããã"
@@ -1183,6 +1202,9 @@ msgstr ""
msgid " -l List attributes."
msgstr " -l 屿§ã®ä¸è¦§ã表示ããã"
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
@@ -2454,9 +2476,6 @@ msgstr "7 x 9 ã¤ã³ã"
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720dpi"
-
msgid "75"
msgstr "75"
@@ -3766,12 +3785,6 @@ msgstr "å
¥ãåã«ãªã£ãã¯ã©ã¹ã¯è¨±å¯ããã¦ãã¾ããã"
msgid "Never"
msgstr "Never"
-msgid "New Stylus Color Series"
-msgstr "New Stylus Color ã·ãªã¼ãº"
-
-msgid "New Stylus Photo Series"
-msgstr "New Stylus Photo ã·ãªã¼ãº"
-
msgid "No"
msgstr "ããã"
@@ -4247,12 +4260,6 @@ msgstr "ãã¼ã¸ %d ãéå§ãã¦ãã¾ãã"
msgid "Statement"
msgstr "è¨è¿°"
-msgid "Stylus Color Series"
-msgstr "Stylus Color ã·ãªã¼ãº"
-
-msgid "Stylus Photo Series"
-msgstr "Stylus Photo ã·ãªã¼ãº"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr "ãµãã¹ã¯ãªãã·ã§ã³çªå· %d ã¯åå¨ãã¾ããã"
@@ -6051,6 +6058,9 @@ msgstr "variable-bindings ã®é·ããä¸å®"
#~ msgid "%s: Error - expected destination after \"-b\" option."
#~ msgstr "%s: ã¨ã©ã¼ - \"-b\" ãªãã·ã§ã³ã®ãã¨ã«å®å
ãå¿
è¦ã§ãã"
+#~ msgid "720dpi"
+#~ msgstr "720dpi"
+
#~ msgid "Bad printer URI."
#~ msgstr "䏿£ãªããªã³ã¿ã¼ URI ã§ãã"
@@ -6063,6 +6073,12 @@ msgstr "variable-bindings ã®é·ããä¸å®"
#~ msgid "Enter password:"
#~ msgstr "ãã¹ã¯ã¼ããå
¥å:"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "New Stylus Color ã·ãªã¼ãº"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "New Stylus Photo ã·ãªã¼ãº"
+
#~ msgid "Output for printer %s is sent to %s"
#~ msgstr "ããªã³ã¿ã¼ %s ã®åºå㯠%s ã«éããã¾ã"
@@ -6096,6 +6112,12 @@ msgstr "variable-bindings ã®é·ããä¸å®"
#~ msgstr ""
#~ "ã©ã³ã¯ ææè
åªå
ã¸ã§ã ãã¡ã¤ã« åè¨ãµã¤ãº"
+#~ msgid "Stylus Color Series"
+#~ msgstr "Stylus Color ã·ãªã¼ãº"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Stylus Photo ã·ãªã¼ãº"
+
#~ msgid "The output bin is almost full."
#~ msgstr "æç´ãã¬ã¤ãã»ã¨ãã©ä¸æ¯ã§ãã"
diff --git a/locale/cups_ru.po b/locale/cups_ru.po
index 425dbdf49c..afd0a8fff0 100644
--- a/locale/cups_ru.po
+++ b/locale/cups_ru.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.4\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2009-02-16 12:00-0800\n"
"Last-Translator: Apple Inc.\n"
"Language-Team: Apple Inc.\n"
@@ -799,6 +799,9 @@ msgstr ""
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
@@ -841,6 +844,11 @@ msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
@@ -856,6 +864,9 @@ msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr ""
@@ -896,6 +907,11 @@ msgstr ""
msgid " -L Send requests using content-length."
msgstr ""
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr ""
@@ -934,6 +950,9 @@ msgstr ""
msgid " -a Export all printers."
msgstr ""
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
@@ -991,6 +1010,9 @@ msgstr ""
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
@@ -2207,9 +2229,6 @@ msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720dpi"
-
msgid "75"
msgstr "75"
@@ -3497,12 +3516,6 @@ msgstr ""
msgid "Never"
msgstr "Ðикогда"
-msgid "New Stylus Color Series"
-msgstr "СеÑÐ¸Ñ Stylus Color нового поколениÑ"
-
-msgid "New Stylus Photo Series"
-msgstr "СеÑÐ¸Ñ Stylus Photo нового поколениÑ"
-
msgid "No"
msgstr "ÐеÑ"
@@ -3976,12 +3989,6 @@ msgstr ""
msgid "Statement"
msgstr "ÐпеÑаÑоÑ"
-msgid "Stylus Color Series"
-msgstr "СеÑÐ¸Ñ Stylus Color"
-
-msgid "Stylus Photo Series"
-msgstr "СеÑÐ¸Ñ Stylus Photo"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
@@ -7276,6 +7283,9 @@ msgstr "ÐÐ»Ñ variable-bindings длина не ÑÑÑановлена"
#~ msgid "7 x 9\""
#~ msgstr "7 x 9\""
+#~ msgid "720dpi"
+#~ msgstr "720dpi"
+
#~ msgid "8 x 10\""
#~ msgstr "8 x 10\""
@@ -8562,6 +8572,12 @@ msgstr "ÐÐ»Ñ variable-bindings длина не ÑÑÑановлена"
#~ msgid "Nested classes are not allowed"
#~ msgstr "ÐложеннÑе гÑÑÐ¿Ð¿Ñ Ð½Ðµ допÑÑкаÑÑÑÑ"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "СеÑÐ¸Ñ Stylus Color нового поколениÑ"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "СеÑÐ¸Ñ Stylus Photo нового поколениÑ"
+
#~ msgid "No PPD name!"
#~ msgstr "ÐÐµÑ Ð¸Ð¼ÐµÐ½Ð¸ PPD!"
@@ -8738,6 +8754,12 @@ msgstr "ÐÐ»Ñ variable-bindings длина не ÑÑÑановлена"
#~ msgid "Shipping Address - 2 5/16 x 4\""
#~ msgstr "ÐдÑÐµÑ Ð´Ð¾ÑÑавки - 2 5/16 x 4\""
+#~ msgid "Stylus Color Series"
+#~ msgstr "СеÑÐ¸Ñ Stylus Color"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "СеÑÐ¸Ñ Stylus Photo"
+
#~ msgid "Tabloid (Oversize)"
#~ msgstr "Tabloid (ÑаÑÑиÑеннÑй)"
diff --git a/man/ipptool.man b/man/ipptool.man
index f88a0c1ad5..0b441dd4ca 100644
--- a/man/ipptool.man
+++ b/man/ipptool.man
@@ -1,5 +1,5 @@
.\"
-.\" "$Id: ipptool.man 11880 2014-05-16 06:14:11Z msweet $"
+.\" "$Id: ipptool.man 12140 2014-08-30 01:51:22Z msweet $"
.\"
.\" ipptool man page for CUPS.
.\"
@@ -11,7 +11,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 ipptool 1 "CUPS" "15 May 2014" "Apple Inc."
+.TH ipptool 1 "CUPS" "29 August 2014" "Apple Inc."
.SH NAME
ipptool \- perform internet printing protocol requests
.SH SYNOPSIS
@@ -76,9 +76,12 @@ ipptool \- perform internet printing protocol requests
.B ipptool
sends IPP requests to the specified
.I printer-uri
-and tests and/or displays the results. Each named
+and tests and/or displays the results.
+Each named
.I testfile
-defines one or more requests, including the expected response status, attributes, and values. Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed. The
+defines one or more requests, including the expected response status, attributes, and values.
+Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed.
+The
.I testfile
format is described in
.BR ipptoolfile (5).
@@ -112,7 +115,8 @@ Specifies that
must connect to the printer or server using IPv6.
.TP 5
.B \-C
-Specifies that requests should be sent using the HTTP/1.1 "Transfer\-Encoding: chunked" header, which is required for conformance by all versions of IPP. The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files.
+Specifies that requests should be sent using the HTTP/1.1 "Transfer\-Encoding: chunked" header, which is required for conformance by all versions of IPP.
+The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files.
.TP 5
.B \-E
Forces TLS encryption when connecting to the server using the HTTP "Upgrade" header.
@@ -123,10 +127,12 @@ Specifies that
will continue past errors.
.TP 5
.B \-L
-Specifies that requests should be sent using the HTTP/1.0 "Content\-Length:" header, which is required for conformance by all versions of IPP. The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files.
+Specifies that requests should be sent using the HTTP/1.0 "Content\-Length:" header, which is required for conformance by all versions of IPP.
+The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files.
.TP 5
.BI \-P \ filename.plist
-Specifies that the test results should be written to the named XML (Apple plist) file in addition to the plain text report. This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
+Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (\fB\-t\fR).
+This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
.TP 5
.B \-S
Forces (dedicated) TLS encryption when connecting to the server.
@@ -138,7 +144,8 @@ Specifies a timeout for IPP requests in seconds.
Specifies the default IPP version to use: 1.0, 1.1, 2.0, 2.1, or 2.2. If not specified, version 1.1 is used.
.TP 5
.B \-X
-Specifies that XML (Apple plist) output is desired instead of the plain text report. This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
+Specifies that XML (Apple plist) output is desired instead of the plain text report.
+This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
.TP 5
.B \-c
Specifies that CSV (comma\-separated values) output is desired instead of the plain text output.
@@ -152,7 +159,8 @@ Defines the default request filename for tests.
.BI \-i \ seconds
Specifies that the (last)
.I testfile
-should be repeated at the specified interval. This option is incompatible with the \fB\-X\fR (XML plist output) option.
+should be repeated at the specified interval.
+This option is incompatible with the \fB\-X\fR (XML plist output) option.
.TP 5
.B \-l
Specifies that plain text output is desired.
@@ -160,13 +168,18 @@ Specifies that plain text output is desired.
.BI \-n \ repeat\-count
Specifies that the (last)
.I testfile
-should be repeated the specified number of times. This option is incompatible with the \fI\-X\fR (XML plist output) option.
+should be repeated the specified number of times.
+This option is incompatible with the \fI\-X\fR (XML plist output) option.
+.TP 5
+.B \-q
+Be quiet and produce no output.
.TP 5
.B \-t
Specifies that CUPS test report output is desired instead of the plain text output.
.TP 5
.B \-v
-Specifies that all request and response attributes should be output in CUPS test mode (\fB\-t\fR). This is the default for XML output.
+Specifies that all request and response attributes should be output in CUPS test mode (\fB\-t\fR).
+This is the default for XML output.
.SH EXIT STATUS
The
.B ipptool
@@ -231,5 +244,5 @@ RFC 2911 (http://tools.ietf.org/html/rfc2911),
.SH COPYRIGHT
Copyright \[co] 2007-2014 by Apple Inc.
.\"
-.\" End of "$Id: ipptool.man 11880 2014-05-16 06:14:11Z msweet $".
+.\" End of "$Id: ipptool.man 12140 2014-08-30 01:51:22Z msweet $".
.\"
diff --git a/notifier/rss.c b/notifier/rss.c
index 65e577f0b5..7f518eca3b 100644
--- a/notifier/rss.c
+++ b/notifier/rss.c
@@ -1,27 +1,16 @@
/*
- * "$Id: rss.c 10996 2013-05-29 11:51:34Z msweet $"
+ * "$Id: rss.c 12128 2014-08-28 19:23:23Z msweet $"
*
- * RSS notifier for CUPS.
+ * RSS notifier for CUPS.
*
- * Copyright 2007-2012 by Apple Inc.
- * Copyright 2007 by Easy Software Products.
+ * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007 by Easy Software Products.
*
- * 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
- * file is missing or damaged, see the license at "http://www.cups.org/".
- *
- * Contents:
- *
- * main() - Main entry for the test notifier.
- * compare_rss() - Compare two messages.
- * delete_message() - Free all memory used by a message.
- * load_rss() - Load an existing RSS feed file.
- * new_message() - Create a new RSS message.
- * password_cb() - Return the cached password.
- * save_rss() - Save messages to a RSS file.
- * xml_escape() - Copy a string, escaping &, <, and > as needed.
+ * 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
+ * file is missing or damaged, see the license at "http://www.cups.org/".
*/
/*
@@ -29,6 +18,7 @@
*/
#include
+#include
#include
#include
#include
@@ -629,6 +619,8 @@ save_rss(cups_array_t *rss, /* I - RSS messages */
return (0);
}
+ fchmod(fileno(fp), 0644);
+
fputs("\n", fp);
fputs("\n", fp);
fputs(" \n", fp);
@@ -737,5 +729,5 @@ xml_escape(const char *s) /* I - String to escape */
/*
- * End of "$Id: rss.c 10996 2013-05-29 11:51:34Z msweet $".
+ * End of "$Id: rss.c 12128 2014-08-28 19:23:23Z msweet $".
*/
diff --git a/packaging/cups.spec b/packaging/cups.spec
index 8ea836b328..ca126f111b 100644
--- a/packaging/cups.spec
+++ b/packaging/cups.spec
@@ -44,12 +44,12 @@
Summary: CUPS
Name: cups
-Version: 2.0b1
+Version: 2.0rc1
Release: 1
Epoch: 1
License: GPL
Group: System Environment/Daemons
-Source: http://www.cups.org/software/2.0b1/cups-2.0b1-source.tar.bz2
+Source: http://www.cups.org/software/2.0rc1/cups-2.0rc1-source.tar.bz2
Url: http://www.cups.org
Packager: Anonymous
Vendor: Apple Inc.
diff --git a/ppdc/sample.drv b/ppdc/sample.drv
index 1b6bbceb25..4935feb831 100644
--- a/ppdc/sample.drv
+++ b/ppdc/sample.drv
@@ -1,5 +1,5 @@
//
-// "$Id: sample.drv 11800 2014-04-08 19:53:57Z msweet $"
+// "$Id: sample.drv 12105 2014-08-20 15:27:43Z msweet $"
//
// Driver info file for CUPS-supplied PPDs.
//
@@ -217,90 +217,6 @@ Version "2.0"
*Resolution k 1 8 0 0 120x72dpi
Resolution k 1 8 0 0 240x72dpi
}
-
- // Epson Stylus Color Series
- {
- ModelName "Stylus Color Series"
- Attribute NickName "" "Epson Stylus Color Series"
- PCFileName "stcolor.ppd"
- ModelNumber $EPSON_COLOR
- ColorDevice Yes
-
- HWMargins 8.6 39.6 8.6 25.51
- *MediaSize Letter
- MediaSize Legal
- MediaSize A4
-
- Resolution - 1 0 0 0 180dpi
- *Resolution - 1 0 0 0 360dpi
- Resolution - 1 0 0 0 720dpi
-
- *ColorModel CMYK cmyk banded 1
- ColorModel Gray/Grayscale k chunky 1
- }
-
- // Epson New Stylus Color Series
- {
- ModelName "New Stylus Color Series"
- Attribute NickName "" "Epson New Stylus Color Series"
- PCFileName "stcolor2.ppd"
- ModelNumber $EPSON_ICOLOR
- ColorDevice Yes
-
- HWMargins 8.6 39.6 8.6 25.51
- *MediaSize Letter
- MediaSize Legal
- MediaSize A4
-
- Resolution - 1 0 0 0 180dpi
- *Resolution - 1 0 0 0 360dpi
- Resolution - 1 0 0 0 720dpi
-
- *ColorModel CMYK cmyk banded 1
- ColorModel Gray/Grayscale k chunky 1
- }
-
- // Epson Stylus Color Series
- {
- ModelName "Stylus Photo Series"
- Attribute NickName "" "Epson Stylus Photo Series"
- PCFileName "stphoto.ppd"
- ModelNumber $EPSON_PHOTO
- ColorDevice Yes
-
- HWMargins 8.6 39.6 8.6 25.51
- *MediaSize Letter
- MediaSize Legal
- MediaSize A4
-
- Resolution - 1 0 0 0 180dpi
- *Resolution - 1 0 0 0 360dpi
- Resolution - 1 0 0 0 720dpi
-
- *ColorModel CMYK cmykcm banded 1
- ColorModel Gray/Grayscale k chunky 1
- }
-
- // Epson New Stylus Color Series
- {
- ModelName "New Stylus Photo Series"
- Attribute NickName "" "Epson New Stylus Photo Series"
- PCFileName "stphoto2.ppd"
- ModelNumber $EPSON_IPHOTO
- ColorDevice Yes
-
- HWMargins 8.6 39.6 8.6 25.51
- *MediaSize Letter
- MediaSize Legal
- MediaSize A4
-
- Resolution - 1 0 0 0 180dpi
- *Resolution - 1 0 0 0 360dpi
- Resolution - 1 0 0 0 720dpi
-
- *ColorModel CMYK cmykcm banded 1
- ColorModel Gray/Grayscale k chunky 1
- }
}
// Generic drivers
@@ -1252,5 +1168,5 @@ Version "2.0"
}
//
-// End of "$Id: sample.drv 11800 2014-04-08 19:53:57Z msweet $".
+// End of "$Id: sample.drv 12105 2014-08-20 15:27:43Z msweet $".
//
diff --git a/scheduler/Makefile b/scheduler/Makefile
index cd12aca182..c0c54a4b6d 100644
--- a/scheduler/Makefile
+++ b/scheduler/Makefile
@@ -1,5 +1,5 @@
#
-# "$Id: Makefile 11718 2014-03-21 18:04:48Z msweet $"
+# "$Id: Makefile 12132 2014-08-29 11:27:18Z msweet $"
#
# Scheduler Makefile for CUPS.
#
@@ -171,7 +171,7 @@ install-data:
echo Creating $(REQUESTS)/tmp...
$(INSTALL_DIR) -m 1770 -g $(CUPS_GROUP) $(REQUESTS)/tmp
echo Creating $(CACHEDIR)...
- $(INSTALL_DIR) -m 775 -g $(CUPS_GROUP) $(CACHEDIR)
+ $(INSTALL_DIR) -m 770 -g $(CUPS_GROUP) $(CACHEDIR)
if test "x$(INITDIR)" != x; then \
echo Installing init scripts...; \
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/init.d; \
@@ -547,5 +547,5 @@ include Dependencies
#
-# End of "$Id: Makefile 11718 2014-03-21 18:04:48Z msweet $".
+# End of "$Id: Makefile 12132 2014-08-29 11:27:18Z msweet $".
#
diff --git a/scheduler/auth.c b/scheduler/auth.c
index dbc90cec6d..4e5ad5b9a4 100644
--- a/scheduler/auth.c
+++ b/scheduler/auth.c
@@ -1,5 +1,5 @@
/*
- * "$Id: auth.c 11776 2014-03-28 19:16:05Z msweet $"
+ * "$Id: auth.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Authorization routines for the CUPS scheduler.
*
@@ -2171,23 +2171,23 @@ cups_crypt(const char *pw, /* I - Password string */
* Copy the final sum to the result string and return...
*/
- memcpy(result, salt, salt_end - salt);
+ memcpy(result, salt, (size_t)(salt_end - salt));
ptr = result + (salt_end - salt);
*ptr++ = '$';
for (i = 0; i < 5; i ++, ptr += 4)
{
- n = (((digest[i] << 8) | digest[i + 6]) << 8);
+ n = ((((unsigned)digest[i] << 8) | (unsigned)digest[i + 6]) << 8);
if (i < 4)
- n |= digest[i + 12];
+ n |= (unsigned)digest[i + 12];
else
- n |= digest[5];
+ n |= (unsigned)digest[5];
to64(ptr, n, 4);
}
- to64(ptr, digest[11], 2);
+ to64(ptr, (unsigned)digest[11], 2);
ptr += 2;
*ptr = '\0';
@@ -2327,5 +2327,5 @@ to64(char *s, /* O - Output string */
/*
- * End of "$Id: auth.c 11776 2014-03-28 19:16:05Z msweet $".
+ * End of "$Id: auth.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/scheduler/client.c b/scheduler/client.c
index 7b74131aed..949191000b 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -1,5 +1,5 @@
/*
- * "$Id: client.c 12056 2014-07-22 14:02:56Z msweet $"
+ * "$Id: client.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Client routines for the CUPS scheduler.
*
@@ -934,7 +934,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
return;
}
#else
- if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED, CUPSD_AUTH_NONE))
+ if (!cupsdSendError(con, HTTP_STATUS_NOT_IMPLEMENTED, CUPSD_AUTH_NONE))
{
cupsdCloseClient(con);
return;
@@ -993,7 +993,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
return;
}
#else
- if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED, CUPSD_AUTH_NONE))
+ if (!cupsdSendError(con, HTTP_STATUS_NOT_IMPLEMENTED, CUPSD_AUTH_NONE))
{
cupsdCloseClient(con);
return;
@@ -1891,7 +1891,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
con->request->request.op.version[1],
ippOpString(con->request->request.op.operation_id),
con->request->request.op.request_id);
- con->bytes += ippLength(con->request);
+ con->bytes += (off_t)ippLength(con->request);
}
}
@@ -2912,6 +2912,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
char *ptr; /* Pointer info filename */
size_t plen; /* Remaining length after pointer */
char language[7]; /* Language subdirectory, if any */
+ int perm_check = 1; /* Do permissions check? */
/*
@@ -2921,17 +2922,27 @@ get_file(cupsd_client_t *con, /* I - Client connection */
language[0] = '\0';
if (!strncmp(con->uri, "/ppd/", 5) && !strchr(con->uri + 5, '/'))
+ {
snprintf(filename, len, "%s%s", ServerRoot, con->uri);
+
+ perm_check = 0;
+ }
else if (!strncmp(con->uri, "/icons/", 7) && !strchr(con->uri + 7, '/'))
{
snprintf(filename, len, "%s/%s", CacheDir, con->uri + 7);
if (access(filename, F_OK) < 0)
snprintf(filename, len, "%s/images/generic.png", DocumentRoot);
+
+ perm_check = 0;
}
else if (!strncmp(con->uri, "/rss/", 5) && !strchr(con->uri + 5, '/'))
snprintf(filename, len, "%s/rss/%s", CacheDir, con->uri + 5);
- else if (!strncmp(con->uri, "/admin/conf/", 12))
- snprintf(filename, len, "%s%s", ServerRoot, con->uri + 11);
+ else if (!strcmp(con->uri, "/admin/conf/cupsd.conf"))
+ {
+ strlcpy(filename, ConfigurationFile, len);
+
+ perm_check = 0;
+ }
else if (!strncmp(con->uri, "/admin/log/", 11))
{
if (!strncmp(con->uri + 11, "access_log", 10) && AccessLog[0] == '/')
@@ -2942,6 +2953,8 @@ get_file(cupsd_client_t *con, /* I - Client connection */
strlcpy(filename, PageLog, len);
else
return (NULL);
+
+ perm_check = 0;
}
else if (con->language)
{
@@ -3007,7 +3020,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
* not allow access...
*/
- if (!status && !(filestats->st_mode & S_IROTH))
+ if (!status && perm_check && !(filestats->st_mode & S_IROTH))
{
cupsdLogClient(con, CUPSD_LOG_INFO, "Files/directories such as \"%s\" must be world-readable.", filename);
return (NULL);
@@ -3115,7 +3128,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
* not allow access...
*/
- if (!status && !(filestats->st_mode & S_IROTH))
+ if (!status && perm_check && !(filestats->st_mode & S_IROTH))
{
cupsdLogClient(con, CUPSD_LOG_INFO, "Files/directories such as \"%s\" must be world-readable.", filename);
return (NULL);
@@ -4042,5 +4055,5 @@ write_pipe(cupsd_client_t *con) /* I - Client connection */
/*
- * End of "$Id: client.c 12056 2014-07-22 14:02:56Z msweet $".
+ * End of "$Id: client.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/scheduler/conf.c b/scheduler/conf.c
index cd468934ce..bf9a079e44 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -1,5 +1,5 @@
/*
- * "$Id: conf.c 11931 2014-06-16 16:10:58Z msweet $"
+ * "$Id: conf.c 12132 2014-08-29 11:27:18Z msweet $"
*
* Configuration routines for the CUPS scheduler.
*
@@ -1076,7 +1076,7 @@ cupsdReadConfiguration(void)
if ((cupsdCheckPermissions(RequestRoot, NULL, 0710, RunUser,
Group, 1, 1) < 0 ||
- cupsdCheckPermissions(CacheDir, NULL, 0775, RunUser,
+ cupsdCheckPermissions(CacheDir, NULL, 0770, RunUser,
Group, 1, 1) < 0 ||
cupsdCheckPermissions(temp, NULL, 0775, RunUser,
Group, 1, 1) < 0 ||
@@ -4087,5 +4087,5 @@ set_policy_defaults(cupsd_policy_t *pol)/* I - Policy */
/*
- * End of "$Id: conf.c 11931 2014-06-16 16:10:58Z msweet $".
+ * End of "$Id: conf.c 12132 2014-08-29 11:27:18Z msweet $".
*/
diff --git a/scheduler/cups-driverd.cxx b/scheduler/cups-driverd.cxx
index 8b047a9e75..7828448054 100644
--- a/scheduler/cups-driverd.cxx
+++ b/scheduler/cups-driverd.cxx
@@ -1,5 +1,5 @@
/*
- * "$Id: cups-driverd.cxx 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: cups-driverd.cxx 12124 2014-08-28 15:37:22Z msweet $"
*
* PPD/driver support for CUPS.
*
@@ -1321,7 +1321,7 @@ list_ppds(int request_id, /* I - Request ID */
if (device_id_re &&
!regexec(device_id_re, ppd->record.device_id,
- (int)(sizeof(re_matches) / sizeof(re_matches[0])),
+ (size_t)(sizeof(re_matches) / sizeof(re_matches[0])),
re_matches, 0))
{
/*
@@ -1351,7 +1351,7 @@ list_ppds(int request_id, /* I - Request ID */
if (make_and_model_re &&
!regexec(make_and_model_re, ppd->record.make_and_model,
- (int)(sizeof(re_matches) / sizeof(re_matches[0])),
+ (size_t)(sizeof(re_matches) / sizeof(re_matches[0])),
re_matches, 0))
{
// See how much of the make-and-model string we matched...
@@ -2903,5 +2903,5 @@ regex_string(const char *s) /* I - String to compare */
/*
- * End of "$Id: cups-driverd.cxx 11558 2014-02-06 18:33:34Z msweet $".
+ * End of "$Id: cups-driverd.cxx 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index 9806f10582..05371e6ded 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp.c 12067 2014-07-31 00:02:30Z msweet $"
+ * "$Id: ipp.c 12124 2014-08-28 15:37:22Z msweet $"
*
* IPP routines for the CUPS scheduler.
*
@@ -2715,7 +2715,6 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
cupsdLogMessage(CUPSD_LOG_DEBUG,
"Copied PPD file successfully");
- chmod(dstfile, 0644);
}
}
@@ -4623,7 +4622,7 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
* Open the destination file for a copy...
*/
- if ((dst = cupsFileOpen(to, "wb")) == NULL)
+ if ((dst = cupsdCreateConfFile(to, ConfigFilePerm)) == NULL)
{
cupsFreeOptions(num_defaults, defaults);
cupsFileClose(src);
@@ -4678,7 +4677,7 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
unlink(tempfile);
- return (cupsFileClose(dst));
+ return (cupsdCloseCreatedConfFile(dst, to));
}
@@ -10824,8 +10823,10 @@ validate_job(cupsd_client_t *con, /* I - Client connection */
ipp_attribute_t *uri) /* I - Printer URI */
{
http_status_t status; /* Policy status */
- ipp_attribute_t *attr, /* Current attribute */
- *auth_info; /* auth-info attribute */
+ ipp_attribute_t *attr; /* Current attribute */
+#ifdef HAVE_SSL
+ ipp_attribute_t *auth_info; /* auth-info attribute */
+#endif /* HAVE_SSL */
ipp_attribute_t *format, /* Document-format attribute */
*name; /* Job-name attribute */
cups_ptype_t dtype; /* Destination type (printer/class) */
@@ -10991,7 +10992,9 @@ validate_job(cupsd_client_t *con, /* I - Client connection */
* Check policy...
*/
+#ifdef HAVE_SSL
auth_info = ippFindAttribute(con->request, "auth-info", IPP_TAG_TEXT);
+#endif /* HAVE_SSL */
if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK)
{
@@ -11093,5 +11096,5 @@ validate_user(cupsd_job_t *job, /* I - Job */
/*
- * End of "$Id: ipp.c 12067 2014-07-31 00:02:30Z msweet $".
+ * End of "$Id: ipp.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/scheduler/job.c b/scheduler/job.c
index 0dbf39b6fa..b05050b6a0 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -1,5 +1,5 @@
/*
- * "$Id: job.c 12067 2014-07-31 00:02:30Z msweet $"
+ * "$Id: job.c 12140 2014-08-30 01:51:22Z msweet $"
*
* Job management routines for the CUPS scheduler.
*
@@ -235,10 +235,7 @@ cupsdCheckJobs(void)
curtime = time(NULL);
- cupsdLogMessage(CUPSD_LOG_DEBUG2,
- "cupsdCheckJobs: %d active jobs, sleeping=%d, reload=%d, "
- "curtime=%ld", cupsArrayCount(ActiveJobs), Sleeping,
- NeedReload, (long)curtime);
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCheckJobs: %d active jobs, sleeping=%d, ac-power=%d, reload=%d, curtime=%ld", cupsArrayCount(ActiveJobs), Sleeping, ACPower, NeedReload, (long)curtime);
for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
job;
@@ -332,7 +329,7 @@ cupsdCheckJobs(void)
*/
if (job->state_value == IPP_JOB_PENDING && !NeedReload &&
- !Sleeping && !DoingShutdown && !job->printer)
+ (!Sleeping || ACPower) && !DoingShutdown && !job->printer)
{
printer = cupsdFindDest(job->dest);
pclass = NULL;
@@ -5289,5 +5286,5 @@ update_job_attrs(cupsd_job_t *job, /* I - Job to update */
/*
- * End of "$Id: job.c 12067 2014-07-31 00:02:30Z msweet $".
+ * End of "$Id: job.c 12140 2014-08-30 01:51:22Z msweet $".
*/
diff --git a/scheduler/listen.c b/scheduler/listen.c
index 842d378771..a704121654 100644
--- a/scheduler/listen.c
+++ b/scheduler/listen.c
@@ -1,5 +1,5 @@
/*
- * "$Id: listen.c 11717 2014-03-21 16:42:53Z msweet $"
+ * "$Id: listen.c 12080 2014-08-04 13:23:50Z msweet $"
*
* Server listening routines for the CUPS scheduler.
*
@@ -274,23 +274,14 @@ cupsdStopListening(void)
lis;
lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
{
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_LAUNCHD) || defined(HAVE_SYSTEMD)
if (lis->fd != -1 && !lis->on_demand)
httpAddrClose(&(lis->address), lis->fd);
-#elif defined(HAVE_LAUNCHD)
- if (lis->fd != -1)
- {
- if (lis->on_demand)
- httpAddrClose(NULL, lis->fd);
- else
- httpAddrClose(&(lis->address), lis->fd);
- }
-
#else
if (lis->fd != -1)
httpAddrClose(&(lis->address), lis->fd);
-#endif /* HAVE_SYSTEMD */
+#endif /* HAVE_LAUNCHD || HAVE_SYSTEMD */
lis->fd = -1;
}
@@ -298,5 +289,5 @@ cupsdStopListening(void)
/*
- * End of "$Id: listen.c 11717 2014-03-21 16:42:53Z msweet $".
+ * End of "$Id: listen.c 12080 2014-08-04 13:23:50Z msweet $".
*/
diff --git a/scheduler/main.c b/scheduler/main.c
index 92c10b127e..1d3ac1b555 100644
--- a/scheduler/main.c
+++ b/scheduler/main.c
@@ -1,5 +1,5 @@
/*
- * "$Id: main.c 11722 2014-03-21 18:28:30Z msweet $"
+ * "$Id: main.c 12140 2014-08-30 01:51:22Z msweet $"
*
* Main loop for the CUPS scheduler.
*
@@ -119,8 +119,7 @@ main(int argc, /* I - Number of command-line args */
int run_as_child = 0;
/* Needed for background fork/exec */
#ifdef __APPLE__
- int use_sysman = !getuid();
- /* Use system management functions? */
+ int use_sysman = 1; /* Use system management functions? */
#else
time_t netif_time = 0; /* Time since last network update */
#endif /* __APPLE__ */
@@ -137,7 +136,7 @@ main(int argc, /* I - Number of command-line args */
if (getuid() != geteuid())
{
- fputs("cupsd: Cannot run as a setuid program\n", stderr);
+ fputs("cupsd: Cannot run as a setuid program.\n", stderr);
return (1);
}
#endif /* HAVE_GETEUID */
@@ -726,19 +725,6 @@ main(int argc, /* I - Number of command-line args */
break;
}
-#if defined(HAVE_LAUNCHD) || defined(HAVE_SYSTEMD)
- if (OnDemand)
- {
- /*
- * If we were started by launchd or systemd, get the listen socket file
- * descriptors...
- */
-
- service_checkin();
- service_checkout();
- }
-#endif /* HAVE_LAUNCHD || HAVE_SYSTEMD */
-
/*
* Startup the server...
*/
@@ -1885,6 +1871,8 @@ service_checkin(void)
# endif /* HAVE_SSL */
}
+ free(ld_sockets);
+
# elif defined(HAVE_LAUNCHD)
size_t i, /* Looping var */
count; /* Number of listeners */
@@ -2170,5 +2158,5 @@ usage(int status) /* O - Exit status */
/*
- * End of "$Id: main.c 11722 2014-03-21 18:28:30Z msweet $".
+ * End of "$Id: main.c 12140 2014-08-30 01:51:22Z msweet $".
*/
diff --git a/scheduler/process.c b/scheduler/process.c
index 1b1aeae8ff..d23a352c7f 100644
--- a/scheduler/process.c
+++ b/scheduler/process.c
@@ -1,5 +1,5 @@
/*
- * "$Id: process.c 12034 2014-07-16 19:37:34Z msweet $"
+ * "$Id: process.c 12102 2014-08-20 15:19:09Z msweet $"
*
* Process management routines for the CUPS scheduler.
*
@@ -215,6 +215,8 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
" #\"^/private/var/mysql$\""
" #\"^/private/var/run$\""
" #\"^/private/var/spool$\""
+ " #\"^/private/var/tmp$\""
+ " #\"^/private/var/tmp/\""
" #\"^/usr/bin$\"" /* /usr/bin */
" #\"^/usr/bin/\"" /* /usr/bin/... */
" #\"^/usr/libexec/cups$\"" /* /usr/libexec/cups */
@@ -223,27 +225,10 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
" #\"^/usr/libexec/fax/\"" /* /usr/libexec/fax/... */
" #\"^/usr/sbin$\"" /* /usr/sbin */
" #\"^/usr/sbin/\"" /* /usr/sbin/... */
- " #\"^/Library/Application Support$\""
- " #\"^/Library/Application Support/\""
- " #\"^/Library/Caches$\""
- " #\"^/Library/ColorSync$\""
- " #\"^/Library/ColorSync/Profiles$\""
- " #\"^/Library/ColorSync/Profiles/\""
- " #\"^/Library/Fonts$\""
- " #\"^/Library/Fonts/\""
- " #\"^/Library/Frameworks$\""
- " #\"^/Library/Frameworks/\""
- " #\"^/Library/Keychains$\""
- " #\"^/Library/Keychains/\""
- " #\"^/Library/Logs$\""
- " #\"^/Library/Printers$\""
- " #\"^/Library/Printers/\""
- " #\"^/Library/Security$\""
- " #\"^/Library/Security/\""
- " #\"^/Library/WebServer$\""
- " #\"^/System/Library/ColorSync$\""
- " #\"^/System/Library/ColorSync/Profiles$\""
- " #\"^/System/Library/ColorSync/Profiles/\""
+ " #\"^/Library$\"" /* /Library */
+ " #\"^/Library/\"" /* /Library/... */
+ " #\"^/System$\"" /* /System */
+ " #\"^/System/\"" /* /System/... */
" #\"^%s/Library$\"" /* RequestRoot/Library */
" #\"^%s/Library/\"" /* RequestRoot/Library/... */
" #\"^%s$\"" /* ServerBin */
@@ -292,6 +277,7 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
" #\"^%s/\"" /* CUPS_TESTROOT/... */
"))\n",
testroot);
+ cupsFilePrintf(fp, "(allow sysctl*)\n");
}
if (job_id)
{
@@ -314,7 +300,7 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
cupsFilePuts(fp, "(allow distributed-notification-post)\n");
/* Allow outbound networking to local services */
cupsFilePuts(fp, "(allow network-outbound"
- "\n (regex #\"^/private/var/run/\" #\"^/private/tmp/\")");
+ "\n (regex #\"^/private/var/run/\" #\"^/private/tmp/\" #\"^/private/var/tmp/\")");
for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners);
lis;
lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
@@ -884,5 +870,5 @@ cupsd_requote(char *dst, /* I - Destination buffer */
/*
- * End of "$Id: process.c 12034 2014-07-16 19:37:34Z msweet $".
+ * End of "$Id: process.c 12102 2014-08-20 15:19:09Z msweet $".
*/
diff --git a/scheduler/sysman.c b/scheduler/sysman.c
index 4b64215319..315db7f4d5 100644
--- a/scheduler/sysman.c
+++ b/scheduler/sysman.c
@@ -1,9 +1,9 @@
/*
- * "$Id: sysman.c 11406 2013-11-07 12:47:57Z msweet $"
+ * "$Id: sysman.c 12140 2014-08-30 01:51:22Z msweet $"
*
* System management functions for the CUPS scheduler.
*
- * Copyright 2007-2013 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
* Copyright 2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -19,31 +19,29 @@
*/
#include "cupsd.h"
-#ifdef HAVE_VPROC_TRANSACTION_BEGIN
-# include
-#endif /* HAVE_VPROC_TRANSACTION_BEGIN */
#ifdef __APPLE__
+# include
# include
#endif /* __APPLE__ */
/*
* The system management functions cover disk and power management which
- * are primarily used on portable computers.
+ * are primarily used for portable computers.
*
* Disk management involves delaying the write of certain configuration
* and state files to minimize the number of times the disk has to spin
- * up.
+ * up or flash to be written to.
*
* Power management support is currently only implemented on OS X, but
* essentially we use four functions to let the OS know when it is OK to
* put the system to sleep, typically when we are not in the middle of
- * printing a job.
- *
- * Once put to sleep, we invalidate all remote printers since it is common
- * to wake up in a new location/on a new wireless network.
+ * printing a job. And on OS X we can also "sleep print" - basically the
+ * system only wakes up long enough to service network requests and process
+ * print jobs.
*/
+
/*
* 'cupsdCleanDirty()' - Write dirty config and state files.
*/
@@ -132,9 +130,10 @@ cupsdSetBusyState(void)
"Active clients and printing jobs",
"Active clients, printing jobs, and dirty files"
};
-#ifdef HAVE_VPROC_TRANSACTION_BEGIN
+#ifdef __APPLE__
static vproc_transaction_t vtran = 0; /* Current busy transaction */
-#endif /* HAVE_VPROC_TRANSACTION_BEGIN */
+ static IOPMAssertionID keep_awake = 0;/* Keep the system awake while printing */
+#endif /* __APPLE__ */
/*
@@ -174,7 +173,7 @@ cupsdSetBusyState(void)
{
busy = newbusy;
-#ifdef HAVE_VPROC_TRANSACTION_BEGIN
+#ifdef __APPLE__
if (busy && !vtran)
vtran = vproc_transaction_begin(NULL);
else if (!busy && vtran)
@@ -182,8 +181,25 @@ cupsdSetBusyState(void)
vproc_transaction_end(NULL, vtran);
vtran = 0;
}
-#endif /* HAVE_VPROC_TRANSACTION_BEGIN */
+#endif /* __APPLE__ */
+ }
+
+#ifdef __APPLE__
+ if (cupsArrayCount(PrintingJobs) > 0 && !keep_awake)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Asserting NetworkClientActive.");
+
+ IOPMAssertionCreateWithName(kIOPMAssertNetworkClientActive,
+ kIOPMAssertionLevelOn,
+ CFSTR("org.cups.cupsd"), &keep_awake);
}
+ else if (cupsArrayCount(PrintingJobs) == 0 && keep_awake)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Releasing power assertion.");
+ IOPMAssertionRelease(keep_awake);
+ keep_awake = 0;
+ }
+#endif /* __APPLE__ */
}
@@ -198,8 +214,10 @@ cupsdSetBusyState(void)
* Include MacOS-specific headers...
*/
+# include
# include
# include
+# include
# include
# include
# include
@@ -265,6 +283,7 @@ static CFStringRef ComputerNameKey = NULL,
/* Netowrk interface key */
static cupsd_sysevent_t LastSysEvent; /* Last system event (for delayed sleep) */
static int NameChanged = 0;/* Did we get a 'name changed' event during sleep? */
+static int PSToken = 0; /* Power source notifications */
/*
@@ -308,6 +327,8 @@ cupsdStartSystemMonitor(void)
int flags; /* fcntl flags on pipe */
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSystemMonitor()");
+
if (cupsdOpenPipe(SysEventPipes))
{
cupsdLogMessage(CUPSD_LOG_ERROR, "System event monitor pipe() failed - %s!",
@@ -332,6 +353,14 @@ cupsdStartSystemMonitor(void)
pthread_mutex_init(&SysEventThreadMutex, NULL);
pthread_cond_init(&SysEventThreadCond, NULL);
pthread_create(&SysEventThread, NULL, (void *(*)())sysEventThreadEntry, NULL);
+
+ /*
+ * Monitor for power source changes via dispatch queue...
+ */
+
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSystemMonitor: IOPSGetTimeRemainingEstimate=%f", IOPSGetTimeRemainingEstimate());
+ ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited;
+ notify_register_dispatch(kIOPSNotifyPowerSource, &PSToken, dispatch_get_main_queue(), ^(int t) { ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited; });
}
@@ -345,6 +374,8 @@ cupsdStopSystemMonitor(void)
CFRunLoopRef rl; /* The event handler runloop */
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopSystemMonitor()");
+
if (SysEventThread)
{
/*
@@ -375,6 +406,12 @@ cupsdStopSystemMonitor(void)
cupsdRemoveSelect(SysEventPipes[0]);
cupsdClosePipe(SysEventPipes);
}
+
+ if (PSToken != 0)
+ {
+ notify_cancel(PSToken);
+ PSToken = 0;
+ }
}
@@ -1034,5 +1071,5 @@ sysUpdateNames(void)
/*
- * End of "$Id: sysman.c 11406 2013-11-07 12:47:57Z msweet $".
+ * End of "$Id: sysman.c 12140 2014-08-30 01:51:22Z msweet $".
*/
diff --git a/scheduler/sysman.h b/scheduler/sysman.h
index b911feb97a..9da386da51 100644
--- a/scheduler/sysman.h
+++ b/scheduler/sysman.h
@@ -1,16 +1,16 @@
/*
- * "$Id: sysman.h 10996 2013-05-29 11:51:34Z msweet $"
+ * "$Id: sysman.h 12140 2014-08-30 01:51:22Z msweet $"
*
- * System management definitions for the CUPS scheduler.
+ * System management definitions for the CUPS scheduler.
*
- * Copyright 2007-2011 by Apple Inc.
- * Copyright 2006 by Easy Software Products.
+ * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2006 by Easy Software Products.
*
- * 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
- * file is missing or damaged, see the license at "http://www.cups.org/".
+ * 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
+ * file is missing or damaged, see the license at "http://www.cups.org/".
*/
/*
@@ -35,7 +35,9 @@ VAR int DirtyFiles VALUE(CUPSD_DIRTY_NONE),
/* How often do we write dirty files? */
VAR time_t DirtyCleanTime VALUE(0);
/* When to clean dirty files next */
-VAR int Sleeping VALUE(0);
+VAR int ACPower VALUE(-1),
+ /* Is the system on AC power? */
+ Sleeping VALUE(0);
/* Non-zero if machine is entering or *
* in a sleep state... */
VAR time_t SleepJobs VALUE(0);
@@ -60,5 +62,5 @@ extern void cupsdStopSystemMonitor(void);
/*
- * End of "$Id: sysman.h 10996 2013-05-29 11:51:34Z msweet $".
+ * End of "$Id: sysman.h 12140 2014-08-30 01:51:22Z msweet $".
*/
diff --git a/systemv/lpstat.c b/systemv/lpstat.c
index 8190ba11b6..9c076cb255 100644
--- a/systemv/lpstat.c
+++ b/systemv/lpstat.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpstat.c 12066 2014-07-30 18:30:44Z msweet $"
+ * "$Id: lpstat.c 12124 2014-08-28 15:37:22Z msweet $"
*
* "lpstat" command for CUPS.
*
@@ -1270,7 +1270,6 @@ show_jobs(const char *dests, /* I - Destinations */
*reasons; /* Job state reasons attribute */
const char *dest, /* Pointer into job-printer-uri */
*username, /* Pointer to job-originating-user-name */
- *title, /* Pointer to job-name */
*message, /* Pointer to job-printer-state-message */
*time_at; /* time-at-xxx attribute name to use */
int rank, /* Rank in queue */
@@ -1385,7 +1384,6 @@ show_jobs(const char *dests, /* I - Destinations */
username = NULL;
dest = NULL;
jobtime = 0;
- title = "no title";
message = NULL;
reasons = NULL;
@@ -1411,9 +1409,6 @@ show_jobs(const char *dests, /* I - Destinations */
else if (!strcmp(attr->name, "job-originating-user-name") &&
attr->value_tag == IPP_TAG_NAME)
username = attr->values[0].string.text;
- else if (!strcmp(attr->name, "job-name") &&
- attr->value_tag == IPP_TAG_NAME)
- title = attr->values[0].string.text;
else if (!strcmp(attr->name, "job-state-reasons") &&
attr->value_tag == IPP_TAG_KEYWORD)
reasons = attr;
@@ -2039,5 +2034,5 @@ show_scheduler(void)
/*
- * End of "$Id: lpstat.c 12066 2014-07-30 18:30:44Z msweet $".
+ * End of "$Id: lpstat.c 12124 2014-08-28 15:37:22Z msweet $".
*/
diff --git a/templates/restart.tmpl b/templates/restart.tmpl
index 6455652f89..47d39d0716 100644
--- a/templates/restart.tmpl
+++ b/templates/restart.tmpl
@@ -1,4 +1,4 @@
Change Settings
-
Please stand by while the server restarts...
diff --git a/test/Dependencies b/test/Dependencies
index e7f0cfc5ee..8405117d24 100644
--- a/test/Dependencies
+++ b/test/Dependencies
@@ -7,8 +7,7 @@ ippfind.o: ippfind.c ../cups/cups-private.h ../cups/string-private.h \
../cups/ppd-private.h ../cups/ppd.h ../cups/thread-private.h
ippserver.o: ippserver.c ../cups/cups.h ../cups/file.h \
../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \
- ../cups/language.h ../cups/pwg.h ../config.h ../cups/string-private.h \
- ../cups/thread-private.h
+ ../cups/language.h ../cups/pwg.h ../config.h ../cups/thread-private.h
ipptool.o: ipptool.c ../cups/cups-private.h ../cups/string-private.h \
../config.h ../cups/debug-private.h ../cups/versioning.h \
../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \
diff --git a/test/get-completed-jobs.test b/test/get-completed-jobs.test
index 00d3754d21..504ab824f3 100644
--- a/test/get-completed-jobs.test
+++ b/test/get-completed-jobs.test
@@ -1,9 +1,9 @@
#
-# "$Id: get-completed-jobs.test 11398 2013-11-06 20:11:11Z msweet $"
+# "$Id: get-completed-jobs.test 12088 2014-08-07 01:09:21Z msweet $"
#
# Get list of completed jobs.
#
-# Copyright 2007-2012 by Apple Inc.
+# Copyright 2007-2014 by Apple Inc.
# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -32,7 +32,7 @@
ATTR uri printer-uri $uri
ATTR keyword which-jobs completed
ATTR keyword requested-attributes
- job-id,job-state,job-state-reasons,job-name,job-originating-user-name,job-media-sheets-completed
+ job-id,job-uri,job-state,job-state-reasons,job-name,job-originating-user-name,job-media-sheets-completed
# What statuses are OK?
STATUS successful-ok
@@ -47,5 +47,5 @@
#
-# End of "$Id: get-completed-jobs.test 11398 2013-11-06 20:11:11Z msweet $".
+# End of "$Id: get-completed-jobs.test 12088 2014-08-07 01:09:21Z msweet $".
#
diff --git a/test/get-jobs.test b/test/get-jobs.test
index 2b2c031e8c..d8cc5149dd 100644
--- a/test/get-jobs.test
+++ b/test/get-jobs.test
@@ -1,9 +1,9 @@
#
-# "$Id: get-jobs.test 11398 2013-11-06 20:11:11Z msweet $"
+# "$Id: get-jobs.test 12088 2014-08-07 01:09:21Z msweet $"
#
# Get list of not-completed jobs.
#
-# Copyright 2007-2012 by Apple Inc.
+# Copyright 2007-2014 by Apple Inc.
# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -31,7 +31,7 @@
ATTR language attributes-natural-language en
ATTR uri printer-uri $uri
ATTR keyword requested-attributes
- job-id,job-state,job-state-reasons,job-name,job-originating-user-name,job-media-sheets,job-media-sheets-completed,job-impressions,job-impressions-completed
+ job-id,job-uri,job-state,job-state-reasons,job-name,job-originating-user-name,job-media-sheets,job-media-sheets-completed,job-impressions,job-impressions-completed
# What statuses are OK?
STATUS successful-ok
@@ -49,5 +49,5 @@
#
-# End of "$Id: get-jobs.test 11398 2013-11-06 20:11:11Z msweet $".
+# End of "$Id: get-jobs.test 12088 2014-08-07 01:09:21Z msweet $".
#
diff --git a/test/identify-printer.test b/test/identify-printer.test
new file mode 100644
index 0000000000..b97bb71dc8
--- /dev/null
+++ b/test/identify-printer.test
@@ -0,0 +1,20 @@
+# Make the printer beep
+{
+ # The name of the test...
+ NAME "Identify Printer with Sound"
+
+ # The operation to use
+ OPERATION Identify-Printer
+
+ # Attributes, starting in the operation group...
+ GROUP operation-attributes-tag
+ ATTR charset attributes-charset utf-8
+ ATTR language attributes-natural-language en
+ ATTR uri printer-uri $uri
+ ATTR name requesting-user-name $user
+ ATTR keyword identify-actions sound
+
+ # What statuses are OK?
+ STATUS successful-ok
+ STATUS successful-ok-ignored-or-substituted-attributes
+}
diff --git a/test/ippfind.c b/test/ippfind.c
index 517eacb43c..758de0c703 100644
--- a/test/ippfind.c
+++ b/test/ippfind.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ippfind.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: ippfind.c 12139 2014-08-29 17:50:38Z msweet $"
*
* Utility to find IPP printers via Bonjour/DNS-SD and optionally run
* commands such as IPP and Bonjour conformance tests. This tool is
@@ -242,7 +242,7 @@ main(int argc, /* I - Number of command-line args */
{
int i, /* Looping var */
have_output = 0,/* Have output expression */
- status = IPPFIND_EXIT_TRUE;
+ status = IPPFIND_EXIT_FALSE;
/* Exit status */
const char *opt, /* Option character */
*search; /* Current browse/resolve string */
@@ -307,6 +307,10 @@ main(int argc, /* I - Number of command-line args */
* Parse command-line...
*/
+ if (getenv("IPPFIND_DEBUG"))
+ for (i = 1; i < argc; i ++)
+ fprintf(stderr, "argv[%d]=\"%s\"\n", i, argv[i]);
+
for (i = 1; i < argc; i ++)
{
if (argv[i][0] == '-')
@@ -603,9 +607,9 @@ main(int argc, /* I - Number of command-line args */
NULL)) == NULL)
return (IPPFIND_EXIT_MEMORY);
}
- else if (!strncmp(argv[i], "--txt-", 5))
+ else if (!strncmp(argv[i], "--txt-", 6))
{
- const char *key = argv[i] + 5;/* TXT key */
+ const char *key = argv[i] + 6;/* TXT key */
i ++;
if (i >= argc)
@@ -1420,8 +1424,8 @@ main(int argc, /* I - Number of command-line args */
service->ref = NULL;
}
- if (!eval_expr(service, expressions))
- status = IPPFIND_EXIT_FALSE;
+ if (eval_expr(service, expressions))
+ status = IPPFIND_EXIT_TRUE;
service->is_processed = 1;
}
@@ -1803,6 +1807,9 @@ eval_expr(ippfind_srv_t *service, /* I - Service */
result = !regexec(&(expression->re), val, 0, NULL, 0);
else
result = 0;
+
+ if (getenv("IPPFIND_DEBUG"))
+ printf("TXT_REGEX of \"%s\": %d\n", val, result);
break;
case IPPFIND_OP_URI_REGEX :
result = !regexec(&(expression->re), service->uri, 0, NULL, 0);
@@ -1976,9 +1983,9 @@ exec_program(ippfind_srv_t *service, /* I - Service */
strlcpy(tptr, scheme + 22, sizeof(temp) - (size_t)(tptr - temp));
else if (!strncmp(keyword, "txt_", 4))
{
- if ((ptr = (char *)cupsGetOption(keyword + 4, service->num_txt,
- service->txt)) != NULL)
- strlcpy(tptr, strdup(ptr), sizeof(temp) - (size_t)(tptr - temp));
+ const char *txt = cupsGetOption(keyword + 4, service->num_txt, service->txt);
+ if (txt)
+ strlcpy(tptr, txt, sizeof(temp) - (size_t)(tptr - temp));
else
*tptr = '\0';
}
@@ -2003,6 +2010,17 @@ exec_program(ippfind_srv_t *service, /* I - Service */
}
#ifdef WIN32
+ if (getenv("IPPFIND_DEBUG"))
+ {
+ printf("\nProgram:\n %s\n", args[0]);
+ puts("\nArguments:");
+ for (i = 0; i < num_args; i ++)
+ printf(" %s\n", myargv[i]);
+ puts("\nEnvironment:");
+ for (i = 0; i < myenvc; i ++)
+ printf(" %s\n", myenvp[i]);
+ }
+
status = _spawnvpe(_P_WAIT, args[0], myargv, myenvp);
#else
@@ -2070,6 +2088,18 @@ exec_program(ippfind_srv_t *service, /* I - Service */
* Return whether the program succeeded or crashed...
*/
+ if (getenv("IPPFIND_DEBUG"))
+ {
+#ifdef WIN32
+ printf("Exit Status: %d\n", status);
+#else
+ if (WIFEXITED(status))
+ printf("Exit Status: %d\n", WEXITSTATUS(status));
+ else
+ printf("Terminating Signal: %d\n", WTERMSIG(status));
+#endif /* WIN32 */
+ }
+
return (status == 0);
}
@@ -2805,5 +2835,5 @@ show_version(void)
/*
- * End of "$Id: ippfind.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: ippfind.c 12139 2014-08-29 17:50:38Z msweet $".
*/
diff --git a/test/ippserver.c b/test/ippserver.c
index 8ee491fbfc..f2055a1971 100644
--- a/test/ippserver.c
+++ b/test/ippserver.c
@@ -1,7 +1,7 @@
/*
- * "$Id: ippserver.c 11986 2014-07-02 15:52:01Z msweet $"
+ * "$Id: ippserver.c 12136 2014-08-29 15:19:40Z msweet $"
*
- * Sample IPP/2.0 server for CUPS.
+ * Sample IPP Everywhere server for CUPS.
*
* Copyright 2010-2014 by Apple Inc.
*
@@ -27,20 +27,37 @@
* Include necessary headers...
*/
-#include /* Public API */
#include /* CUPS configuration header */
-#include /* For string functions */
+#include /* Public API */
+#include /* CUPS string functions */
#include /* For multithreading functions */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef WIN32
+# include
+# include
+# include
+# define WEXITSTATUS(s) (s)
+# include
+typedef ULONG nfds_t;
+# define poll WSAPoll
+#else
+extern char **environ;
-#include
+# include
+# include
+# include
+#endif /* WIN32 */
#ifdef HAVE_DNSSD
# include
#endif /* HAVE_DNSSD */
-#include
-#include
-#include
-#include
#ifdef HAVE_SYS_MOUNT_H
# include
#endif /* HAVE_SYS_MOUNT_H */
@@ -59,33 +76,33 @@
* Constants...
*/
-enum _ipp_preasons_e /* printer-state-reasons bit values */
+enum _ipp_preason_e /* printer-state-reasons bit values */
{
- _IPP_PSTATE_NONE = 0x0000, /* none */
- _IPP_PSTATE_OTHER = 0x0001, /* other */
- _IPP_PSTATE_COVER_OPEN = 0x0002, /* cover-open */
- _IPP_PSTATE_INPUT_TRAY_MISSING = 0x0004,
+ _IPP_PREASON_NONE = 0x0000, /* none */
+ _IPP_PREASON_OTHER = 0x0001, /* other */
+ _IPP_PREASON_COVER_OPEN = 0x0002, /* cover-open */
+ _IPP_PREASON_INPUT_TRAY_MISSING = 0x0004,
/* input-tray-missing */
- _IPP_PSTATE_MARKER_SUPPLY_EMPTY = 0x0008,
+ _IPP_PREASON_MARKER_SUPPLY_EMPTY = 0x0008,
/* marker-supply-empty */
- _IPP_PSTATE_MARKER_SUPPLY_LOW = 0x0010,
- /* marker-suply-low */
- _IPP_PSTATE_MARKER_WASTE_ALMOST_FULL = 0x0020,
+ _IPP_PREASON_MARKER_SUPPLY_LOW = 0x0010,
+ /* marker-supply-low */
+ _IPP_PREASON_MARKER_WASTE_ALMOST_FULL = 0x0020,
/* marker-waste-almost-full */
- _IPP_PSTATE_MARKER_WASTE_FULL = 0x0040,
+ _IPP_PREASON_MARKER_WASTE_FULL = 0x0040,
/* marker-waste-full */
- _IPP_PSTATE_MEDIA_EMPTY = 0x0080, /* media-empty */
- _IPP_PSTATE_MEDIA_JAM = 0x0100, /* media-jam */
- _IPP_PSTATE_MEDIA_LOW = 0x0200, /* media-low */
- _IPP_PSTATE_MEDIA_NEEDED = 0x0400, /* media-needed */
- _IPP_PSTATE_MOVING_TO_PAUSED = 0x0800,
+ _IPP_PREASON_MEDIA_EMPTY = 0x0080, /* media-empty */
+ _IPP_PREASON_MEDIA_JAM = 0x0100, /* media-jam */
+ _IPP_PREASON_MEDIA_LOW = 0x0200, /* media-low */
+ _IPP_PREASON_MEDIA_NEEDED = 0x0400, /* media-needed */
+ _IPP_PREASON_MOVING_TO_PAUSED = 0x0800,
/* moving-to-paused */
- _IPP_PSTATE_PAUSED = 0x1000, /* paused */
- _IPP_PSTATE_SPOOL_AREA_FULL = 0x2000,/* spool-area-full */
- _IPP_PSTATE_TONER_EMPTY = 0x4000, /* toner-empty */
- _IPP_PSTATE_TONER_LOW = 0x8000 /* toner-low */
+ _IPP_PREASON_PAUSED = 0x1000, /* paused */
+ _IPP_PREASON_SPOOL_AREA_FULL = 0x2000,/* spool-area-full */
+ _IPP_PREASON_TONER_EMPTY = 0x4000, /* toner-empty */
+ _IPP_PREASON_TONER_LOW = 0x8000 /* toner-low */
};
-typedef unsigned int _ipp_preasons_t; /* Bitfield for printer-state-reasons */
+typedef unsigned int _ipp_preason_t; /* Bitfield for printer-state-reasons */
typedef enum _ipp_media_class_e
{
@@ -94,6 +111,21 @@ typedef enum _ipp_media_class_e
_IPP_ENV_ONLY /* Envelope-only size */
} _ipp_media_class_t;
+typedef enum _ipp_media_size_e
+{
+ _IPP_MEDIA_SIZE_NONE = -1,
+ _IPP_MEDIA_SIZE_A4,
+ _IPP_MEDIA_SIZE_A5,
+ _IPP_MEDIA_SIZE_A6,
+ _IPP_MEDIA_SIZE_DL,
+ _IPP_MEDIA_SIZE_LEGAL,
+ _IPP_MEDIA_SIZE_LETTER,
+ _IPP_MEDIA_SIZE_COM10,
+ _IPP_MEDIA_SIZE_3x5,
+ _IPP_MEDIA_SIZE_L,
+ _IPP_MEDIA_SIZE_4x6,
+ _IPP_MEDIA_SIZE_5x7
+} _ipp_media_size_t;
static const char * const media_supported[] =
{ /* media-supported values */
"iso_a4_210x297mm", /* A4 */
@@ -122,6 +154,43 @@ static const int media_col_sizes[][3] =
{ 10160, 15240, _IPP_PHOTO_ONLY }, /* 4x6 */
{ 12700, 17780, _IPP_PHOTO_ONLY } /* 5x7 aka 2L */
};
+
+typedef enum _ipp_media_source_e
+{
+ _IPP_MEDIA_SOURCE_NONE = -1,
+ _IPP_MEDIA_SOURCE_AUTO,
+ _IPP_MEDIA_SOURCE_MAIN,
+ _IPP_MEDIA_SOURCE_MANUAL,
+ _IPP_MEDIA_SOURCE_ENVELOPE,
+ _IPP_MEDIA_SOURCE_PHOTO
+} _ipp_media_source_t;
+static const char * const media_source_supported[] =
+ /* media-source-supported values */
+{
+ "auto",
+ "main",
+ "manual",
+ "envelope",
+ "photo"
+};
+
+typedef enum _ipp_media_type_e
+{
+ _IPP_MEDIA_TYPE_NONE = -1,
+ _IPP_MEDIA_TYPE_AUTO,
+ _IPP_MEDIA_TYPE_CARDSTOCK,
+ _IPP_MEDIA_TYPE_ENVELOPE,
+ _IPP_MEDIA_TYPE_LABELS,
+ _IPP_MEDIA_TYPE_OTHER,
+ _IPP_MEDIA_TYPE_GLOSSY,
+ _IPP_MEDIA_TYPE_HIGH_GLOSS,
+ _IPP_MEDIA_TYPE_MATTE,
+ _IPP_MEDIA_TYPE_SATIN,
+ _IPP_MEDIA_TYPE_SEMI_GLOSS,
+ _IPP_MEDIA_TYPE_STATIONERY,
+ _IPP_MEDIA_TYPE_LETTERHEAD,
+ _IPP_MEDIA_TYPE_TRANSPARENCY
+} _ipp_media_type_t;
static const char * const media_type_supported[] =
/* media-type-supported values */
{
@@ -140,11 +209,34 @@ static const char * const media_type_supported[] =
"transparency"
};
+typedef enum _ipp_supply_e
+{
+ _IPP_SUPPLY_CYAN, /* Cyan Toner */
+ _IPP_SUPPLY_MAGENTA, /* Magenta Toner */
+ _IPP_SUPPLY_YELLOW, /* Yellow Toner */
+ _IPP_SUPPLY_BLACK, /* Black Toner */
+ _IPP_SUPPLY_WASTE /* Waste Toner */
+} _ipp_supply_t;
+static const char * const printer_supplies[] =
+{ /* printer-supply-description values */
+ "Cyan Toner",
+ "Magenta Toner",
+ "Yellow Toner",
+ "Black Toner",
+ "Toner Waste"
+};
+
/*
* Structures...
*/
+typedef struct _ipp_filter_s /**** Attribute filter ****/
+{
+ cups_array_t *ra; /* Requested attributes */
+ ipp_tag_t group_tag; /* Group to copy */
+} _ipp_filter_t;
+
typedef struct _ipp_job_s _ipp_job_t;
typedef struct _ipp_printer_s /**** Printer data ****/
@@ -171,12 +263,24 @@ typedef struct _ipp_printer_s /**** Printer data ****/
int port; /* Port */
size_t urilen; /* Length of printer URI */
ipp_t *attrs; /* Static attributes */
+ time_t start_time; /* Startup time */
+ time_t config_time; /* printer-config-change-time */
ipp_pstate_t state; /* printer-state value */
- _ipp_preasons_t state_reasons; /* printer-state-reasons values */
+ _ipp_preason_t state_reasons; /* printer-state-reasons values */
+ time_t state_time; /* printer-state-change-time */
cups_array_t *jobs; /* Jobs */
_ipp_job_t *active_job; /* Current active/pending job */
int next_job_id; /* Next job-id value */
_cups_rwlock_t rwlock; /* Printer lock */
+ _ipp_media_size_t main_size; /* Ready media */
+ _ipp_media_type_t main_type;
+ int main_level;
+ _ipp_media_size_t envelope_size;
+ int envelope_level;
+ _ipp_media_size_t photo_size;
+ _ipp_media_type_t photo_type;
+ int photo_level;
+ int supplies[5]; /* Supply levels (0-100) */
} _ipp_printer_t;
struct _ipp_job_s /**** Job data ****/
@@ -186,8 +290,11 @@ struct _ipp_job_s /**** Job data ****/
*username, /* job-originating-user-name */
*format; /* document-format */
ipp_jstate_t state; /* job-state value */
- time_t processing, /* time-at-processing value */
+ time_t created, /* time-at-creation value */
+ processing, /* time-at-processing value */
completed; /* time-at-completed value */
+ int impressions, /* job-impressions value */
+ impcompleted; /* job-impressions-completed value */
ipp_t *attrs; /* Static attributes */
int cancel; /* Non-zero when job canceled */
char *filename; /* Print file name */
@@ -203,7 +310,8 @@ typedef struct _ipp_client_s /**** Client data ****/
time_t start; /* Request start time */
http_state_t operation; /* Request operation */
ipp_op_t operation_id; /* IPP operation-id */
- char uri[1024]; /* Request URI */
+ char uri[1024], /* Request URI */
+ *options; /* URI options */
http_addr_t addr; /* Client address */
char hostname[256]; /* Client hostname */
_ipp_printer_t *printer; /* Printer */
@@ -223,9 +331,8 @@ static void copy_job_attributes(_ipp_client_t *client,
_ipp_job_t *job, cups_array_t *ra);
static _ipp_client_t *create_client(_ipp_printer_t *printer, int sock);
static _ipp_job_t *create_job(_ipp_client_t *client);
-static int create_listener(int family, int *port);
-static ipp_t *create_media_col(const char *media, const char *type,
- int width, int length, int margins);
+static int create_listener(int family, int port);
+static ipp_t *create_media_col(const char *media, const char *source, const char *type, int width, int length, int margins);
static ipp_t *create_media_size(int width, int length);
static _ipp_printer_t *create_printer(const char *servername,
const char *name, const char *location,
@@ -253,32 +360,34 @@ static void dnssd_callback(DNSServiceRef sdRef,
const char *domain,
_ipp_printer_t *printer);
#endif /* HAVE_DNSSD */
+static int filter_cb(_ipp_filter_t *filter, ipp_t *dst, ipp_attribute_t *attr);
static _ipp_job_t *find_job(_ipp_client_t *client);
static void html_escape(_ipp_client_t *client, const char *s,
size_t slen);
+static void html_footer(_ipp_client_t *client);
+static void html_header(_ipp_client_t *client, const char *title);
static void html_printf(_ipp_client_t *client, const char *format,
...) __attribute__((__format__(__printf__,
2, 3)));
static void ipp_cancel_job(_ipp_client_t *client);
+static void ipp_close_job(_ipp_client_t *client);
static void ipp_create_job(_ipp_client_t *client);
static void ipp_get_job_attributes(_ipp_client_t *client);
static void ipp_get_jobs(_ipp_client_t *client);
static void ipp_get_printer_attributes(_ipp_client_t *client);
+static void ipp_identify_printer(_ipp_client_t *client);
static void ipp_print_job(_ipp_client_t *client);
static void ipp_print_uri(_ipp_client_t *client);
static void ipp_send_document(_ipp_client_t *client);
static void ipp_send_uri(_ipp_client_t *client);
static void ipp_validate_job(_ipp_client_t *client);
+static int parse_options(_ipp_client_t *client, cups_option_t **options);
static void *process_client(_ipp_client_t *client);
static int process_http(_ipp_client_t *client);
static int process_ipp(_ipp_client_t *client);
static void *process_job(_ipp_job_t *job);
#ifdef HAVE_DNSSD
-static int register_printer(_ipp_printer_t *printer,
- const char *location, const char *make,
- const char *model, const char *formats,
- const char *adminurl, int color,
- int duplex, const char *regtype);
+static int register_printer(_ipp_printer_t *printer, const char *location, const char *make, const char *model, const char *formats, const char *adminurl, const char *uuid, int color, int duplex, const char *regtype);
#endif /* HAVE_DNSSD */
static int respond_http(_ipp_client_t *client, http_status_t code,
const char *content_coding,
@@ -289,6 +398,7 @@ static void respond_ipp(_ipp_client_t *client, ipp_status_t status,
static void respond_unsupported(_ipp_client_t *client,
ipp_attribute_t *attr);
static void run_printer(_ipp_printer_t *printer);
+static char *time_string(time_t tv, char *buffer, size_t bufsize);
static void usage(int status) __attribute__((noreturn));
static int valid_doc_attributes(_ipp_client_t *client);
static int valid_job_attributes(_ipp_client_t *client);
@@ -327,12 +437,13 @@ main(int argc, /* I - Number of command-line args */
#ifdef HAVE_DNSSD
const char *subtype = "_print"; /* Bonjour service subtype */
#endif /* HAVE_DNSSD */
- int port = 8631, /* Port number (0 = auto) */
+ int port = 0, /* Port number (0 = auto) */
duplex = 0, /* Duplex mode */
ppm = 10, /* Pages per minute for mono */
ppm_color = 0, /* Pages per minute for color */
pin = 0; /* PIN printing mode? */
- char directory[1024] = ""; /* Spool directory */
+ char directory[1024] = "", /* Spool directory */
+ hostname[1024]; /* Auto-detected hostname */
_ipp_printer_t *printer; /* Printer object */
@@ -479,6 +590,30 @@ main(int argc, /* I - Number of command-line args */
* Apply defaults as needed...
*/
+ if (!servername)
+ servername = httpGetHostname(NULL, hostname, sizeof(hostname));
+
+ if (!port)
+ {
+#ifdef WIN32
+ /*
+ * Windows is almost always used as a single user system, so use a default port
+ * number of 8631.
+ */
+
+ port = 8631;
+
+#else
+ /*
+ * Use 8000 + UID mod 1000 for the default port number...
+ */
+
+ port = 8000 + ((int)getuid() % 1000);
+#endif /* WIN32 */
+
+ fprintf(stderr, "Listening on port %d.\n", port);
+ }
+
if (!directory[0])
{
snprintf(directory, sizeof(directory), "/tmp/ippserver.%d", (int)getpid());
@@ -580,30 +715,13 @@ copy_attributes(ipp_t *to, /* I - Destination request */
ipp_tag_t group_tag, /* I - Group to copy */
int quickcopy) /* I - Do a quick copy? */
{
- ipp_attribute_t *fromattr; /* Source attribute */
-
-
- if (!to || !from)
- return;
-
- for (fromattr = ippFirstAttribute(from);
- fromattr;
- fromattr = ippNextAttribute(from))
- {
- /*
- * Filter attributes as needed...
- */
+ _ipp_filter_t filter; /* Filter data */
- ipp_tag_t fromgroup = ippGetGroupTag(fromattr);
- const char *fromname = ippGetName(fromattr);
- if ((group_tag != IPP_TAG_ZERO && fromgroup != group_tag &&
- fromgroup != IPP_TAG_ZERO) || !fromname)
- continue;
+ filter.ra = ra;
+ filter.group_tag = group_tag;
- if (!ra || cupsArrayFind(ra, (void *)fromname))
- ippCopyAttribute(to, fromattr, quickcopy);
- }
+ ippCopyAttributes(to, from, quickcopy, (ipp_copycb_t)filter_cb, &filter);
}
@@ -619,14 +737,77 @@ copy_job_attributes(
{
copy_attributes(client->response, job->attrs, ra, IPP_TAG_JOB, 0);
+ if (!ra || cupsArrayFind(ra, "date-time-at-completed"))
+ {
+ if (job->completed)
+ ippAddDate(client->response, IPP_TAG_JOB, "date-time-at-completed", ippTimeToDate(job->completed));
+ else
+ ippAddOutOfBand(client->response, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-completed");
+ }
+
+ if (!ra || cupsArrayFind(ra, "date-time-at-processing"))
+ {
+ if (job->processing)
+ ippAddDate(client->response, IPP_TAG_JOB, "date-time-at-processing", ippTimeToDate(job->processing));
+ else
+ ippAddOutOfBand(client->response, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-processing");
+ }
+
+ if (!ra || cupsArrayFind(ra, "job-impressions"))
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions", job->impressions);
+
+ if (!ra || cupsArrayFind(ra, "job-impressions-completed"))
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", job->impcompleted);
+
if (!ra || cupsArrayFind(ra, "job-printer-up-time"))
- ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER,
- "job-printer-up-time", (int)time(NULL));
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-printer-up-time", (int)(time(NULL) - client->printer->start_time));
if (!ra || cupsArrayFind(ra, "job-state"))
ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_ENUM,
"job-state", job->state);
+ if (!ra || cupsArrayFind(ra, "job-state-message"))
+ {
+ switch (job->state)
+ {
+ case IPP_JSTATE_PENDING :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job pending.");
+ break;
+
+ case IPP_JSTATE_HELD :
+ if (job->fd >= 0)
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job incoming.");
+ else if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_ZERO))
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job held.");
+ else
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job created.");
+ break;
+
+ case IPP_JSTATE_PROCESSING :
+ if (job->cancel)
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job canceling.");
+ else
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job printing.");
+ break;
+
+ case IPP_JSTATE_STOPPED :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job stopped.");
+ break;
+
+ case IPP_JSTATE_CANCELED :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job canceled.");
+ break;
+
+ case IPP_JSTATE_ABORTED :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job aborted.");
+ break;
+
+ case IPP_JSTATE_COMPLETED :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job completed.");
+ break;
+ }
+ }
+
if (!ra || cupsArrayFind(ra, "job-state-reasons"))
{
switch (job->state)
@@ -692,12 +873,12 @@ copy_job_attributes(
if (!ra || cupsArrayFind(ra, "time-at-completed"))
ippAddInteger(client->response, IPP_TAG_JOB,
job->completed ? IPP_TAG_INTEGER : IPP_TAG_NOVALUE,
- "time-at-completed", (int)job->completed);
+ "time-at-completed", (int)(job->completed - client->printer->start_time));
if (!ra || cupsArrayFind(ra, "time-at-processing"))
ippAddInteger(client->response, IPP_TAG_JOB,
job->processing ? IPP_TAG_INTEGER : IPP_TAG_NOVALUE,
- "time-at-processing", (int)job->processing);
+ "time-at-processing", (int)(job->processing - client->printer->start_time));
}
@@ -753,7 +934,8 @@ create_job(_ipp_client_t *client) /* I - Client */
{
_ipp_job_t *job; /* Job */
ipp_attribute_t *attr; /* Job attribute */
- char uri[1024]; /* job-uri value */
+ char uri[1024], /* job-uri value */
+ uuid[64]; /* job-uuid value */
_cupsRWLockWrite(&(client->printer->rwlock));
@@ -779,44 +961,42 @@ create_job(_ipp_client_t *client) /* I - Client */
}
job->printer = client->printer;
- job->attrs = client->request;
+ job->attrs = ippNew();
job->state = IPP_JSTATE_HELD;
job->fd = -1;
- client->request = NULL;
/*
- * Set all but the first two attributes to the job attributes group...
+ * Copy all of the job attributes...
*/
- for (ippFirstAttribute(job->attrs),
- ippNextAttribute(job->attrs),
- attr = ippNextAttribute(job->attrs);
- attr;
- attr = ippNextAttribute(job->attrs))
- ippSetGroupTag(job->attrs, &attr, IPP_TAG_JOB);
+ copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0);
/*
* Get the requesting-user-name, document format, and priority...
*/
- if ((attr = ippFindAttribute(job->attrs, "requesting-user-name",
- IPP_TAG_NAME)) != NULL)
- ippSetName(job->attrs, &attr, "job-originating-user-name");
- else
- attr = ippAddString(job->attrs, IPP_TAG_JOB,
- IPP_CONST_TAG(IPP_TAG_NAME),
- "job-originating-user-name", NULL, "anonymous");
-
- if (attr)
+ if ((attr = ippFindAttribute(client->request, "requesting-user-name", IPP_TAG_NAME)) != NULL)
job->username = ippGetString(attr, 0, NULL);
else
job->username = "anonymous";
- if ((attr = ippFindAttribute(job->attrs, "document-format",
- IPP_TAG_MIMETYPE)) != NULL)
- job->format = ippGetString(attr, 0, NULL);
- else
- job->format = "application/octet-stream";
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-originating-user-name", NULL, job->username);
+
+ if (ippGetOperation(client->request) != IPP_OP_CREATE_JOB)
+ {
+ if ((attr = ippFindAttribute(job->attrs, "document-format-detected", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else if ((attr = ippFindAttribute(job->attrs, "document-format-supplied", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else
+ job->format = "application/octet-stream";
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_INTEGER)) != NULL)
+ job->impressions = ippGetInteger(attr, 0);
+
+ if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_NAME)) != NULL)
+ job->name = ippGetString(attr, 0, NULL);
/*
* Add job description attributes and add to the jobs array...
@@ -825,13 +1005,14 @@ create_job(_ipp_client_t *client) /* I - Client */
job->id = client->printer->next_job_id ++;
snprintf(uri, sizeof(uri), "%s/%d", client->printer->uri, job->id);
+ httpAssembleUUID(client->printer->hostname, client->printer->port, client->printer->name, job->id, uuid, sizeof(uuid));
+ ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(&job->created)));
ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, uri);
- ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL,
- client->printer->uri);
- ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation",
- (int)time(NULL));
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uuid", NULL, uuid);
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, client->printer->uri);
+ ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)(job->created - client->printer->start_time));
cupsArrayAdd(client->printer->jobs, job);
client->printer->active_job = job;
@@ -842,30 +1023,85 @@ create_job(_ipp_client_t *client) /* I - Client */
}
+/*
+ * 'create_job_filename()' - Create the filename for a document in a job.
+ */
+
+static void create_job_filename(
+ _ipp_printer_t *printer, /* I - Printer */
+ _ipp_job_t *job, /* I - Job */
+ char *fname, /* I - Filename buffer */
+ size_t fnamesize) /* I - Size of filename buffer */
+{
+ char name[256], /* "Safe" filename */
+ *nameptr; /* Pointer into filename */
+ const char *ext, /* Filename extension */
+ *job_name; /* job-name value */
+ ipp_attribute_t *job_name_attr; /* job-name attribute */
+
+
+ /*
+ * Make a name from the job-name attribute...
+ */
+
+ if ((job_name_attr = ippFindAttribute(job->attrs, "job-name", IPP_TAG_NAME)) != NULL)
+ job_name = ippGetString(job_name_attr, 0, NULL);
+ else
+ job_name = "untitled";
+
+ for (nameptr = name; *job_name && nameptr < (name + sizeof(name) - 1); job_name ++)
+ if (isalnum(*job_name & 255) || *job_name == '-')
+ *nameptr++ = (char)tolower(*job_name & 255);
+ else
+ *nameptr++ = '_';
+
+ *nameptr = '\0';
+
+ /*
+ * Figure out the extension...
+ */
+
+ if (!strcasecmp(job->format, "image/jpeg"))
+ ext = "jpg";
+ else if (!strcasecmp(job->format, "image/png"))
+ ext = "png";
+ else if (!strcasecmp(job->format, "image/pwg-raster"))
+ ext = "ras";
+ else if (!strcasecmp(job->format, "image/urf"))
+ ext = "urf";
+ else if (!strcasecmp(job->format, "application/pdf"))
+ ext = "pdf";
+ else if (!strcasecmp(job->format, "application/postscript"))
+ ext = "ps";
+ else
+ ext = "prn";
+
+ /*
+ * Create a filename with the job-id, job-name, and document-format (extension)...
+ */
+
+ snprintf(fname, fnamesize, "%s/%d-%s.%s", printer->directory, job->id, name, ext);
+}
+
+
/*
* 'create_listener()' - Create a listener socket.
*/
-static int /* O - Listener socket or -1 on error */
-create_listener(int family, /* I - Address family */
- int *port) /* IO - Port number */
+static int /* O - Listener socket or -1 on error */
+create_listener(int family, /* I - Address family */
+ int port) /* I - Port number */
{
int sock; /* Listener socket */
http_addrlist_t *addrlist; /* Listen address */
char service[255]; /* Service port */
- if (!*port)
- {
- *port = 8000 + (getuid() % 1000);
- fprintf(stderr, "Listening on port %d.\n", *port);
- }
-
- snprintf(service, sizeof(service), "%d", *port);
+ snprintf(service, sizeof(service), "%d", port);
if ((addrlist = httpAddrGetList(NULL, family, service)) == NULL)
return (-1);
- sock = httpAddrListen(&(addrlist->addr), *port);
+ sock = httpAddrListen(&(addrlist->addr), port);
httpAddrFreeList(addrlist);
@@ -879,7 +1115,8 @@ create_listener(int family, /* I - Address family */
static ipp_t * /* O - media-col collection */
create_media_col(const char *media, /* I - Media name */
- const char *type, /* I - Nedua type */
+ const char *source, /* I - Media source */
+ const char *type, /* I - Media type */
int width, /* I - x-dimension in 2540ths */
int length, /* I - y-dimension in 2540ths */
int margins) /* I - Value for margins */
@@ -890,12 +1127,19 @@ create_media_col(const char *media, /* I - Media name */
char media_key[256]; /* media-key value */
- snprintf(media_key, sizeof(media_key), "%s_%s%s", media, type,
- margins == 0 ? "_borderless" : "");
+ if (type && source)
+ snprintf(media_key, sizeof(media_key), "%s_%s_%s%s", media, source, type, margins == 0 ? "_borderless" : "");
+ else if (type)
+ snprintf(media_key, sizeof(media_key), "%s__%s%s", media, type, margins == 0 ? "_borderless" : "");
+ else if (source)
+ snprintf(media_key, sizeof(media_key), "%s_%s%s", media, source, margins == 0 ? "_borderless" : "");
+ else
+ snprintf(media_key, sizeof(media_key), "%s%s", media, margins == 0 ? "_borderless" : "");
ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-key", NULL,
media_key);
ippAddCollection(media_col, IPP_TAG_PRINTER, "media-size", media_size);
+ ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-size-name", NULL, media);
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"media-bottom-margin", margins);
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
@@ -904,8 +1148,10 @@ create_media_col(const char *media, /* I - Media name */
"media-right-margin", margins);
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"media-top-margin", margins);
- ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type",
- NULL, type);
+ 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);
ippDelete(media_size);
@@ -959,12 +1205,16 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
{
int i, j; /* Looping vars */
_ipp_printer_t *printer; /* Printer */
- char hostname[256], /* Hostname */
- uri[1024], /* Printer URI */
+#ifndef WIN32
+ char path[1024]; /* Full path to command */
+#endif /* !WIN32 */
+ char uri[1024], /* Printer URI */
icons[1024], /* printer-icons URI */
adminurl[1024], /* printer-more-info URI */
+ supplyurl[1024],/* printer-supply-info-uri URI */
device_id[1024],/* printer-device-id */
- make_model[128];/* printer-make-and-model */
+ make_model[128],/* printer-make-and-model */
+ uuid[128]; /* printer-uuid */
int num_formats; /* Number of document-format-supported values */
char *defformat, /* document-format-default value */
*formats[100], /* document-format-supported values */
@@ -999,6 +1249,10 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
"1.1",
"2.0"
};
+ static const char * const features[] =/* ipp-features-supported values */
+ {
+ "ipp-everywhere"
+ };
static const int ops[] = /* operations-supported values */
{
IPP_OP_PRINT_JOB,
@@ -1010,7 +1264,10 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
IPP_OP_CANCEL_JOB,
IPP_OP_GET_JOB_ATTRIBUTES,
IPP_OP_GET_JOBS,
- IPP_OP_GET_PRINTER_ATTRIBUTES
+ IPP_OP_GET_PRINTER_ATTRIBUTES,
+ IPP_OP_CANCEL_MY_JOBS,
+ IPP_OP_CLOSE_JOB,
+ IPP_OP_IDENTIFY_PRINTER
};
static const char * const charsets[] =/* charset-supported values */
{
@@ -1025,6 +1282,11 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
#endif /* HAVE_LIBZ */
"none"
};
+ static const char * const identify_actions[] =
+ {
+ "display",
+ "sound"
+ };
static const char * const job_creation[] =
{ /* job-creation-attributes-supported values */
"copies",
@@ -1047,6 +1309,7 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
"media-left-margin",
"media-right-margin",
"media-size",
+ "media-source",
"media-top-margin",
"media-type"
};
@@ -1060,6 +1323,17 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
"separate-documents-uncollated-copies",
"separate-documents-collated-copies"
};
+ static const char * const overrides[] =
+ { /* overrides-supported */
+ "document-number",
+ "pages"
+ };
+ static const char * const print_color_mode_supported[] =
+ { /* print-color-mode-supported values */
+ "auto",
+ "color",
+ "monochrome"
+ };
static const int print_quality_supported[] =
{ /* print-quality-supported values */
IPP_QUALITY_DRAFT,
@@ -1095,6 +1369,17 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
"two-sided-long-edge",
"two-sided-short-edge"
};
+ static const char * const urf_supported[] =
+ { /* urf-supported values */
+ "CP1",
+ "IS1-5-7",
+ "MT1-2-3-4-5-6-8-9-10-11-12-13",
+ "RS600",
+ "SRGB24",
+ "V1.4",
+ "W8",
+ "DM1"
+ };
static const char * const which_jobs[] =
{ /* which-jobs-supported values */
"completed",
@@ -1109,13 +1394,41 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
};
+#ifndef WIN32
+ /*
+ * If a command was specified, make sure it exists and is executable...
+ */
+
+ if (command)
+ {
+ if (*command == '/' || !strncmp(command, "./", 2))
+ {
+ if (access(command, X_OK))
+ {
+ fprintf(stderr, "ippserver: Unable to execute command \"%s\": %s\n", command, strerror(errno));
+ return (NULL);
+ }
+ }
+ else
+ {
+ if (!cupsFileFind(command, getenv("PATH"), 1, path, sizeof(path)))
+ {
+ fprintf(stderr, "ippserver: Unable to find command \"%s\".\n", command);
+ return (NULL);
+ }
+
+ command = path;
+ }
+ }
+#endif /* !WIN32 */
+
/*
* Allocate memory for the printer...
*/
if ((printer = calloc(1, sizeof(_ipp_printer_t))) == NULL)
{
- perror("Unable to allocate memory for printer");
+ perror("ippserver: Unable to allocate memory for printer");
return (NULL);
}
@@ -1127,12 +1440,13 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
#endif /* HAVE_DNSSD */
printer->command = command ? strdup(command) : NULL;
printer->directory = strdup(directory);
- printer->hostname = strdup(servername ? servername :
- httpGetHostname(NULL, hostname,
- sizeof(hostname)));
+ printer->hostname = strdup(servername);
printer->port = port;
+ printer->start_time = time(NULL);
+ printer->config_time = printer->start_time;
printer->state = IPP_PSTATE_IDLE;
- printer->state_reasons = _IPP_PSTATE_NONE;
+ printer->state_reasons = _IPP_PREASON_NONE;
+ printer->state_time = printer->start_time;
printer->jobs = cupsArrayNew((cups_array_func_t)compare_jobs, NULL);
printer->next_job_id = 1;
@@ -1144,19 +1458,36 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
if (icon)
printer->icon = strdup(icon);
+ printer->main_size = _IPP_MEDIA_SIZE_A4;
+ printer->main_type = _IPP_MEDIA_TYPE_STATIONERY;
+ printer->main_level = 500;
+
+ printer->envelope_size = _IPP_MEDIA_SIZE_NONE;
+ printer->envelope_level = 0;
+
+ printer->photo_size = _IPP_MEDIA_SIZE_NONE;
+ printer->photo_type = _IPP_MEDIA_TYPE_NONE;
+ printer->photo_level = 0;
+
+ printer->supplies[_IPP_SUPPLY_CYAN] = 100;
+ printer->supplies[_IPP_SUPPLY_MAGENTA] = 100;
+ printer->supplies[_IPP_SUPPLY_YELLOW] = 100;
+ printer->supplies[_IPP_SUPPLY_BLACK] = 100;
+ printer->supplies[_IPP_SUPPLY_WASTE] = 0;
+
_cupsRWInit(&(printer->rwlock));
/*
* Create the listener sockets...
*/
- if ((printer->ipv4 = create_listener(AF_INET, &(printer->port))) < 0)
+ if ((printer->ipv4 = create_listener(AF_INET, printer->port)) < 0)
{
perror("Unable to create IPv4 listener");
goto bad_printer;
}
- if ((printer->ipv6 = create_listener(AF_INET6, &(printer->port))) < 0)
+ if ((printer->ipv6 = create_listener(AF_INET6, printer->port)) < 0)
{
perror("Unable to create IPv6 listener");
goto bad_printer;
@@ -1168,12 +1499,13 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
httpAssembleURI(HTTP_URI_CODING_ALL, icons, sizeof(icons), "http", NULL,
printer->hostname, printer->port, "/icon.png");
- httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), "http", NULL,
- printer->hostname, printer->port, "/");
+ httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), "http", NULL, printer->hostname, printer->port, "/");
+ httpAssembleURI(HTTP_URI_CODING_ALL, supplyurl, sizeof(supplyurl), "http", NULL, printer->hostname, printer->port, "/supplies");
if (Verbosity)
{
fprintf(stderr, "printer-more-info=\"%s\"\n", adminurl);
+ fprintf(stderr, "printer-supply-info-uri=\"%s\"\n", supplyurl);
fprintf(stderr, "printer-uri=\"%s\"\n", uri);
}
@@ -1187,7 +1519,7 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
*ptr++ = '\0';
formats[num_formats++] = ptr;
- if (!_cups_strcasecmp(ptr, "application/octet-stream"))
+ if (!strcasecmp(ptr, "application/octet-stream"))
defformat = ptr;
}
@@ -1196,23 +1528,27 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
prefix = "CMD:";
for (i = 0; i < num_formats; i ++)
{
- if (!_cups_strcasecmp(formats[i], "application/pdf"))
+ if (!strcasecmp(formats[i], "application/pdf"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPDF", prefix);
- else if (!_cups_strcasecmp(formats[i], "application/postscript"))
+ else if (!strcasecmp(formats[i], "application/postscript"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPS", prefix);
- else if (!_cups_strcasecmp(formats[i], "application/vnd.hp-PCL"))
+ else if (!strcasecmp(formats[i], "application/vnd.hp-PCL"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPCL", prefix);
- else if (!_cups_strcasecmp(formats[i], "image/jpeg"))
+ else if (!strcasecmp(formats[i], "image/jpeg"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sJPEG", prefix);
- else if (!_cups_strcasecmp(formats[i], "image/png"))
+ else if (!strcasecmp(formats[i], "image/png"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPNG", prefix);
- else if (_cups_strcasecmp(formats[i], "application/octet-stream"))
+ else if (strcasecmp(formats[i], "application/octet-stream"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%s%s", prefix, formats[i]);
ptr += strlen(ptr);
prefix = ",";
}
- strlcat(device_id, ";", sizeof(device_id));
+ if (ptr < (device_id + sizeof(device_id) - 1))
+ {
+ *ptr++ = ';';
+ *ptr = '\0';
+ }
/*
* Get the maximum spool size based on the size of the filesystem used for
@@ -1287,6 +1623,9 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
"document-format-supported", num_formats, NULL,
(const char * const *)formats);
+ /* document-password-supported */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "document-password-supported", 127);
+
/* finishings-default */
ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
"finishings-default", IPP_FINISHINGS_NONE);
@@ -1300,25 +1639,35 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
IPP_CONST_TAG(IPP_TAG_LANGUAGE),
"generated-natural-language-supported", NULL, "en");
+ /* identify-actions-default */
+ ippAddString (printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "identify-actions-default", NULL, "sound");
+
+ /* identify-actions-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "identify-actions-supported", sizeof(identify_actions) / sizeof(identify_actions[0]), NULL, identify_actions);
+
+ /* ipp-features-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-features-supported", sizeof(features) / sizeof(features[0]), NULL, features);
+
/* ipp-versions-supported */
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
- IPP_CONST_TAG(IPP_TAG_KEYWORD),
- "ipp-versions-supported",
- sizeof(versions) / sizeof(versions[0]), NULL, versions);
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-versions-supported", sizeof(versions) / sizeof(versions[0]), NULL, versions);
+
+ /* job-account-id-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_NAME), "job-account-id-default", NULL, "");
/* job-account-id-supported */
ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-account-id-supported", 1);
+ /* job-accounting-user-id-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_NAME), "job-accounting-user-id-default", NULL, "");
+
/* job-accounting-user-id-supported */
- ippAddBoolean(printer->attrs, IPP_TAG_PRINTER,
- "job-accounting-user-id-supported", 1);
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-accounting-user-id-supported", 1);
/* job-creation-attributes-supported */
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
- IPP_CONST_TAG(IPP_TAG_KEYWORD),
- "job-creation-attributes-supported",
- sizeof(job_creation) / sizeof(job_creation[0]),
- NULL, job_creation);
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-creation-attributes-supported", sizeof(job_creation) / sizeof(job_creation[0]), NULL, job_creation);
+
+ /* job-ids-supported */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-ids-supported", 1);
/* job-k-octets-supported */
ippAddRange(printer->attrs, IPP_TAG_PRINTER, "job-k-octets-supported", 0,
@@ -1328,6 +1677,9 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"job-password-supported", 4);
+ /* job-preferred-attributes-supported */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-preferred-attributes-supported", 0);
+
/* job-priority-default */
ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"job-priority-default", 50);
@@ -1359,13 +1711,11 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
i ++)
{
if (media_col_sizes[i][2] == _IPP_ENV_ONLY)
- num_database += 2; /* auto + envelope */
+ num_database += 3; /* auto + manual + envelope */
else if (media_col_sizes[i][2] == _IPP_PHOTO_ONLY)
- num_database += 12; /* auto + photographic-* + borderless */
+ num_database += 6 * 3; /* auto + photographic-* from auto, manual, and photo */
else
- num_database += (int)(sizeof(media_type_supported) /
- sizeof(media_type_supported[0])) + 6;
- /* All types + borderless */
+ num_database += 2; /* Regular + borderless */
}
media_col_database = ippAddCollections(printer->attrs, IPP_TAG_PRINTER,
@@ -1375,49 +1725,52 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
i < (int)(sizeof(media_col_sizes) / sizeof(media_col_sizes[0]));
i ++)
{
- for (j = 0;
- j < (int)(sizeof(media_type_supported) /
- sizeof(media_type_supported[0]));
- j ++)
+ switch (media_col_sizes[i][2])
{
- if (media_col_sizes[i][2] == _IPP_ENV_ONLY &&
- strcmp(media_type_supported[j], "auto") &&
- strcmp(media_type_supported[j], "envelope"))
- continue;
- else if (media_col_sizes[i][2] == _IPP_PHOTO_ONLY &&
- strcmp(media_type_supported[j], "auto") &&
- strncmp(media_type_supported[j], "photographic-", 13))
- continue;
+ case _IPP_GENERAL :
+ /*
+ * Regular + borderless for the general class; no source/type
+ * selectors...
+ */
- ippSetCollection(printer->attrs, &media_col_database, media_col_index,
- create_media_col(media_supported[i],
- media_type_supported[j],
- media_col_sizes[i][0],
- media_col_sizes[i][1],
- media_xxx_margin_supported[1]));
- media_col_index ++;
-
- if (media_col_sizes[i][2] != _IPP_ENV_ONLY &&
- (!strcmp(media_type_supported[j], "auto") ||
- !strncmp(media_type_supported[j], "photographic-", 13)))
- {
- /*
- * Add borderless version for this combination...
- */
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], NULL, NULL, media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[1]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], NULL, NULL, media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[0]));
+ break;
- ippSetCollection(printer->attrs, &media_col_database, media_col_index,
- create_media_col(media_supported[i],
- media_type_supported[j],
- media_col_sizes[i][0],
- media_col_sizes[i][1],
- media_xxx_margin_supported[0]));
- media_col_index ++;
- }
+ case _IPP_ENV_ONLY :
+ /*
+ * Regular margins for "auto", "manual", and "envelope" sources.
+ */
+
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "auto", "envelope", media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[1]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "manual", "envelope", media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[1]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "envelope", "envelope", media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[1]));
+ break;
+ case _IPP_PHOTO_ONLY :
+ /*
+ * Photos have specific media types and can only be printed via
+ * the auto, manual, and photo sources...
+ */
+
+ for (j = 0;
+ j < (int)(sizeof(media_type_supported) /
+ sizeof(media_type_supported[0]));
+ j ++)
+ {
+ if (strcmp(media_type_supported[j], "auto") && strncmp(media_type_supported[j], "photographic-", 13))
+ continue;
+
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "auto", media_type_supported[j], media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[0]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "manual", media_type_supported[j], media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[0]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "photo", media_type_supported[j], media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[0]));
+ }
+ break;
}
}
/* media-col-default */
media_col_default = create_media_col(media_supported[0],
+ media_source_supported[0],
media_type_supported[0],
media_col_sizes[0][0],
media_col_sizes[0][1],
@@ -1474,6 +1827,9 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
create_media_size(media_col_sizes[i][0],
media_col_sizes[i][1]));
+ /* media-source-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-source-supported", (int)(sizeof(media_source_supported) / sizeof(media_source_supported[0])), NULL, media_source_supported);
+
/* media-top-margin-supported */
ippAddIntegers(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"media-top-margin-supported",
@@ -1482,24 +1838,19 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
media_xxx_margin_supported);
/* media-type-supported */
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
- IPP_CONST_TAG(IPP_TAG_KEYWORD),
- "media-type-supported",
- (int)(sizeof(media_type_supported) /
- sizeof(media_type_supported[0])),
- NULL, media_type_supported);
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-type-supported", (int)(sizeof(media_type_supported) / sizeof(media_type_supported[0])), NULL, media_type_supported);
/* multiple-document-handling-supported */
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
- IPP_CONST_TAG(IPP_TAG_KEYWORD),
- "multiple-document-handling-supported",
- sizeof(multiple_document_handling) /
- sizeof(multiple_document_handling[0]), NULL,
- multiple_document_handling);
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-document-handling-supported", sizeof(multiple_document_handling) / sizeof(multiple_document_handling[0]), NULL, multiple_document_handling);
/* multiple-document-jobs-supported */
- ippAddBoolean(printer->attrs, IPP_TAG_PRINTER,
- "multiple-document-jobs-supported", 0);
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "multiple-document-jobs-supported", 0);
+
+ /* multiple-operation-time-out */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "multiple-operation-time-out", 60);
+
+ /* multiple-operation-time-out-action */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-operation-time-out-action", NULL, "abort-job");
/* natural-language-configured */
ippAddString(printer->attrs, IPP_TAG_PRINTER,
@@ -1536,6 +1887,12 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
IPP_CONST_TAG(IPP_TAG_KEYWORD),
"output-bin-supported", NULL, "face-down");
+ /* overrides-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "overrides-supported", (int)(sizeof(overrides) / sizeof(overrides[0])), NULL, overrides);
+
+ /* page-ranges-supported */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "page-ranges-supported", 1);
+
/* pages-per-minute */
ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"pages-per-minute", ppm);
@@ -1550,21 +1907,40 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
IPP_CONST_TAG(IPP_TAG_KEYWORD),
"pdl-override-supported", NULL, "attempted");
+ /* print-color-mode-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-color-mode-default", NULL, "auto");
+
+ /* print-color-mode-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-color-mode-supported", (int)(sizeof(print_color_mode_supported) / sizeof(print_color_mode_supported[0])), NULL, print_color_mode_supported);
+
+ /* print-content-optimize-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-content-optimize-default", NULL, "auto");
+
+ /* print-content-optimize-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-content-optimize-supported", NULL, "auto");
+
+ /* print-rendering-intent-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-rendering-intent-default", NULL, "auto");
+
+ /* print-rendering-intent-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-rendering-intent-supported", NULL, "auto");
+
/* print-quality-default */
- ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
- "print-quality-default", IPP_QUALITY_NORMAL);
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "print-quality-default", IPP_QUALITY_NORMAL);
/* print-quality-supported */
- ippAddIntegers(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
- "print-quality-supported",
- (int)(sizeof(print_quality_supported) /
- sizeof(print_quality_supported[0])),
- print_quality_supported);
+ ippAddIntegers(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "print-quality-supported", (int)(sizeof(print_quality_supported) / sizeof(print_quality_supported[0])), print_quality_supported);
/* printer-device-id */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT,
"printer-device-id", NULL, device_id);
+ /* printer-get-attributes-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-get-attributes-supported", NULL, "document-format");
+
+ /* printer-geo-location */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_UNKNOWN, "printer-geo-location", 0);
+
/* printer-icons */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI,
"printer-icons", NULL, icons);
@@ -1600,13 +1976,18 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
}
/* printer-more-info */
- ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI,
- "printer-more-info", NULL, adminurl);
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, adminurl);
/* printer-name */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name",
NULL, name);
+ /* printer-organization */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-organization", NULL, "Apple Inc.");
+
+ /* printer-organizational-unit */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-organizational-unit", NULL, "Printing Engineering");
+
/* printer-resolution-default */
ippAddResolution(printer->attrs, IPP_TAG_PRINTER,
"printer-resolution-default", IPP_RES_PER_INCH, 600, 600);
@@ -1615,13 +1996,22 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
ippAddResolution(printer->attrs, IPP_TAG_PRINTER,
"printer-resolution-supported", IPP_RES_PER_INCH, 600, 600);
+ /* printer-supply-description */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-supply-description", (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])), NULL, printer_supplies);
+
+ /* printer-supply-info-uri */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-supply-info-uri", NULL, supplyurl);
+
/* printer-uri-supported */
- ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI,
- "printer-uri-supported", NULL, uri);
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, uri);
+
+ /* printer-uuid */
+ httpAssembleUUID(printer->hostname, port, name, 0, uuid, sizeof(uuid));
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, uuid);
/* pwg-raster-document-xxx-supported */
for (i = 0; i < num_formats; i ++)
- if (!_cups_strcasecmp(formats[i], "image/pwg-raster"))
+ if (!strcasecmp(formats[i], "image/pwg-raster"))
break;
if (i < num_formats)
@@ -1660,6 +2050,14 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
IPP_CONST_TAG(IPP_TAG_KEYWORD),
"sides-supported", duplex ? 3 : 1, NULL, sides_supported);
+ /* urf-supported */
+ for (i = 0; i < num_formats; i ++)
+ if (!strcasecmp(formats[i], "image/urf"))
+ break;
+
+ if (i < num_formats)
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "urf-supported", (int)(sizeof(urf_supported) / sizeof(urf_supported[0])) - !duplex, NULL, urf_supported);
+
/* uri-authentication-supported */
ippAddString(printer->attrs, IPP_TAG_PRINTER,
IPP_CONST_TAG(IPP_TAG_KEYWORD),
@@ -1685,8 +2083,7 @@ create_printer(const char *servername, /* I - Server hostname (NULL for default)
* Register the printer with Bonjour...
*/
- if (!register_printer(printer, location, make, model, docformats, adminurl,
- ppm_color > 0, duplex, subtype))
+ if (!register_printer(printer, location, make, model, docformats, adminurl, uuid + 9, ppm_color > 0, duplex, subtype))
goto bad_printer;
#endif /* HAVE_DNSSD */
@@ -1895,7 +2292,7 @@ dnssd_callback(
regtype, (int)errorCode);
return;
}
- else if (_cups_strcasecmp(name, printer->dnssd_name))
+ else if (strcasecmp(name, printer->dnssd_name))
{
if (Verbosity)
fprintf(stderr, "Now using DNS-SD service name \"%s\".\n", name);
@@ -1908,6 +2305,31 @@ dnssd_callback(
#endif /* HAVE_DNSSD */
+/*
+ * 'filter_cb()' - Filter printer attributes based on the requested array.
+ */
+
+static int /* O - 1 to copy, 0 to ignore */
+filter_cb(_ipp_filter_t *filter, /* I - Filter parameters */
+ ipp_t *dst, /* I - Destination (unused) */
+ ipp_attribute_t *attr) /* I - Source attribute */
+{
+ /*
+ * Filter attributes as needed...
+ */
+
+// (void)dst;
+
+ ipp_tag_t group = ippGetGroupTag(attr);
+ const char *name = ippGetName(attr);
+
+ if ((filter->group_tag != IPP_TAG_ZERO && group != filter->group_tag && group != IPP_TAG_ZERO) || !name || (!strcmp(name, "media-col-database") && !cupsArrayFind(filter->ra, (void *)name)))
+ return (0);
+
+ return (!filter->ra || cupsArrayFind(filter->ra, (void *)name) != NULL);
+}
+
+
/*
* 'find_job()' - Find a job specified in a request.
*/
@@ -1920,19 +2342,17 @@ find_job(_ipp_client_t *client) /* I - Client */
*job; /* Matching job, if any */
- key.id = 0;
-
- if ((attr = ippFindAttribute(client->request, "job-uri",
- IPP_TAG_URI)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "job-uri", IPP_TAG_URI)) != NULL)
{
const char *uri = ippGetString(attr, 0, NULL);
if (!strncmp(uri, client->printer->uri, client->printer->urilen) &&
uri[client->printer->urilen] == '/')
key.id = atoi(uri + client->printer->urilen + 1);
+ else
+ return (NULL);
}
- else if ((attr = ippFindAttribute(client->request, "job-id",
- IPP_TAG_INTEGER)) != NULL)
+ else if ((attr = ippFindAttribute(client->request, "job-id", IPP_TAG_INTEGER)) != NULL)
key.id = ippGetInteger(attr, 0);
_cupsRWLockRead(&(client->printer->rwlock));
@@ -1982,6 +2402,71 @@ html_escape(_ipp_client_t *client, /* I - Client */
}
+/*
+ * 'html_footer()' - Show the web interface footer.
+ *
+ * This function also writes the trailing 0-length chunk.
+ */
+
+static void
+html_footer(_ipp_client_t *client) /* I - Client */
+{
+ html_printf(client,
+ "\n"
+ "