]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Import CUPS v2.0rc1 release-2.0rc1
authorMichael Sweet <msweet@msweet-imac.local>
Tue, 15 Mar 2016 14:40:26 +0000 (10:40 -0400)
committerMichael Sweet <msweet@msweet-imac.local>
Tue, 15 Mar 2016 14:40:26 +0000 (10:40 -0400)
84 files changed:
CHANGES.txt
INSTALL.txt
Makefile
README.txt
backend/network.c
backend/usb-unix.c
cgi-bin/admin.c
config-scripts/cups-common.m4
config-scripts/cups-compiler.m4
config-scripts/cups-ssl.m4
config.h.in
configure
cups/Dependencies
cups/api-filter.shtml
cups/cups.h
cups/dest-localization.c
cups/dest.c
cups/globals.c
cups/http-addr.c
cups/http-private.h
cups/http-support.c
cups/http.c
cups/http.h
cups/ipp-support.c
cups/ipp.c
cups/md5.c
cups/ppd-cache.c
cups/sidechannel.c
cups/tls-darwin.c
cups/tls-gnutls.c
cups/tls-sspi.c
cups/tls.c
cups/usersys.c
doc/help/api-cups.html
doc/help/api-filter.html
doc/help/api-httpipp.html
doc/help/man-ipptool.html
filter/raster.c
filter/rastertoepson.c
locale/cups.pot
locale/cups.strings
locale/cups_ca.po
locale/cups_cs.po
locale/cups_es.po
locale/cups_fr.po
locale/cups_it.po
locale/cups_ja.po
locale/cups_ru.po
man/ipptool.man
notifier/rss.c
packaging/cups.spec
ppdc/sample.drv
scheduler/Makefile
scheduler/auth.c
scheduler/client.c
scheduler/conf.c
scheduler/cups-driverd.cxx
scheduler/ipp.c
scheduler/job.c
scheduler/listen.c
scheduler/main.c
scheduler/process.c
scheduler/sysman.c
scheduler/sysman.h
systemv/lpstat.c
templates/restart.tmpl
test/Dependencies
test/get-completed-jobs.test
test/get-jobs.test
test/identify-printer.test [new file with mode: 0644]
test/ippfind.c
test/ippserver.c
test/ippserver.man [new file with mode: 0644]
test/ipptool.c
test/printer.opacity
test/printer.png
test/run-stp-tests.sh
vcnet/config.h
vcnet/cups.sln
vcnet/ippserver.vcproj [new file with mode: 0644]
vcnet/libcups2.vcproj
vcnet/sw-ippeveselfcert10.vdproj [new file with mode: 0644]
xcode/CUPS.xcodeproj/project.pbxproj
xcode/config.h

index eb812c4d7fa8e51c9c9688640577266de4664286..b7c0b26a0cb83161d5b31b0f2c852894a77e61b1 100644 (file)
@@ -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 (<rdar://problem/17325852>)
+       - The scheduler incorrectly called launch_activate_socket multiple times
+         on OS X (<rdar://problem/17523218>)
+       - The ippserver test program now passes the IPP Everywhere self-
+         certification tests (STR #4101)
+       - Relaxed the new OS X filter sandbox slightly (STR #4471,
+         <rdar://problem/17483959>)
+       - 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 (<rdar://problem/18036889>)
+       - 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
 
index feeafe7c2ddcd8c74bffc40ab8d8f7b3b1226f10..77b1628c14ab8354011111d6466f6177e533c0c7 100644 (file)
@@ -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
index 79e46a3aa344078e5ce6eba180631a39102ffb19..84d3cce028c5b9e8c8007c37d179f76703535d48 100644 (file)
--- 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 $".
 #
index 2f5722c1fc1c7b49449eb475642902a7a8d2f680..d9c0adb55aa9a226883643b00cde6498adfa1c8d 100644 (file)
@@ -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
index fa016c655cce2970f00753b44ce50a3d465836d1..2cf5f72b9c0518d4f518b28eced8a1ba34d8b8da 100644 (file)
@@ -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 $".
  */
index 5e63a0e41eaa50a17e0f625ef16986f950b6e8b2..813039d1eb8bb65f50981b5cb076f4f44cfeaa3a 100644 (file)
@@ -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 $".
  */
index b4ed294f5a04992c38a5708c09eafac20a14a234..9de2424c3c752f2a93f454fdbc81235101e1a0c7 100644 (file)
@@ -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 $".
  */
index 5822fe53ec8602d689a995fc6ea20535e12829df..20168172cccb80d7ab9d7f24f69f36ac81fa7e87 100644 (file)
@@ -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 <dlfcn.h> 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
index 421bfe7753c2fd49bbcd3d9f96a6cfe9646a6a32..ca3bae8e07001bf3e89dcd77cea5b890aef6dfc9 100644 (file)
@@ -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
index cdd035c5ae7f51c0712ed207bc69b5a58a4244b4..97760ca241906feb56ecf8adcf901615c194f02c 100644 (file)
@@ -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
index c3347945ba51610274351296aef4d4cba556729e..0d11eff69547da7cf346bf6f61f9b5f6f0c04399 100644 (file)
@@ -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
 
 
 /*
  * 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
 
 #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?
  */
 #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 $".
  */
index 4b270fee79e7a36859e5702a0354fa7d6072639a..dab003f8ca914b4904ae0f08990c7886ee0b6e91 100755 (executable)
--- 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
index 54bd08c7c629e7f00a9c979f519eeb96d8343626..64a0d19d10be10cef0e22f587b18c153540bc553 100644 (file)
@@ -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 \
index 4b8372eddad88110de830d8e1a9a983eb0f73483..7c33179c8ea1962587fb28dab96fa9876e48b559 100644 (file)
@@ -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.</p>
 
 <p>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.</p>
+OS X, for example, no backend may write to a user's home directory. See the <a href="#SANDBOXING">Sandboxing on OS X</a> section for more information.</p>
 </blockquote>
 
 <h3><a name="SIGNALS">Canceled Jobs and Signal Handling</a></h3>
@@ -852,3 +852,25 @@ void *my_data;
 
 <a href="#cupsSideChannelSNMPWalk">cupsSNMPSideChannelWalk</a>(".1.3.6.1.2.1.43", 5.0, my_callback, my_data);
 </pre>
+
+<h2><a name="SANDBOXING">Sandboxing on OS X</a></h2>
+
+<p>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:</p>
+
+<ol>
+
+       <li>Reading of files: pursuant to normal UNIX file permissions, filters and backends can read files for the current job from the <var>/private/var/spool/cups</var> directory and other files on mounted filesystems <em>except</em> for user home directories under <var>/Users</var>.</li>
+
+       <li>Writing of files: pursuant to normal UNIX file permissions, filters and backends can read/write files to the cache directory specified by the <code>CUPS_CACHEDIR</code> environment variable, to the state directory specified by the <code>CUPS_STATEDIR</code> environment variable, to the temporary directory specified by the <code>TMPDIR</code> environment variable, and under the <var>/private/var/db</var>, <var>/private/var/folders</var>, <var>/private/var/lib</var>, <var>/private/var/mysql</var>, <var>/private/var/run</var>, <var>/private/var/spool</var> (except <var>/private/var/spool/cups</var>), <var>/Library/Application&nbsp;Support</var>, <var>/Library/Caches</var>, <var>/Library/Logs</var>, <var>/Library/Preferences</var>, <var>/Library/WebServer</var>, and <var>/Users/Shared</var> directories.</li>
+
+       <li>Execution of programs: pursuant to normal UNIX file permissions, filters and backends can execute any program not located under the <var>/Users</var> directory. Child processes inherit the sandbox and are subject to the same restrictions as the parent.</li>
+
+       <li>Bluetooth and USB: backends can access Bluetooth and USB printers through IOKit. <em>Filters cannot access Bluetooth and USB printers directly.</em></li>
+
+       <li>Network: filters and backends can access UNIX domain sockets under the <var>/private/tmp</var>, <var>/private/var/run</var>, and <var>/private/var/tmp</var> directories. Backends can also create IPv4 and IPv6 TCP (outgoing) and UDP (incoming and outgoing) socket, and bind to local source ports. <em>Filters cannot directly create IPv4 and IPv6 TCP or UDP sockets.</em></li>
+
+       <li>Notifications: filters and backends can send notifications via the Darwin <code>notify_post()</code> API.</li>
+
+</ol>
+
+<blockquote><b>Note:</b> 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.</blockquote>
index 77e824d0bcfb41e3cb091c12e70e627b5ddff487..b7047dae5bd81a8b0e389e72ef374b88fdb647c2 100644 (file)
@@ -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 $".
  */
index f2bb9eb066ae93de5abb78b3fa2d68ce1bde91b4..d76ae2b2434c2c95b4a7aeb1195097d188d1106d 100644 (file)
@@ -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 $".
  */
index ab36a0660025f698846c1e986617cfd5f27da534..9e88aede6cccbec7e006ba415ff5fea9d822dccd 100644 (file)
@@ -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 $".
  */
index 40727381d0b8d4f404f4c68d674bd4056af0b013..374f85005e640d065933a99b1c1bb707f88e419e 100644 (file)
@@ -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 $".
  */
index 51bf039a58aa149e2a80e18932c3012c8894f097..3f68d0d498c76072499531657ce875a64cb0e9d8 100644 (file)
@@ -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 $".
  */
index 23aee761f21e204c3078f2473a1dc91056462c55..2c18052c5cb7602e756b15b0bce6b073f4c56185 100644 (file)
@@ -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 <gnutls/gnutls.h>
 #    include <gnutls/x509.h>
-#    include <gcrypt.h>
 #  elif defined(HAVE_CDSASSL)
 #    include <CoreFoundation/CoreFoundation.h>
 #    include <Security/Security.h>
@@ -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 $".
  */
index 0f224097a0b29e8b6be24f5e3e4ee85a2e758861..7e30608ceb721e27f2de9ebae35ad8cf80213f66 100644 (file)
@@ -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 $".
  */
index b4c9d71fb8dc2c824916004e25441eed94fbf814..b5cf4e167b8d3e1d0d0f252149a5a024035f86eb 100644 (file)
@@ -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 $".
  */
index bce03ca8ec40ac85581be0ab7ea4f945eee95e25..867517b719142f33feef665ef1bc133cabb29905 100644 (file)
@@ -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 $".
  */
index a94888160db52eb695d8fe931172f3b8eb55918c..926be7a5ee5dd4e77041884729f7bba37db076ca 100644 (file)
@@ -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 $".
  */
index fab338453301f80c2d9256ba66fd79a2c4655966..cc5eebcf89b80e859ffae25dce211521a290e9ed 100644 (file)
@@ -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 $".
  */
index 5f473cb365f4dc3a923260de2beecc2b9c8cae39..8c87ac7eaed8170022bbafadde001a11b6cc258a 100644 (file)
@@ -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 $".
  */
index 7b3a9e5bf6c921c635074c0d6228ad4b01731666..f72fc9bf01f68ea812eb5ee7d5c6d25b339524c9 100644 (file)
@@ -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 $".
  */
index 8ecfbfc12298bafe9b4d975e06e12789253541a6..d9517e9dbe1b496918ab432b2f01609064833179 100644 (file)
@@ -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 $".
  */
index 9fa0465dc57a199e3570f53923fab4b56268ef3a..dab7ba9e6cb701755c90fcbf1c591590ae0351ac 100644 (file)
@@ -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 $".
  */
index c69327226ba406a017111eaf541b2f0ef9be2987..5b32a8a67577f0238cd2673b50cb1764b7ed0277 100644 (file)
@@ -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 $".
  */
index 868e6027a73be9c2fc21602bad1902c5bd5b9f9a..a676830d14a45621eaf2be035ccb047bccd031c7 100644 (file)
@@ -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 $".
  */
index e7937a07fe29609309dbac783b80f45159206f61..14b0260ed1ccf764e288005d1400e934eefd2446 100644 (file)
@@ -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.
  *
 #    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 $".
  */
index eef1b311e0b3812c9a0b74ff439c2cc132bf2c18..8b00cb8cd7323f471d1c5ad4ce7ac22dc40233cb 100644 (file)
@@ -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 $".
  */
index dd9a4fb12d9e7e4a42369c7b6f2a076a133a0325..19f7ccb908f05b15cfaa1815fb651a2148a65c17 100644 (file)
@@ -2097,7 +2097,7 @@ example, passing <code>CUPS_MEDIA_FLAGS_BORDERLESS</code> will return the defaul
 borderless size, typically US Letter or A4, but sometimes 4x6 photo media.
 
 </p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="cupsGetDestWithURI">cupsGetDestWithURI</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS X 10.10&nbsp;</span><a name="cupsGetDestWithURI">cupsGetDestWithURI</a></h3>
 <p class="description">Get a destination associated with a URI.</p>
 <p class="code">
 <a href="#cups_dest_t">cups_dest_t</a> *cupsGetDestWithURI (<br>
@@ -2525,7 +2525,7 @@ cups_lang_t *cupsLangGet (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Language data</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="cupsLocalizeDestMedia">cupsLocalizeDestMedia</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS X 10.10&nbsp;</span><a name="cupsLocalizeDestMedia">cupsLocalizeDestMedia</a></h3>
 <p class="description">Get the localized string for a destination media
 size.</p>
 <p class="code">
index 416e2fbab410f8258dae27c095fc06895c99b373..1ab935b51e17087b822f70e1c60d439f276baddc 100644 (file)
@@ -408,6 +408,7 @@ div.contents ul.subcontents li {
        <li><a href="#COMMUNICATING_FILTER">Communicating with Filters</a></li>
        <li><a href="#SNMP">Doing SNMP Queries with Network Printers</a></li>
 </ul></li>
+<li><a href="#SANDBOXING">Sandboxing on OS X</a></li>
 <li><a href="#FUNCTIONS">Functions</a><ul class="code">
        <li><a href="#cupsBackChannelRead" title="Read data from the backchannel.">cupsBackChannelRead</a></li>
        <li><a href="#cupsBackChannelWrite" title="Write data to the backchannel.">cupsBackChannelWrite</a></li>
@@ -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.</p>
 
 <p>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.</p>
+OS X, for example, no backend may write to a user's home directory. See the <a href="#SANDBOXING">Sandboxing on OS X</a> section for more information.</p>
 </blockquote>
 
 <h3><a name="SIGNALS">Canceled Jobs and Signal Handling</a></h3>
@@ -1291,6 +1292,28 @@ void *my_data;
 
 <a href="#cupsSideChannelSNMPWalk">cupsSNMPSideChannelWalk</a>(".1.3.6.1.2.1.43", 5.0, my_callback, my_data);
 </pre>
+
+<h2><a name="SANDBOXING">Sandboxing on OS X</a></h2>
+
+<p>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:</p>
+
+<ol>
+
+       <li>Reading of files: pursuant to normal UNIX file permissions, filters and backends can read files for the current job from the <var>/private/var/spool/cups</var> directory and other files on mounted filesystems <em>except</em> for user home directories under <var>/Users</var>.</li>
+
+       <li>Writing of files: pursuant to normal UNIX file permissions, filters and backends can read/write files to the cache directory specified by the <code>CUPS_CACHEDIR</code> environment variable, to the state directory specified by the <code>CUPS_STATEDIR</code> environment variable, to the temporary directory specified by the <code>TMPDIR</code> environment variable, and under the <var>/private/var/db</var>, <var>/private/var/folders</var>, <var>/private/var/lib</var>, <var>/private/var/mysql</var>, <var>/private/var/run</var>, <var>/private/var/spool</var> (except <var>/private/var/spool/cups</var>), <var>/Library/Application&nbsp;Support</var>, <var>/Library/Caches</var>, <var>/Library/Logs</var>, <var>/Library/Preferences</var>, <var>/Library/WebServer</var>, and <var>/Users/Shared</var> directories.</li>
+
+       <li>Execution of programs: pursuant to normal UNIX file permissions, filters and backends can execute any program not located under the <var>/Users</var> directory. Child processes inherit the sandbox and are subject to the same restrictions as the parent.</li>
+
+       <li>Bluetooth and USB: backends can access Bluetooth and USB printers through IOKit. <em>Filters cannot access Bluetooth and USB printers directly.</em></li>
+
+       <li>Network: filters and backends can access UNIX domain sockets under the <var>/private/tmp</var>, <var>/private/var/run</var>, and <var>/private/var/tmp</var> directories. Backends can also create IPv4 and IPv6 TCP (outgoing) and UDP (incoming and outgoing) socket, and bind to local source ports. <em>Filters cannot directly create IPv4 and IPv6 TCP or UDP sockets.</em></li>
+
+       <li>Notifications: filters and backends can send notifications via the Darwin <code>notify_post()</code> API.</li>
+
+</ol>
+
+<blockquote><b>Note:</b> 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.</blockquote>
 <h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
 <h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="cupsBackChannelRead">cupsBackChannelRead</a></h3>
 <p class="description">Read data from the backchannel.</p>
index 083794489d2317921996092109aef3bac387b772..ef21b674c17f964fbf33ba2b01341056bd1066d3 100644 (file)
@@ -1490,7 +1490,7 @@ int httpAddrAny (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">1 if &quot;any&quot;, 0 otherwise</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpAddrClose">httpAddrClose</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpAddrClose">httpAddrClose</a></h3>
 <p class="description">Close a socket created by <a href="#httpAddrConnect"><code>httpAddrConnect</code></a> or
 <a href="#httpAddrListen"><code>httpAddrListen</code></a>.</p>
 <p class="code">
@@ -1820,7 +1820,7 @@ void httpClose (<br>
 <dt>http</dt>
 <dd class="description">HTTP connection</dd>
 </dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpCompareCredentials">httpCompareCredentials</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpCompareCredentials">httpCompareCredentials</a></h3>
 <p class="description">Compare two sets of X.509 credentials.</p>
 <p class="code">
 int httpCompareCredentials (<br>
@@ -2107,7 +2107,7 @@ int httpGet (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpGetActivity">httpGetActivity</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetActivity">httpGetActivity</a></h3>
 <p class="description">Get the most recent activity for a connection.</p>
 <p class="code">
 time_t httpGetActivity (<br>
@@ -2124,7 +2124,7 @@ time_t httpGetActivity (<br>
 <p class="discussion">The return value is the UNIX time of the last read or write.
 
 </p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpGetAddress">httpGetAddress</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetAddress">httpGetAddress</a></h3>
 <p class="description">Get the address of the connected peer of a connection.</p>
 <p class="code">
 <a href="#http_addr_t">http_addr_t</a> *httpGetAddress (<br>
@@ -2255,7 +2255,7 @@ time_t httpGetDateTime (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">UNIX time</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpGetEncryption">httpGetEncryption</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetEncryption">httpGetEncryption</a></h3>
 <p class="description">Get the current encryption mode of a connection.</p>
 <p class="code">
 <a href="#http_encryption_t">http_encryption_t</a> httpGetEncryption (<br>
@@ -2362,7 +2362,7 @@ Otherwise, return the FQDN for the local system using both gethostname()
 and gethostbyname() to get the local hostname with domain.
 
 </p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpGetKeepAlive">httpGetKeepAlive</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetKeepAlive">httpGetKeepAlive</a></h3>
 <p class="description">Get the current Keep-Alive state of the connection.</p>
 <p class="code">
 <a href="#http_keepalive_t">http_keepalive_t</a> httpGetKeepAlive (<br>
@@ -2413,7 +2413,7 @@ off_t httpGetLength2 (<br>
 content larger than 2^31 - 1.
 
 </p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpGetPending">httpGetPending</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetPending">httpGetPending</a></h3>
 <p class="description">Get the number of bytes that are buffered for writing.</p>
 <p class="code">
 size_t httpGetPending (<br>
@@ -2426,7 +2426,7 @@ size_t httpGetPending (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Number of bytes buffered</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpGetReady">httpGetReady</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetReady">httpGetReady</a></h3>
 <p class="description">Get the number of bytes that can be read without blocking.</p>
 <p class="code">
 size_t httpGetReady (<br>
@@ -2439,7 +2439,7 @@ size_t httpGetReady (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Number of bytes available</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpGetRemaining">httpGetRemaining</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetRemaining">httpGetRemaining</a></h3>
 <p class="description">Get the number of remaining bytes in the message
 body or current chunk.</p>
 <p class="code">
@@ -2584,7 +2584,7 @@ int httpHead (<br>
 default HTTP proxy (if any).</p>
 <p class="code">
 void httpInitialize (void);</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpIsChunked">httpIsChunked</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpIsChunked">httpIsChunked</a></h3>
 <p class="description">Report whether a message body is chunked.</p>
 <p class="code">
 int httpIsChunked (<br>
@@ -2602,7 +2602,7 @@ int httpIsChunked (<br>
 variable-length chunks.
 
 </p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpIsEncrypted">httpIsEncrypted</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpIsEncrypted">httpIsEncrypted</a></h3>
 <p class="description">Report whether a connection is encrypted.</p>
 <p class="code">
 int httpIsEncrypted (<br>
@@ -2856,7 +2856,7 @@ int httpReconnect2 (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">0 on success, non-zero on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpResolveHostname">httpResolveHostname</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpResolveHostname">httpResolveHostname</a></h3>
 <p class="description">Resolve the hostname of the HTTP connection
 address.</p>
 <p class="code">
@@ -3109,7 +3109,7 @@ void httpSetField (<br>
 <dt>value</dt>
 <dd class="description">Value</dd>
 </dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpSetKeepAlive">httpSetKeepAlive</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpSetKeepAlive">httpSetKeepAlive</a></h3>
 <p class="description">Set the current Keep-Alive state of a connection.</p>
 <p class="code">
 void httpSetKeepAlive (<br>
@@ -3163,7 +3163,7 @@ must be greater than 0</dd>
 data pointer and must return 1 to continue or 0 to error (time) out.
 
 </p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpShutdown">httpShutdown</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpShutdown">httpShutdown</a></h3>
 <p class="description">Shutdown one side of an HTTP connection.</p>
 <p class="code">
 void httpShutdown (<br>
@@ -3174,7 +3174,7 @@ void httpShutdown (<br>
 <dt>http</dt>
 <dd class="description">HTTP connection</dd>
 </dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpStateString">httpStateString</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpStateString">httpStateString</a></h3>
 <p class="description">Return the string describing a HTTP state value.</p>
 <p class="code">
 const char *httpStateString (<br>
@@ -3219,7 +3219,7 @@ int httpTrace (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="httpURIStatusString">httpURIStatusString</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpURIStatusString">httpURIStatusString</a></h3>
 <p class="description">Return a string describing a URI status code.</p>
 <p class="code">
 const char *httpURIStatusString (<br>
@@ -4140,7 +4140,7 @@ int ippCopyAttributes (<br>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">1 on success, 0 on error</p>
 <h4 class="discussion">Discussion</h4>
-<p class="discussion">Zero or more attributes are copied from the source IPP message, @code@ src, to the
+<p class="discussion">Zero or more attributes are copied from the source IPP message, <code>src</code>, to the
 destination IPP message, <code>dst</code>. When <code>quickcopy</code> is non-zero, a &quot;shallow&quot;
 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.<br>
@@ -5393,7 +5393,7 @@ the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ip
 The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2.
 
 </p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="ippStateString">ippStateString</a></h3>
+<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="ippStateString">ippStateString</a></h3>
 <p class="description">Return the name corresponding to a state value.</p>
 <p class="code">
 const char *ippStateString (<br>
@@ -5616,7 +5616,7 @@ typedef struct _http_s http_t;
 <p class="code">
 typedef int (*http_timeout_cb_t)(<a href="#http_t">http_t</a> *http, void *user_data);
 </p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="http_trust_t">http_trust_t</a></h3>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="http_trust_t">http_trust_t</a></h3>
 <p class="description">Level of trust for credentials </p>
 <p class="code">
 typedef enum <a href="#http_trust_e">http_trust_e</a> http_trust_t;
@@ -6018,7 +6018,7 @@ are server-oriented...</p>
 <dt>HTTP_STATUS_USE_PROXY </dt>
 <dd class="description">Must use a proxy to access this URI</dd>
 </dl>
-<h3 class="enumeration"><span class="info">&nbsp;CUPS 2.0&nbsp;</span><a name="http_trust_e">http_trust_e</a></h3>
+<h3 class="enumeration"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="http_trust_e">http_trust_e</a></h3>
 <p class="description">Level of trust for credentials </p>
 <h4 class="constants">Constants</h4>
 <dl>
index fc6ac1b7028017f3ff34930491b955499af2b073..aba14e5510c5b2ac34292d608f26da54a7570b5d 100644 (file)
@@ -71,9 +71,12 @@ ipptool - perform internet printing protocol requests
 <b>ipptool</b>
 sends IPP requests to the specified
 <i>printer-uri</i>
-and tests and/or displays the results. Each named
+and tests and/or displays the results.
+Each named
 <i>testfile</i>
-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</i>
 format is described in
 <a href="man-ipptoolfile.html?TOPIC=Man+Pages"><b>ipptoolfile</b>(5).</a>
@@ -102,7 +105,8 @@ must connect to the printer or server using IPv4.
 <b>ipptool</b>
 must connect to the printer or server using IPv6.
 <dt><b>-C</b>
-<dd style="margin-left: 5.0em">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.
+<dd style="margin-left: 5.0em">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.
 <dt><b>-E</b>
 <dd style="margin-left: 5.0em">Forces TLS encryption when connecting to the server using the HTTP "Upgrade" header.
 <dt><b>-I</b>
@@ -110,9 +114,11 @@ must connect to the printer or server using IPv6.
 <b>ipptool</b>
 will continue past errors.
 <dt><b>-L</b>
-<dd style="margin-left: 5.0em">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.
+<dd style="margin-left: 5.0em">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.
 <dt><b>-P</b><i> filename.plist</i>
-<dd style="margin-left: 5.0em">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 <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
+<dd style="margin-left: 5.0em">Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (<b>-t</b>).
+This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
 <dt><b>-S</b>
 <dd style="margin-left: 5.0em">Forces (dedicated) TLS encryption when connecting to the server.
 <dt><b>-T</b><i> seconds</i>
@@ -120,7 +126,8 @@ will continue past errors.
 <dt><b>-V</b><i> version</i>
 <dd style="margin-left: 5.0em">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.
 <dt><b>-X</b>
-<dd style="margin-left: 5.0em">Specifies that XML (Apple plist) output is desired instead of the plain text report. This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
+<dd style="margin-left: 5.0em">Specifies that XML (Apple plist) output is desired instead of the plain text report.
+This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
 <dt><b>-c</b>
 <dd style="margin-left: 5.0em">Specifies that CSV (comma-separated values) output is desired instead of the plain text output.
 <dt><b>-d</b><i> name=value</i>
@@ -130,17 +137,22 @@ will continue past errors.
 <dt><b>-i</b><i> seconds</i>
 <dd style="margin-left: 5.0em">Specifies that the (last)
 <i>testfile</i>
-should be repeated at the specified interval. This option is incompatible with the <b>-X</b> (XML plist output) option.
+should be repeated at the specified interval.
+This option is incompatible with the <b>-X</b> (XML plist output) option.
 <dt><b>-l</b>
 <dd style="margin-left: 5.0em">Specifies that plain text output is desired.
 <dt><b>-n</b><i> repeat-count</i>
 <dd style="margin-left: 5.0em">Specifies that the (last)
 <i>testfile</i>
-should be repeated the specified number of times. This option is incompatible with the <i>-X</i> (XML plist output) option.
+should be repeated the specified number of times.
+This option is incompatible with the <i>-X</i> (XML plist output) option.
+<dt><b>-q</b>
+<dd style="margin-left: 5.0em">Be quiet and produce no output.
 <dt><b>-t</b>
 <dd style="margin-left: 5.0em">Specifies that CUPS test report output is desired instead of the plain text output.
 <dt><b>-v</b>
-<dd style="margin-left: 5.0em">Specifies that all request and response attributes should be output in CUPS test mode (<b>-t</b>). This is the default for XML output.
+<dd style="margin-left: 5.0em">Specifies that all request and response attributes should be output in CUPS test mode (<b>-t</b>).
+This is the default for XML output.
 </dl>
 <h2 class="title"><a name="EXIT_STATUS">Exit Status</a></h2>
 The
index 8905a83d99b3188a73d4927f167e20f5f7c5cf3d..827215c68601f9b8e9b6e408f17f080e803899fd 100644 (file)
@@ -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 $".
  */
index 908ec4852744e88f0860beba6f7dd17c85b0e2f3..7d4cacd33bd1668413d7059fd0bd8d702806bd3d 100644 (file)
@@ -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 $".
  */
index 40b972896eda9deeeed7b027b1b46f7b7c45982c..591989b866b2af86b1d81f17adeee480f2bfb19a 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
 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 ""
 
index faaa462c24f3e24a0c9fe6516007b4a2211b8f9d..33e9891aed0d800ca7af686ad121780b424ab66b 100644 (file)
 "  --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).";
 "  --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).";
 "  -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.";
 "  -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.";
 "  -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.";
 "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.";
 "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";
 "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";
index 8e524fc35c7f614329157d79fd03031aecf0763f..9c6985f289b8d2fd295d7993cf19f5ffd3035e7c 100644 (file)
@@ -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ó <mecatxis@gmail.com>\n"
 "Language-Team: Catalan <ca@dodds.net>\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."
 
index d72c1904736199700e2f178b7efe96f6f596dfb3..307c15fa842b2b48684ec1ab58082b599c566ad0 100644 (file)
@@ -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 <jan.bartos@madeta.cz>\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"
index 461553c9abb205a7ed22be00b79430d4b2363bee..47885aec10d19fe65f9381c35da2d74a79d1fd3b 100644 (file)
@@ -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 <riopedre13@yahoo.es>\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"
 
index 402e54a39679761249aea53ce7bd54d17de43762..98433845bbdecf7b68968be7d77e4f9ff8233c1d 100644 (file)
@@ -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 <dcmeram@libertysurf.fr>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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"
index 30b10277233940ad28af8a8fe7e9881a67602a02..ad8133239644e25231db4180fac592025ba7d707 100644 (file)
@@ -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 <giovanni@archlinux.org>\n"
 "Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\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."
 
index 9f3dd4f8e22d164075720ca252381920cae008f8..d4b9f1b48aff897c4398a7048093fd37190b5cab 100644 (file)
@@ -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 <opfc-transcups@sourceforge.jp>\n"
 "Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\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 "排紙トレイがほとんど一杯です。"
 
index 425dbdf49cd461756693c4eb67fdbd7b88bb31d0..afd0a8fff0b1ea56944a8c40aa9baf38fbc8f89a 100644 (file)
@@ -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 (расширенный)"
 
index f88a0c1ad5b439fafb75b6947d4476bf74df4121..0b441dd4ca8d4e8eb3537bd583ebf1a42d8b61b6 100644 (file)
@@ -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 $".
 .\"
index 65e577f0b5650d9876b5d9330f4f53db27d605c3..7f518eca3bc34b757e7c56c78dcd924d24284cd7 100644 (file)
@@ -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 <cups/cups.h>
+#include <sys/stat.h>
 #include <cups/language.h>
 #include <cups/string-private.h>
 #include <cups/array.h>
@@ -629,6 +619,8 @@ save_rss(cups_array_t *rss,         /* I - RSS messages */
     return (0);
   }
 
+  fchmod(fileno(fp), 0644);
+
   fputs("<?xml version=\"1.0\"?>\n", fp);
   fputs("<rss version=\"2.0\">\n", fp);
   fputs("  <channel>\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 $".
  */
index 8ea836b3288ad7e8f6b13b5ebc1e60007f874349..ca126f111b31fdbe893edc1a478b6444587dd4f3 100644 (file)
 
 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 <anonymous@foo.com>
 Vendor: Apple Inc.
index 1b6bbceb2509639cd73423f7a83e02101aa44ff9..4935feb831ce41ff7ea87a073ba6634bc2885e87 100644 (file)
@@ -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 $".
 //
index cd12aca182fb6764a14b91dc562a4cce16686588..c0c54a4b6df258a22f3639a8e42f37f127c14cba 100644 (file)
@@ -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 $".
 #
index dbc90cec6da0dc09cd9028116fb39f5b0c43ce39..4e5ad5b9a439f0793db68f2fa23cf276e2c68aae 100644 (file)
@@ -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 $".
  */
index 7b74131aed6054fc0053fecb7dfb88fea2e0115c..949191000b944a693ee3205c71c173c486eb100f 100644 (file)
@@ -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 $".
  */
index cd468934ce69f76c4d48fef0f5a94d2673bf37fe..bf9a079e4453981788324dd3ce7b6a1869ad62bb 100644 (file)
@@ -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 $".
  */
index 8b047a9e75b454e5e24b36a7be808230ac1e4698..7828448054c697b1490c8275bae02ad866aabb83 100644 (file)
@@ -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 $".
  */
index 9806f10582cea9363d0eaf6f2a94333e3cb41c03..05371e6ded9c4b6a31e3492ac2d74916bb9b8c1c 100644 (file)
@@ -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 $".
  */
index 0dbf39b6facbd63e877f1dfd2ff978a739a39ed6..b05050b6a01bf6fb20d047a397c7dffdf2aa104b 100644 (file)
@@ -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 $".
  */
index 842d3787718b31a52b26a7efdd8473321459e77f..a704121654b8930977e4689a460c240e5718006b 100644 (file)
@@ -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 $".
  */
index 92c10b127e0605cc5bf32160f0c2758436df7467..1d3ac1b555611897e6a0de9831b2479315ee7587 100644 (file)
@@ -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 $".
  */
index 1b1aeae8ffdb1f7a66590bd9ca8642d77c422987..d23a352c7fb08088ff050903ddf8ac2f293e7853 100644 (file)
@@ -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 $".
  */
index 4b642153198a1c0d9fbdc453c45fa5a93d15e001..315db7f4d5097d0106f8ce5b2601af9194c12c87 100644 (file)
@@ -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
  */
 
 #include "cupsd.h"
-#ifdef HAVE_VPROC_TRANSACTION_BEGIN
-#  include <vproc.h>
-#endif /* HAVE_VPROC_TRANSACTION_BEGIN */
 #ifdef __APPLE__
+#  include <vproc.h>
 #  include <IOKit/pwr_mgt/IOPMLib.h>
 #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 <notify.h>
 #  include <IOKit/IOKitLib.h>
 #  include <IOKit/IOMessage.h>
+#  include <IOKit/ps/IOPowerSources.h>
 #  include <IOKit/pwr_mgt/IOPMLib.h>
 #  include <SystemConfiguration/SystemConfiguration.h>
 #  include <pthread.h>
@@ -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 $".
  */
index b911feb97af3f0bc4c67b95fb52a4378e8e54a46..9da386da51fc4f88bc096ea0ea88b18966c71cdf 100644 (file)
@@ -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 $".
  */
index 8190ba11b6188ff91e6be8e191e17fa41642a158..9c076cb255cadb581a3ff8c5d4a3abd42143f78f 100644 (file)
@@ -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 $".
  */
index 6455652f8977adc9509489bbe9494688c077ac88..47d39d07163fe0ffd1001ba5d795444f45af535e 100644 (file)
@@ -1,4 +1,4 @@
 <H2 CLASS="title">Change Settings</H2>
 
-<P><IMG SRC="/images/wait.gif" WIDTH="16" HEIGHT="16" ALIGN="ABSMIDDLE"
+<P><IMG SRC="data:image/gif;base64,R0lGODlhEAAQAIQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaP///////////////////////////////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQABQD/ACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAEFAB8ALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQBBQAfACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQBBQAfACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkEAQUAHwAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkEAQUAHwAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkEAQUAHwAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAEFAB8ALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkEAQUAHwAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAEFAB8ALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQBBQAfACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQBBQAfACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOw==" WIDTH="16" HEIGHT="16" ALIGN="ABSMIDDLE"
 ALT="Busy Indicator"> Please stand by while the server restarts...</P>
index e7f0cfc5eed3186e4a83383e1a9413581dd14836..8405117d24bdb274b09a2224e640a2792f19df80 100644 (file)
@@ -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 \
index 00d3754d2103d8184e5f383ec5304f8d163bcb35..504ab824f300fecc999a3415d34a287ecaae087f 100644 (file)
@@ -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 $".
 #
index 2b2c031e8cb60571b0ddc1c8d78f337e180560ac..d8cc5149ddedc7e7ee1c7706d20fd86271ee4bc6 100644 (file)
@@ -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 (file)
index 0000000..b97bb71
--- /dev/null
@@ -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
+}
index 517eacb43c292f22ab702e8671f689a17c8c910c..758de0c703e1df9c8a899b0e8d74629b021177aa 100644 (file)
@@ -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 $".
  */
index 8ee491fbfc012df42936a7847dfbe9f2dace4597..f2055a1971eac0a8146e50cd41b449b8cbee84f5 100644 (file)
@@ -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.
  *
  * Include necessary headers...
  */
 
-#include <cups/cups.h>                 /* Public API */
 #include <config.h>                    /* CUPS configuration header */
-#include <cups/string-private.h>       /* For string functions */
+#include <cups/cups.h>                 /* Public API */
+#include <cups/string-private.h>       /* CUPS string functions */
 #include <cups/thread-private.h>       /* For multithreading functions */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <sys/stat.h>
+
+#ifdef WIN32
+#  include <fcntl.h>
+#  include <io.h>
+#  include <process.h>
+#  define WEXITSTATUS(s) (s)
+#  include <winsock2.h>
+typedef ULONG nfds_t;
+#  define poll WSAPoll
+#else
+extern char **environ;
 
-#include <sys/wait.h>
+#  include <sys/fcntl.h>
+#  include <sys/wait.h>
+#  include <poll.h>
+#endif /* WIN32 */
 
 #ifdef HAVE_DNSSD
 #  include <dns_sd.h>
 #endif /* HAVE_DNSSD */
-#include <limits.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <poll.h>
 #ifdef HAVE_SYS_MOUNT_H
 #  include <sys/mount.h>
 #endif /* HAVE_SYS_MOUNT_H */
  * 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,
+             "</div>\n"
+             "</body>\n"
+             "</html>\n");
+  httpWrite2(client->http, "", 0);
+}
+
+
+/*
+ * 'html_header()' - Show the web interface header and title.
+ */
+
+static void
+html_header(_ipp_client_t *client,     /* I - Client */
+            const char    *title)      /* I - Title */
+{
+  html_printf(client,
+             "<!doctype html>\n"
+             "<html>\n"
+             "<head>\n"
+             "<title>%s</title>\n"
+             "<link rel=\"shortcut icon\" href=\"/icon.png\" type=\"image/png\">\n"
+             "<link rel=\"apple-touch-icon\" href=\"/icon.png\" type=\"image/png\">\n"
+             "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\">\n"
+             "<meta name=\"viewport\" content=\"width=device-width\">\n"
+             "<style>\n"
+             "body { font-family: sans-serif; margin: 0; }\n"
+             "div.body { padding: 0px 10px 10px; }\n"
+             "blockquote { background: #dfd; border-radius: 5px; color: #006; padding: 10px; }\n"
+             "table.form { border-collapse: collapse; margin-top: 10px; width: 100%%; }\n"
+             "table.form td, table.form th { padding: 5px 2px; width: 50%%; }\n"
+             "table.form th { text-align: right; }\n"
+             "table.striped { border-bottom: solid thin black; border-collapse: collapse; width: 100%%; }\n"
+             "table.striped tr:nth-child(even) { background: #fcfcfc; }\n"
+             "table.striped tr:nth-child(odd) { background: #f0f0f0; }\n"
+             "table.striped th { background: white; border-bottom: solid thin black; text-align: left; vertical-align: bottom; }\n"
+             "table.striped td { margin: 0; padding: 5px; vertical-align: top; }\n"
+             "table.nav { border-collapse: collapse; width: 100%%; }\n"
+             "table.nav td { margin: 0; text-align: center; }\n"
+             "td.nav a, td.nav a:active, td.nav a:hover, td.nav a:hover:link, td.nav a:hover:link:visited, td.nav a:link, td.nav a:link:visited, td.nav a:visited { background: inherit; color: inherit; font-size: 80%%; text-decoration: none; }\n"
+             "td.nav { background: #333; color: #fff; padding: 4px 8px; width: 33%%; }\n"
+             "td.nav.sel { background: #fff; color: #000; font-weight: bold; }\n"
+             "td.nav:hover { background: #666; color: #fff; }\n"
+             "td.nav:active { background: #000; color: #ff0; }\n"
+             "</style>\n"
+             "</head>\n"
+             "<body>\n"
+             "<table class=\"nav\"><tr>"
+             "<td class=\"nav%s\"><a href=\"/\">Status</a></td>"
+             "<td class=\"nav%s\"><a href=\"/supplies\">Supplies</a></td>"
+             "<td class=\"nav%s\"><a href=\"/media\">Media</a></td>"
+             "</tr></table>\n"
+             "<div class=\"body\">\n", title, !strcmp(client->uri, "/") ? " sel" : "", !strcmp(client->uri, "/supplies") ? " sel" : "", !strcmp(client->uri, "/media") ? " sel" : "");
+}
+
+
 /*
  * 'html_printf()' - Send formatted text to the client, quoting as needed.
  */
@@ -2024,6 +2509,7 @@ html_printf(_ipp_client_t *client,        /* I - Client */
       {
         httpWrite2(client->http, "%", 1);
         format ++;
+       start = format;
        continue;
       }
       else if (strchr(" -+#\'", *format))
@@ -2267,6 +2753,61 @@ ipp_cancel_job(_ipp_client_t *client)    /* I - Client */
 }
 
 
+/*
+ * 'ipp_close_job()' - Close an open job.
+ */
+
+static void
+ipp_close_job(_ipp_client_t *client)   /* I - Client */
+{
+  _ipp_job_t           *job;           /* Job information */
+
+
+ /*
+  * Get the job...
+  */
+
+  if ((job = find_job(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+    return;
+  }
+
+ /*
+  * See if the job is already completed, canceled, or aborted; if so,
+  * we can't cancel...
+  */
+
+  switch (job->state)
+  {
+    case IPP_JSTATE_CANCELED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is canceled - can\'t close.", job->id);
+        break;
+
+    case IPP_JSTATE_ABORTED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is aborted - can\'t close.", job->id);
+        break;
+
+    case IPP_JSTATE_COMPLETED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is completed - can\'t close.", job->id);
+        break;
+
+    case IPP_JSTATE_PROCESSING :
+    case IPP_JSTATE_STOPPED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is already closed.", job->id);
+        break;
+
+    default :
+       respond_ipp(client, IPP_STATUS_OK, NULL);
+        break;
+  }
+}
+
+
 /*
  * 'ipp_create_job()' - Create a job object.
  */
@@ -2319,6 +2860,7 @@ ipp_create_job(_ipp_client_t *client)     /* I - Client */
   ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
   cupsArrayAdd(ra, "job-id");
   cupsArrayAdd(ra, "job-state");
+  cupsArrayAdd(ra, "job-state-message");
   cupsArrayAdd(ra, "job-state-reasons");
   cupsArrayAdd(ra, "job-uri");
 
@@ -2517,7 +3059,7 @@ ipp_get_jobs(_ipp_client_t *client)       /* I - Client */
        (job_comparison > 0 && job->state < job_state) ||
        job->id < first_job_id ||
        (username && job->username &&
-        _cups_strcasecmp(username, job->username)))
+        strcasecmp(username, job->username)))
       continue;
 
     if (count > 0)
@@ -2545,27 +3087,103 @@ ipp_get_printer_attributes(
   _ipp_printer_t       *printer;       /* Printer */
 
 
- /*
-  * Send the attributes...
-  */
+ /*
+  * Send the attributes...
+  */
+
+  ra      = ippCreateRequestedArray(client->request);
+  printer = client->printer;
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  _cupsRWLockRead(&(printer->rwlock));
+
+  copy_attributes(client->response, printer->attrs, ra, IPP_TAG_ZERO,
+                 IPP_TAG_CUPS_CONST);
+
+  if (!ra || cupsArrayFind(ra, "media-col-ready"))
+  {
+    int                i,                      /* Looping var */
+               num_ready = 0;          /* Number of ready media */
+    ipp_t      *ready[3];              /* Ready media */
+
+    if (printer->main_size != _IPP_MEDIA_SIZE_NONE)
+    {
+      if (printer->main_type != _IPP_MEDIA_TYPE_NONE)
+        ready[num_ready ++] = create_media_col(media_supported[printer->main_size], "main", media_type_supported[printer->main_type], media_col_sizes[printer->main_size][0], media_col_sizes[printer->main_size][1], 635);
+      else
+        ready[num_ready ++] = create_media_col(media_supported[printer->main_size], "main", NULL, media_col_sizes[printer->main_size][0], media_col_sizes[printer->main_size][1], 635);
+    }
+    if (printer->envelope_size != _IPP_MEDIA_SIZE_NONE)
+      ready[num_ready ++] = create_media_col(media_supported[printer->envelope_size], "envelope", NULL, media_col_sizes[printer->envelope_size][0], media_col_sizes[printer->envelope_size][1], 635);
+    if (printer->photo_size != _IPP_MEDIA_SIZE_NONE)
+    {
+      if (printer->photo_type != _IPP_MEDIA_TYPE_NONE)
+        ready[num_ready ++] = create_media_col(media_supported[printer->photo_size], "photo", media_type_supported[printer->photo_type], media_col_sizes[printer->photo_size][0], media_col_sizes[printer->photo_size][1], 0);
+      else
+        ready[num_ready ++] = create_media_col(media_supported[printer->photo_size], "photo", NULL, media_col_sizes[printer->photo_size][0], media_col_sizes[printer->photo_size][1], 0);
+    }
+
+    if (num_ready)
+    {
+      ippAddCollections(client->response, IPP_TAG_PRINTER, "media-col-ready", num_ready, (const ipp_t **)ready);
+      for (i = 0; i < num_ready; i ++)
+        ippDelete(ready[i]);
+    }
+    else
+      ippAddOutOfBand(client->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "media-col-ready");
+  }
+
+  if (!ra || cupsArrayFind(ra, "media-ready"))
+  {
+    int                num_ready = 0;          /* Number of ready media */
+    const char *ready[3];              /* Ready media */
+
+    if (printer->main_size != _IPP_MEDIA_SIZE_NONE)
+      ready[num_ready ++] = media_supported[printer->main_size];
+
+    if (printer->envelope_size != _IPP_MEDIA_SIZE_NONE)
+      ready[num_ready ++] = media_supported[printer->envelope_size];
+
+    if (printer->photo_size != _IPP_MEDIA_SIZE_NONE)
+      ready[num_ready ++] = media_supported[printer->photo_size];
+
+    if (num_ready)
+      ippAddStrings(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-ready", num_ready, NULL, ready);
+    else
+      ippAddOutOfBand(client->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "media-ready");
+  }
 
-  ra      = ippCreateRequestedArray(client->request);
-  printer = client->printer;
+  if (!ra || cupsArrayFind(ra, "printer-config-change-date-time"))
+    ippAddDate(client->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time));
 
-  respond_ipp(client, IPP_STATUS_OK, NULL);
+  if (!ra || cupsArrayFind(ra, "printer-config-change-time"))
+    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-config-change-time", (int)(printer->config_time - printer->start_time));
 
-  _cupsRWLockRead(&(printer->rwlock));
+  if (!ra || cupsArrayFind(ra, "printer-current-time"))
+    ippAddDate(client->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(time(NULL)));
 
-  copy_attributes(client->response, printer->attrs, ra, IPP_TAG_ZERO,
-                 IPP_TAG_CUPS_CONST);
 
   if (!ra || cupsArrayFind(ra, "printer-state"))
     ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_ENUM,
                   "printer-state", printer->state);
 
+  if (!ra || cupsArrayFind(ra, "printer-state-change-date-time"))
+    ippAddDate(client->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time));
+
+  if (!ra || cupsArrayFind(ra, "printer-state-change-time"))
+    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-state-change-time", (int)(printer->state_time - printer->start_time));
+
+  if (!ra || cupsArrayFind(ra, "printer-state-message"))
+  {
+    static const char * const messages[] = { "Idle.", "Printing.", "Stopped." };
+
+    ippAddString(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-state-message", NULL, messages[printer->state - IPP_PSTATE_IDLE]);
+  }
+
   if (!ra || cupsArrayFind(ra, "printer-state-reasons"))
   {
-    if (printer->state_reasons == _IPP_PSTATE_NONE)
+    if (printer->state_reasons == _IPP_PREASON_NONE)
       ippAddString(client->response, IPP_TAG_PRINTER,
                    IPP_CONST_TAG(IPP_TAG_KEYWORD),
                    "printer-state-reasons", NULL, "none");
@@ -2574,37 +3192,37 @@ ipp_get_printer_attributes(
       int                      num_reasons = 0;/* Number of reasons */
       const char               *reasons[32];   /* Reason strings */
 
-      if (printer->state_reasons & _IPP_PSTATE_OTHER)
+      if (printer->state_reasons & _IPP_PREASON_OTHER)
        reasons[num_reasons ++] = "other";
-      if (printer->state_reasons & _IPP_PSTATE_COVER_OPEN)
+      if (printer->state_reasons & _IPP_PREASON_COVER_OPEN)
        reasons[num_reasons ++] = "cover-open";
-      if (printer->state_reasons & _IPP_PSTATE_INPUT_TRAY_MISSING)
+      if (printer->state_reasons & _IPP_PREASON_INPUT_TRAY_MISSING)
        reasons[num_reasons ++] = "input-tray-missing";
-      if (printer->state_reasons & _IPP_PSTATE_MARKER_SUPPLY_EMPTY)
+      if (printer->state_reasons & _IPP_PREASON_MARKER_SUPPLY_EMPTY)
        reasons[num_reasons ++] = "marker-supply-empty-warning";
-      if (printer->state_reasons & _IPP_PSTATE_MARKER_SUPPLY_LOW)
+      if (printer->state_reasons & _IPP_PREASON_MARKER_SUPPLY_LOW)
        reasons[num_reasons ++] = "marker-supply-low-report";
-      if (printer->state_reasons & _IPP_PSTATE_MARKER_WASTE_ALMOST_FULL)
+      if (printer->state_reasons & _IPP_PREASON_MARKER_WASTE_ALMOST_FULL)
        reasons[num_reasons ++] = "marker-waste-almost-full-report";
-      if (printer->state_reasons & _IPP_PSTATE_MARKER_WASTE_FULL)
+      if (printer->state_reasons & _IPP_PREASON_MARKER_WASTE_FULL)
        reasons[num_reasons ++] = "marker-waste-full-warning";
-      if (printer->state_reasons & _IPP_PSTATE_MEDIA_EMPTY)
+      if (printer->state_reasons & _IPP_PREASON_MEDIA_EMPTY)
        reasons[num_reasons ++] = "media-empty-warning";
-      if (printer->state_reasons & _IPP_PSTATE_MEDIA_JAM)
+      if (printer->state_reasons & _IPP_PREASON_MEDIA_JAM)
        reasons[num_reasons ++] = "media-jam-warning";
-      if (printer->state_reasons & _IPP_PSTATE_MEDIA_LOW)
+      if (printer->state_reasons & _IPP_PREASON_MEDIA_LOW)
        reasons[num_reasons ++] = "media-low-report";
-      if (printer->state_reasons & _IPP_PSTATE_MEDIA_NEEDED)
+      if (printer->state_reasons & _IPP_PREASON_MEDIA_NEEDED)
        reasons[num_reasons ++] = "media-needed-report";
-      if (printer->state_reasons & _IPP_PSTATE_MOVING_TO_PAUSED)
+      if (printer->state_reasons & _IPP_PREASON_MOVING_TO_PAUSED)
        reasons[num_reasons ++] = "moving-to-paused";
-      if (printer->state_reasons & _IPP_PSTATE_PAUSED)
+      if (printer->state_reasons & _IPP_PREASON_PAUSED)
        reasons[num_reasons ++] = "paused";
-      if (printer->state_reasons & _IPP_PSTATE_SPOOL_AREA_FULL)
+      if (printer->state_reasons & _IPP_PREASON_SPOOL_AREA_FULL)
        reasons[num_reasons ++] = "spool-area-full";
-      if (printer->state_reasons & _IPP_PSTATE_TONER_EMPTY)
+      if (printer->state_reasons & _IPP_PREASON_TONER_EMPTY)
        reasons[num_reasons ++] = "toner-empty-warning";
-      if (printer->state_reasons & _IPP_PSTATE_TONER_LOW)
+      if (printer->state_reasons & _IPP_PREASON_TONER_LOW)
        reasons[num_reasons ++] = "toner-low-report";
 
       ippAddStrings(client->response, IPP_TAG_PRINTER,
@@ -2613,15 +3231,30 @@ ipp_get_printer_attributes(
     }
   }
 
+  if (!ra || cupsArrayFind(ra, "printer-supply"))
+  {
+    int                        i;              /* Looping var */
+    char               buffer[256];    /* Supply value buffer */
+    ipp_attribute_t    *attr = NULL;   /* Attribute */
+    static const char * const colorants[] = { "cyan", "magenta", "yellow", "black", "unknown" };
+
+    for (i = 0; i < 5; i ++)
+    {
+      snprintf(buffer, sizeof(buffer), "index=%d;class=%s;type=%s;unit=percent;maxcapacity=100;level=%d;colorantname=%s;", i + 1, i < 4 ? "supplyThatIsConsumed" : "receptacleThatIsFilled", i < 4 ? "toner" : "wasteToner", printer->supplies[i], colorants[i]);
+
+      if (!attr)
+       attr = ippAddOctetString(client->response, IPP_TAG_PRINTER, "printer-supply", buffer, (int)strlen(buffer));
+      else
+        ippSetOctetString(client->response, &attr, i, buffer, (int)strlen(buffer));
+    }
+  }
+
   if (!ra || cupsArrayFind(ra, "printer-up-time"))
-    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
-                  "printer-up-time", (int)time(NULL));
+    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", (int)(time(NULL) - printer->start_time));
 
   if (!ra || cupsArrayFind(ra, "queued-job-count"))
     ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
-                  "queued-job-count",
-                 printer->active_job &&
-                     printer->active_job->state < IPP_JSTATE_CANCELED);
+                  "queued-job-count", printer->active_job && printer->active_job->state < IPP_JSTATE_CANCELED);
 
   _cupsRWUnlock(&(printer->rwlock));
 
@@ -2629,6 +3262,20 @@ ipp_get_printer_attributes(
 }
 
 
+/*
+ * 'ipp_identify_printer()' - Beep or display a message.
+ */
+
+static void
+ipp_identify_printer(
+    _ipp_client_t *client)             /* I - Client */
+{
+  /* TODO: Do something */
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
 /*
  * 'ipp_print_job()' - Create a job object with an attached document.
  */
@@ -2678,24 +3325,7 @@ ipp_print_job(_ipp_client_t *client)     /* I - Client */
   * Create a file for the request data...
   */
 
-  if (!_cups_strcasecmp(job->format, "image/jpeg"))
-    snprintf(filename, sizeof(filename), "%s/%d.jpg",
-             client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "image/png"))
-    snprintf(filename, sizeof(filename), "%s/%d.png",
-             client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "image/pwg-raster"))
-    snprintf(filename, sizeof(filename), "%s/%d.ras",
-             client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "application/pdf"))
-    snprintf(filename, sizeof(filename), "%s/%d.pdf",
-             client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "application/postscript"))
-    snprintf(filename, sizeof(filename), "%s/%d.ps",
-             client->printer->directory, job->id);
-  else
-    snprintf(filename, sizeof(filename), "%s/%d.prn",
-             client->printer->directory, job->id);
+  create_job_filename(client->printer, job, filename, sizeof(filename));
 
   if (Verbosity)
     fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format);
@@ -2768,7 +3398,6 @@ ipp_print_job(_ipp_client_t *client)      /* I - Client */
   * Process the job...
   */
 
-#if 0
   if (!_cupsThreadCreate((_cups_thread_func_t)process_job, job))
   {
     job->state = IPP_JSTATE_ABORTED;
@@ -2776,10 +3405,6 @@ ipp_print_job(_ipp_client_t *client)     /* I - Client */
     return;
   }
 
-#else
-  process_job(job);
-#endif /* 0 */
-
  /*
   * Return the job info...
   */
@@ -2789,6 +3414,7 @@ ipp_print_job(_ipp_client_t *client)      /* I - Client */
   ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
   cupsArrayAdd(ra, "job-id");
   cupsArrayAdd(ra, "job-state");
+  cupsArrayAdd(ra, "job-state-message");
   cupsArrayAdd(ra, "job-state-reasons");
   cupsArrayAdd(ra, "job-uri");
 
@@ -2916,16 +3542,16 @@ ipp_print_uri(_ipp_client_t *client)    /* I - Client */
   * Create a file for the request data...
   */
 
-  if (!_cups_strcasecmp(job->format, "image/jpeg"))
+  if (!strcasecmp(job->format, "image/jpeg"))
     snprintf(filename, sizeof(filename), "%s/%d.jpg",
              client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "image/png"))
+  else if (!strcasecmp(job->format, "image/png"))
     snprintf(filename, sizeof(filename), "%s/%d.png",
              client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "application/pdf"))
+  else if (!strcasecmp(job->format, "application/pdf"))
     snprintf(filename, sizeof(filename), "%s/%d.pdf",
              client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "application/postscript"))
+  else if (!strcasecmp(job->format, "application/postscript"))
     snprintf(filename, sizeof(filename), "%s/%d.ps",
              client->printer->directory, job->id);
   else
@@ -3181,13 +3807,17 @@ ipp_send_document(_ipp_client_t *client)/* I - Client */
     return;
   }
 
+  copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0);
+
  /*
   * Get the document format for the job...
   */
 
   _cupsRWLockWrite(&(client->printer->rwlock));
 
-  if ((attr = ippFindAttribute(client->request, "document-format", IPP_TAG_MIMETYPE)) != NULL)
+  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";
@@ -3196,21 +3826,7 @@ ipp_send_document(_ipp_client_t *client)/* I - Client */
   * Create a file for the request data...
   */
 
-  if (!_cups_strcasecmp(job->format, "image/jpeg"))
-    snprintf(filename, sizeof(filename), "%s/%d.jpg",
-             client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "image/png"))
-    snprintf(filename, sizeof(filename), "%s/%d.png",
-             client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "application/pdf"))
-    snprintf(filename, sizeof(filename), "%s/%d.pdf",
-             client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "application/postscript"))
-    snprintf(filename, sizeof(filename), "%s/%d.ps",
-             client->printer->directory, job->id);
-  else
-    snprintf(filename, sizeof(filename), "%s/%d.prn",
-             client->printer->directory, job->id);
+  create_job_filename(client->printer, job, filename, sizeof(filename));
 
   if (Verbosity)
     fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format);
@@ -3489,16 +4105,16 @@ ipp_send_uri(_ipp_client_t *client)     /* I - Client */
   * Create a file for the request data...
   */
 
-  if (!_cups_strcasecmp(job->format, "image/jpeg"))
+  if (!strcasecmp(job->format, "image/jpeg"))
     snprintf(filename, sizeof(filename), "%s/%d.jpg",
              client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "image/png"))
+  else if (!strcasecmp(job->format, "image/png"))
     snprintf(filename, sizeof(filename), "%s/%d.png",
              client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "application/pdf"))
+  else if (!strcasecmp(job->format, "application/pdf"))
     snprintf(filename, sizeof(filename), "%s/%d.pdf",
              client->printer->directory, job->id);
-  else if (!_cups_strcasecmp(job->format, "application/postscript"))
+  else if (!strcasecmp(job->format, "application/postscript"))
     snprintf(filename, sizeof(filename), "%s/%d.ps",
              client->printer->directory, job->id);
   else
@@ -3701,6 +4317,40 @@ ipp_validate_job(_ipp_client_t *client)  /* I - Client */
 }
 
 
+/*
+ * 'parse_options()' - Parse URL options into CUPS options.
+ *
+ * The client->options string is destroyed by this function.
+ */
+
+static int                             /* O - Number of options */
+parse_options(_ipp_client_t *client,   /* I - Client */
+              cups_option_t **options) /* O - Options */
+{
+  char *name,                          /* Name */
+       *value,                         /* Value */
+       *next;                          /* Next name=value pair */
+  int  num_options = 0;                /* Number of options */
+
+
+  *options = NULL;
+
+  for (name = client->options; name && *name; name = next)
+  {
+    if ((value = strchr(name, '=')) == NULL)
+      break;
+
+    *value++ = '\0';
+    if ((next = strchr(value, '&')) != NULL)
+      *next++ = '\0';
+
+    num_options = cupsAddOption(name, value, num_options, options);
+  }
+
+  return (num_options);
+}
+
+
 /*
  * 'process_client()' - Process client requests on a thread.
  */
@@ -3729,13 +4379,15 @@ process_client(_ipp_client_t *client)   /* I - Client */
 
       if (recv(httpGetFd(client->http), buf, 1, MSG_PEEK) == 1 && (!buf[0] || !strchr("DGHOPT", buf[0])))
       {
-        fprintf(stderr, "%s Negotiating TLS session.\n", client->hostname);
+        fprintf(stderr, "%s Starting HTTPS session.\n", client->hostname);
 
        if (httpEncryption(client->http, HTTP_ENCRYPTION_ALWAYS))
        {
          fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString());
          break;
         }
+
+        fprintf(stderr, "%s Connection now encrypted.\n", client->hostname);
       }
 
       first_time = 0;
@@ -3850,13 +4502,17 @@ process_http(_ipp_client_t *client)     /* I - Client connection */
   if (httpSeparateURI(HTTP_URI_CODING_MOST, uri, scheme, sizeof(scheme),
                      userpass, sizeof(userpass),
                      hostname, sizeof(hostname), &port,
-                     client->uri, sizeof(client->uri)) < HTTP_URI_STATUS_OK)
+                     client->uri, sizeof(client->uri)) < HTTP_URI_STATUS_OK &&
+      (http_state != HTTP_STATE_OPTIONS || strcmp(uri, "*")))
   {
     fprintf(stderr, "%s Bad URI \"%s\".\n", client->hostname, uri);
     respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
     return (0);
   }
 
+  if ((client->options = strchr(client->uri, '?')) != NULL)
+    *(client->options)++ = '\0';
+
  /*
   * Process the request...
   */
@@ -3891,9 +4547,28 @@ process_http(_ipp_client_t *client)      /* I - Client connection */
   * Handle HTTP Upgrade...
   */
 
-  if (!_cups_strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION),
+  if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION),
                         "Upgrade"))
   {
+#ifdef HAVE_SSL
+    if (strstr(httpGetField(client->http, HTTP_FIELD_UPGRADE), "TLS/") != NULL && !httpIsEncrypted(client->http))
+    {
+      if (!respond_http(client, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, NULL, 0))
+        return (0);
+
+      fprintf(stderr, "%s Upgrading to encrypted connection.\n", client->hostname);
+
+      if (httpEncryption(client->http, HTTP_ENCRYPTION_REQUIRED))
+      {
+        fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString());
+       return (0);
+      }
+
+      fprintf(stderr, "%s Connection now encrypted.\n", client->hostname);
+    }
+    else
+#endif /* HAVE_SSL */
+
     if (!respond_http(client, HTTP_STATUS_NOT_IMPLEMENTED, NULL, NULL, 0))
       return (0);
   }
@@ -3936,7 +4611,7 @@ process_http(_ipp_client_t *client)       /* I - Client connection */
   {
     case HTTP_STATE_OPTIONS :
        /*
-       * Do HEAD/OPTIONS command...
+       * Do OPTIONS command...
        */
 
        return (respond_http(client, HTTP_STATUS_OK, NULL, NULL, 0));
@@ -3944,7 +4619,7 @@ process_http(_ipp_client_t *client)       /* I - Client connection */
     case HTTP_STATE_HEAD :
         if (!strcmp(client->uri, "/icon.png"))
          return (respond_http(client, HTTP_STATUS_OK, NULL, "image/png", 0));
-       else if (!strcmp(client->uri, "/"))
+       else if (!strcmp(client->uri, "/") || !strcmp(client->uri, "/media") || !strcmp(client->uri, "/supplies"))
          return (respond_http(client, HTTP_STATUS_OK, NULL, "text/html", 0));
        else
          return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
@@ -3989,30 +4664,300 @@ process_http(_ipp_client_t *client)    /* I - Client connection */
          * Show web status page...
          */
 
+          _ipp_job_t   *job;           /* Current job */
+         int           i;              /* Looping var */
+         _ipp_preason_t reason;        /* Current reason */
+         static const char * const reasons[] =
+         {                             /* Reason strings */
+           "Other",
+           "Cover Open",
+           "Input Tray Missing",
+           "Marker Supply Empty",
+           "Marker Supply Low",
+           "Marker Waste Almost Full",
+           "Marker Waste Full",
+           "Media Empty",
+           "Media Jam",
+           "Media Low",
+           "Media Needed",
+           "Moving to Paused",
+           "Paused",
+           "Spool Area Full",
+           "Toner Empty",
+           "Toner Low"
+         };
+
+          if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+           return (0);
+
+          html_header(client, client->printer->name);
+          html_printf(client,
+                     "<p><img align=\"right\" src=\"/icon.png\" width=\"64\" height=\"64\"><b>ippserver (" CUPS_SVERSION ")</b></p>\n"
+                     "<p>%s, %d job(s).", client->printer->state == IPP_PSTATE_IDLE ? "Idle" : client->printer->state == IPP_PSTATE_PROCESSING ? "Printing" : "Stopped", cupsArrayCount(client->printer->jobs));
+         for (i = 0, reason = 1; i < (int)(sizeof(reasons) / sizeof(reasons[0])); i ++, reason <<= 1)
+           if (client->printer->state_reasons & reason)
+             html_printf(client, "\n<br>&nbsp;&nbsp;&nbsp;&nbsp;%s", reasons[i]);
+         html_printf(client, "</p>\n");
+         
+          if (cupsArrayCount(client->printer->jobs) > 0)
+         {
+            _cupsRWLockRead(&(client->printer->rwlock));
+
+           html_printf(client, "<table class=\"striped\" summary=\"Jobs\"><thead><tr><th>Job #</th><th>Name</th><th>Owner</th><th>When</th></tr></thead><tbody>\n");
+           for (job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs); job; job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs))
+           {
+             char      when[256],      /* When job queued/started/finished */
+                       hhmmss[64];     /* Time HH:MM:SS */
+
+              switch (job->state)
+             {
+               case IPP_JSTATE_PENDING :
+               case IPP_JSTATE_HELD :
+                   snprintf(when, sizeof(when), "Queued at %s", time_string(job->created, hhmmss, sizeof(hhmmss)));
+                   break;
+               case IPP_JSTATE_PROCESSING :
+               case IPP_JSTATE_STOPPED :
+                   snprintf(when, sizeof(when), "Started at %s", time_string(job->processing, hhmmss, sizeof(hhmmss)));
+                   break;
+               case IPP_JSTATE_ABORTED :
+                   snprintf(when, sizeof(when), "Aborted at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+                   break;
+               case IPP_JSTATE_CANCELED :
+                   snprintf(when, sizeof(when), "Canceled at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+                   break;
+               case IPP_JSTATE_COMPLETED :
+                   snprintf(when, sizeof(when), "Completed at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+                   break;
+             }
+
+             html_printf(client, "<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>\n", job->id, job->name, job->username, when);
+           }
+           html_printf(client, "</tbody></table>\n");
+
+           _cupsRWUnlock(&(client->printer->rwlock));
+         }
+          html_footer(client);
+
+         return (1);
+       }
+       else if (!strcmp(client->uri, "/media"))
+       {
+        /*
+         * Show web media page...
+         */
+
+         int           i,              /* Looping var */
+                       num_options;    /* Number of form options */
+         cups_option_t *options;       /* Form options */
+          static const char * const sizes[] =
+         {                             /* Size strings */
+           "ISO A4",
+           "ISO A5",
+           "ISO A6",
+           "DL Envelope",
+           "US Legal",
+           "US Letter",
+           "#10 Envelope",
+           "3x5 Photo",
+           "3.5x5 Photo",
+           "4x6 Photo",
+           "5x7 Photo"
+         };
+         static const char * const types[] =
+                                         /* Type strings */
+         {
+           "Auto",
+           "Cardstock",
+           "Envelope",
+           "Labels",
+           "Other",
+           "Glossy Photo",
+           "High-Gloss Photo",
+           "Matte Photo",
+           "Satin Photo",
+           "Semi-Gloss Photo",
+           "Plain",
+           "Letterhead",
+           "Transparency"
+         };
+         static const int sheets[] =   /* Number of sheets */
+         {
+           250,
+           100,
+           25,
+           5,
+           0
+         };
+
           if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
            return (0);
 
+          html_header(client, client->printer->name);
+
+         if ((num_options = parse_options(client, &options)) > 0)
+         {
+          /*
+           * WARNING: A real printer/server implementation MUST NOT implement
+           * media updates via a GET request - GET requests are supposed to be
+           * idempotent (without side-effects) and we obviously are not
+           * authenticating access here.  This form is provided solely to
+           * enable testing and development!
+           */
+
+           const char  *val;           /* Form value */
+
+           if ((val = cupsGetOption("main_size", num_options, options)) != NULL)
+             client->printer->main_size = atoi(val);
+           if ((val = cupsGetOption("main_type", num_options, options)) != NULL)
+             client->printer->main_type = atoi(val);
+           if ((val = cupsGetOption("main_level", num_options, options)) != NULL)
+             client->printer->main_level = atoi(val);
+
+           if ((val = cupsGetOption("envelope_size", num_options, options)) != NULL)
+             client->printer->envelope_size = atoi(val);
+           if ((val = cupsGetOption("envelope_level", num_options, options)) != NULL)
+             client->printer->envelope_level = atoi(val);
+
+           if ((val = cupsGetOption("photo_size", num_options, options)) != NULL)
+             client->printer->photo_size = atoi(val);
+           if ((val = cupsGetOption("photo_type", num_options, options)) != NULL)
+             client->printer->photo_type = atoi(val);
+           if ((val = cupsGetOption("photo_level", num_options, options)) != NULL)
+             client->printer->photo_level = atoi(val);
+
+            if ((client->printer->main_level < 100 && client->printer->main_level > 0) || (client->printer->envelope_level < 25 && client->printer->envelope_level > 0) || (client->printer->photo_level < 25 && client->printer->photo_level > 0))
+             client->printer->state_reasons |= _IPP_PREASON_MEDIA_LOW;
+           else
+             client->printer->state_reasons &= (_ipp_preason_t)~_IPP_PREASON_MEDIA_LOW;
+
+            if ((client->printer->main_level == 0 && client->printer->main_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->envelope_level == 0 && client->printer->envelope_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->photo_level == 0 && client->printer->photo_size > _IPP_MEDIA_SIZE_NONE))
+           {
+             client->printer->state_reasons |= _IPP_PREASON_MEDIA_EMPTY;
+             if (client->printer->active_job)
+               client->printer->state_reasons |= _IPP_PREASON_MEDIA_NEEDED;
+           }
+           else
+             client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MEDIA_EMPTY | _IPP_PREASON_MEDIA_NEEDED);
+
+           html_printf(client, "<blockquote>Media updated.</blockquote>\n");
+          }
+
+          html_printf(client, "<form method=\"GET\" action=\"/media\">\n");
+
+          html_printf(client, "<table class=\"form\" summary=\"Media\">\n");
+          html_printf(client, "<tr><th>Main Tray:</th><td><select name=\"main_size\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+           if (!strstr(sizes[i], "Envelope") && !strstr(sizes[i], "Photo"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->main_size ? " selected" : "", sizes[i]);
+         html_printf(client, "</select> <select name=\"main_type\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++)
+           if (!strstr(types[i], "Photo"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->main_type ? " selected" : "", types[i]);
+         html_printf(client, "</select> <select name=\"main_level\">");
+          for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+           html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->main_level ? " selected" : "", sheets[i]);
+         html_printf(client, "</select></td></tr>\n");
+
           html_printf(client,
-                     "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" "
-                     "\"http://www.w3.org/TR/html4/strict.dtd\">\n"
-                     "<html>\n"
-                     "<head>\n"
-                     "<title>%s</title>\n"
-                     "<link rel=\"SHORTCUT ICON\" href=\"/icon.png\" "
-                     "type=\"image/png\">\n"
-                     "</head>\n"
-                     "<body>\n"
-                     "</body>\n"
-                     "<h1><img align=\"right\" src=\"/icon.png\">%s</h1>\n"
-                     "<p>%s, %d job(s).</p>\n"
-                     "</body>\n"
-                     "</html>\n",
-                     client->printer->name, client->printer->name,
-                     client->printer->state == IPP_PSTATE_IDLE ? "Idle" :
-                         client->printer->state == IPP_PSTATE_PROCESSING ?
-                         "Printing" : "Stopped",
-                     cupsArrayCount(client->printer->jobs));
-          httpWrite2(client->http, "", 0);
+                     "<tr><th>Envelope Feeder:</th><td><select name=\"envelope_size\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+           if (strstr(sizes[i], "Envelope"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->envelope_size ? " selected" : "", sizes[i]);
+         html_printf(client, "</select> <select name=\"envelope_level\">");
+          for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+           html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->envelope_level ? " selected" : "", sheets[i]);
+         html_printf(client, "</select></td></tr>\n");
+
+          html_printf(client,
+                     "<tr><th>Photo Tray:</th><td><select name=\"photo_size\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+           if (strstr(sizes[i], "Photo"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->photo_size ? " selected" : "", sizes[i]);
+         html_printf(client, "</select> <select name=\"photo_type\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++)
+           if (strstr(types[i], "Photo"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->photo_type ? " selected" : "", types[i]);
+         html_printf(client, "</select> <select name=\"photo_level\">");
+          for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+           html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->photo_level ? " selected" : "", sheets[i]);
+         html_printf(client, "</select></td></tr>\n");
+
+         html_printf(client, "<tr><td></td><td><input type=\"submit\" value=\"Update Media\"></td></tr></table></form>\n");
+          html_footer(client);
+
+         return (1);
+       }
+       else if (!strcmp(client->uri, "/supplies"))
+       {
+        /*
+         * Show web supplies page...
+         */
+
+          int          i, j,           /* Looping vars */
+                       num_options;    /* Number of form options */
+         cups_option_t *options;       /* Form options */
+         static const int levels[] = { 0, 5, 10, 25, 50, 75, 90, 95, 100 };
+
+          if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+           return (0);
+
+          html_header(client, client->printer->name);
+
+         if ((num_options = parse_options(client, &options)) > 0)
+         {
+          /*
+           * WARNING: A real printer/server implementation MUST NOT implement
+           * supply updates via a GET request - GET requests are supposed to be
+           * idempotent (without side-effects) and we obviously are not
+           * authenticating access here.  This form is provided solely to
+           * enable testing and development!
+           */
+
+           char        name[64];       /* Form field */
+           const char  *val;           /* Form value */
+
+            client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MARKER_SUPPLY_EMPTY | _IPP_PREASON_MARKER_SUPPLY_LOW | _IPP_PREASON_MARKER_WASTE_ALMOST_FULL | _IPP_PREASON_MARKER_WASTE_FULL | _IPP_PREASON_TONER_EMPTY | _IPP_PREASON_TONER_LOW);
+
+           for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++)
+           {
+             snprintf(name, sizeof(name), "supply_%d", i);
+             if ((val = cupsGetOption(name, num_options, options)) != NULL)
+             {
+               int level = client->printer->supplies[i] = atoi(val);
+                                       /* New level */
+
+               if (i < 4)
+               {
+                 if (level == 0)
+                   client->printer->state_reasons |= _IPP_PREASON_TONER_EMPTY;
+                 else if (level < 10)
+                   client->printer->state_reasons |= _IPP_PREASON_TONER_LOW;
+               }
+               else
+               {
+                 if (level == 100)
+                   client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_FULL;
+                 else if (level > 90)
+                   client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_ALMOST_FULL;
+               }
+             }
+            }
+
+           html_printf(client, "<blockquote>Supplies updated.</blockquote>\n");
+          }
+
+          html_printf(client, "<form method=\"GET\" action=\"/supplies\">\n");
+
+         html_printf(client, "<table class=\"form\" summary=\"Supplies\">\n");
+         for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++)
+         {
+           html_printf(client, "<tr><th>%s:</th><td><select name=\"supply_%d\">", printer_supplies[i], i);
+           for (j = 0; j < (int)(sizeof(levels) / sizeof(levels[0])); j ++)
+             html_printf(client, "<option value=\"%d\"%s>%d%%</option>", levels[j], levels[j] == client->printer->supplies[i] ? " selected" : "", levels[j]);
+           html_printf(client, "</select></td></tr>\n");
+         }
+         html_printf(client, "<tr><td></td><td><input type=\"submit\" value=\"Update Supplies\"></td></tr>\n</table>\n</form>\n");
+          html_footer(client);
 
          return (1);
        }
@@ -4173,8 +5118,8 @@ process_ipp(_ipp_client_t *client)        /* I - Client */
        uri = NULL;
 
       if (charset &&
-          _cups_strcasecmp(ippGetString(charset, 0, NULL), "us-ascii") &&
-          _cups_strcasecmp(ippGetString(charset, 0, NULL), "utf-8"))
+          strcasecmp(ippGetString(charset, 0, NULL), "us-ascii") &&
+          strcasecmp(ippGetString(charset, 0, NULL), "utf-8"))
       {
        /*
         * Bad character set...
@@ -4266,6 +5211,14 @@ process_ipp(_ipp_client_t *client)       /* I - Client */
                ipp_get_printer_attributes(client);
                break;
 
+           case IPP_OP_CLOSE_JOB :
+               ipp_close_job(client);
+               break;
+
+           case IPP_OP_IDENTIFY_PRINTER :
+               ipp_identify_printer(client);
+               break;
+
            default :
                respond_ipp(client, IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED,
                            "Operation not supported.");
@@ -4297,6 +5250,16 @@ process_job(_ipp_job_t *job)             /* I - Job */
 {
   job->state          = IPP_JSTATE_PROCESSING;
   job->printer->state = IPP_PSTATE_PROCESSING;
+  job->processing     = time(NULL);
+
+  while (job->printer->state_reasons & _IPP_PREASON_MEDIA_EMPTY)
+  {
+    job->printer->state_reasons |= _IPP_PREASON_MEDIA_NEEDED;
+
+    sleep(1);
+  }
+
+  job->printer->state_reasons &= (_ipp_preason_t)~_IPP_PREASON_MEDIA_NEEDED;
 
   if (job->printer->command)
   {
@@ -4308,19 +5271,79 @@ process_job(_ipp_job_t *job)            /* I - Job */
                status;                 /* Exit status */
     time_t     start,                  /* Start time */
                end;                    /* End time */
+    char       *myargv[3],             /* Command-line arguments */
+               *myenvp[200];           /* Environment variables */
+    int                myenvc;                 /* Number of environment variables */
+    ipp_attribute_t *attr;             /* Job attribute */
+    char       val[1280],              /* IPP_NAME=value */
+               *valptr;                /* Pointer into string */
 
     fprintf(stderr, "Running command \"%s %s\".\n", job->printer->command,
             job->filename);
     time(&start);
 
+   /*
+    * Setup the command-line arguments...
+    */
+
+    myargv[0] = job->printer->command;
+    myargv[1] = job->filename;
+    myargv[2] = NULL;
+
+   /*
+    * Copy the current environment, then add ENV variables for every Job
+    * attribute...
+    */
+
+    for (myenvc = 0; environ[myenvc] && myenvc < (int)(sizeof(myenvp) / sizeof(myenvp[0]) - 1); myenvc ++)
+      myenvp[myenvc] = strdup(environ[myenvc]);
+
+    for (attr = ippFirstAttribute(job->attrs); attr && myenvc < (int)(sizeof(myenvp) / sizeof(myenvp[0]) - 1); attr = ippNextAttribute(job->attrs))
+    {
+     /*
+      * Convert "attribute-name" to "IPP_ATTRIBUTE_NAME=" and then add the
+      * value(s) from the attribute.
+      */
+
+      const char *name = ippGetName(attr);
+      if (!name)
+        continue;
+
+      valptr = val;
+      *valptr++ = 'I';
+      *valptr++ = 'P';
+      *valptr++ = 'P';
+      *valptr++ = '_';
+      while (*name && valptr < (val + sizeof(val) - 2))
+      {
+        if (*name == '-')
+         *valptr++ = '_';
+       else
+         *valptr++ = (char)toupper(*name & 255);
+
+       name ++;
+      }
+      *valptr++ = '=';
+      ippAttributeString(attr, valptr, sizeof(val) - (size_t)(valptr - val));
+
+      myenvp[myenvc++] = strdup(val);
+    }
+    myenvp[myenvc] = NULL;
+
+   /*
+    * Now run the program...
+    */
+
+#ifdef WIN32
+    status = _spawnvpe(_P_WAIT, job->printer->command, myargv, myenvp);
+#else
     if ((pid = fork()) == 0)
     {
      /*
       * Child comes here...
       */
 
-      execlp(job->printer->command, job->printer->command, job->filename,
-             (void *)NULL);
+      execve(job->printer->command, myargv, myenvp);
       exit(errno);
     }
     else if (pid < 0)
@@ -4330,32 +5353,48 @@ process_job(_ipp_job_t *job)            /* I - Job */
       */
 
       perror("Unable to start job processing command");
+      status = -1;
     }
     else
     {
+     /*
+      * Free memory used for environment...
+      */
+
+      while (myenvc > 0)
+       free(myenvp[-- myenvc]);
+
      /*
       * Wait for child to complete...
       */
 
-#ifdef HAVE_WAITPID
+#  ifdef HAVE_WAITPID
       while (waitpid(pid, &status, 0) < 0);
-#else
+#  else
       while (wait(&status) < 0);
-#endif /* HAVE_WAITPID */
+#  endif /* HAVE_WAITPID */
+    }
+#endif /* WIN32 */
 
-      if (status)
-      {
-        if (WIFEXITED(status))
-         fprintf(stderr, "Command \"%s\" exited with status %d.\n",
-                 job->printer->command, WEXITSTATUS(status));
-        else
-         fprintf(stderr, "Command \"%s\" terminated with signal %d.\n",
-                 job->printer->command, WTERMSIG(status));
-      }
+    if (status)
+    {
+#ifndef WIN32
+      if (WIFEXITED(status))
+#endif /* !WIN32 */
+       fprintf(stderr, "Command \"%s\" exited with status %d.\n",
+               job->printer->command, WEXITSTATUS(status));
+#ifndef WIN32
       else
-       fprintf(stderr, "Command \"%s\" completed successfully.\n",
-               job->printer->command);
+       fprintf(stderr, "Command \"%s\" terminated with signal %d.\n",
+               job->printer->command, WTERMSIG(status));
+#endif /* !WIN32 */
+      job->state = IPP_JSTATE_ABORTED;
     }
+    else if (status < 0)
+      job->state = IPP_JSTATE_ABORTED;
+    else
+      fprintf(stderr, "Command \"%s\" completed successfully.\n",
+             job->printer->command);
 
    /*
     * Make sure processing takes at least 5 seconds...
@@ -4371,12 +5410,12 @@ process_job(_ipp_job_t *job)            /* I - Job */
     * Sleep for a random amount of time to simulate job processing.
     */
 
-    sleep(5 + (rand() % 11));
+    sleep((unsigned)(5 + (rand() % 11)));
   }
 
   if (job->cancel)
     job->state = IPP_JSTATE_CANCELED;
-  else
+  else if (job->state == IPP_JSTATE_PROCESSING)
     job->state = IPP_JSTATE_COMPLETED;
 
   job->completed           = time(NULL);
@@ -4400,6 +5439,7 @@ register_printer(
     const char     *model,             /* I - Model name */
     const char     *formats,           /* I - Supported formats */
     const char     *adminurl,          /* I - Web interface URL */
+    const char     *uuid,              /* I - Printer UUID */
     int            color,              /* I - 1 = color, 0 = monochrome */
     int            duplex,             /* I - 1 = duplex, 0 = simplex */
     const char     *subtype)           /* I - Service subtype */
@@ -4436,6 +5476,10 @@ register_printer(
                     make);
   TXTRecordSetValue(&(printer->ipp_txt), "usb_MDL", (uint8_t)strlen(model),
                     model);
+  TXTRecordSetValue(&(printer->ipp_txt), "UUID", (uint8_t)strlen(uuid), uuid);
+#  ifdef HAVE_SSL
+  TXTRecordSetValue(&(printer->ipp_txt), "TLS", 3, "1.2");
+#  endif /* HAVE_SSL */
 
  /*
   * Create a shared service reference for Bonjour...
@@ -4581,7 +5625,7 @@ respond_http(
   * Format an error message...
   */
 
-  if (!type && !length && code != HTTP_STATUS_OK)
+  if (!type && !length && code != HTTP_STATUS_OK && code != HTTP_STATUS_SWITCHING_PROTOCOLS)
   {
     snprintf(message, sizeof(message), "%d - %s\n", code, httpStatus(code));
 
@@ -4801,6 +5845,23 @@ run_printer(_ipp_printer_t *printer)     /* I - Printer */
 }
 
 
+/*
+ * 'time_string()' - Return the local time in hours, minutes, and seconds.
+ */
+
+static char *
+time_string(time_t tv,                 /* I - Time value */
+            char   *buffer,            /* I - Buffer */
+           size_t bufsize)             /* I - Size of buffer */
+{
+  struct tm    *curtime = localtime(&tv);
+                                       /* Local time */
+
+  strftime(buffer, bufsize, "%X", curtime);
+  return (buffer);
+}
+
+
 /*
  * 'usage()' - Show program usage.
  */
@@ -4871,8 +5932,7 @@ valid_doc_attributes(
   * Check operation attributes...
   */
 
-  if ((attr = ippFindAttribute(client->request, "compression",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "compression", IPP_TAG_ZERO)) != NULL)
   {
    /*
     * If compression is specified, only accept a supported value in a Print-Job
@@ -4894,11 +5954,16 @@ valid_doc_attributes(
     }
     else
     {
-      fprintf(stderr, "%s %s compression=\"%s\"\n",
-              client->hostname, op_name, compression);
+      fprintf(stderr, "%s %s compression=\"%s\"\n", client->hostname, op_name, compression);
+
+      ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "compression-supplied", NULL, compression);
 
       if (strcmp(compression, "none"))
+      {
+       if (Verbosity)
+         fprintf(stderr, "Receiving job file with \"%s\" compression.\n", compression);
         httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, compression);
+      }
     }
   }
 
@@ -4906,8 +5971,7 @@ valid_doc_attributes(
   * Is it a format we support?
   */
 
-  if ((attr = ippFindAttribute(client->request, "document-format",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "document-format", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_MIMETYPE ||
         ippGetGroupTag(attr) != IPP_TAG_OPERATION)
@@ -4921,29 +5985,26 @@ valid_doc_attributes(
 
       fprintf(stderr, "%s %s document-format=\"%s\"\n",
              client->hostname, op_name, format);
+
+      ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, format);
     }
   }
   else
   {
-    format = ippGetString(ippFindAttribute(client->printer->attrs,
-                                           "document-format-default",
-                                           IPP_TAG_MIMETYPE), 0, NULL);
+    format = ippGetString(ippFindAttribute(client->printer->attrs, "document-format-default", IPP_TAG_MIMETYPE), 0, NULL);
     if (!format)
       format = "application/octet-stream"; /* Should never happen */
 
-    attr = ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE,
-                       "document-format", NULL, format);
+    attr = ippAddString(client->request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format);
   }
 
-  if (!strcmp(format, "application/octet-stream") &&
-      (ippGetOperation(client->request) == IPP_OP_PRINT_JOB ||
-       ippGetOperation(client->request) == IPP_OP_SEND_DOCUMENT))
+  if (!strcmp(format, "application/octet-stream") && (ippGetOperation(client->request) == IPP_OP_PRINT_JOB || ippGetOperation(client->request) == IPP_OP_SEND_DOCUMENT))
   {
    /*
-    * Auto-type the file using the first 4 bytes of the file...
+    * Auto-type the file using the first 8 bytes of the file...
     */
 
-    unsigned char      header[4];      /* First 4 bytes of file */
+    unsigned char      header[8];      /* First 8 bytes of file */
 
     memset(header, 0, sizeof(header));
     httpPeek(client->http, (char *)header, sizeof(header));
@@ -4952,33 +6013,39 @@ valid_doc_attributes(
       format = "application/pdf";
     else if (!memcmp(header, "%!", 2))
       format = "application/postscript";
-    else if (!memcmp(header, "\377\330\377", 3) &&
-            header[3] >= 0xe0 && header[3] <= 0xef)
+    else if (!memcmp(header, "\377\330\377", 3) && header[3] >= 0xe0 && header[3] <= 0xef)
       format = "image/jpeg";
     else if (!memcmp(header, "\211PNG", 4))
       format = "image/png";
+    else if (!memcmp(header, "RAS2", 4))
+      format = "image/pwg-raster";
+    else if (!memcmp(header, "UNIRAST", 8))
+      format = "image/urf";
+    else
+      format = NULL;
 
     if (format)
+    {
       fprintf(stderr, "%s %s Auto-typed document-format=\"%s\"\n",
              client->hostname, op_name, format);
 
-    if (!attr)
-      attr = ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE,
-                          "document-format", NULL, format);
-    else
-      ippSetString(client->request, &attr, 0, format);
+      ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, format);
+    }
   }
 
-  if (op != IPP_OP_CREATE_JOB &&
-      (supported = ippFindAttribute(client->printer->attrs,
-                                    "document-format-supported",
-                                   IPP_TAG_MIMETYPE)) != NULL &&
-      !ippContainsString(supported, format))
+  if (op != IPP_OP_CREATE_JOB && (supported = ippFindAttribute(client->printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL && !ippContainsString(supported, format))
   {
     respond_unsupported(client, attr);
     valid = 0;
   }
 
+ /*
+  * document-name
+  */
+
+  if ((attr = ippFindAttribute(client->request, "document-name", IPP_TAG_NAME)) != NULL)
+    ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "document-name-supplied", NULL, ippGetString(attr, 0, NULL));
+
   return (valid);
 }
 
@@ -5010,8 +6077,7 @@ valid_job_attributes(
   * Check the various job template attributes...
   */
 
-  if ((attr = ippFindAttribute(client->request, "copies",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "copies", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER ||
         ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 999)
@@ -5021,8 +6087,7 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "ipp-attribute-fidelity",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "ipp-attribute-fidelity", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_BOOLEAN)
     {
@@ -5031,8 +6096,7 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "job-hold-until",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "job-hold-until", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 ||
         (ippGetValueTag(attr) != IPP_TAG_NAME &&
@@ -5045,8 +6109,16 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "job-name",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 0)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 ||
         (ippGetValueTag(attr) != IPP_TAG_NAME &&
@@ -5055,10 +6127,13 @@ valid_job_attributes(
       respond_unsupported(client, attr);
       valid = 0;
     }
+
+    ippSetGroupTag(client->request, &attr, IPP_TAG_JOB);
   }
+  else
+    ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, "Untitled");
 
-  if ((attr = ippFindAttribute(client->request, "job-priority",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "job-priority", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER ||
         ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 100)
@@ -5068,8 +6143,7 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "job-sheets",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "job-sheets", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 ||
         (ippGetValueTag(attr) != IPP_TAG_NAME &&
@@ -5082,8 +6156,7 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "media",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "media", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 ||
         (ippGetValueTag(attr) != IPP_TAG_NAME &&
@@ -5109,8 +6182,7 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "media-col",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "media-col", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 ||
         ippGetValueTag(attr) != IPP_TAG_BEGIN_COLLECTION)
@@ -5121,8 +6193,7 @@ valid_job_attributes(
     /* TODO: check for valid media-col */
   }
 
-  if ((attr = ippFindAttribute(client->request, "multiple-document-handling",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "multiple-document-handling", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD ||
         (strcmp(ippGetString(attr, 0, NULL),
@@ -5135,8 +6206,7 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "orientation-requested",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "orientation-requested", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM ||
         ippGetInteger(attr, 0) < IPP_ORIENT_PORTRAIT ||
@@ -5147,15 +6217,16 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "page-ranges",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "page-ranges", IPP_TAG_ZERO)) != NULL)
   {
-    respond_unsupported(client, attr);
+    if (ippGetValueTag(attr) != IPP_TAG_RANGE)
+    {
+      respond_unsupported(client, attr);
       valid = 0;
+    }
   }
 
-  if ((attr = ippFindAttribute(client->request, "print-quality",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "print-quality", IPP_TAG_ZERO)) != NULL)
   {
     if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM ||
         ippGetInteger(attr, 0) < IPP_QUALITY_DRAFT ||
@@ -5166,28 +6237,53 @@ valid_job_attributes(
     }
   }
 
-  if ((attr = ippFindAttribute(client->request, "printer-resolution",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "printer-resolution", IPP_TAG_ZERO)) != NULL)
   {
-    respond_unsupported(client, attr);
-    valid = 0;
+    supported = ippFindAttribute(client->printer->attrs, "printer-resolution-supported", IPP_TAG_RESOLUTION);
+
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_RESOLUTION ||
+        !supported)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+    else
+    {
+      int      count,                  /* Number of supported values */
+               xdpi,                   /* Horizontal resolution for job template attribute */
+               ydpi,                   /* Vertical resolution for job template attribute */
+               sydpi;                  /* Vertical resolution for supported value */
+      ipp_res_t        units,                  /* Units for job template attribute */
+               sunits;                 /* Units for supported value */
+
+      xdpi  = ippGetResolution(attr, 0, &ydpi, &units);
+      count = ippGetCount(supported);
+
+      for (i = 0; i < count; i ++)
+      {
+        if (xdpi == ippGetResolution(supported, i, &sydpi, &sunits) && ydpi == sydpi && units == sunits)
+          break;
+      }
+
+      if (i >= count)
+      {
+       respond_unsupported(client, attr);
+       valid = 0;
+      }
+    }
   }
 
-  if ((attr = ippFindAttribute(client->request, "sides",
-                               IPP_TAG_ZERO)) != NULL)
+  if ((attr = ippFindAttribute(client->request, "sides", IPP_TAG_ZERO)) != NULL)
   {
-    const char *sides = NULL;          /* "sides" value... */
+    const char *sides = ippGetString(attr, 0, NULL);
+                                       /* "sides" value... */
 
     if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD)
     {
       respond_unsupported(client, attr);
       valid = 0;
     }
-
-    sides = ippGetString(attr, 0, NULL);
-
-    if ((supported = ippFindAttribute(client->printer->attrs, "sides-supported",
-                                      IPP_TAG_KEYWORD)) != NULL)
+    else if ((supported = ippFindAttribute(client->printer->attrs, "sides-supported", IPP_TAG_KEYWORD)) != NULL)
     {
       if (!ippContainsString(supported, sides))
       {
@@ -5207,5 +6303,5 @@ valid_job_attributes(
 
 
 /*
- * End of "$Id: ippserver.c 11986 2014-07-02 15:52:01Z msweet $".
+ * End of "$Id: ippserver.c 12136 2014-08-29 15:19:40Z msweet $".
  */
diff --git a/test/ippserver.man b/test/ippserver.man
new file mode 100644 (file)
index 0000000..a5c1c1c
--- /dev/null
@@ -0,0 +1,172 @@
+.\"
+.\" "$Id$"
+.\"
+.\" ippserver man page for CUPS.
+.\"
+.\" Copyright 2014 by Apple Inc.
+.\"
+.\" These coded instructions, statements, and computer programs are the
+.\" property of Apple Inc. and are protected by Federal copyright
+.\" law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+.\" which should have been included with this file.  If this file is
+.\" file is missing or damaged, see the license at "http://www.cups.org/".
+.\"
+.TH ippserver 1 "CUPS" "28 August 2014" "Apple Inc."
+.SH NAME
+ippserver \- a simple internet printing protocol server
+.SH SYNOPSIS
+.B ippserver
+[
+.B \-2
+] [
+.B \-M
+.I manufacturer
+] [
+.B \-P
+] [
+.B \-c
+.I command
+] [
+.B \-d
+.I spool-directory
+] [
+.B \-f
+.I type/subtype[,...]
+] [
+.B \-h
+] [
+.B \-i
+.I iconfile.png
+] [
+.B \-k
+] [
+.B \-l
+.I location
+] [
+.B \-m
+.I model
+] [
+.B \-n
+.I hostname
+] [
+.B \-p
+.I port
+] [
+.B \-r
+.I subtype
+] [
+.B \-s
+.I speed[,color-speed]
+] [
+.B \-v[vvv]
+]
+.I service-name
+.SH DESCRIPTION
+.B ippserver
+is a simple Internet Printing Protocol (IPP) server conforming to the IPP Everywhere (PWG 5100.14) specification. It can be used to test client software or act as a very basic print server that runs a command for every job that is printed.
+.SH OPTIONS
+The following options are recognized by
+.B ippserver:
+.TP 5
+.B \-2
+Report support for two-sided (duplex) printing.
+.TP 5
+\fB\-M \fImanufacturer\fR
+Set the manufacturer of the printer.
+The default is "Test".
+.TP 5
+.B \-P
+Report support for PIN printing.
+.TP 5
+\fB\-c \fIcommand\fR
+Run the specified command for each document that is printed.
+.TP 5
+\fB\-d \fIspool-directory\fR
+Specifies the directory that will hold the print files.
+The default is a directory under the user's current temporary directory.
+.TP 5
+\fB\-f \fItype/subtype[,...]\fR
+Specifies a list of MIME media types that the server will accept.
+The default is "application/pdf,image/jpeg,image/pwg-raster".
+.TP 5
+.B \-h
+Shows program help.
+.TP 5
+\fB\-i \fIiconfile.png\fR
+Specifies the printer icon file for the server.
+The default is "printer.png".
+.TP 5
+.B \-k
+Keeps the print documents in the spool directory rather than deleting them.
+.TP 5
+\fB\-l \fIlocation\fR
+Specifies the human-readable location string that is reported by the server.
+The default is the empty string.
+.TP 5
+\fB\-m \fImodel\fR
+Specifies the model name of the printer.
+The default is "Printer".
+.TP 5
+\fB\-n \fIhostname\fR
+Specifies the hostname that is reported by the server.
+The default is the name returned by the
+.BR hostname (1)
+command.
+.TP 5
+\fB\-p \fIport\fR
+Specifies the port number to listen on.
+The default is a user-specific number from 8000 to 8999.
+.TP 5
+\fB\-r \fIsubtype\fR
+Specifies the Bonjour subtype(s) to advertise.
+Separate multiple subtypes with a comma.
+The default is "_print".
+.TP 5
+\fB\-s \fIspeed[,color-speed]\fR
+Specifies the printer speed in pages per minute.
+If two numbers are specified and the second number is greater than zero, the server will report support for color printing.
+The default is "10,0".
+.TP 5
+.B \-v[vvv]
+Be (very) verbose when logging activity to the standard output.
+.SH EXIT STATUS
+The
+.B ippserver
+program returns 1 if it is unable to process the command-line arguments or register the IPP service.
+Otherwise
+.B ippserver
+will run continuously until terminated.
+.SH CONFORMING TO
+The
+.B ippserver
+program is unique to CUPS and conforms to the IPP Everywhere (PWG 5100.14) specification.
+.SH ENVIRONMENT
+.B ippserver
+adds environment variables starting with "IPP_" for all IPP Job attributes in the print request.
+For example, when executing a command for an IPP Job containing the "media" Job Template attribute, the "IPP_MEDIA" environment variable will be set to the value of that attribute.
+.LP
+Enumerated values are converted to their keyword equivalents.
+For example, a "print-quality" Job Template attribute with a enum value of 3 will become the "IPP_PRINT_QUALITY" environment variable with a value of "draft".
+.SH EXAMPLES
+Run
+.B ippserver
+with a service name of My Cool Printer:
+.nf
+
+    ippserver "My Cool Printer"
+.fi
+.LP
+Run the
+.BR file (1)
+command whenever a job is sent to the server:
+.nf
+
+    ippserver \-c file "My Cool Printer"
+.fi
+.SH SEE ALSO
+PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
+.SH COPYRIGHT
+Copyright \[co] 2007-2014 by Apple Inc.
+.\"
+.\" End of "$Id$".
+.\"
index 6e91d83d24b73d594b3b555701bce545df1640a2..5e6d07f87d541782b7c5e000ef86024cc38434b6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipptool.c 12031 2014-07-15 19:57:59Z msweet $"
+ * "$Id: ipptool.c 12143 2014-09-02 13:37:30Z msweet $"
  *
  * ipptool command for CUPS.
  *
@@ -647,6 +647,7 @@ main(int  argc,                             /* I - Number of command-line args */
       if (!vars.uri)
       {
         _cupsLangPuts(stderr, _("ipptool: URI required before test file."));
+        _cupsLangPuts(stderr, argv[i]);
        usage();
       }
 
@@ -1371,7 +1372,8 @@ do_tests(FILE         *outfile,           /* I - Output file */
         * Name of test...
        */
 
-       get_token(fp, name, sizeof(name), &linenum);
+       get_token(fp, temp, sizeof(temp), &linenum);
+       expand_variables(vars, name, temp, sizeof(name));
       }
       else if (!_cups_strcasecmp(token, "PAUSE"))
       {
@@ -2470,6 +2472,8 @@ do_tests(FILE         *outfile,           /* I - Output file */
       {
        fputs("<key>Successful</key>\n", outfile);
        fputs("<true />\n", outfile);
+       fputs("<key>Skipped</key>\n", outfile);
+       fputs("<true />\n", outfile);
        fputs("<key>StatusCode</key>\n", outfile);
        print_xml_string(outfile, "string", "skip");
        fputs("<key>ResponseAttributes</key>\n", outfile);
@@ -3060,7 +3064,62 @@ do_tests(FILE         *outfile,          /* I - Output file */
            set_variable(outfile, vars, expect->define_match, "1");
 
          if (found && expect->define_value)
+         {
+           if (!expect->with_value)
+           {
+             int last = ippGetCount(found) - 1;
+                                       /* Last element in attribute */
+
+             switch (ippGetValueTag(found))
+             {
+               case IPP_TAG_ENUM :
+               case IPP_TAG_INTEGER :
+                   snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last));
+                   break;
+
+               case IPP_TAG_BOOLEAN :
+                   if (ippGetBoolean(found, last))
+                     strlcpy(buffer, "true", sizeof(buffer));
+                   else
+                     strlcpy(buffer, "false", sizeof(buffer));
+                   break;
+
+               case IPP_TAG_RESOLUTION :
+                   {
+                     int       xres,   /* Horizontal resolution */
+                               yres;   /* Vertical resolution */
+                     ipp_res_t units;  /* Resolution units */
+
+                     xres = ippGetResolution(found, last, &yres, &units);
+
+                     if (xres == yres)
+                       snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+                     else
+                       snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+                   }
+                   break;
+
+               case IPP_TAG_CHARSET :
+               case IPP_TAG_KEYWORD :
+               case IPP_TAG_LANGUAGE :
+               case IPP_TAG_MIMETYPE :
+               case IPP_TAG_NAME :
+               case IPP_TAG_NAMELANG :
+               case IPP_TAG_TEXT :
+               case IPP_TAG_TEXTLANG :
+               case IPP_TAG_URI :
+               case IPP_TAG_URISCHEME :
+                   strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer));
+                   break;
+
+               default :
+                   ippAttributeString(found, buffer, sizeof(buffer));
+                   break;
+             }
+           }
+
            set_variable(outfile, vars, expect->define_value, buffer);
+         }
 
          if (found && expect->repeat_match &&
              repeat_count < expect->repeat_limit)
@@ -3079,6 +3138,25 @@ do_tests(FILE         *outfile,          /* I - Output file */
         {
           printf("%04d]\n", repeat_count);
           fflush(stdout);
+
+         if (num_displayed > 0)
+         {
+           for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
+           {
+             const char *attrname = ippGetName(attrptr);
+             if (attrname)
+             {
+               for (i = 0; i < num_displayed; i ++)
+               {
+                 if (!strcmp(displayed[i], attrname))
+                 {
+                   print_attr(stdout, _CUPS_OUTPUT_TEST, attrptr, NULL);
+                   break;
+                 }
+               }
+             }
+           }
+         }
         }
 
         sleep((unsigned)repeat_interval);
@@ -3134,7 +3212,7 @@ do_tests(FILE         *outfile,           /* I - Output file */
        printf("        status-code = %s (%s)\n", ippErrorString(cupsLastError()),
               cupsLastErrorString());
 
-        if (response)
+        if (Verbosity && response)
         {
          for (attrptr = response->attrs;
               attrptr != NULL;
@@ -3143,7 +3221,7 @@ do_tests(FILE         *outfile,           /* I - Output file */
        }
       }
     }
-    else if (!prev_pass)
+    else if (!prev_pass && Output != _CUPS_OUTPUT_QUIET)
       fprintf(stderr, "%s\n", cupsLastErrorString());
 
     if (prev_pass && Output >= _CUPS_OUTPUT_LIST && !Verbosity &&
@@ -3214,7 +3292,7 @@ do_tests(FILE         *outfile,           /* I - Output file */
       }
     }
 
-    if (num_displayed > 0 && !Verbosity && response && Output == _CUPS_OUTPUT_TEST)
+    if (num_displayed > 0 && !Verbosity && response && (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout)))
     {
       for (attrptr = response->attrs;
           attrptr != NULL;
@@ -3387,14 +3465,26 @@ expand_variables(_cups_vars_t *vars,    /* I - Variables */
       }
       else if (vars)
       {
-       strlcpy(temp, src + 1, sizeof(temp));
+        if (src[1] == '{')
+       {
+         src += 2;
+         strlcpy(temp, src, sizeof(temp));
+         if ((tempptr = strchr(temp, '}')) != NULL)
+           *tempptr = '\0';
+         else
+           tempptr = temp + strlen(temp);
+       }
+       else
+       {
+         strlcpy(temp, src + 1, sizeof(temp));
 
-       for (tempptr = temp; *tempptr; tempptr ++)
-         if (!isalnum(*tempptr & 255) && *tempptr != '-' && *tempptr != '_')
-           break;
+         for (tempptr = temp; *tempptr; tempptr ++)
+           if (!isalnum(*tempptr & 255) && *tempptr != '-' && *tempptr != '_')
+             break;
 
-        if (*tempptr)
-         *tempptr = '\0';
+         if (*tempptr)
+           *tempptr = '\0';
+        }
 
        if (!strcmp(temp, "uri"))
          value = vars->uri;
@@ -4713,6 +4803,10 @@ usage(void)
   _cupsLangPuts(stderr, _("Usage: ipptool [options] URI filename [ ... "
                          "filenameN ]"));
   _cupsLangPuts(stderr, _("Options:"));
+  _cupsLangPuts(stderr, _("  --help                  Show help."));
+  _cupsLangPuts(stderr, _("  --stop-after-include-error\n"
+                          "                          Stop tests after a failed INCLUDE."));
+  _cupsLangPuts(stderr, _("  --version               Show version."));
   _cupsLangPuts(stderr, _("  -4                      Connect using IPv4."));
   _cupsLangPuts(stderr, _("  -6                      Connect using IPv6."));
   _cupsLangPuts(stderr, _("  -C                      Send requests using "
@@ -4722,6 +4816,7 @@ usage(void)
   _cupsLangPuts(stderr, _("  -I                      Ignore errors."));
   _cupsLangPuts(stderr, _("  -L                      Send requests using "
                           "content-length."));
+  _cupsLangPuts(stderr, _("  -P filename.plist       Produce XML plist to a file and test report to standard output."));
   _cupsLangPuts(stderr, _("  -S                      Test with SSL "
                          "encryption."));
   _cupsLangPuts(stderr, _("  -T seconds              Set the receive/send "
@@ -4730,12 +4825,14 @@ usage(void)
                           "version."));
   _cupsLangPuts(stderr, _("  -X                      Produce XML plist instead "
                           "of plain text."));
+  _cupsLangPuts(stderr, _("  -c                      Produce CSV output."));
   _cupsLangPuts(stderr, _("  -d name=value           Set named variable to "
                           "value."));
   _cupsLangPuts(stderr, _("  -f filename             Set default request "
                           "filename."));
   _cupsLangPuts(stderr, _("  -i seconds              Repeat the last file with "
                           "the given time interval."));
+  _cupsLangPuts(stderr, _("  -l                      Produce plain text output."));
   _cupsLangPuts(stderr, _("  -n count                Repeat the last file the "
                           "given number of times."));
   _cupsLangPuts(stderr, _("  -q                      Run silently."));
@@ -5769,5 +5866,5 @@ with_value(FILE            *outfile,      /* I - Output file */
 
 
 /*
- * End of "$Id: ipptool.c 12031 2014-07-15 19:57:59Z msweet $".
+ * End of "$Id: ipptool.c 12143 2014-09-02 13:37:30Z msweet $".
  */
index 595854a243b507b86b9cd5e6c3712a19900a106a..44d805449f9b9960853f19b8d0ca5b09e222eb46 100644 (file)
Binary files a/test/printer.opacity and b/test/printer.opacity differ
index 18c05db10775d7cb3fcf71b9b8a31795858a1995..08430fcde95ef14f8f7f9b4d057d895d73899a23 100644 (file)
Binary files a/test/printer.png and b/test/printer.png differ
index d437e07a4150e36a11428592eed3e08b766d32cf..d362126e9892cc6ecbb03aca0875fec44f67de95 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id: run-stp-tests.sh 12065 2014-07-30 17:56:35Z msweet $"
+# "$Id: run-stp-tests.sh 12101 2014-08-20 15:10:51Z msweet $"
 #
 # Perform the complete set of IPP compliance tests specified in the
 # CUPS Software Test Plan.
@@ -623,8 +623,7 @@ echo "    $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_l
 echo ""
 
 if test `uname` = Darwin -a "x$VALGRIND" = x; then
-       DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib
-       ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
+       DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
 else
        $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
 fi
@@ -767,6 +766,13 @@ for file in 5*.sh; do
        fi
 done
 
+#
+# Log all allocations made by the scheduler...
+#
+if test `uname` = Darwin -a "x$VALGRIND" = x; then
+       malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
+fi
+
 #
 # Restart the server...
 #
@@ -778,12 +784,12 @@ echo "\"5.10-restart\":" >>$strfile
 kill -HUP $cupsd
 
 while true; do
+       sleep 10
+
        running=`../systemv/lpstat -r 2>/dev/null`
        if test "x$running" = "xscheduler is running"; then
                break
        fi
-
-       sleep 10
 done
 
 description="`lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
@@ -1060,5 +1066,5 @@ if test $fail != 0; then
 fi
 
 #
-# End of "$Id: run-stp-tests.sh 12065 2014-07-30 17:56:35Z msweet $"
+# End of "$Id: run-stp-tests.sh 12101 2014-08-20 15:10:51Z msweet $"
 #
index 98db19a3be9ecc9b8ca662438c66801fbb7c98c9..9db00bc9208ccb177c00c8612b133d06e4f6dc24 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: config.h 12031 2014-07-15 19:57:59Z msweet $"
+ * "$Id: config.h 12136 2014-08-29 15:19:40Z msweet $"
  *
  * Configuration file for CUPS on Windows.
  *
- * Copyright 2007-2013 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
 #define write          _write
 
 
+/*
+ * Map the POSIX strcasecmp() and strncasecmp() functions to the Win32 stricmp()
+ * and strnicmp() functions...
+ */
+
+#define strcasecmp     stricmp
+#define strncasecmp    strnicmp
+
+
 /*
  * Map the POSIX sleep() and usleep() functions to the Win32 Sleep() function...
  */
@@ -71,7 +80,7 @@ typedef unsigned long useconds_t;
 #  define R_OK         04
 #  define O_RDONLY     _O_RDONLY
 #  define O_WRONLY     _O_WRONLY
-#  define O_CREATE     _O_CREAT
+#  define O_CREAT      _O_CREAT
 #  define O_TRUNC      _O_TRUNC
 
 
@@ -163,7 +172,7 @@ typedef unsigned long useconds_t;
 
 
 /*
- * Do we have domain socket support?
+ * Do we have domain socket support, and if so what is the default one?
  */
 
 #undef CUPS_DEFAULT_DOMAINSOCKET
@@ -197,6 +206,13 @@ typedef unsigned long useconds_t;
 #define CUPS_STATEDIR "C:/CUPS/run"
 
 
+/*
+ * Do we have posix_spawn?
+ */
+
+/* #undef HAVE_POSIX_SPAWN */
+
+
 /*
  * Do we have ZLIB?
  */
@@ -209,10 +225,7 @@ typedef unsigned long useconds_t;
  * 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 */
@@ -360,6 +373,13 @@ typedef unsigned long useconds_t;
 #define 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?
  */
@@ -382,6 +402,20 @@ typedef unsigned long useconds_t;
 /* #undef HAVE_CSSMERRORSTRING */
 
 
+/*
+ * Do we have the SecGenerateSelfSignedCertificate function?
+ */
+
+/* #undef HAVE_SECGENERATESELFSIGNEDCERTIFICATE */
+
+
+/*
+ * Do we have the SecKeychainOpen function?
+ */
+
+/* #undef HAVE_SECKEYCHAINOPEN */
+
+
 /*
  * Do we have libpaper?
  */
@@ -502,6 +536,13 @@ typedef unsigned long useconds_t;
 /* #undef HAVE_LAUNCHD */
 
 
+/*
+ * Do we have systemd support?
+ */
+
+/* #undef HAVE_SYSTEMD */
+
+
 /*
  * Various scripting languages...
  */
@@ -579,6 +620,7 @@ typedef unsigned long useconds_t;
 
 /* #undef HAVE_DBUS */
 /* #undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND */
+/* #undef HAVE_DBUS_THREADS_INIT */
 
 
 /*
@@ -750,5 +792,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
 #endif /* !_CUPS_CONFIG_H_ */
 
 /*
- * End of "$Id: config.h 12031 2014-07-15 19:57:59Z msweet $".
+ * End of "$Id: config.h 12136 2014-08-29 15:19:40Z msweet $".
  */
index 4f3c0d9cbb11afa4559c8701ea8897e17508f247..277d7623f9b28aa5b1049fa22ee30736c0dddb71 100644 (file)
@@ -50,6 +50,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ippfind", "ippfind.vcproj",
                {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3} = {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}\r
        EndProjectSection\r
 EndProject\r
+Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "sw-ippeveselfcert10", "sw-ippeveselfcert10.vdproj", "{7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ippserver", "ippserver.vcproj", "{82A03BC7-0746-4B85-8908-3C7A3FAA58A9}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3} = {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}\r
+       EndProjectSection\r
+EndProject\r
 Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
                Debug|Win32 = Debug|Win32\r
@@ -137,6 +144,22 @@ Global
                {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|Win32.Build.0 = Release|Win32\r
                {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|x64.ActiveCfg = Release|x64\r
                {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|x64.Build.0 = Release|x64\r
+               {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Debug|Win32.ActiveCfg = Debug\r
+               {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Debug|Win32.Build.0 = Debug\r
+               {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Debug|x64.ActiveCfg = Debug\r
+               {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Debug|x64.Build.0 = Debug\r
+               {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Release|Win32.ActiveCfg = Release\r
+               {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Release|Win32.Build.0 = Release\r
+               {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Release|x64.ActiveCfg = Release\r
+               {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Release|x64.Build.0 = Release\r
+               {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|Win32.Build.0 = Debug|Win32\r
+               {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|x64.ActiveCfg = Debug|x64\r
+               {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|x64.Build.0 = Debug|x64\r
+               {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|Win32.ActiveCfg = Release|Win32\r
+               {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|Win32.Build.0 = Release|Win32\r
+               {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|x64.ActiveCfg = Release|x64\r
+               {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|x64.Build.0 = Release|x64\r
        EndGlobalSection\r
        GlobalSection(SolutionProperties) = preSolution\r
                HideSolutionNode = FALSE\r
diff --git a/vcnet/ippserver.vcproj b/vcnet/ippserver.vcproj
new file mode 100644 (file)
index 0000000..fe5aaad
--- /dev/null
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="9.00"\r
+       Name="ippserver"\r
+       ProjectGUID="{82A03BC7-0746-4B85-8908-3C7A3FAA58A9}"\r
+       RootNamespace="ippserver"\r
+       Keyword="Win32Proj"\r
+       TargetFrameworkVersion="131072"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+               <Platform\r
+                       Name="x64"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\vcnet;..;..\vcnet\regex"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="3"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="1"\r
+                               Detect64BitPortabilityProblems="false"\r
+                               DebugInformationFormat="4"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="dnssd.lib ws2_32.lib"\r
+                               LinkIncremental="2"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|x64"\r
+                       OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TargetEnvironment="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\vcnet;..;..\vcnet\regex"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="3"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="1"\r
+                               Detect64BitPortabilityProblems="false"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="dnssd.lib ws2_32.lib"\r
+                               LinkIncremental="2"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="17"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="1"\r
+                       WholeProgramOptimization="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="..\vcnet;..;..\vcnet\regex"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"\r
+                               RuntimeLibrary="2"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="1"\r
+                               Detect64BitPortabilityProblems="false"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="dnssd.lib ws2_32.lib"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|x64"\r
+                       OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="1"\r
+                       WholeProgramOptimization="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TargetEnvironment="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="..\vcnet;..;..\vcnet\regex"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"\r
+                               RuntimeLibrary="2"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="1"\r
+                               Detect64BitPortabilityProblems="false"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="dnssd.lib ws2_32.lib"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="17"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{5129820B-88C2-40AE-BE81-C7957F76540D}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\test\ippserver.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{CAF4FFBF-7D66-4368-A03A-3FD0971B59A0}"\r
+                       >\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+                       UniqueIdentifier="{17D3B9CD-53D2-47AF-9D2A-4516D777D695}"\r
+                       >\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
index d2f0e4fac708d89b486ed388b5e6495783c90b1a..d22a863ba1c55ea342bed16fa418a6496f21952c 100644 (file)
                                RelativePath=".\config.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\cups\cups-private.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\cups\cups.h"\r
                                >\r
diff --git a/vcnet/sw-ippeveselfcert10.vdproj b/vcnet/sw-ippeveselfcert10.vdproj
new file mode 100644 (file)
index 0000000..2895a46
--- /dev/null
@@ -0,0 +1,1581 @@
+"DeployProject"\r
+{\r
+"VSVersion" = "3:800"\r
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"\r
+"IsWebType" = "8:FALSE"\r
+"ProjectName" = "8:sw-ippeveselfcert10"\r
+"LanguageId" = "3:1033"\r
+"CodePage" = "3:1252"\r
+"UILanguageId" = "3:1033"\r
+"SccProjectName" = "8:"\r
+"SccLocalPath" = "8:"\r
+"SccAuxPath" = "8:"\r
+"SccProvider" = "8:"\r
+    "Hierarchy"\r
+    {\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_156E3B06B7D14775B28242360FB7D1A0"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_1A1324305D78463BBFC62269C56DCF0B"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_1BCBABF5693841AE92515645BB7765F4"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_1DBDCFABB8DF28E5F75E41EDAE4BF6BE"\r
+        "OwnerKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_27AB74FFFBC7436B9EBC6AE23968CFCC"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_299D5816FF7142F3B2791685551AD1DC"\r
+        "OwnerKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_43D276E6E3054544A6A9828BE66519CD"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_466C1CF41795452A8B76425F8D05D8B8"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_58DC0E72F0944BEFB927AED718CD1660"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_592FC984DBFD494D9FB7DFFEA35AD7A5"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_842C04D73EBC4F5DBC2FD58D5B98D5D1"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_965005559A264140806149D54E2243BB"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_9967519E7058965D4C7DEF47EB39CC50"\r
+        "OwnerKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_9CB71023ADF84278A4A5EBC398F6C9F3"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_9FBF78D7B89EEA843380D5F10E1954D7"\r
+        "OwnerKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+        "OwnerKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+        "OwnerKey" = "8:_58DC0E72F0944BEFB927AED718CD1660"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+        "OwnerKey" = "8:_466C1CF41795452A8B76425F8D05D8B8"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+        "OwnerKey" = "8:_E97571D3FBE048DABDC59B37762D800F"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+        "OwnerKey" = "8:_D02EB13951314EFD9C539150EF8E53B8"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_A9EA3BF89F284AB4853F0682CE277275"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_B7D835B019744E61A7CC37B57B38694E"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_BD5B70C103EF41D9A30CF249D2B93CEB"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_C430646D6E7C4CBDA84F951AE95EB76F"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_D02EB13951314EFD9C539150EF8E53B8"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_D219587BACAC4D5FB4C8010900A781AD"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_D5CD9D9AB1644688A1D54B1589BDF724"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_E3C6C5A7FDD94965B68960844461D5EA"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_E5E464C7DD97439B929E1EA1844F1FF0"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_E97571D3FBE048DABDC59B37762D800F"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+        "Entry"\r
+        {\r
+        "MsmKey" = "8:_F22F5380A6E14A43A15A452C7C6F6C07"\r
+        "OwnerKey" = "8:_UNDEFINED"\r
+        "MsmSig" = "8:_UNDEFINED"\r
+        }\r
+    }\r
+    "Configurations"\r
+    {\r
+        "Debug"\r
+        {\r
+        "DisplayName" = "8:Debug"\r
+        "IsDebugOnly" = "11:TRUE"\r
+        "IsReleaseOnly" = "11:FALSE"\r
+        "OutputFilename" = "8:sw-ippeveselfcert10-windows.msi"\r
+        "PackageFilesAs" = "3:2"\r
+        "PackageFileSize" = "3:-2147483648"\r
+        "CabType" = "3:1"\r
+        "Compression" = "3:3"\r
+        "SignOutput" = "11:FALSE"\r
+        "CertificateFile" = "8:"\r
+        "PrivateKeyFile" = "8:"\r
+        "TimeStampServer" = "8:"\r
+        "InstallerBootstrapper" = "3:2"\r
+            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"\r
+            {\r
+            "Enabled" = "11:TRUE"\r
+            "PromptEnabled" = "11:TRUE"\r
+            "PrerequisitesLocation" = "2:1"\r
+            "Url" = "8:"\r
+            "ComponentsUrl" = "8:"\r
+                "Items"\r
+                {\r
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.3.5.SP1"\r
+                    {\r
+                    "Name" = "8:.NET Framework 3.5 SP1"\r
+                    "ProductCode" = "8:Microsoft.Net.Framework.3.5.SP1"\r
+                    }\r
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"\r
+                    {\r
+                    "Name" = "8:Windows Installer 3.1"\r
+                    "ProductCode" = "8:Microsoft.Windows.Installer.3.1"\r
+                    }\r
+                }\r
+            }\r
+        }\r
+        "Release"\r
+        {\r
+        "DisplayName" = "8:Release"\r
+        "IsDebugOnly" = "11:FALSE"\r
+        "IsReleaseOnly" = "11:TRUE"\r
+        "OutputFilename" = "8:ipptool-windows.msi"\r
+        "PackageFilesAs" = "3:2"\r
+        "PackageFileSize" = "3:-2147483648"\r
+        "CabType" = "3:1"\r
+        "Compression" = "3:3"\r
+        "SignOutput" = "11:FALSE"\r
+        "CertificateFile" = "8:"\r
+        "PrivateKeyFile" = "8:"\r
+        "TimeStampServer" = "8:"\r
+        "InstallerBootstrapper" = "3:2"\r
+            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"\r
+            {\r
+            "Enabled" = "11:TRUE"\r
+            "PromptEnabled" = "11:TRUE"\r
+            "PrerequisitesLocation" = "2:1"\r
+            "Url" = "8:"\r
+            "ComponentsUrl" = "8:"\r
+                "Items"\r
+                {\r
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.3.5.SP1"\r
+                    {\r
+                    "Name" = "8:.NET Framework 3.5 SP1"\r
+                    "ProductCode" = "8:Microsoft.Net.Framework.3.5.SP1"\r
+                    }\r
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"\r
+                    {\r
+                    "Name" = "8:Windows Installer 3.1"\r
+                    "ProductCode" = "8:Microsoft.Windows.Installer.3.1"\r
+                    }\r
+                }\r
+            }\r
+        }\r
+    }\r
+    "Deployable"\r
+    {\r
+        "CustomAction"\r
+        {\r
+        }\r
+        "DefaultFeature"\r
+        {\r
+        "Name" = "8:DefaultFeature"\r
+        "Title" = "8:"\r
+        "Description" = "8:"\r
+        }\r
+        "ExternalPersistence"\r
+        {\r
+            "LaunchCondition"\r
+            {\r
+            }\r
+        }\r
+        "File"\r
+        {\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_156E3B06B7D14775B28242360FB7D1A0"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\document-tests.bat"\r
+            "TargetName" = "8:document-tests.bat"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1A1324305D78463BBFC62269C56DCF0B"\r
+            {\r
+            "SourcePath" = "8:..\\doc\\help\\man-ipptoolfile.html"\r
+            "TargetName" = "8:man-ipptoolfile.html"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_26743E387598422398CF503F7478F9E1"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1BCBABF5693841AE92515645BB7765F4"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\man-ippserver.html"\r
+            "TargetName" = "8:man-ippserver.html"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_26743E387598422398CF503F7478F9E1"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1DBDCFABB8DF28E5F75E41EDAE4BF6BE"\r
+            {\r
+            "SourcePath" = "8:zlibwapi.dll"\r
+            "TargetName" = "8:zlibwapi.dll"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:TRUE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_27AB74FFFBC7436B9EBC6AE23968CFCC"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\README.txt"\r
+            "TargetName" = "8:README.txt"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_43D276E6E3054544A6A9828BE66519CD"\r
+            {\r
+            "SourcePath" = "8:..\\test\\printer.png"\r
+            "TargetName" = "8:printer.png"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_592FC984DBFD494D9FB7DFFEA35AD7A5"\r
+            {\r
+            "SourcePath" = "8:..\\doc\\help\\man-ippfind.html"\r
+            "TargetName" = "8:man-ippfind.html"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_26743E387598422398CF503F7478F9E1"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_842C04D73EBC4F5DBC2FD58D5B98D5D1"\r
+            {\r
+            "SourcePath" = "8:..\\test\\document-a4.pdf"\r
+            "TargetName" = "8:document-a4.pdf"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_965005559A264140806149D54E2243BB"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\bonjour-access-tests.test"\r
+            "TargetName" = "8:bonjour-access-tests.test"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9967519E7058965D4C7DEF47EB39CC50"\r
+            {\r
+            "SourcePath" = "8:CRYPT32.dll"\r
+            "TargetName" = "8:CRYPT32.dll"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:TRUE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9CB71023ADF84278A4A5EBC398F6C9F3"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\bonjour-tests.bat"\r
+            "TargetName" = "8:bonjour-tests.bat"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9FBF78D7B89EEA843380D5F10E1954D7"\r
+            {\r
+            "SourcePath" = "8:Secur32.dll"\r
+            "TargetName" = "8:Secur32.dll"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:TRUE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A9EA3BF89F284AB4853F0682CE277275"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\bonjour-value-tests.test"\r
+            "TargetName" = "8:bonjour-value-tests.test"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B7D835B019744E61A7CC37B57B38694E"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\document-tests.test"\r
+            "TargetName" = "8:document-tests.test"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5B70C103EF41D9A30CF249D2B93CEB"\r
+            {\r
+            "SourcePath" = "8:setdebug.bat"\r
+            "TargetName" = "8:setdebug.bat"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C430646D6E7C4CBDA84F951AE95EB76F"\r
+            {\r
+            "SourcePath" = "8:..\\test\\color.jpg"\r
+            "TargetName" = "8:color.jpg"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D219587BACAC4D5FB4C8010900A781AD"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\ipp-tests.test"\r
+            "TargetName" = "8:ipp-tests.test"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D5CD9D9AB1644688A1D54B1589BDF724"\r
+            {\r
+            "SourcePath" = "8:..\\doc\\help\\man-ipptool.html"\r
+            "TargetName" = "8:man-ipptool.html"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_26743E387598422398CF503F7478F9E1"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E3C6C5A7FDD94965B68960844461D5EA"\r
+            {\r
+            "SourcePath" = "8:..\\LICENSE.txt"\r
+            "TargetName" = "8:LICENSE.txt"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E5E464C7DD97439B929E1EA1844F1FF0"\r
+            {\r
+            "SourcePath" = "8:..\\everywhere\\ipp-tests.bat"\r
+            "TargetName" = "8:ipp-tests.bat"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F22F5380A6E14A43A15A452C7C6F6C07"\r
+            {\r
+            "SourcePath" = "8:..\\test\\document-letter.pdf"\r
+            "TargetName" = "8:document-letter.pdf"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            }\r
+        }\r
+        "FileType"\r
+        {\r
+        }\r
+        "Folder"\r
+        {\r
+            "{1525181F-901A-416C-8A58-119130FE478E}:_BEC0EAE20C954C78B294B83E6696156E"\r
+            {\r
+            "Name" = "8:#1919"\r
+            "AlwaysCreate" = "11:FALSE"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Property" = "8:ProgramMenuFolder"\r
+                "Folders"\r
+                {\r
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_E379D4EDBAD0460BB876711E9062ADB4"\r
+                    {\r
+                    "Name" = "8:IPP Everywhere Printer Self-Certification Tools"\r
+                    "AlwaysCreate" = "11:FALSE"\r
+                    "Condition" = "8:"\r
+                    "Transitive" = "11:FALSE"\r
+                    "Property" = "8:_D115D2F4F12143B09D5FDA447A6A7D04"\r
+                        "Folders"\r
+                        {\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            "{1525181F-901A-416C-8A58-119130FE478E}:_D02CDADE99F344CF92CA1A8D0278861F"\r
+            {\r
+            "Name" = "8:#1916"\r
+            "AlwaysCreate" = "11:FALSE"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Property" = "8:DesktopFolder"\r
+                "Folders"\r
+                {\r
+                }\r
+            }\r
+            "{3C67513D-01DD-4637-8A68-80971EB9504F}:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            {\r
+            "DefaultLocation" = "8:[ProgramFilesFolder]\\sw-ippeveselfcert10"\r
+            "Name" = "8:#1925"\r
+            "AlwaysCreate" = "11:FALSE"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Property" = "8:TARGETDIR"\r
+                "Folders"\r
+                {\r
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_26743E387598422398CF503F7478F9E1"\r
+                    {\r
+                    "Name" = "8:doc"\r
+                    "AlwaysCreate" = "11:FALSE"\r
+                    "Condition" = "8:"\r
+                    "Transitive" = "11:FALSE"\r
+                    "Property" = "8:_5CD53B90FF754768B11ECBEB671A1749"\r
+                        "Folders"\r
+                        {\r
+                        }\r
+                    }\r
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_EB00D0298C7E441EBD0257AC04FB3560"\r
+                    {\r
+                    "Name" = "8:ipptool"\r
+                    "AlwaysCreate" = "11:FALSE"\r
+                    "Condition" = "8:"\r
+                    "Transitive" = "11:FALSE"\r
+                    "Property" = "8:_6F223FB51798428A9F2D64A5A7F2B49C"\r
+                        "Folders"\r
+                        {\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+        }\r
+        "LaunchCondition"\r
+        {\r
+        }\r
+        "Locator"\r
+        {\r
+        }\r
+        "MsiBootstrapper"\r
+        {\r
+        "LangId" = "3:1033"\r
+        "RequiresElevation" = "11:FALSE"\r
+        }\r
+        "Product"\r
+        {\r
+        "Name" = "8:Microsoft Visual Studio"\r
+        "ProductName" = "8:IPP Everywhere Printer Self-Certification Tools"\r
+        "ProductCode" = "8:{C08E3AC5-4FBF-40DD-BD19-9BE69A609DAF}"\r
+        "PackageCode" = "8:{25FF31C9-52A0-4838-8F1D-02FB5D5296F4}"\r
+        "UpgradeCode" = "8:{BAB6EBBB-515D-4155-9FEF-D98DA76814CA}"\r
+        "RestartWWWService" = "11:FALSE"\r
+        "RemovePreviousVersions" = "11:TRUE"\r
+        "DetectNewerInstalledVersion" = "11:TRUE"\r
+        "InstallAllUsers" = "11:TRUE"\r
+        "ProductVersion" = "8:14.08.2600"\r
+        "Manufacturer" = "8:Apple Inc."\r
+        "ARPHELPTELEPHONE" = "8:"\r
+        "ARPHELPLINK" = "8:http://www.cups.org/str.php"\r
+        "Title" = "8:sw-ippeveselfcert10"\r
+        "Subject" = "8:"\r
+        "ARPCONTACT" = "8:Apple Inc."\r
+        "Keywords" = "8:IPP, Internet Printing Protocol"\r
+        "ARPCOMMENTS" = "8:IPP Everywhere Printer Self-Certification Tools"\r
+        "ARPURLINFOABOUT" = "8:http://www.cups.org/"\r
+        "ARPPRODUCTICON" = "8:"\r
+        "ARPIconIndex" = "3:0"\r
+        "SearchPath" = "8:"\r
+        "UseSystemSearchPath" = "11:TRUE"\r
+        "TargetPlatform" = "3:0"\r
+        "PreBuildEvent" = "8:"\r
+        "PostBuildEvent" = "8:"\r
+        "RunPostBuildEvent" = "3:0"\r
+        }\r
+        "Registry"\r
+        {\r
+            "HKLM"\r
+            {\r
+                "Keys"\r
+                {\r
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_BC4E66686BCA4F9A8B24B6CF2728DACD"\r
+                    {\r
+                    "Name" = "8:Software"\r
+                    "Condition" = "8:"\r
+                    "AlwaysCreate" = "11:FALSE"\r
+                    "DeleteAtUninstall" = "11:FALSE"\r
+                    "Transitive" = "11:FALSE"\r
+                        "Keys"\r
+                        {\r
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_F9AB9B310C7545D993D690F529048AA2"\r
+                            {\r
+                            "Name" = "8:cups.org"\r
+                            "Condition" = "8:"\r
+                            "AlwaysCreate" = "11:FALSE"\r
+                            "DeleteAtUninstall" = "11:FALSE"\r
+                            "Transitive" = "11:FALSE"\r
+                                "Keys"\r
+                                {\r
+                                }\r
+                                "Values"\r
+                                {\r
+                                    "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_4E5BAC705A1D44E78C90C6D2A4A7BE20"\r
+                                    {\r
+                                    "Name" = "8:installdir"\r
+                                    "Condition" = "8:"\r
+                                    "Transitive" = "11:FALSE"\r
+                                    "ValueTypes" = "3:2"\r
+                                    "Value" = "8:[TARGETDIR]"\r
+                                    }\r
+                                }\r
+                            }\r
+                        }\r
+                        "Values"\r
+                        {\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            "HKCU"\r
+            {\r
+                "Keys"\r
+                {\r
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_A4C9879F42874B6B92960A55F2D98922"\r
+                    {\r
+                    "Name" = "8:Software"\r
+                    "Condition" = "8:"\r
+                    "AlwaysCreate" = "11:FALSE"\r
+                    "DeleteAtUninstall" = "11:FALSE"\r
+                    "Transitive" = "11:FALSE"\r
+                        "Keys"\r
+                        {\r
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_1ACB03C307FB4B85BB27C9913FB58B09"\r
+                            {\r
+                            "Name" = "8:[Manufacturer]"\r
+                            "Condition" = "8:"\r
+                            "AlwaysCreate" = "11:FALSE"\r
+                            "DeleteAtUninstall" = "11:FALSE"\r
+                            "Transitive" = "11:FALSE"\r
+                                "Keys"\r
+                                {\r
+                                }\r
+                                "Values"\r
+                                {\r
+                                }\r
+                            }\r
+                        }\r
+                        "Values"\r
+                        {\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            "HKCR"\r
+            {\r
+                "Keys"\r
+                {\r
+                }\r
+            }\r
+            "HKU"\r
+            {\r
+                "Keys"\r
+                {\r
+                }\r
+            }\r
+            "HKPU"\r
+            {\r
+                "Keys"\r
+                {\r
+                }\r
+            }\r
+        }\r
+        "Sequences"\r
+        {\r
+        }\r
+        "Shortcut"\r
+        {\r
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_57BCED85BA5944009F56A11D5A9FBBEE"\r
+            {\r
+            "Name" = "8:ippfind Documentation"\r
+            "Arguments" = "8:"\r
+            "Description" = "8:"\r
+            "ShowCmd" = "3:1"\r
+            "IconIndex" = "3:0"\r
+            "Transitive" = "11:FALSE"\r
+            "Target" = "8:_592FC984DBFD494D9FB7DFFEA35AD7A5"\r
+            "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+            "WorkingFolder" = "8:_26743E387598422398CF503F7478F9E1"\r
+            "Icon" = "8:"\r
+            "Feature" = "8:"\r
+            }\r
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_63715171338D40FFBC5B47A1418B4814"\r
+            {\r
+            "Name" = "8:README"\r
+            "Arguments" = "8:"\r
+            "Description" = "8:"\r
+            "ShowCmd" = "3:1"\r
+            "IconIndex" = "3:0"\r
+            "Transitive" = "11:FALSE"\r
+            "Target" = "8:_27AB74FFFBC7436B9EBC6AE23968CFCC"\r
+            "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+            "WorkingFolder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Icon" = "8:"\r
+            "Feature" = "8:"\r
+            }\r
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_70CF74DB997A408DBBFD48AB10F92321"\r
+            {\r
+            "Name" = "8:ipptool Documentation"\r
+            "Arguments" = "8:"\r
+            "Description" = "8:"\r
+            "ShowCmd" = "3:1"\r
+            "IconIndex" = "3:0"\r
+            "Transitive" = "11:FALSE"\r
+            "Target" = "8:_D5CD9D9AB1644688A1D54B1589BDF724"\r
+            "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+            "WorkingFolder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Icon" = "8:"\r
+            "Feature" = "8:"\r
+            }\r
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_962004B0D5CA479A91EFA7F7BF7814C8"\r
+            {\r
+            "Name" = "8:ippserver Documentation"\r
+            "Arguments" = "8:"\r
+            "Description" = "8:"\r
+            "ShowCmd" = "3:1"\r
+            "IconIndex" = "3:0"\r
+            "Transitive" = "11:FALSE"\r
+            "Target" = "8:_1BCBABF5693841AE92515645BB7765F4"\r
+            "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+            "WorkingFolder" = "8:_26743E387598422398CF503F7478F9E1"\r
+            "Icon" = "8:"\r
+            "Feature" = "8:"\r
+            }\r
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_BD2A7DF74D844FF5919EE8340EE36ECD"\r
+            {\r
+            "Name" = "8:Test File Documentation"\r
+            "Arguments" = "8:"\r
+            "Description" = "8:"\r
+            "ShowCmd" = "3:1"\r
+            "IconIndex" = "3:0"\r
+            "Transitive" = "11:FALSE"\r
+            "Target" = "8:_1A1324305D78463BBFC62269C56DCF0B"\r
+            "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+            "WorkingFolder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Icon" = "8:"\r
+            "Feature" = "8:"\r
+            }\r
+        }\r
+        "UserInterface"\r
+        {\r
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_045DF90B1FF941A9BA7A742CFC0A6C00"\r
+            {\r
+            "UseDynamicProperties" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"\r
+            }\r
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_345BD86390E841A98B74ED3E07945F8C"\r
+            {\r
+            "Name" = "8:#1900"\r
+            "Sequence" = "3:2"\r
+            "Attributes" = "3:1"\r
+                "Dialogs"\r
+                {\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_067C143A8731427180B1568AF8C07375"\r
+                    {\r
+                    "Sequence" = "3:200"\r
+                    "DisplayName" = "8:Installation Folder"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A2F2CC6EB9D7453599E7598D4D0629A5"\r
+                    {\r
+                    "Sequence" = "3:300"\r
+                    "DisplayName" = "8:Confirm Installation"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C2B41369B7334F419318792EBA031412"\r
+                    {\r
+                    "Sequence" = "3:100"\r
+                    "DisplayName" = "8:Welcome"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                            "CopyrightWarning"\r
+                            {\r
+                            "Name" = "8:CopyrightWarning"\r
+                            "DisplayName" = "8:#1002"\r
+                            "Description" = "8:#1102"\r
+                            "Type" = "3:3"\r
+                            "ContextData" = "8:"\r
+                            "Attributes" = "3:0"\r
+                            "Setting" = "3:2"\r
+                            "Value" = "8:This computer program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2."\r
+                            "DefaultValue" = "8:#1202"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                            "Welcome"\r
+                            {\r
+                            "Name" = "8:Welcome"\r
+                            "DisplayName" = "8:#1003"\r
+                            "Description" = "8:#1103"\r
+                            "Type" = "3:3"\r
+                            "ContextData" = "8:"\r
+                            "Attributes" = "3:0"\r
+                            "Setting" = "3:1"\r
+                            "Value" = "8:#1203"\r
+                            "DefaultValue" = "8:#1203"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_6B654A06090344BA9AA443E0D0296737"\r
+            {\r
+            "Name" = "8:#1902"\r
+            "Sequence" = "3:1"\r
+            "Attributes" = "3:3"\r
+                "Dialogs"\r
+                {\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FB4E7BBC3DA242309FFB58F9A6194A93"\r
+                    {\r
+                    "Sequence" = "3:100"\r
+                    "DisplayName" = "8:Finished"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                            "UpdateText"\r
+                            {\r
+                            "Name" = "8:UpdateText"\r
+                            "DisplayName" = "8:#1058"\r
+                            "Description" = "8:#1158"\r
+                            "Type" = "3:15"\r
+                            "ContextData" = "8:"\r
+                            "Attributes" = "3:0"\r
+                            "Setting" = "3:1"\r
+                            "Value" = "8:#1258"\r
+                            "DefaultValue" = "8:#1258"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_712819C7C4F042ABB708949BD4426628"\r
+            {\r
+            "Name" = "8:#1900"\r
+            "Sequence" = "3:1"\r
+            "Attributes" = "3:1"\r
+                "Dialogs"\r
+                {\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2F49D4FACB954AF2B786D2AD9206D053"\r
+                    {\r
+                    "Sequence" = "3:100"\r
+                    "DisplayName" = "8:Welcome"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                            "CopyrightWarning"\r
+                            {\r
+                            "Name" = "8:CopyrightWarning"\r
+                            "DisplayName" = "8:#1002"\r
+                            "Description" = "8:#1102"\r
+                            "Type" = "3:3"\r
+                            "ContextData" = "8:"\r
+                            "Attributes" = "3:0"\r
+                            "Setting" = "3:2"\r
+                            "Value" = "8:This computer program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2."\r
+                            "DefaultValue" = "8:#1202"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                            "Welcome"\r
+                            {\r
+                            "Name" = "8:Welcome"\r
+                            "DisplayName" = "8:#1003"\r
+                            "Description" = "8:#1103"\r
+                            "Type" = "3:3"\r
+                            "ContextData" = "8:"\r
+                            "Attributes" = "3:0"\r
+                            "Setting" = "3:1"\r
+                            "Value" = "8:#1203"\r
+                            "DefaultValue" = "8:#1203"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_770E25BC453A464EA8CD51381FDDDD9F"\r
+                    {\r
+                    "Sequence" = "3:300"\r
+                    "DisplayName" = "8:Confirm Installation"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_9534A64B629F4F868D6D7A384C76DCB2"\r
+                    {\r
+                    "Sequence" = "3:200"\r
+                    "DisplayName" = "8:Installation Folder"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                            "InstallAllUsersVisible"\r
+                            {\r
+                            "Name" = "8:InstallAllUsersVisible"\r
+                            "DisplayName" = "8:#1059"\r
+                            "Description" = "8:#1159"\r
+                            "Type" = "3:5"\r
+                            "ContextData" = "8:1;True=1;False=0"\r
+                            "Attributes" = "3:0"\r
+                            "Setting" = "3:0"\r
+                            "Value" = "3:1"\r
+                            "DefaultValue" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_770CCEFF81BD46A182A6E816A41A0E81"\r
+            {\r
+            "Name" = "8:#1901"\r
+            "Sequence" = "3:2"\r
+            "Attributes" = "3:2"\r
+                "Dialogs"\r
+                {\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_75E0C1FD245D493DA0D7E3E0BC0C365F"\r
+                    {\r
+                    "Sequence" = "3:100"\r
+                    "DisplayName" = "8:Progress"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                            "ShowProgress"\r
+                            {\r
+                            "Name" = "8:ShowProgress"\r
+                            "DisplayName" = "8:#1009"\r
+                            "Description" = "8:#1109"\r
+                            "Type" = "3:5"\r
+                            "ContextData" = "8:1;True=1;False=0"\r
+                            "Attributes" = "3:0"\r
+                            "Setting" = "3:0"\r
+                            "Value" = "3:1"\r
+                            "DefaultValue" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_933B15E9A383418F8ADF3B13F68458F3"\r
+            {\r
+            "UseDynamicProperties" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"\r
+            }\r
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_E310DA8CED734E00950A3C5D630CE987"\r
+            {\r
+            "Name" = "8:#1902"\r
+            "Sequence" = "3:2"\r
+            "Attributes" = "3:3"\r
+                "Dialogs"\r
+                {\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_CB172E69F9C74901BE1040336CFD4F72"\r
+                    {\r
+                    "Sequence" = "3:100"\r
+                    "DisplayName" = "8:Finished"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_F44F9BE9B54940848289669635E4A5A2"\r
+            {\r
+            "Name" = "8:#1901"\r
+            "Sequence" = "3:1"\r
+            "Attributes" = "3:2"\r
+                "Dialogs"\r
+                {\r
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_14751F327A634B989283C8F28CFB6DFC"\r
+                    {\r
+                    "Sequence" = "3:100"\r
+                    "DisplayName" = "8:Progress"\r
+                    "UseDynamicProperties" = "11:TRUE"\r
+                    "IsDependency" = "11:FALSE"\r
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"\r
+                        "Properties"\r
+                        {\r
+                            "BannerBitmap"\r
+                            {\r
+                            "Name" = "8:BannerBitmap"\r
+                            "DisplayName" = "8:#1001"\r
+                            "Description" = "8:#1101"\r
+                            "Type" = "3:8"\r
+                            "ContextData" = "8:Bitmap"\r
+                            "Attributes" = "3:4"\r
+                            "Setting" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                            "ShowProgress"\r
+                            {\r
+                            "Name" = "8:ShowProgress"\r
+                            "DisplayName" = "8:#1009"\r
+                            "Description" = "8:#1109"\r
+                            "Type" = "3:5"\r
+                            "ContextData" = "8:1;True=1;False=0"\r
+                            "Attributes" = "3:0"\r
+                            "Setting" = "3:0"\r
+                            "Value" = "3:1"\r
+                            "DefaultValue" = "3:1"\r
+                            "UsePlugInResources" = "11:TRUE"\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+        }\r
+        "MergeModule"\r
+        {\r
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_299D5816FF7142F3B2791685551AD1DC"\r
+            {\r
+            "UseDynamicProperties" = "11:TRUE"\r
+            "IsDependency" = "11:TRUE"\r
+            "SourcePath" = "8:microsoft_vc90_debugcrt_x86.msm"\r
+                "Properties"\r
+                {\r
+                }\r
+            "LanguageId" = "3:0"\r
+            "Exclude" = "11:FALSE"\r
+            "Folder" = "8:"\r
+            "Feature" = "8:"\r
+            "IsolateTo" = "8:"\r
+            }\r
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+            {\r
+            "UseDynamicProperties" = "11:TRUE"\r
+            "IsDependency" = "11:TRUE"\r
+            "SourcePath" = "8:policy_9_0_Microsoft_VC90_DebugCRT_x86.msm"\r
+                "Properties"\r
+                {\r
+                }\r
+            "LanguageId" = "3:0"\r
+            "Exclude" = "11:FALSE"\r
+            "Folder" = "8:"\r
+            "Feature" = "8:"\r
+            "IsolateTo" = "8:"\r
+            }\r
+        }\r
+        "ProjectOutput"\r
+        {\r
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_466C1CF41795452A8B76425F8D05D8B8"\r
+            {\r
+            "SourcePath" = "8:Win32\\Debug\\ippserver.exe"\r
+            "TargetName" = "8:"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            "ProjectOutputGroupRegister" = "3:1"\r
+            "OutputConfiguration" = "8:"\r
+            "OutputGroupCanonicalName" = "8:Built"\r
+            "OutputProjectGuid" = "8:{82A03BC7-0746-4B85-8908-3C7A3FAA58A9}"\r
+            "ShowKeyOutput" = "11:TRUE"\r
+                "ExcludeFilters"\r
+                {\r
+                }\r
+            }\r
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_58DC0E72F0944BEFB927AED718CD1660"\r
+            {\r
+            "SourcePath" = "8:Win32\\Debug\\ippfind.exe"\r
+            "TargetName" = "8:"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            "ProjectOutputGroupRegister" = "3:1"\r
+            "OutputConfiguration" = "8:"\r
+            "OutputGroupCanonicalName" = "8:Built"\r
+            "OutputProjectGuid" = "8:{B484DA0C-62C8-4C32-83B6-CCEB58968B85}"\r
+            "ShowKeyOutput" = "11:TRUE"\r
+                "ExcludeFilters"\r
+                {\r
+                }\r
+            }\r
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D02EB13951314EFD9C539150EF8E53B8"\r
+            {\r
+            "SourcePath" = "8:Win32\\Debug\\regex.dll"\r
+            "TargetName" = "8:"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            "ProjectOutputGroupRegister" = "3:1"\r
+            "OutputConfiguration" = "8:"\r
+            "OutputGroupCanonicalName" = "8:Built"\r
+            "OutputProjectGuid" = "8:{18950A1B-D37A-40C7-B2DF-C12986C0526E}"\r
+            "ShowKeyOutput" = "11:TRUE"\r
+                "ExcludeFilters"\r
+                {\r
+                }\r
+            }\r
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_E97571D3FBE048DABDC59B37762D800F"\r
+            {\r
+            "SourcePath" = "8:Win32\\Debug\\ipptool.exe"\r
+            "TargetName" = "8:"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            "ProjectOutputGroupRegister" = "3:1"\r
+            "OutputConfiguration" = "8:"\r
+            "OutputGroupCanonicalName" = "8:Built"\r
+            "OutputProjectGuid" = "8:{B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}"\r
+            "ShowKeyOutput" = "11:TRUE"\r
+                "ExcludeFilters"\r
+                {\r
+                }\r
+            }\r
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+            {\r
+            "SourcePath" = "8:Win32\\Debug\\libcups2.dll"\r
+            "TargetName" = "8:"\r
+            "Tag" = "8:"\r
+            "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+            "Condition" = "8:"\r
+            "Transitive" = "11:FALSE"\r
+            "Vital" = "11:TRUE"\r
+            "ReadOnly" = "11:FALSE"\r
+            "Hidden" = "11:FALSE"\r
+            "System" = "11:FALSE"\r
+            "Permanent" = "11:FALSE"\r
+            "SharedLegacy" = "11:FALSE"\r
+            "PackageAs" = "3:1"\r
+            "Register" = "3:1"\r
+            "Exclude" = "11:FALSE"\r
+            "IsDependency" = "11:FALSE"\r
+            "IsolateTo" = "8:"\r
+            "ProjectOutputGroupRegister" = "3:1"\r
+            "OutputConfiguration" = "8:"\r
+            "OutputGroupCanonicalName" = "8:Built"\r
+            "OutputProjectGuid" = "8:{CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}"\r
+            "ShowKeyOutput" = "11:TRUE"\r
+                "ExcludeFilters"\r
+                {\r
+                }\r
+            }\r
+        }\r
+    }\r
+}\r
index bff5aa03633a7de9301dbd9e51fe365489868ca4..9d658ffedab435d990e45d55fc26c19077626905 100644 (file)
@@ -30,6 +30,7 @@
                        );
                        dependencies = (
                                274FF5E313332D4300317ECB /* PBXTargetDependency */,
+                               72BEA8D819AFA8BB0085F0F3 /* PBXTargetDependency */,
                                72F75A711336FACD004BB496 /* PBXTargetDependency */,
                                274FF5E513332D4300317ECB /* PBXTargetDependency */,
                                274FF622133331D300317ECB /* PBXTargetDependency */,
@@ -44,6 +45,8 @@
                                274FF65E13333A3400317ECB /* PBXTargetDependency */,
                                724379531333FECE009631B9 /* PBXTargetDependency */,
                                724379111333E4EA009631B9 /* PBXTargetDependency */,
+                               72BEA8D619AFA8A00085F0F3 /* PBXTargetDependency */,
+                               72BEA8D419AFA89C0085F0F3 /* PBXTargetDependency */,
                                276683FF1337F7C5000D33D0 /* PBXTargetDependency */,
                                7243792B1333E962009631B9 /* PBXTargetDependency */,
                                276683D71337B24A000D33D0 /* PBXTargetDependency */,
                        remoteGlobalIDString = 274FF6891333B1C400317ECB;
                        remoteInfo = libcups_static;
                };
+               72BEA8D319AFA89C0085F0F3 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 726AD6F6135E88F0002C930D;
+                       remoteInfo = ippserver;
+               };
+               72BEA8D519AFA8A00085F0F3 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 72CF95E618A19134000FCAE4;
+                       remoteInfo = ippfind;
+               };
+               72BEA8D719AFA8BB0085F0F3 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274FF6891333B1C400317ECB;
+                       remoteInfo = libcups_static;
+               };
                72CF95E818A19134000FCAE4 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
                        target = 274FF6891333B1C400317ECB /* libcups_static */;
                        targetProxy = 726AD705135E8AC5002C930D /* PBXContainerItemProxy */;
                };
+               72BEA8D419AFA89C0085F0F3 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 726AD6F6135E88F0002C930D /* ippserver */;
+                       targetProxy = 72BEA8D319AFA89C0085F0F3 /* PBXContainerItemProxy */;
+               };
+               72BEA8D619AFA8A00085F0F3 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 72CF95E618A19134000FCAE4 /* ippfind */;
+                       targetProxy = 72BEA8D519AFA8A00085F0F3 /* PBXContainerItemProxy */;
+               };
+               72BEA8D819AFA8BB0085F0F3 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274FF6891333B1C400317ECB /* libcups_static */;
+                       targetProxy = 72BEA8D719AFA8BB0085F0F3 /* PBXContainerItemProxy */;
+               };
                72CF95E718A19134000FCAE4 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 72220EAD1333047D00FCA411 /* libcups */;
index bd8124dc11922316bb5ce933cf593a13a1dec246..51a99382919bc019ba0e8df009c06e1c502bcf48 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: config.h 11591 2014-02-14 16:07:13Z msweet $"
+ * "$Id: config.h 12140 2014-08-30 01:51:22Z msweet $"
  *
  * Configuration file for CUPS and Xcode.
  *
 #endif /* HAVE_ARC4RANDOM */
 
 
-/*
- * Do we have vproc_transaction_begin/end?
- */
-
-#define HAVE_VPROC_TRANSACTION_BEGIN 1
-
-
 /*
  * Do we have libusb?
  */
@@ -706,5 +699,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
 #endif /* !_CUPS_CONFIG_H_ */
 
 /*
- * End of "$Id: config.h 11591 2014-02-14 16:07:13Z msweet $".
+ * End of "$Id: config.h 12140 2014-08-30 01:51:22Z msweet $".
  */