]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Sync up IPP and HTTP conformance changes, IPP->PPD mapping changes.
authormike <mike@7a7537e8-13f0-0310-91df-b6672ffda945>
Tue, 10 Aug 2010 00:02:02 +0000 (00:02 +0000)
committermike <mike@7a7537e8-13f0-0310-91df-b6672ffda945>
Tue, 10 Aug 2010 00:02:02 +0000 (00:02 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@9230 7a7537e8-13f0-0310-91df-b6672ffda945

48 files changed:
backend/Dependencies
backend/ipp.c
backend/usb-darwin.c
berkeley/Dependencies
cgi-bin/Dependencies
config-scripts/cups-common.m4
config-scripts/cups-ssl.m4
config.h.in
cups/Dependencies
cups/cups-private.h
cups/cups.h
cups/debug-private.h
cups/debug.c
cups/globals.c
cups/http-addrlist.c
cups/http-private.h
cups/http-support.c
cups/http.c
cups/http.h
cups/ipp-support.c
cups/ipp.h
cups/libcups2.def
cups/options.c
cups/ppd-private.h
cups/pwg-media.c
cups/pwg-private.h
cups/request.c
cups/testhttp.c
cups/usersys.c
cups/versioning.h
doc/Makefile
driver/Dependencies
filter/Dependencies
locale/Dependencies
monitor/Dependencies
notifier/Dependencies
ppdc/Dependencies
scheduler/Dependencies
scheduler/client.c
scheduler/dirsvc.c
scheduler/ipp.c
scheduler/job.c
scheduler/printers.c
scripting/php/Dependencies
systemv/Dependencies
test/Dependencies
test/ipp-2.0.test
test/ipp-2.1.test

index 0f3718ed3e2ceb1394192a9a0e34b2a3e6854704..f6c512e4abdee6984e3ebe5be236059360c35267 100644 (file)
@@ -1,8 +1,8 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 ipp.o: backend-private.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ipp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-ipp.o: ../cups/array.h ../cups/string-private.h ../config.h
+ipp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+ipp.o: ../cups/language.h ../cups/string-private.h ../config.h
 ipp.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ipp.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ipp.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -12,8 +12,8 @@ ipp.o: ../cups/sidechannel.h
 lpd.o: ../cups/http-private.h ../config.h ../cups/http.h
 lpd.o: ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h
 lpd.o: backend-private.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lpd.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-lpd.o: ../cups/array.h ../cups/string-private.h ../cups/debug-private.h
+lpd.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lpd.o: ../cups/language.h ../cups/string-private.h ../cups/debug-private.h
 lpd.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 lpd.o: ../cups/pwg-private.h ../cups/http-private.h
 lpd.o: ../cups/language-private.h ../cups/transcode.h
@@ -21,7 +21,7 @@ lpd.o: ../cups/thread-private.h ../cups/snmp-private.h ../cups/backend.h
 lpd.o: ../cups/sidechannel.h
 dnssd.o: backend-private.h ../cups/cups-private.h ../cups/cups.h
 dnssd.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-dnssd.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+dnssd.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 dnssd.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 dnssd.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 dnssd.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -29,12 +29,12 @@ dnssd.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 dnssd.o: ../cups/transcode.h ../cups/thread-private.h ../cups/snmp-private.h
 dnssd.o: ../cups/backend.h ../cups/sidechannel.h ../cups/array.h
 pap.o: ../config.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-pap.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+pap.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pap.o: ../cups/backend.h ../cups/sidechannel.h ../cups/language-private.h
 pap.o: ../cups/transcode.h
 parallel.o: backend-private.h ../cups/cups-private.h ../cups/cups.h
 parallel.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-parallel.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+parallel.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 parallel.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 parallel.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 parallel.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -43,7 +43,7 @@ parallel.o: ../cups/transcode.h ../cups/thread-private.h
 parallel.o: ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h
 serial.o: backend-private.h ../cups/cups-private.h ../cups/cups.h
 serial.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-serial.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+serial.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 serial.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 serial.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 serial.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -52,7 +52,7 @@ serial.o: ../cups/transcode.h ../cups/thread-private.h ../cups/snmp-private.h
 serial.o: ../cups/backend.h ../cups/sidechannel.h
 snmp.o: backend-private.h ../cups/cups-private.h ../cups/cups.h
 snmp.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-snmp.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+snmp.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 snmp.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 snmp.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 snmp.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -64,7 +64,7 @@ socket.o: ../cups/http-private.h ../config.h ../cups/http.h
 socket.o: ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h
 socket.o: backend-private.h ../cups/cups-private.h ../cups/cups.h
 socket.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-socket.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+socket.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 socket.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 socket.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 socket.o: ../cups/language-private.h ../cups/transcode.h
@@ -72,8 +72,8 @@ socket.o: ../cups/thread-private.h ../cups/snmp-private.h ../cups/backend.h
 socket.o: ../cups/sidechannel.h
 test1284.o: ../cups/string-private.h ../config.h ieee1284.c backend-private.h
 test1284.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-test1284.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-test1284.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+test1284.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+test1284.o: ../cups/language.h ../cups/string-private.h
 test1284.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 test1284.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 test1284.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -82,11 +82,11 @@ test1284.o: ../cups/thread-private.h ../cups/snmp-private.h ../cups/backend.h
 test1284.o: ../cups/sidechannel.h
 testbackend.o: ../cups/string-private.h ../config.h ../cups/cups.h
 testbackend.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-testbackend.o: ../cups/http.h ../cups/language.h ../cups/array.h
+testbackend.o: ../cups/http.h ../cups/array.h ../cups/language.h
 testbackend.o: ../cups/sidechannel.h
 testsupplies.o: backend-private.h ../cups/cups-private.h ../cups/cups.h
 testsupplies.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-testsupplies.o: ../cups/http.h ../cups/language.h ../cups/array.h
+testsupplies.o: ../cups/http.h ../cups/array.h ../cups/language.h
 testsupplies.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 testsupplies.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 testsupplies.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -95,8 +95,8 @@ testsupplies.o: ../cups/language-private.h ../cups/transcode.h
 testsupplies.o: ../cups/thread-private.h ../cups/snmp-private.h
 testsupplies.o: ../cups/backend.h ../cups/sidechannel.h
 usb.o: backend-private.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-usb.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-usb.o: ../cups/array.h ../cups/string-private.h ../config.h
+usb.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+usb.o: ../cups/language.h ../cups/string-private.h ../config.h
 usb.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 usb.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 usb.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
index 0c6302828bf378370f83bc44c1dc4a870ceac9b8..551264b2ae3ca603970c8e7d44f1e7dfbd984928 100644 (file)
@@ -18,8 +18,9 @@
  *
  *   main()                 - Send a file to the printer or server.
  *   cancel_job()           - Cancel a print job.
- *   check_printer_state()  - Check the printer state...
+ *   check_printer_state()  - Check the printer state.
  *   compress_files()       - Compress print files...
+ *   monitor_printer()      - Monitor the printer state...
  *   password_cb()          - Disable the password prompt for
  *                            cupsDoFileRequest().
  *   report_attr()          - Report an IPP attribute value.
 #include <sys/stat.h>
 #include <sys/wait.h>
 
+
+/*
+ * Types...
+ */
+
+typedef struct _cups_monitor_s         /**** Monitoring data ****/
+{
+  const char           *uri,           /* Printer URI */
+                       *hostname,      /* Hostname */
+                       *user,          /* Username */
+                       *resource;      /* Resource path */
+  int                  port,           /* Port number */
+                       version,        /* IPP version */
+                       job_id;         /* Job ID for submitted job */
+  http_encryption_t    encryption;     /* Use encryption? */
+  ipp_jstate_t         job_state;      /* Current job state */
+  ipp_pstate_t         printer_state;  /* Current printer state */
+} _cups_monitor_t;
+
+
 /*
  * Globals...
  */
 
-static char    *password = NULL;       /* Password for device URI */
-static int     password_tries = 0;     /* Password tries */
 static const char *auth_info_required = "none";
                                        /* New auth-info-required value */
+static const char * const jattrs[] =   /* Job attributes we want */
+{
+  "job-media-sheets-completed",
+  "job-state",
+  "job-state-reasons"
+};
 static int     job_canceled = 0;       /* Job cancelled? */
+static char    *password = NULL;       /* Password for device URI */
+static int     password_tries = 0;     /* Password tries */
+static const char * const pattrs[] =   /* Printer attributes we want */
+{
+  "copies-supported",
+  "cups-version",
+  "document-format-supported",
+  "marker-colors",
+  "marker-high-levels",
+  "marker-levels",
+  "marker-low-levels",
+  "marker-message",
+  "marker-names",
+  "marker-types",
+  "media-col-supported",
+  "printer-alert",
+  "printer-alert-description",
+  "printer-is-accepting-jobs",
+  "printer-state",
+  "printer-state-message",
+  "printer-state-reasons",
+};
 
 
 /*
  * Local functions...
  */
 
-static void    cancel_job(http_t *http, const char *uri, int id,
-                          const char *resource, const char *user, int version);
-static void    check_printer_state(http_t *http, const char *uri,
-                                   const char *resource, const char *user,
-                                   int version, int job_id);
+static void            cancel_job(http_t *http, const char *uri, int id,
+                                  const char *resource, const char *user,
+                                  int version);
+static ipp_pstate_t    check_printer_state(http_t *http, const char *uri,
+                                           const char *resource,
+                                           const char *user, int version,
+                                           int job_id);
 #ifdef HAVE_LIBZ
-static void    compress_files(int num_files, char **files);
+static void            compress_files(int num_files, char **files);
 #endif /* HAVE_LIBZ */
-static const char *password_cb(const char *);
-static void    report_attr(ipp_attribute_t *attr);
-static int     report_printer_state(ipp_t *ipp, int job_id);
-static void    sigterm_handler(int sig);
+static void            *monitor_printer(_cups_monitor_t *monitor);
+static const char      *password_cb(const char *);
+static void            report_attr(ipp_attribute_t *attr);
+static int             report_printer_state(ipp_t *ipp, int job_id);
+static void            sigterm_handler(int sig);
 
 
 /*
@@ -111,6 +161,7 @@ main(int  argc,                             /* I - Number of command-line args */
   int          compression,            /* Do compression of the job data? */
                waitjob,                /* Wait for job complete? */
                waitprinter;            /* Wait for printer ready? */
+  _cups_monitor_t monitor;             /* Monitoring data */
   ipp_attribute_t *job_id_attr;                /* job-id attribute */
   int          job_id;                 /* job-id value */
   ipp_attribute_t *job_sheets;         /* job-media-sheets-completed */
@@ -132,28 +183,6 @@ main(int  argc,                            /* I - Number of command-line args */
   struct sigaction action;             /* Actions for POSIX signals */
 #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
   int          version;                /* IPP version */
-  static const char * const pattrs[] =
-               {                       /* Printer attributes we want */
-                 "copies-supported",
-                 "document-format-supported",
-                 "marker-colors",
-                 "marker-high-levels",
-                 "marker-levels",
-                 "marker-low-levels",
-                 "marker-message",
-                 "marker-names",
-                 "marker-types",
-                 "media-col-supported",
-                 "printer-is-accepting-jobs",
-                 "printer-state",
-                 "printer-state-message",
-                 "printer-state-reasons",
-               };
-  static const char * const jattrs[] =
-               {                       /* Job attributes we want */
-                 "job-media-sheets-completed",
-                 "job-state"
-               };
 
 
  /*
@@ -402,8 +431,7 @@ main(int  argc,                             /* I - Number of command-line args */
     send_options = !strcasecmp(final_content_type, "application/pdf") ||
                    !strcasecmp(final_content_type, "application/vnd.cups-pdf") ||
                    !strcasecmp(final_content_type, "image/jpeg") ||
-                   !strcasecmp(final_content_type, "image/png") ||
-                   !strcasecmp(final_content_type, "image/urf");
+                   !strcasecmp(final_content_type, "image/png");
 
     fputs("DEBUG: Sending stdin for job...\n", stderr);
   }
@@ -472,6 +500,11 @@ main(int  argc,                            /* I - Number of command-line args */
 
     if ((http = httpConnectEncrypt(hostname, port, cupsEncryption())) == NULL)
     {
+#if 0 /* These need to go in here someplace when we see HTTP_PKI_ERROR or IPP_PKI_ERROR */
+      fputs("STATE: +cups-certificate-error\n", stderr);
+      fputs("STATE: -cups-certificate-error\n", stderr);
+#endif /* 0 */
+
       int error = errno;               /* Connection error */
 
       if (job_canceled)
@@ -647,13 +680,14 @@ main(int  argc,                           /* I - Number of command-line args */
       exit(CUPS_BACKEND_STOP);
     }
 
-    if ((supported = cupsDoRequest(http, request, resource)) == NULL)
-      ipp_status = cupsLastError();
-    else
-      ipp_status = supported->request.status.status_code;
+    supported  = cupsDoRequest(http, request, resource);
+    ipp_status = cupsLastError();
 
     if (ipp_status > IPP_OK_CONFLICT)
     {
+      fprintf(stderr, "DEBUG: Get-Printer-Attributes returned %s.\n",
+              ippErrorString(ipp_status));
+
       if (ipp_status == IPP_PRINTER_BUSY ||
          ipp_status == IPP_SERVICE_UNAVAILABLE)
       {
@@ -700,7 +734,9 @@ main(int  argc,                             /* I - Number of command-line args */
       }
       else if (ipp_status == IPP_NOT_FOUND)
       {
-        _cupsLangPuts(stderr, _("ERROR: The printer URI is incorrect or no longer exists.\n"));
+        _cupsLangPuts(stderr,
+                     _("ERROR: The printer URI is incorrect or no longer "
+                       "exists.\n"));
 
        if (supported)
           ippDelete(supported);
@@ -834,6 +870,23 @@ main(int  argc,                            /* I - Number of command-line args */
   else
     copies_remaining = copies;
 
+ /*
+  * Start monitoring the printer in the background...
+  */
+
+  monitor.uri           = uri;
+  monitor.hostname      = hostname;
+  monitor.user          = argv[2];
+  monitor.resource      = resource;
+  monitor.port          = port;
+  monitor.version       = version;
+  monitor.job_id        = 0;
+  monitor.encryption    = cupsEncryption();
+  monitor.job_state     = IPP_JOB_PENDING;
+  monitor.printer_state = IPP_PRINTER_IDLE;
+
+  _cupsThreadCreate((_cups_thread_func_t)monitor_printer, &monitor);
+
  /*
   * Then issue the print-job request...
   */
@@ -1005,9 +1058,9 @@ main(int  argc,                           /* I - Number of command-line args */
          _pwg_media_t  *found;         /* PWG media */
 
 
-          if ((found = _pwgMediaForPPD(keyword)) == NULL)
+          if ((found = _pwgMediaForPPD(keyword)) != NULL)
            keyword = found->pwg;
-         else if ((found = _pwgMediaForLegacy(keyword)) == NULL)
+         else if ((found = _pwgMediaForLegacy(keyword)) != NULL)
            keyword = found->pwg;
 
          ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "media",
@@ -1028,10 +1081,41 @@ main(int  argc,                         /* I - Number of command-line args */
          ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "output-mode",
                       NULL, keyword);
 
+       if ((keyword = cupsGetOption("print-quality", num_options,
+                                    options)) != NULL)
+         ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
+                       atoi(keyword));
+        else if ((keyword = cupsGetOption("cupsPrintQuality", num_options,
+                                         options)) != NULL)
+        {
+         if (!strcasecmp(keyword, "draft"))
+           ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
+                         IPP_QUALITY_DRAFT);
+         else if (!strcasecmp(keyword, "normal"))
+           ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
+                         IPP_QUALITY_NORMAL);
+         else if (!strcasecmp(keyword, "high"))
+           ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
+                         IPP_QUALITY_HIGH);
+       }
+
        if ((keyword = cupsGetOption("sides", num_options, options)) != NULL)
          ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
-                      NULL, keyword);
-                              
+                      NULL, keyword);
+       else if ((keyword = cupsGetOption("Duplex", num_options,
+                                         options)) != NULL)
+       {
+         if (!strcasecmp(keyword, "None"))
+           ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
+                        NULL, "one-sided");
+         else if (!strcasecmp(keyword, "DuplexNoTumble"))
+           ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
+                        NULL, "two-sided-long-edge");
+         if (!strcasecmp(keyword, "DuplexTumble"))
+           ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
+                        NULL, "two-sided-short-edge");
+        }
+
        _pwgDestroy(pwg);
       }
 
@@ -1134,7 +1218,7 @@ main(int  argc,                           /* I - Number of command-line args */
     }
     else
     {
-      job_id = job_id_attr->values[0].integer;
+      monitor.job_id = job_id = job_id_attr->values[0].integer;
       _cupsLangPrintf(stderr, _("NOTICE: Print file accepted - job ID %d.\n"),
                       job_id);
     }
@@ -1336,11 +1420,13 @@ main(int  argc,                         /* I - Number of command-line args */
 
       ippDelete(response);
 
+#if 0
      /*
       * Check the printer state and report it if necessary...
       */
 
       check_printer_state(http, uri, resource, argv[2], version, job_id);
+#endif /* 0 */
 
      /*
       * Wait 1-10 seconds before polling again...
@@ -1467,34 +1553,27 @@ cancel_job(http_t     *http,            /* I - HTTP connection */
 
 
 /*
- * 'check_printer_state()' - Check the printer state...
+ * 'check_printer_state()' - Check the printer state.
  */
 
-static void
+static ipp_pstate_t                    /* O - Current printer-state */
 check_printer_state(
     http_t      *http,                 /* I - HTTP connection */
     const char  *uri,                  /* I - Printer URI */
     const char  *resource,             /* I - Resource path */
     const char  *user,                 /* I - Username, if any */
     int         version,               /* I - IPP version */
-    int         job_id)                        /* I - Current job ID */
+    int         job_id)
 {
-  ipp_t        *request,                       /* IPP request */
-       *response;                      /* IPP response */
-  static const char * const attrs[] =  /* Attributes we want */
-  {
-    "marker-colors",
-    "marker-levels",
-    "marker-message",
-    "marker-names",
-    "marker-types",
-    "printer-state-message",
-    "printer-state-reasons"
-  };
+  ipp_t                *request,               /* IPP request */
+               *response;              /* IPP response */
+  ipp_attribute_t *attr;               /* Attribute in response */
+  ipp_pstate_t printer_state = IPP_PRINTER_STOPPED;
+                                       /* Current printer-state */
 
 
  /*
-  * Check on the printer state...
+  * Send a Get-Printer-Attributes request and log the results...
   */
 
   request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
@@ -1502,25 +1581,32 @@ check_printer_state(
   request->request.op.version[1] = version % 10;
 
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
-               NULL, uri);
+              NULL, uri);
 
   if (user && user[0])
     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
-                 "requesting-user-name", NULL, user);
+                "requesting-user-name", NULL, user);
 
   ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
-                "requested-attributes",
-               (int)(sizeof(attrs) / sizeof(attrs[0])), NULL, attrs);
-
- /*
-  * Do the request...
-  */
+               "requested-attributes",
+               (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
 
   if ((response = cupsDoRequest(http, request, resource)) != NULL)
   {
     report_printer_state(response, job_id);
+
+    if ((attr = ippFindAttribute(response, "printer-state",
+                                IPP_TAG_ENUM)) != NULL)
+      printer_state = (ipp_pstate_t)attr->values[0].integer;
+
     ippDelete(response);
   }
+
+ /*
+  * Return the printer-state value...
+  */
+
+  return (printer_state);
 }
 
 
@@ -1602,6 +1688,122 @@ compress_files(int  num_files,          /* I - Number of files */
 #endif /* HAVE_LIBZ */
 
 
+/*
+ * 'monitor_printer()' - Monitor the printer state...
+ */
+
+static void *                          /* O - Thread exit code */
+monitor_printer(
+    _cups_monitor_t *monitor)          /* I - Monitoring data */
+{
+  http_t       *http;                  /* Connection to printer */
+  ipp_t                *request,               /* IPP request */
+               *response;              /* IPP response */
+  ipp_attribute_t *attr;               /* Attribute in response */
+  int          delay,                  /* Current delay */
+               prev_delay,             /* Previous delay */
+               temp_delay;             /* Temporary delay value */
+
+
+ /*
+  * Make a copy of the printer connection...
+  */
+
+  http = _httpCreate(monitor->hostname, monitor->port, monitor->encryption);
+  cupsSetPasswordCB(password_cb);
+
+ /*
+  * Loop until the job is canceled, aborted, or completed.
+  */
+
+  delay      = 1;
+  prev_delay = 0;
+
+  while (monitor->job_state < IPP_JOB_CANCELED && !job_canceled)
+  {
+   /*
+    * Reconnect to the printer...
+    */
+
+    if (!httpReconnect(http))
+    {
+     /*
+      * Connected, so check on the printer state...
+      */
+
+      monitor->printer_state = check_printer_state(http, monitor->uri,
+                                                   monitor->resource,
+                                                  monitor->user,
+                                                  monitor->version,
+                                                  monitor->job_id);
+
+      if (monitor->job_id > 0)
+      {
+       /*
+        * Check the status of the job itself...
+       */
+
+       request = ippNewRequest(IPP_GET_JOB_ATTRIBUTES);
+       request->request.op.version[0] = monitor->version / 10;
+       request->request.op.version[1] = monitor->version % 10;
+
+       ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
+                    NULL, monitor->uri);
+       ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id",
+                     monitor->job_id);
+
+       if (monitor->user && monitor->user[0])
+         ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+                      "requesting-user-name", NULL, monitor->user);
+
+       ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+                     "requested-attributes",
+                     (int)(sizeof(jattrs) / sizeof(jattrs[0])), NULL, jattrs);
+
+       /*
+       * Do the request...
+       */
+
+       response = cupsDoRequest(http, request, monitor->resource);
+
+       if ((attr = ippFindAttribute(response, "job-state",
+                                    IPP_TAG_ENUM)) != NULL)
+         monitor->job_state = (ipp_jstate_t)attr->values[0].integer;
+       else
+         monitor->job_state = IPP_JOB_COMPLETED;
+
+       ippDelete(response);
+      }
+
+     /*
+      * Disconnect from the printer - we'll reconnect on the next poll...
+      */
+
+      _httpDisconnect(http);
+    }
+
+   /*
+    * Sleep for N seconds, and then update the next sleep time using a
+    * Fibonacci series (1 1 2 3 5 8)...
+    */
+
+    sleep(delay);
+
+    temp_delay = delay;
+    delay      = (delay + prev_delay) % 12;
+    prev_delay = delay < temp_delay ? 0 : temp_delay;
+  }
+
+ /*
+  * Cleanup and return...
+  */
+
+  httpClose(http);
+
+  return (NULL);
+}
+
+
 /*
  * 'password_cb()' - Disable the password prompt for cupsDoFileRequest().
  */
@@ -1712,41 +1914,93 @@ report_printer_state(ipp_t *ipp,        /* I - IPP response */
 {
   int                  i;              /* Looping var */
   int                  count;          /* Count of reasons shown... */
-  ipp_attribute_t      *psm,           /* printer-state-message */
+  ipp_attribute_t      *pa,            /* printer-alert */
+                       *pam,           /* printer-alert-message */
+                       *psm,           /* printer-state-message */
                        *reasons,       /* printer-state-reasons */
                        *marker;        /* marker-* attributes */
   const char           *reason;        /* Current reason */
   const char           *prefix;        /* Prefix for STATE: line */
-  char                 state[1024];    /* State string */
+  char                 value[1024],    /* State/message string */
+                       *valptr;        /* Pointer into string */
 
 
+ /*
+  * Report alerts and messages...
+  */
+
+  if ((pa = ippFindAttribute(ipp, "printer-alert", IPP_TAG_TEXT)) != NULL)
+    report_attr(pa);
+
+  if ((pam = ippFindAttribute(ipp, "printer-alert-message",
+                              IPP_TAG_TEXT)) != NULL)
+    report_attr(pam);
+
   if ((psm = ippFindAttribute(ipp, "printer-state-message",
                               IPP_TAG_TEXT)) != NULL)
-    fprintf(stderr, "INFO: %s\n", psm->values[0].string.text);
+  {
+    char       *ptr;                   /* Pointer into message */
+
+
+    strlcpy(value, "INFO: ", sizeof(value));
+    for (ptr = psm->values[0].string.text, valptr = value + 6;
+         *ptr && valptr < (value + sizeof(value) - 6);
+        ptr ++)
+    {
+      if (*ptr < ' ' && *ptr > 0 && *ptr != '\t')
+      {
+       /*
+        * Substitute "<XX>" for the control character; sprintf is safe because
+       * we always leave 6 chars free at the end...
+       */
+
+        sprintf(valptr, "<%02X>", *ptr);
+       valptr += 4;
+      }
+      else
+        *valptr++ = *ptr;
+    }
+
+    *valptr++ = '\n';
+    *valptr++ = '\0';
+
+    fputs(value, stderr);
+  }
+
+ /*
+  * Now report printer-state-reasons, filtering out some of the reasons we never
+  * want to set...
+  */
 
   if ((reasons = ippFindAttribute(ipp, "printer-state-reasons",
                                   IPP_TAG_KEYWORD)) == NULL)
     return (0);
 
-  state[0] = '\0';
+  value[0] = '\0';
   prefix   = "STATE: ";
 
-  for (i = 0, count = 0; i < reasons->num_values; i ++)
+  for (i = 0, count = 0, valptr = value; i < reasons->num_values; i ++)
   {
     reason = reasons->values[i].string.text;
 
     if (strcmp(reason, "paused") &&
        strcmp(reason, "com.apple.print.recoverable-warning"))
     {
-      strlcat(state, prefix, sizeof(state));
-      strlcat(state, reason, sizeof(state));
+      strlcpy(valptr, prefix, sizeof(value) - (valptr - value) - 1);
+      valptr += strlen(valptr);
+      strlcpy(valptr, reason, sizeof(value) - (valptr - value) - 1);
+      valptr += strlen(valptr);
 
       prefix  = ",";
     }
   }
 
-  if (state[0])
-    fprintf(stderr, "%s\n", state);
+  if (value[0])
+  {
+    *valptr++ = '\n';
+    *valptr++ = '\0';
+    fputs(value, stderr);
+  }
 
  /*
   * Relay the current marker-* attribute values...
index 596399fc4ca9447a7c0891b5dc5934205a9a7cc0..d96d73399cdcbabe1073294d0029b8230c7e113f 100644 (file)
@@ -112,6 +112,12 @@ extern char **environ;
 
 #define DEBUG_WRITES 0
 
+/*
+ * WAIT_EOF_DELAY is number of seconds we'll wait for responses from
+ * the printer after we've finished sending all the data
+ */
+#define WAIT_EOF_DELAY                 7
+#define WAIT_SIDE_DELAY                        3
 #define DEFAULT_TIMEOUT                        5000L
 
 #define        USB_INTERFACE_KIND              CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID190)
@@ -241,6 +247,11 @@ typedef struct globals_s
   Boolean              wait_eof;
   int                  drain_output;   /* Drain all pending output */
   int                  bidi_flag;      /* 0=unidirectional, 1=bidirectional */
+
+  pthread_mutex_t      sidechannel_thread_mutex;
+  pthread_cond_t       sidechannel_thread_cond;
+  int                  sidechannel_thread_stop;
+  int                  sidechannel_thread_done;
 } globals_t;
 
 
@@ -333,6 +344,7 @@ print_device(const char *uri,               /* I - Device URI */
   UInt32         bytes;                /* Bytes written */
   struct timeval  *timeout,            /* Timeout pointer */
                  stimeout;             /* Timeout for select() */
+  struct timespec cond_timeout;                /* pthread condition timeout */
 
 
  /*
@@ -477,6 +489,12 @@ print_device(const char *uri,              /* I - Device URI */
 
   if (have_sidechannel)
   {
+    g.sidechannel_thread_stop = 0;
+    g.sidechannel_thread_done = 0;
+
+    pthread_cond_init(&g.sidechannel_thread_cond, NULL);
+    pthread_mutex_init(&g.sidechannel_thread_mutex, NULL);
+
     if (pthread_create(&sidechannel_thread_id, NULL, sidechannel_thread, NULL))
     {
       fprintf(stderr, "DEBUG: Fatal USB error.\n");
@@ -734,6 +752,101 @@ print_device(const char *uri,             /* I - Device URI */
 
   fprintf(stderr, "DEBUG: Sent %lld bytes...\n", (off_t)total_bytes);
 
+  if (!print_fd)
+  {
+   /*
+    * Re-enable the SIGTERM handler so pthread_kill() will work...
+    */
+  
+    struct sigaction   action;         /* POSIX signal action */
+
+    memset(&action, 0, sizeof(action));
+
+    sigemptyset(&action.sa_mask);
+    action.sa_handler = SIG_DFL;
+    sigaction(SIGTERM, &action, NULL);
+  }
+
+ /*
+  * Wait for the side channel thread to exit...
+  */
+
+  if (have_sidechannel)
+  {
+    close(CUPS_SC_FD);
+    pthread_mutex_lock(&g.readwrite_lock_mutex);
+    g.readwrite_lock = 0;
+    pthread_cond_signal(&g.readwrite_lock_cond);
+    pthread_mutex_unlock(&g.readwrite_lock_mutex);
+
+    g.sidechannel_thread_stop = 1;
+    pthread_mutex_lock(&g.sidechannel_thread_mutex);
+    if (!g.sidechannel_thread_done)
+    {
+     /*
+      * Wait for the side-channel thread to exit...
+      */
+
+      cond_timeout.tv_sec  = time(NULL) + WAIT_SIDE_DELAY;
+      cond_timeout.tv_nsec = 0;
+      if (pthread_cond_timedwait(&g.sidechannel_thread_cond,
+                                &g.sidechannel_thread_mutex,
+                                &cond_timeout) != 0)
+      {
+       /*
+       * Force the side-channel thread to exit...
+       */
+
+       pthread_kill(sidechannel_thread_id, SIGTERM);
+      }
+    }
+    pthread_mutex_unlock(&g.sidechannel_thread_mutex);
+
+    pthread_join(sidechannel_thread_id, NULL);
+
+    pthread_cond_destroy(&g.sidechannel_thread_cond);
+    pthread_mutex_destroy(&g.sidechannel_thread_mutex);
+  }
+
+  pthread_cond_destroy(&g.readwrite_lock_cond);
+  pthread_mutex_destroy(&g.readwrite_lock_mutex);
+
+ /*
+  * Signal the read thread to stop...
+  */
+
+  g.read_thread_stop = 1;
+
+ /*
+  * Give the read thread WAIT_EOF_DELAY seconds to complete all the data. If
+  * we are not signaled in that time then force the thread to exit.
+  */
+
+  pthread_mutex_lock(&g.read_thread_mutex);
+
+  if (!g.read_thread_done)
+  {
+    cond_timeout.tv_sec = time(NULL) + WAIT_EOF_DELAY;
+    cond_timeout.tv_nsec = 0;
+
+    if (pthread_cond_timedwait(&g.read_thread_cond, &g.read_thread_mutex,
+                               &cond_timeout) != 0)
+    {
+     /*
+      * Force the read thread to exit...
+      */
+
+      g.wait_eof = 0;
+      pthread_kill(read_thread_id, SIGTERM);
+    }
+  }
+  pthread_mutex_unlock(&g.read_thread_mutex);
+
+  pthread_join(read_thread_id, NULL);  /* wait for the read thread to return */
+
+  pthread_cond_destroy(&g.read_thread_cond);
+  pthread_mutex_destroy(&g.read_thread_mutex);
+
  /*
   * Close the connection and input file and general clean up...
   */
@@ -942,7 +1055,12 @@ sidechannel_thread(void *reference)
          break;
     }
   }
-  while (1);
+  while (!g.sidechannel_thread_stop);
+
+  pthread_mutex_lock(&g.sidechannel_thread_mutex);
+  g.sidechannel_thread_done = 1;
+  pthread_cond_signal(&g.sidechannel_thread_cond);
+  pthread_mutex_unlock(&g.sidechannel_thread_mutex);
 
   return NULL;
 }
@@ -1278,7 +1396,10 @@ static kern_return_t load_classdriver(CFStringRef            driverPath,
   {
     fprintf(stderr, "DEBUG: Unable to load class driver \"%s\": %s\n",
            bundlestr, strerror(errno));
-    return (kr);
+    if (errno == ENOENT)
+      return (load_classdriver(NULL, intf, printerDriver));
+    else
+      return (kr);
   }
   else if (bundleinfo.st_mode & S_IWOTH)
   {
index 297ddba7ffdd640c4b944177b73030ac46ecd7c8..de9ba9799f033c6fc8db835992d1189b95f1dc4f 100644 (file)
@@ -1,32 +1,32 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 lpc.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lpc.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-lpc.o: ../cups/array.h ../cups/string-private.h ../config.h
+lpc.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lpc.o: ../cups/language.h ../cups/string-private.h ../config.h
 lpc.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 lpc.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 lpc.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
 lpc.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 lpc.o: ../cups/thread-private.h
 lpq.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lpq.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-lpq.o: ../cups/array.h ../cups/string-private.h ../config.h
+lpq.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lpq.o: ../cups/language.h ../cups/string-private.h ../config.h
 lpq.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 lpq.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 lpq.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
 lpq.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 lpq.o: ../cups/thread-private.h
 lpr.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lpr.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-lpr.o: ../cups/array.h ../cups/string-private.h ../config.h
+lpr.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lpr.o: ../cups/language.h ../cups/string-private.h ../config.h
 lpr.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 lpr.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 lpr.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
 lpr.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 lpr.o: ../cups/thread-private.h
 lprm.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lprm.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-lprm.o: ../cups/array.h ../cups/string-private.h ../config.h
+lprm.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lprm.o: ../cups/language.h ../cups/string-private.h ../config.h
 lprm.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 lprm.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 lprm.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
index c8a4e51ba531954eed944079d1dc4c59ca617c03..9a5f11d5763244f8b604f09c6d7e057566686d4f 100644 (file)
@@ -2,74 +2,74 @@
 
 help-index.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
 help-index.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-help-index.o: ../cups/language.h ../cups/array.h ../cups/array.h help-index.h
+help-index.o: ../cups/array.h ../cups/language.h ../cups/array.h help-index.h
 help-index.o: ../cups/debug-private.h ../cups/language-private.h
 help-index.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 help-index.o: ../cups/dir.h
 html.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-html.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-html.o: ../cups/array.h ../cups/array.h help-index.h ../cups/debug-private.h
-html.o: ../cups/language-private.h ../cups/transcode.h
-html.o: ../cups/string-private.h ../config.h
+html.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+html.o: ../cups/language.h ../cups/array.h help-index.h
+html.o: ../cups/debug-private.h ../cups/language-private.h
+html.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 ipp-var.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-ipp-var.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-ipp-var.o: ../cups/language.h ../cups/array.h ../cups/array.h help-index.h
+ipp-var.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+ipp-var.o: ../cups/language.h ../cups/array.h help-index.h
 ipp-var.o: ../cups/debug-private.h ../cups/language-private.h
 ipp-var.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 search.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-search.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-search.o: ../cups/language.h ../cups/array.h ../cups/array.h help-index.h
+search.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+search.o: ../cups/language.h ../cups/array.h help-index.h
 search.o: ../cups/debug-private.h ../cups/language-private.h
 search.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 template.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-template.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-template.o: ../cups/language.h ../cups/array.h ../cups/array.h help-index.h
+template.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+template.o: ../cups/language.h ../cups/array.h help-index.h
 template.o: ../cups/debug-private.h ../cups/language-private.h
 template.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 var.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-var.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+var.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 var.o: ../cups/array.h help-index.h ../cups/debug-private.h
 var.o: ../cups/language-private.h ../cups/transcode.h
 var.o: ../cups/string-private.h ../config.h ../cups/http.h
 var.o: ../cups/md5-private.h
 admin.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-admin.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-admin.o: ../cups/array.h ../cups/array.h help-index.h ../cups/debug-private.h
-admin.o: ../cups/language-private.h ../cups/transcode.h
-admin.o: ../cups/string-private.h ../config.h ../cups/adminutil.h
-admin.o: ../cups/cups.h ../cups/ppd.h
+admin.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+admin.o: ../cups/language.h ../cups/array.h help-index.h
+admin.o: ../cups/debug-private.h ../cups/language-private.h
+admin.o: ../cups/transcode.h ../cups/string-private.h ../config.h
+admin.o: ../cups/adminutil.h ../cups/cups.h ../cups/ppd.h
 classes.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-classes.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-classes.o: ../cups/language.h ../cups/array.h ../cups/array.h help-index.h
+classes.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+classes.o: ../cups/language.h ../cups/array.h help-index.h
 classes.o: ../cups/debug-private.h ../cups/language-private.h
 classes.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 help.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-help.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-help.o: ../cups/array.h ../cups/array.h help-index.h ../cups/debug-private.h
-help.o: ../cups/language-private.h ../cups/transcode.h
-help.o: ../cups/string-private.h ../config.h
+help.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+help.o: ../cups/language.h ../cups/array.h help-index.h
+help.o: ../cups/debug-private.h ../cups/language-private.h
+help.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 jobs.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-jobs.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-jobs.o: ../cups/array.h ../cups/array.h help-index.h ../cups/debug-private.h
-jobs.o: ../cups/language-private.h ../cups/transcode.h
-jobs.o: ../cups/string-private.h ../config.h
+jobs.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+jobs.o: ../cups/language.h ../cups/array.h help-index.h
+jobs.o: ../cups/debug-private.h ../cups/language-private.h
+jobs.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 makedocset.o: cgi.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-makedocset.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+makedocset.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 makedocset.o: ../cups/array.h help-index.h
 printers.o: cgi-private.h cgi.h ../cups/cups.h ../cups/file.h
-printers.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-printers.o: ../cups/language.h ../cups/array.h ../cups/array.h help-index.h
+printers.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+printers.o: ../cups/language.h ../cups/array.h help-index.h
 printers.o: ../cups/debug-private.h ../cups/language-private.h
 printers.o: ../cups/transcode.h ../cups/string-private.h ../config.h
 testcgi.o: cgi.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-testcgi.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+testcgi.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 testcgi.o: ../cups/array.h help-index.h
 testhi.o: cgi.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-testhi.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+testhi.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 testhi.o: ../cups/array.h help-index.h
 testtemplate.o: cgi.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-testtemplate.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-testtemplate.o: ../cups/array.h ../cups/array.h help-index.h
+testtemplate.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+testtemplate.o: ../cups/language.h ../cups/array.h help-index.h
 websearch.o: cgi.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-websearch.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+websearch.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 websearch.o: ../cups/array.h help-index.h
index 5a46565a6d31e7022d97d5f8490b6f5000208d9c..effc8396de8f25f64265ca603edf0ed20b7487b4 100644 (file)
@@ -142,6 +142,13 @@ AC_CHECK_HEADER(iconv.h,
                SAVELIBS="$SAVELIBS $LIBS")
        LIBS="$SAVELIBS")
 
+dnl Checks for statfs and its many headers...
+AC_CHECK_HEADER(sys/mount.h,AC_DEFINE(HAVE_SYS_MOUNT_H))
+AC_CHECK_HEADER(sys/statfs.h,AC_DEFINE(HAVE_SYS_STATFS_H))
+AC_CHECK_HEADER(sys/statvfs.h,AC_DEFINE(HAVE_SYS_STATVFS_H))
+AC_CHECK_HEADER(sys/vfs.h,AC_DEFINE(HAVE_SYS_VFS_H))
+AC_CHECK_FUNCS(statfs statvfs)
+
 dnl Checks for string functions.
 AC_CHECK_FUNCS(strdup strcasecmp strncasecmp strlcat strlcpy)
 if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then
index c8ed664571255deae298b9936c4841ab9ae16d69..eaaf4b918754c0dbc7a0fdc7006eb5b926d44c80 100644 (file)
@@ -38,6 +38,8 @@ if test x$enable_ssl != xno; then
                AC_DEFINE(HAVE_CDSASSL)
 
                dnl Check for the various security headers...
+               AC_CHECK_HEADER(Security/SecCertificate.h,
+                   AC_DEFINE(HAVE_SECCERTIFICATE_H))
                AC_CHECK_HEADER(Security/SecItemPriv.h,
                    AC_DEFINE(HAVE_SECITEMPRIV_H))
                AC_CHECK_HEADER(Security/SecPolicy.h,
@@ -60,12 +62,14 @@ if test x$enable_ssl != xno; then
 
                dnl Check for SecPolicyCreateSSL...
                AC_MSG_CHECKING(for SecPolicyCreateSSL)
-               if test $uversion -ge 100; then
+               if test $uversion -ge 110; then
                    AC_DEFINE(HAVE_SECPOLICYCREATESSL)
                    AC_MSG_RESULT(yes)
                else
                    AC_MSG_RESULT(no)
                fi])
+
+               AC_DEFINE(HAVE_CSSMERRORSTRING)
        fi
     fi
 
index 089a0ec14195d5dc5d9c58c1c28947372501a488..fef74a92e8b8a090c2b64591b96e51c7b8220391 100644 (file)
  */
 
 #undef HAVE_AUTHORIZATION_H
+#undef HAVE_SECCERTIFICATE_H
 #undef HAVE_SECITEMPRIV_H
 #undef HAVE_SECPOLICY_H
 #undef HAVE_SECPOLICYPRIV_H
 
 #undef HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY
 
+/*
+ * Do we have the SecPolicyCreateSSL function?
+ */
+
+#undef HAVE_SECPOLICYCREATESSL
+
 
 /*
  * Do we have the SecPolicyCreateSSL function?
 #undef HAVE_SECPOLICYCREATESSL
 
 
+/*
+ * Do we have the cssmErrorString function?
+ */
+
+#undef HAVE_CSSMERRORSTRING
+
+
 /*
  * Do we have the SLP library?
  */
 #undef HAVE_ICONV_H
 
 
+/*
+ * Do we have statfs or statvfs and one of the corresponding headers?
+ */
+
+#undef HAVE_STATFS
+#undef HAVE_STATVFS
+#undef HAVE_SYS_MOUNT_H
+#undef HAVE_SYS_STATFS_H
+#undef HAVE_SYS_STATVFS_H
+#undef HAVE_SYS_VFS_H
+
+
 #endif /* !_CUPS_CONFIG_H_ */
 
 /*
index 822b97627a2a369b63558bfa086d7f94d1ef14ad..4eb80b6c5e065ba63ed941c8dedc86bdf11baed0 100644 (file)
 # DO NOT DELETE
 
 adminutil.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-adminutil.o: language.h array.h string-private.h ../config.h debug-private.h
+adminutil.o: array.h language.h string-private.h ../config.h debug-private.h
 adminutil.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 adminutil.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 adminutil.o: language-private.h ../cups/transcode.h thread-private.h
 adminutil.o: adminutil.h
 array.o: string-private.h ../config.h debug-private.h array.h versioning.h
 attr.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-attr.o: language.h array.h string-private.h ../config.h debug-private.h
+attr.o: array.h language.h string-private.h ../config.h debug-private.h
 attr.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 attr.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 attr.o: language-private.h ../cups/transcode.h thread-private.h
 auth.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-auth.o: language.h array.h string-private.h ../config.h debug-private.h
+auth.o: array.h language.h string-private.h ../config.h debug-private.h
 auth.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 auth.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 auth.o: language-private.h ../cups/transcode.h thread-private.h
 backchannel.o: cups.h
 backend.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-backend.o: language.h array.h string-private.h ../config.h debug-private.h
+backend.o: array.h language.h string-private.h ../config.h debug-private.h
 backend.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 backend.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 backend.o: language-private.h ../cups/transcode.h thread-private.h backend.h
 conflicts.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-conflicts.o: language.h array.h string-private.h ../config.h debug-private.h
+conflicts.o: array.h language.h string-private.h ../config.h debug-private.h
 conflicts.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 conflicts.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 conflicts.o: language-private.h ../cups/transcode.h thread-private.h
 custom.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-custom.o: language.h array.h string-private.h ../config.h debug-private.h
+custom.o: array.h language.h string-private.h ../config.h debug-private.h
 custom.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 custom.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 custom.o: language-private.h ../cups/transcode.h thread-private.h
 debug.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-debug.o: language.h array.h string-private.h ../config.h debug-private.h
+debug.o: array.h language.h string-private.h ../config.h debug-private.h
 debug.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 debug.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 debug.o: language-private.h ../cups/transcode.h thread-private.h
 dest.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-dest.o: language.h array.h string-private.h ../config.h debug-private.h
+dest.o: array.h language.h string-private.h ../config.h debug-private.h
 dest.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 dest.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 dest.o: language-private.h ../cups/transcode.h thread-private.h
 dir.o: string-private.h ../config.h debug-private.h dir.h versioning.h
 emit.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-emit.o: language.h array.h string-private.h ../config.h debug-private.h
+emit.o: array.h language.h string-private.h ../config.h debug-private.h
 emit.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 emit.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 emit.o: language-private.h ../cups/transcode.h thread-private.h
 encode.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-encode.o: language.h array.h string-private.h ../config.h debug-private.h
+encode.o: array.h language.h string-private.h ../config.h debug-private.h
 encode.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 encode.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 encode.o: language-private.h ../cups/transcode.h thread-private.h
 file.o: file-private.h cups-private.h ../cups/cups.h file.h versioning.h
-file.o: ipp.h http.h language.h array.h string-private.h ../config.h
+file.o: ipp.h http.h array.h language.h string-private.h ../config.h
 file.o: debug-private.h ppd-private.h ../cups/ppd.h cups.h pwg-private.h
 file.o: http-private.h ../cups/http.h md5-private.h ipp-private.h
 file.o: ../cups/ipp.h language-private.h ../cups/transcode.h thread-private.h
 getdevices.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-getdevices.o: language.h array.h string-private.h ../config.h debug-private.h
+getdevices.o: array.h language.h string-private.h ../config.h debug-private.h
 getdevices.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 getdevices.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 getdevices.o: language-private.h ../cups/transcode.h thread-private.h
 getifaddrs.o: http-private.h ../config.h ../cups/http.h md5-private.h
 getifaddrs.o: ipp-private.h ../cups/ipp.h
 getputfile.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-getputfile.o: language.h array.h string-private.h ../config.h debug-private.h
+getputfile.o: array.h language.h string-private.h ../config.h debug-private.h
 getputfile.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 getputfile.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 getputfile.o: language-private.h ../cups/transcode.h thread-private.h
 globals.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-globals.o: language.h array.h string-private.h ../config.h debug-private.h
+globals.o: array.h language.h string-private.h ../config.h debug-private.h
 globals.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 globals.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 globals.o: language-private.h ../cups/transcode.h thread-private.h
 http.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-http.o: language.h array.h string-private.h ../config.h debug-private.h
+http.o: array.h language.h string-private.h ../config.h debug-private.h
 http.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 http.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 http.o: language-private.h ../cups/transcode.h thread-private.h
 http-addr.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-http-addr.o: language.h array.h string-private.h ../config.h debug-private.h
+http-addr.o: array.h language.h string-private.h ../config.h debug-private.h
 http-addr.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 http-addr.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 http-addr.o: language-private.h ../cups/transcode.h thread-private.h
 http-addrlist.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h
-http-addrlist.o: http.h language.h array.h string-private.h ../config.h
+http-addrlist.o: http.h array.h language.h string-private.h ../config.h
 http-addrlist.o: debug-private.h ppd-private.h ../cups/ppd.h cups.h
 http-addrlist.o: pwg-private.h http-private.h ../cups/http.h md5-private.h
 http-addrlist.o: ipp-private.h ../cups/ipp.h language-private.h
 http-addrlist.o: ../cups/transcode.h thread-private.h
 http-support.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h
-http-support.o: http.h language.h array.h string-private.h ../config.h
+http-support.o: http.h array.h language.h string-private.h ../config.h
 http-support.o: debug-private.h ppd-private.h ../cups/ppd.h cups.h
 http-support.o: pwg-private.h http-private.h ../cups/http.h md5-private.h
 http-support.o: ipp-private.h ../cups/ipp.h language-private.h
 http-support.o: ../cups/transcode.h thread-private.h
-ipp.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ipp.o: language.h array.h string-private.h ../config.h debug-private.h
-ipp.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
-ipp.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
-ipp.o: language-private.h ../cups/transcode.h thread-private.h
+ipp.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h array.h
+ipp.o: language.h string-private.h ../config.h debug-private.h ppd-private.h
+ipp.o: ../cups/ppd.h cups.h pwg-private.h http-private.h ../cups/http.h
+ipp.o: md5-private.h ipp-private.h ../cups/ipp.h language-private.h
+ipp.o: ../cups/transcode.h thread-private.h
 ipp-support.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ipp-support.o: language.h array.h string-private.h ../config.h
+ipp-support.o: array.h language.h string-private.h ../config.h
 ipp-support.o: debug-private.h ppd-private.h ../cups/ppd.h cups.h
 ipp-support.o: pwg-private.h http-private.h ../cups/http.h md5-private.h
 ipp-support.o: ipp-private.h ../cups/ipp.h language-private.h
 ipp-support.o: ../cups/transcode.h thread-private.h
 langprintf.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-langprintf.o: language.h array.h string-private.h ../config.h debug-private.h
+langprintf.o: array.h language.h string-private.h ../config.h debug-private.h
 langprintf.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 langprintf.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 langprintf.o: language-private.h ../cups/transcode.h thread-private.h
 language.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-language.o: language.h array.h string-private.h ../config.h debug-private.h
+language.o: array.h language.h string-private.h ../config.h debug-private.h
 language.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 language.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 language.o: language-private.h ../cups/transcode.h thread-private.h
 localize.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-localize.o: language.h array.h string-private.h ../config.h debug-private.h
+localize.o: array.h language.h string-private.h ../config.h debug-private.h
 localize.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 localize.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 localize.o: language-private.h ../cups/transcode.h thread-private.h
 mark.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-mark.o: language.h array.h string-private.h ../config.h debug-private.h
+mark.o: array.h language.h string-private.h ../config.h debug-private.h
 mark.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 mark.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 mark.o: language-private.h ../cups/transcode.h thread-private.h
@@ -133,42 +133,46 @@ md5.o: md5-private.h string-private.h ../config.h
 md5passwd.o: http-private.h ../config.h ../cups/http.h md5-private.h
 md5passwd.o: ipp-private.h ../cups/ipp.h string-private.h
 notify.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-notify.o: language.h array.h string-private.h ../config.h debug-private.h
+notify.o: array.h language.h string-private.h ../config.h debug-private.h
 notify.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 notify.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 notify.o: language-private.h ../cups/transcode.h thread-private.h
-options.o: cups.h string-private.h ../config.h debug-private.h
+options.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+options.o: array.h language.h string-private.h ../config.h debug-private.h
+options.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
+options.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
+options.o: language-private.h ../cups/transcode.h thread-private.h
 page.o: string-private.h ../config.h debug-private.h ppd.h cups.h array.h
 page.o: versioning.h file.h
-ppd.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ppd.o: language.h array.h string-private.h ../config.h debug-private.h
-ppd.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
-ppd.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
-ppd.o: language-private.h ../cups/transcode.h thread-private.h
+ppd.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h array.h
+ppd.o: language.h string-private.h ../config.h debug-private.h ppd-private.h
+ppd.o: ../cups/ppd.h cups.h pwg-private.h http-private.h ../cups/http.h
+ppd.o: md5-private.h ipp-private.h ../cups/ipp.h language-private.h
+ppd.o: ../cups/transcode.h thread-private.h
 pwg-file.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-file.o: language.h array.h string-private.h ../config.h debug-private.h
+pwg-file.o: array.h language.h string-private.h ../config.h debug-private.h
 pwg-file.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-file.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-file.o: language-private.h ../cups/transcode.h thread-private.h
 pwg-media.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-media.o: language.h array.h string-private.h ../config.h debug-private.h
+pwg-media.o: array.h language.h string-private.h ../config.h debug-private.h
 pwg-media.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-media.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-media.o: language-private.h ../cups/transcode.h thread-private.h
 pwg-ppd.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-ppd.o: language.h array.h string-private.h ../config.h debug-private.h
+pwg-ppd.o: array.h language.h string-private.h ../config.h debug-private.h
 pwg-ppd.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-ppd.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-ppd.o: language-private.h ../cups/transcode.h thread-private.h
 request.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-request.o: language.h array.h string-private.h ../config.h debug-private.h
+request.o: array.h language.h string-private.h ../config.h debug-private.h
 request.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 request.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 request.o: language-private.h ../cups/transcode.h thread-private.h
 sidechannel.o: sidechannel.h versioning.h string-private.h ../config.h
 sidechannel.o: debug-private.h
 snmp.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-snmp.o: language.h array.h string-private.h ../config.h debug-private.h
+snmp.o: array.h language.h string-private.h ../config.h debug-private.h
 snmp.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 snmp.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 snmp.o: language-private.h ../cups/transcode.h thread-private.h
@@ -177,27 +181,27 @@ snprintf.o: string-private.h ../config.h
 string.o: string-private.h ../config.h debug-private.h thread-private.h
 string.o: array.h versioning.h
 tempfile.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-tempfile.o: language.h array.h string-private.h ../config.h debug-private.h
+tempfile.o: array.h language.h string-private.h ../config.h debug-private.h
 tempfile.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 tempfile.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 tempfile.o: language-private.h ../cups/transcode.h thread-private.h
 thread.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-thread.o: language.h array.h string-private.h ../config.h debug-private.h
+thread.o: array.h language.h string-private.h ../config.h debug-private.h
 thread.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 thread.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 thread.o: language-private.h ../cups/transcode.h thread-private.h
 transcode.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-transcode.o: language.h array.h string-private.h ../config.h debug-private.h
+transcode.o: array.h language.h string-private.h ../config.h debug-private.h
 transcode.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 transcode.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 transcode.o: language-private.h ../cups/transcode.h thread-private.h
 usersys.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-usersys.o: language.h array.h string-private.h ../config.h debug-private.h
+usersys.o: array.h language.h string-private.h ../config.h debug-private.h
 usersys.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 usersys.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 usersys.o: language-private.h ../cups/transcode.h thread-private.h
 util.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-util.o: language.h array.h string-private.h ../config.h debug-private.h
+util.o: array.h language.h string-private.h ../config.h debug-private.h
 util.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 util.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 util.o: language-private.h ../cups/transcode.h thread-private.h
@@ -216,25 +220,25 @@ testi18n.o: ../cups/transcode.h language.h array.h versioning.h
 testipp.o: file.h versioning.h string-private.h ../config.h ipp-private.h
 testipp.o: ../cups/ipp.h
 testoptions.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testoptions.o: language.h array.h string-private.h ../config.h
+testoptions.o: array.h language.h string-private.h ../config.h
 testoptions.o: debug-private.h ppd-private.h ../cups/ppd.h cups.h
 testoptions.o: pwg-private.h http-private.h ../cups/http.h md5-private.h
 testoptions.o: ipp-private.h ../cups/ipp.h language-private.h
 testoptions.o: ../cups/transcode.h thread-private.h
 testlang.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testlang.o: language.h array.h string-private.h ../config.h debug-private.h
+testlang.o: array.h language.h string-private.h ../config.h debug-private.h
 testlang.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testlang.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testlang.o: language-private.h ../cups/transcode.h thread-private.h
 testppd.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testppd.o: language.h array.h string-private.h ../config.h debug-private.h
+testppd.o: array.h language.h string-private.h ../config.h debug-private.h
 testppd.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testppd.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testppd.o: language-private.h ../cups/transcode.h thread-private.h
-testpwg.o: ppd-private.h ../cups/ppd.h cups.h array.h versioning.h file.h
-testpwg.o: pwg-private.h ../cups/cups.h ipp.h http.h language.h
+testpwg.o: ppd-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+testpwg.o: array.h language.h ../cups/ppd.h cups.h pwg-private.h
 testsnmp.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testsnmp.o: language.h array.h string-private.h ../config.h debug-private.h
+testsnmp.o: array.h language.h string-private.h ../config.h debug-private.h
 testsnmp.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testsnmp.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testsnmp.o: language-private.h ../cups/transcode.h thread-private.h
@@ -242,131 +246,131 @@ testsnmp.o: snmp-private.h
 # DO NOT DELETE
 
 adminutil.32.o: adminutil.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-adminutil.32.o: adminutil.c  language.h array.h string-private.h ../config.h debug-private.h
+adminutil.32.o: adminutil.c  array.h language.h string-private.h ../config.h debug-private.h
 adminutil.32.o: adminutil.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 adminutil.32.o: adminutil.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 adminutil.32.o: adminutil.c  language-private.h ../cups/transcode.h thread-private.h
 adminutil.32.o: adminutil.c  adminutil.h
 array.32.o: array.c  string-private.h ../config.h debug-private.h array.h versioning.h
 attr.32.o: attr.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-attr.32.o: attr.c  language.h array.h string-private.h ../config.h debug-private.h
+attr.32.o: attr.c  array.h language.h string-private.h ../config.h debug-private.h
 attr.32.o: attr.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 attr.32.o: attr.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 attr.32.o: attr.c  language-private.h ../cups/transcode.h thread-private.h
 auth.32.o: auth.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-auth.32.o: auth.c  language.h array.h string-private.h ../config.h debug-private.h
+auth.32.o: auth.c  array.h language.h string-private.h ../config.h debug-private.h
 auth.32.o: auth.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 auth.32.o: auth.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 auth.32.o: auth.c  language-private.h ../cups/transcode.h thread-private.h
 backchannel.32.o: backchannel.c  cups.h
 backend.32.o: backend.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-backend.32.o: backend.c  language.h array.h string-private.h ../config.h debug-private.h
+backend.32.o: backend.c  array.h language.h string-private.h ../config.h debug-private.h
 backend.32.o: backend.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 backend.32.o: backend.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 backend.32.o: backend.c  language-private.h ../cups/transcode.h thread-private.h backend.h
 conflicts.32.o: conflicts.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-conflicts.32.o: conflicts.c  language.h array.h string-private.h ../config.h debug-private.h
+conflicts.32.o: conflicts.c  array.h language.h string-private.h ../config.h debug-private.h
 conflicts.32.o: conflicts.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 conflicts.32.o: conflicts.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 conflicts.32.o: conflicts.c  language-private.h ../cups/transcode.h thread-private.h
 custom.32.o: custom.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-custom.32.o: custom.c  language.h array.h string-private.h ../config.h debug-private.h
+custom.32.o: custom.c  array.h language.h string-private.h ../config.h debug-private.h
 custom.32.o: custom.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 custom.32.o: custom.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 custom.32.o: custom.c  language-private.h ../cups/transcode.h thread-private.h
 debug.32.o: debug.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-debug.32.o: debug.c  language.h array.h string-private.h ../config.h debug-private.h
+debug.32.o: debug.c  array.h language.h string-private.h ../config.h debug-private.h
 debug.32.o: debug.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 debug.32.o: debug.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 debug.32.o: debug.c  language-private.h ../cups/transcode.h thread-private.h
 dest.32.o: dest.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-dest.32.o: dest.c  language.h array.h string-private.h ../config.h debug-private.h
+dest.32.o: dest.c  array.h language.h string-private.h ../config.h debug-private.h
 dest.32.o: dest.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 dest.32.o: dest.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 dest.32.o: dest.c  language-private.h ../cups/transcode.h thread-private.h
 dir.32.o: dir.c  string-private.h ../config.h debug-private.h dir.h versioning.h
 emit.32.o: emit.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-emit.32.o: emit.c  language.h array.h string-private.h ../config.h debug-private.h
+emit.32.o: emit.c  array.h language.h string-private.h ../config.h debug-private.h
 emit.32.o: emit.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 emit.32.o: emit.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 emit.32.o: emit.c  language-private.h ../cups/transcode.h thread-private.h
 encode.32.o: encode.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-encode.32.o: encode.c  language.h array.h string-private.h ../config.h debug-private.h
+encode.32.o: encode.c  array.h language.h string-private.h ../config.h debug-private.h
 encode.32.o: encode.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 encode.32.o: encode.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 encode.32.o: encode.c  language-private.h ../cups/transcode.h thread-private.h
 file.32.o: file.c  file-private.h cups-private.h ../cups/cups.h file.h versioning.h
-file.32.o: file.c  ipp.h http.h language.h array.h string-private.h ../config.h
+file.32.o: file.c  ipp.h http.h array.h language.h string-private.h ../config.h
 file.32.o: file.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h pwg-private.h
 file.32.o: file.c  http-private.h ../cups/http.h md5-private.h ipp-private.h
 file.32.o: file.c  ../cups/ipp.h language-private.h ../cups/transcode.h thread-private.h
 getdevices.32.o: getdevices.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-getdevices.32.o: getdevices.c  language.h array.h string-private.h ../config.h debug-private.h
+getdevices.32.o: getdevices.c  array.h language.h string-private.h ../config.h debug-private.h
 getdevices.32.o: getdevices.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 getdevices.32.o: getdevices.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 getdevices.32.o: getdevices.c  language-private.h ../cups/transcode.h thread-private.h
 getifaddrs.32.o: getifaddrs.c  http-private.h ../config.h ../cups/http.h md5-private.h
 getifaddrs.32.o: getifaddrs.c  ipp-private.h ../cups/ipp.h
 getputfile.32.o: getputfile.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-getputfile.32.o: getputfile.c  language.h array.h string-private.h ../config.h debug-private.h
+getputfile.32.o: getputfile.c  array.h language.h string-private.h ../config.h debug-private.h
 getputfile.32.o: getputfile.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 getputfile.32.o: getputfile.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 getputfile.32.o: getputfile.c  language-private.h ../cups/transcode.h thread-private.h
 globals.32.o: globals.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-globals.32.o: globals.c  language.h array.h string-private.h ../config.h debug-private.h
+globals.32.o: globals.c  array.h language.h string-private.h ../config.h debug-private.h
 globals.32.o: globals.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 globals.32.o: globals.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 globals.32.o: globals.c  language-private.h ../cups/transcode.h thread-private.h
 http.32.o: http.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-http.32.o: http.c  language.h array.h string-private.h ../config.h debug-private.h
+http.32.o: http.c  array.h language.h string-private.h ../config.h debug-private.h
 http.32.o: http.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 http.32.o: http.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 http.32.o: http.c  language-private.h ../cups/transcode.h thread-private.h
 http-addr.32.o: http-addr.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-http-addr.32.o: http-addr.c  language.h array.h string-private.h ../config.h debug-private.h
+http-addr.32.o: http-addr.c  array.h language.h string-private.h ../config.h debug-private.h
 http-addr.32.o: http-addr.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 http-addr.32.o: http-addr.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 http-addr.32.o: http-addr.c  language-private.h ../cups/transcode.h thread-private.h
 http-addrlist.32.o: http-addrlist.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h
-http-addrlist.32.o: http-addrlist.c  http.h language.h array.h string-private.h ../config.h
+http-addrlist.32.o: http-addrlist.c  http.h array.h language.h string-private.h ../config.h
 http-addrlist.32.o: http-addrlist.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h
 http-addrlist.32.o: http-addrlist.c  pwg-private.h http-private.h ../cups/http.h md5-private.h
 http-addrlist.32.o: http-addrlist.c  ipp-private.h ../cups/ipp.h language-private.h
 http-addrlist.32.o: http-addrlist.c  ../cups/transcode.h thread-private.h
 http-support.32.o: http-support.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h
-http-support.32.o: http-support.c  http.h language.h array.h string-private.h ../config.h
+http-support.32.o: http-support.c  http.h array.h language.h string-private.h ../config.h
 http-support.32.o: http-support.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h
 http-support.32.o: http-support.c  pwg-private.h http-private.h ../cups/http.h md5-private.h
 http-support.32.o: http-support.c  ipp-private.h ../cups/ipp.h language-private.h
 http-support.32.o: http-support.c  ../cups/transcode.h thread-private.h
-ipp.32.o: ipp.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ipp.32.o: ipp.c  language.h array.h string-private.h ../config.h debug-private.h
-ipp.32.o: ipp.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
-ipp.32.o: ipp.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
-ipp.32.o: ipp.c  language-private.h ../cups/transcode.h thread-private.h
+ipp.32.o: ipp.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h array.h
+ipp.32.o: ipp.c  language.h string-private.h ../config.h debug-private.h ppd-private.h
+ipp.32.o: ipp.c  ../cups/ppd.h cups.h pwg-private.h http-private.h ../cups/http.h
+ipp.32.o: ipp.c  md5-private.h ipp-private.h ../cups/ipp.h language-private.h
+ipp.32.o: ipp.c  ../cups/transcode.h thread-private.h
 ipp-support.32.o: ipp-support.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ipp-support.32.o: ipp-support.c  language.h array.h string-private.h ../config.h
+ipp-support.32.o: ipp-support.c  array.h language.h string-private.h ../config.h
 ipp-support.32.o: ipp-support.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h
 ipp-support.32.o: ipp-support.c  pwg-private.h http-private.h ../cups/http.h md5-private.h
 ipp-support.32.o: ipp-support.c  ipp-private.h ../cups/ipp.h language-private.h
 ipp-support.32.o: ipp-support.c  ../cups/transcode.h thread-private.h
 langprintf.32.o: langprintf.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-langprintf.32.o: langprintf.c  language.h array.h string-private.h ../config.h debug-private.h
+langprintf.32.o: langprintf.c  array.h language.h string-private.h ../config.h debug-private.h
 langprintf.32.o: langprintf.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 langprintf.32.o: langprintf.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 langprintf.32.o: langprintf.c  language-private.h ../cups/transcode.h thread-private.h
 language.32.o: language.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-language.32.o: language.c  language.h array.h string-private.h ../config.h debug-private.h
+language.32.o: language.c  array.h language.h string-private.h ../config.h debug-private.h
 language.32.o: language.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 language.32.o: language.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 language.32.o: language.c  language-private.h ../cups/transcode.h thread-private.h
 localize.32.o: localize.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-localize.32.o: localize.c  language.h array.h string-private.h ../config.h debug-private.h
+localize.32.o: localize.c  array.h language.h string-private.h ../config.h debug-private.h
 localize.32.o: localize.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 localize.32.o: localize.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 localize.32.o: localize.c  language-private.h ../cups/transcode.h thread-private.h
 mark.32.o: mark.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-mark.32.o: mark.c  language.h array.h string-private.h ../config.h debug-private.h
+mark.32.o: mark.c  array.h language.h string-private.h ../config.h debug-private.h
 mark.32.o: mark.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 mark.32.o: mark.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 mark.32.o: mark.c  language-private.h ../cups/transcode.h thread-private.h
@@ -374,42 +378,46 @@ md5.32.o: md5.c  md5-private.h string-private.h ../config.h
 md5passwd.32.o: md5passwd.c  http-private.h ../config.h ../cups/http.h md5-private.h
 md5passwd.32.o: md5passwd.c  ipp-private.h ../cups/ipp.h string-private.h
 notify.32.o: notify.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-notify.32.o: notify.c  language.h array.h string-private.h ../config.h debug-private.h
+notify.32.o: notify.c  array.h language.h string-private.h ../config.h debug-private.h
 notify.32.o: notify.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 notify.32.o: notify.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 notify.32.o: notify.c  language-private.h ../cups/transcode.h thread-private.h
-options.32.o: options.c  cups.h string-private.h ../config.h debug-private.h
+options.32.o: options.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+options.32.o: options.c  array.h language.h string-private.h ../config.h debug-private.h
+options.32.o: options.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
+options.32.o: options.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
+options.32.o: options.c  language-private.h ../cups/transcode.h thread-private.h
 page.32.o: page.c  string-private.h ../config.h debug-private.h ppd.h cups.h array.h
 page.32.o: page.c  versioning.h file.h
-ppd.32.o: ppd.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ppd.32.o: ppd.c  language.h array.h string-private.h ../config.h debug-private.h
-ppd.32.o: ppd.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
-ppd.32.o: ppd.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
-ppd.32.o: ppd.c  language-private.h ../cups/transcode.h thread-private.h
+ppd.32.o: ppd.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h array.h
+ppd.32.o: ppd.c  language.h string-private.h ../config.h debug-private.h ppd-private.h
+ppd.32.o: ppd.c  ../cups/ppd.h cups.h pwg-private.h http-private.h ../cups/http.h
+ppd.32.o: ppd.c  md5-private.h ipp-private.h ../cups/ipp.h language-private.h
+ppd.32.o: ppd.c  ../cups/transcode.h thread-private.h
 pwg-file.32.o: pwg-file.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-file.32.o: pwg-file.c  language.h array.h string-private.h ../config.h debug-private.h
+pwg-file.32.o: pwg-file.c  array.h language.h string-private.h ../config.h debug-private.h
 pwg-file.32.o: pwg-file.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-file.32.o: pwg-file.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-file.32.o: pwg-file.c  language-private.h ../cups/transcode.h thread-private.h
 pwg-media.32.o: pwg-media.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-media.32.o: pwg-media.c  language.h array.h string-private.h ../config.h debug-private.h
+pwg-media.32.o: pwg-media.c  array.h language.h string-private.h ../config.h debug-private.h
 pwg-media.32.o: pwg-media.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-media.32.o: pwg-media.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-media.32.o: pwg-media.c  language-private.h ../cups/transcode.h thread-private.h
 pwg-ppd.32.o: pwg-ppd.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-ppd.32.o: pwg-ppd.c  language.h array.h string-private.h ../config.h debug-private.h
+pwg-ppd.32.o: pwg-ppd.c  array.h language.h string-private.h ../config.h debug-private.h
 pwg-ppd.32.o: pwg-ppd.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-ppd.32.o: pwg-ppd.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-ppd.32.o: pwg-ppd.c  language-private.h ../cups/transcode.h thread-private.h
 request.32.o: request.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-request.32.o: request.c  language.h array.h string-private.h ../config.h debug-private.h
+request.32.o: request.c  array.h language.h string-private.h ../config.h debug-private.h
 request.32.o: request.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 request.32.o: request.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 request.32.o: request.c  language-private.h ../cups/transcode.h thread-private.h
 sidechannel.32.o: sidechannel.c  sidechannel.h versioning.h string-private.h ../config.h
 sidechannel.32.o: sidechannel.c  debug-private.h
 snmp.32.o: snmp.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-snmp.32.o: snmp.c  language.h array.h string-private.h ../config.h debug-private.h
+snmp.32.o: snmp.c  array.h language.h string-private.h ../config.h debug-private.h
 snmp.32.o: snmp.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 snmp.32.o: snmp.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 snmp.32.o: snmp.c  language-private.h ../cups/transcode.h thread-private.h
@@ -418,27 +426,27 @@ snprintf.32.o: snprintf.c  string-private.h ../config.h
 string.32.o: string.c  string-private.h ../config.h debug-private.h thread-private.h
 string.32.o: string.c  array.h versioning.h
 tempfile.32.o: tempfile.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-tempfile.32.o: tempfile.c  language.h array.h string-private.h ../config.h debug-private.h
+tempfile.32.o: tempfile.c  array.h language.h string-private.h ../config.h debug-private.h
 tempfile.32.o: tempfile.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 tempfile.32.o: tempfile.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 tempfile.32.o: tempfile.c  language-private.h ../cups/transcode.h thread-private.h
 thread.32.o: thread.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-thread.32.o: thread.c  language.h array.h string-private.h ../config.h debug-private.h
+thread.32.o: thread.c  array.h language.h string-private.h ../config.h debug-private.h
 thread.32.o: thread.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 thread.32.o: thread.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 thread.32.o: thread.c  language-private.h ../cups/transcode.h thread-private.h
 transcode.32.o: transcode.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-transcode.32.o: transcode.c  language.h array.h string-private.h ../config.h debug-private.h
+transcode.32.o: transcode.c  array.h language.h string-private.h ../config.h debug-private.h
 transcode.32.o: transcode.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 transcode.32.o: transcode.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 transcode.32.o: transcode.c  language-private.h ../cups/transcode.h thread-private.h
 usersys.32.o: usersys.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-usersys.32.o: usersys.c  language.h array.h string-private.h ../config.h debug-private.h
+usersys.32.o: usersys.c  array.h language.h string-private.h ../config.h debug-private.h
 usersys.32.o: usersys.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 usersys.32.o: usersys.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 usersys.32.o: usersys.c  language-private.h ../cups/transcode.h thread-private.h
 util.32.o: util.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-util.32.o: util.c  language.h array.h string-private.h ../config.h debug-private.h
+util.32.o: util.c  array.h language.h string-private.h ../config.h debug-private.h
 util.32.o: util.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 util.32.o: util.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 util.32.o: util.c  language-private.h ../cups/transcode.h thread-private.h
@@ -457,25 +465,25 @@ testi18n.32.o: testi18n.c  ../cups/transcode.h language.h array.h versioning.h
 testipp.32.o: testipp.c  file.h versioning.h string-private.h ../config.h ipp-private.h
 testipp.32.o: testipp.c  ../cups/ipp.h
 testoptions.32.o: testoptions.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testoptions.32.o: testoptions.c  language.h array.h string-private.h ../config.h
+testoptions.32.o: testoptions.c  array.h language.h string-private.h ../config.h
 testoptions.32.o: testoptions.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h
 testoptions.32.o: testoptions.c  pwg-private.h http-private.h ../cups/http.h md5-private.h
 testoptions.32.o: testoptions.c  ipp-private.h ../cups/ipp.h language-private.h
 testoptions.32.o: testoptions.c  ../cups/transcode.h thread-private.h
 testlang.32.o: testlang.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testlang.32.o: testlang.c  language.h array.h string-private.h ../config.h debug-private.h
+testlang.32.o: testlang.c  array.h language.h string-private.h ../config.h debug-private.h
 testlang.32.o: testlang.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testlang.32.o: testlang.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testlang.32.o: testlang.c  language-private.h ../cups/transcode.h thread-private.h
 testppd.32.o: testppd.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testppd.32.o: testppd.c  language.h array.h string-private.h ../config.h debug-private.h
+testppd.32.o: testppd.c  array.h language.h string-private.h ../config.h debug-private.h
 testppd.32.o: testppd.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testppd.32.o: testppd.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testppd.32.o: testppd.c  language-private.h ../cups/transcode.h thread-private.h
-testpwg.32.o: testpwg.c  ppd-private.h ../cups/ppd.h cups.h array.h versioning.h file.h
-testpwg.32.o: testpwg.c  pwg-private.h ../cups/cups.h ipp.h http.h language.h
+testpwg.32.o: testpwg.c  ppd-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+testpwg.32.o: testpwg.c  array.h language.h ../cups/ppd.h cups.h pwg-private.h
 testsnmp.32.o: testsnmp.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testsnmp.32.o: testsnmp.c  language.h array.h string-private.h ../config.h debug-private.h
+testsnmp.32.o: testsnmp.c  array.h language.h string-private.h ../config.h debug-private.h
 testsnmp.32.o: testsnmp.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testsnmp.32.o: testsnmp.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testsnmp.32.o: testsnmp.c  language-private.h ../cups/transcode.h thread-private.h
@@ -483,131 +491,131 @@ testsnmp.32.o: testsnmp.c  snmp-private.h
 # DO NOT DELETE
 
 adminutil.64.o: adminutil.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-adminutil.64.o: adminutil.c  language.h array.h string-private.h ../config.h debug-private.h
+adminutil.64.o: adminutil.c  array.h language.h string-private.h ../config.h debug-private.h
 adminutil.64.o: adminutil.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 adminutil.64.o: adminutil.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 adminutil.64.o: adminutil.c  language-private.h ../cups/transcode.h thread-private.h
 adminutil.64.o: adminutil.c  adminutil.h
 array.64.o: array.c  string-private.h ../config.h debug-private.h array.h versioning.h
 attr.64.o: attr.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-attr.64.o: attr.c  language.h array.h string-private.h ../config.h debug-private.h
+attr.64.o: attr.c  array.h language.h string-private.h ../config.h debug-private.h
 attr.64.o: attr.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 attr.64.o: attr.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 attr.64.o: attr.c  language-private.h ../cups/transcode.h thread-private.h
 auth.64.o: auth.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-auth.64.o: auth.c  language.h array.h string-private.h ../config.h debug-private.h
+auth.64.o: auth.c  array.h language.h string-private.h ../config.h debug-private.h
 auth.64.o: auth.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 auth.64.o: auth.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 auth.64.o: auth.c  language-private.h ../cups/transcode.h thread-private.h
 backchannel.64.o: backchannel.c  cups.h
 backend.64.o: backend.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-backend.64.o: backend.c  language.h array.h string-private.h ../config.h debug-private.h
+backend.64.o: backend.c  array.h language.h string-private.h ../config.h debug-private.h
 backend.64.o: backend.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 backend.64.o: backend.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 backend.64.o: backend.c  language-private.h ../cups/transcode.h thread-private.h backend.h
 conflicts.64.o: conflicts.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-conflicts.64.o: conflicts.c  language.h array.h string-private.h ../config.h debug-private.h
+conflicts.64.o: conflicts.c  array.h language.h string-private.h ../config.h debug-private.h
 conflicts.64.o: conflicts.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 conflicts.64.o: conflicts.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 conflicts.64.o: conflicts.c  language-private.h ../cups/transcode.h thread-private.h
 custom.64.o: custom.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-custom.64.o: custom.c  language.h array.h string-private.h ../config.h debug-private.h
+custom.64.o: custom.c  array.h language.h string-private.h ../config.h debug-private.h
 custom.64.o: custom.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 custom.64.o: custom.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 custom.64.o: custom.c  language-private.h ../cups/transcode.h thread-private.h
 debug.64.o: debug.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-debug.64.o: debug.c  language.h array.h string-private.h ../config.h debug-private.h
+debug.64.o: debug.c  array.h language.h string-private.h ../config.h debug-private.h
 debug.64.o: debug.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 debug.64.o: debug.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 debug.64.o: debug.c  language-private.h ../cups/transcode.h thread-private.h
 dest.64.o: dest.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-dest.64.o: dest.c  language.h array.h string-private.h ../config.h debug-private.h
+dest.64.o: dest.c  array.h language.h string-private.h ../config.h debug-private.h
 dest.64.o: dest.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 dest.64.o: dest.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 dest.64.o: dest.c  language-private.h ../cups/transcode.h thread-private.h
 dir.64.o: dir.c  string-private.h ../config.h debug-private.h dir.h versioning.h
 emit.64.o: emit.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-emit.64.o: emit.c  language.h array.h string-private.h ../config.h debug-private.h
+emit.64.o: emit.c  array.h language.h string-private.h ../config.h debug-private.h
 emit.64.o: emit.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 emit.64.o: emit.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 emit.64.o: emit.c  language-private.h ../cups/transcode.h thread-private.h
 encode.64.o: encode.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-encode.64.o: encode.c  language.h array.h string-private.h ../config.h debug-private.h
+encode.64.o: encode.c  array.h language.h string-private.h ../config.h debug-private.h
 encode.64.o: encode.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 encode.64.o: encode.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 encode.64.o: encode.c  language-private.h ../cups/transcode.h thread-private.h
 file.64.o: file.c  file-private.h cups-private.h ../cups/cups.h file.h versioning.h
-file.64.o: file.c  ipp.h http.h language.h array.h string-private.h ../config.h
+file.64.o: file.c  ipp.h http.h array.h language.h string-private.h ../config.h
 file.64.o: file.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h pwg-private.h
 file.64.o: file.c  http-private.h ../cups/http.h md5-private.h ipp-private.h
 file.64.o: file.c  ../cups/ipp.h language-private.h ../cups/transcode.h thread-private.h
 getdevices.64.o: getdevices.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-getdevices.64.o: getdevices.c  language.h array.h string-private.h ../config.h debug-private.h
+getdevices.64.o: getdevices.c  array.h language.h string-private.h ../config.h debug-private.h
 getdevices.64.o: getdevices.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 getdevices.64.o: getdevices.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 getdevices.64.o: getdevices.c  language-private.h ../cups/transcode.h thread-private.h
 getifaddrs.64.o: getifaddrs.c  http-private.h ../config.h ../cups/http.h md5-private.h
 getifaddrs.64.o: getifaddrs.c  ipp-private.h ../cups/ipp.h
 getputfile.64.o: getputfile.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-getputfile.64.o: getputfile.c  language.h array.h string-private.h ../config.h debug-private.h
+getputfile.64.o: getputfile.c  array.h language.h string-private.h ../config.h debug-private.h
 getputfile.64.o: getputfile.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 getputfile.64.o: getputfile.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 getputfile.64.o: getputfile.c  language-private.h ../cups/transcode.h thread-private.h
 globals.64.o: globals.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-globals.64.o: globals.c  language.h array.h string-private.h ../config.h debug-private.h
+globals.64.o: globals.c  array.h language.h string-private.h ../config.h debug-private.h
 globals.64.o: globals.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 globals.64.o: globals.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 globals.64.o: globals.c  language-private.h ../cups/transcode.h thread-private.h
 http.64.o: http.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-http.64.o: http.c  language.h array.h string-private.h ../config.h debug-private.h
+http.64.o: http.c  array.h language.h string-private.h ../config.h debug-private.h
 http.64.o: http.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 http.64.o: http.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 http.64.o: http.c  language-private.h ../cups/transcode.h thread-private.h
 http-addr.64.o: http-addr.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-http-addr.64.o: http-addr.c  language.h array.h string-private.h ../config.h debug-private.h
+http-addr.64.o: http-addr.c  array.h language.h string-private.h ../config.h debug-private.h
 http-addr.64.o: http-addr.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 http-addr.64.o: http-addr.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 http-addr.64.o: http-addr.c  language-private.h ../cups/transcode.h thread-private.h
 http-addrlist.64.o: http-addrlist.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h
-http-addrlist.64.o: http-addrlist.c  http.h language.h array.h string-private.h ../config.h
+http-addrlist.64.o: http-addrlist.c  http.h array.h language.h string-private.h ../config.h
 http-addrlist.64.o: http-addrlist.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h
 http-addrlist.64.o: http-addrlist.c  pwg-private.h http-private.h ../cups/http.h md5-private.h
 http-addrlist.64.o: http-addrlist.c  ipp-private.h ../cups/ipp.h language-private.h
 http-addrlist.64.o: http-addrlist.c  ../cups/transcode.h thread-private.h
 http-support.64.o: http-support.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h
-http-support.64.o: http-support.c  http.h language.h array.h string-private.h ../config.h
+http-support.64.o: http-support.c  http.h array.h language.h string-private.h ../config.h
 http-support.64.o: http-support.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h
 http-support.64.o: http-support.c  pwg-private.h http-private.h ../cups/http.h md5-private.h
 http-support.64.o: http-support.c  ipp-private.h ../cups/ipp.h language-private.h
 http-support.64.o: http-support.c  ../cups/transcode.h thread-private.h
-ipp.64.o: ipp.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ipp.64.o: ipp.c  language.h array.h string-private.h ../config.h debug-private.h
-ipp.64.o: ipp.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
-ipp.64.o: ipp.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
-ipp.64.o: ipp.c  language-private.h ../cups/transcode.h thread-private.h
+ipp.64.o: ipp.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h array.h
+ipp.64.o: ipp.c  language.h string-private.h ../config.h debug-private.h ppd-private.h
+ipp.64.o: ipp.c  ../cups/ppd.h cups.h pwg-private.h http-private.h ../cups/http.h
+ipp.64.o: ipp.c  md5-private.h ipp-private.h ../cups/ipp.h language-private.h
+ipp.64.o: ipp.c  ../cups/transcode.h thread-private.h
 ipp-support.64.o: ipp-support.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ipp-support.64.o: ipp-support.c  language.h array.h string-private.h ../config.h
+ipp-support.64.o: ipp-support.c  array.h language.h string-private.h ../config.h
 ipp-support.64.o: ipp-support.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h
 ipp-support.64.o: ipp-support.c  pwg-private.h http-private.h ../cups/http.h md5-private.h
 ipp-support.64.o: ipp-support.c  ipp-private.h ../cups/ipp.h language-private.h
 ipp-support.64.o: ipp-support.c  ../cups/transcode.h thread-private.h
 langprintf.64.o: langprintf.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-langprintf.64.o: langprintf.c  language.h array.h string-private.h ../config.h debug-private.h
+langprintf.64.o: langprintf.c  array.h language.h string-private.h ../config.h debug-private.h
 langprintf.64.o: langprintf.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 langprintf.64.o: langprintf.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 langprintf.64.o: langprintf.c  language-private.h ../cups/transcode.h thread-private.h
 language.64.o: language.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-language.64.o: language.c  language.h array.h string-private.h ../config.h debug-private.h
+language.64.o: language.c  array.h language.h string-private.h ../config.h debug-private.h
 language.64.o: language.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 language.64.o: language.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 language.64.o: language.c  language-private.h ../cups/transcode.h thread-private.h
 localize.64.o: localize.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-localize.64.o: localize.c  language.h array.h string-private.h ../config.h debug-private.h
+localize.64.o: localize.c  array.h language.h string-private.h ../config.h debug-private.h
 localize.64.o: localize.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 localize.64.o: localize.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 localize.64.o: localize.c  language-private.h ../cups/transcode.h thread-private.h
 mark.64.o: mark.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-mark.64.o: mark.c  language.h array.h string-private.h ../config.h debug-private.h
+mark.64.o: mark.c  array.h language.h string-private.h ../config.h debug-private.h
 mark.64.o: mark.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 mark.64.o: mark.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 mark.64.o: mark.c  language-private.h ../cups/transcode.h thread-private.h
@@ -615,42 +623,46 @@ md5.64.o: md5.c  md5-private.h string-private.h ../config.h
 md5passwd.64.o: md5passwd.c  http-private.h ../config.h ../cups/http.h md5-private.h
 md5passwd.64.o: md5passwd.c  ipp-private.h ../cups/ipp.h string-private.h
 notify.64.o: notify.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-notify.64.o: notify.c  language.h array.h string-private.h ../config.h debug-private.h
+notify.64.o: notify.c  array.h language.h string-private.h ../config.h debug-private.h
 notify.64.o: notify.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 notify.64.o: notify.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 notify.64.o: notify.c  language-private.h ../cups/transcode.h thread-private.h
-options.64.o: options.c  cups.h string-private.h ../config.h debug-private.h
+options.64.o: options.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+options.64.o: options.c  array.h language.h string-private.h ../config.h debug-private.h
+options.64.o: options.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
+options.64.o: options.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
+options.64.o: options.c  language-private.h ../cups/transcode.h thread-private.h
 page.64.o: page.c  string-private.h ../config.h debug-private.h ppd.h cups.h array.h
 page.64.o: page.c  versioning.h file.h
-ppd.64.o: ppd.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-ppd.64.o: ppd.c  language.h array.h string-private.h ../config.h debug-private.h
-ppd.64.o: ppd.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
-ppd.64.o: ppd.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
-ppd.64.o: ppd.c  language-private.h ../cups/transcode.h thread-private.h
+ppd.64.o: ppd.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h array.h
+ppd.64.o: ppd.c  language.h string-private.h ../config.h debug-private.h ppd-private.h
+ppd.64.o: ppd.c  ../cups/ppd.h cups.h pwg-private.h http-private.h ../cups/http.h
+ppd.64.o: ppd.c  md5-private.h ipp-private.h ../cups/ipp.h language-private.h
+ppd.64.o: ppd.c  ../cups/transcode.h thread-private.h
 pwg-file.64.o: pwg-file.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-file.64.o: pwg-file.c  language.h array.h string-private.h ../config.h debug-private.h
+pwg-file.64.o: pwg-file.c  array.h language.h string-private.h ../config.h debug-private.h
 pwg-file.64.o: pwg-file.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-file.64.o: pwg-file.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-file.64.o: pwg-file.c  language-private.h ../cups/transcode.h thread-private.h
 pwg-media.64.o: pwg-media.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-media.64.o: pwg-media.c  language.h array.h string-private.h ../config.h debug-private.h
+pwg-media.64.o: pwg-media.c  array.h language.h string-private.h ../config.h debug-private.h
 pwg-media.64.o: pwg-media.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-media.64.o: pwg-media.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-media.64.o: pwg-media.c  language-private.h ../cups/transcode.h thread-private.h
 pwg-ppd.64.o: pwg-ppd.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-pwg-ppd.64.o: pwg-ppd.c  language.h array.h string-private.h ../config.h debug-private.h
+pwg-ppd.64.o: pwg-ppd.c  array.h language.h string-private.h ../config.h debug-private.h
 pwg-ppd.64.o: pwg-ppd.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 pwg-ppd.64.o: pwg-ppd.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 pwg-ppd.64.o: pwg-ppd.c  language-private.h ../cups/transcode.h thread-private.h
 request.64.o: request.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-request.64.o: request.c  language.h array.h string-private.h ../config.h debug-private.h
+request.64.o: request.c  array.h language.h string-private.h ../config.h debug-private.h
 request.64.o: request.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 request.64.o: request.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 request.64.o: request.c  language-private.h ../cups/transcode.h thread-private.h
 sidechannel.64.o: sidechannel.c  sidechannel.h versioning.h string-private.h ../config.h
 sidechannel.64.o: sidechannel.c  debug-private.h
 snmp.64.o: snmp.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-snmp.64.o: snmp.c  language.h array.h string-private.h ../config.h debug-private.h
+snmp.64.o: snmp.c  array.h language.h string-private.h ../config.h debug-private.h
 snmp.64.o: snmp.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 snmp.64.o: snmp.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 snmp.64.o: snmp.c  language-private.h ../cups/transcode.h thread-private.h
@@ -659,27 +671,27 @@ snprintf.64.o: snprintf.c  string-private.h ../config.h
 string.64.o: string.c  string-private.h ../config.h debug-private.h thread-private.h
 string.64.o: string.c  array.h versioning.h
 tempfile.64.o: tempfile.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-tempfile.64.o: tempfile.c  language.h array.h string-private.h ../config.h debug-private.h
+tempfile.64.o: tempfile.c  array.h language.h string-private.h ../config.h debug-private.h
 tempfile.64.o: tempfile.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 tempfile.64.o: tempfile.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 tempfile.64.o: tempfile.c  language-private.h ../cups/transcode.h thread-private.h
 thread.64.o: thread.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-thread.64.o: thread.c  language.h array.h string-private.h ../config.h debug-private.h
+thread.64.o: thread.c  array.h language.h string-private.h ../config.h debug-private.h
 thread.64.o: thread.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 thread.64.o: thread.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 thread.64.o: thread.c  language-private.h ../cups/transcode.h thread-private.h
 transcode.64.o: transcode.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-transcode.64.o: transcode.c  language.h array.h string-private.h ../config.h debug-private.h
+transcode.64.o: transcode.c  array.h language.h string-private.h ../config.h debug-private.h
 transcode.64.o: transcode.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 transcode.64.o: transcode.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 transcode.64.o: transcode.c  language-private.h ../cups/transcode.h thread-private.h
 usersys.64.o: usersys.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-usersys.64.o: usersys.c  language.h array.h string-private.h ../config.h debug-private.h
+usersys.64.o: usersys.c  array.h language.h string-private.h ../config.h debug-private.h
 usersys.64.o: usersys.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 usersys.64.o: usersys.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 usersys.64.o: usersys.c  language-private.h ../cups/transcode.h thread-private.h
 util.64.o: util.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-util.64.o: util.c  language.h array.h string-private.h ../config.h debug-private.h
+util.64.o: util.c  array.h language.h string-private.h ../config.h debug-private.h
 util.64.o: util.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 util.64.o: util.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 util.64.o: util.c  language-private.h ../cups/transcode.h thread-private.h
@@ -698,25 +710,25 @@ testi18n.64.o: testi18n.c  ../cups/transcode.h language.h array.h versioning.h
 testipp.64.o: testipp.c  file.h versioning.h string-private.h ../config.h ipp-private.h
 testipp.64.o: testipp.c  ../cups/ipp.h
 testoptions.64.o: testoptions.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testoptions.64.o: testoptions.c  language.h array.h string-private.h ../config.h
+testoptions.64.o: testoptions.c  array.h language.h string-private.h ../config.h
 testoptions.64.o: testoptions.c  debug-private.h ppd-private.h ../cups/ppd.h cups.h
 testoptions.64.o: testoptions.c  pwg-private.h http-private.h ../cups/http.h md5-private.h
 testoptions.64.o: testoptions.c  ipp-private.h ../cups/ipp.h language-private.h
 testoptions.64.o: testoptions.c  ../cups/transcode.h thread-private.h
 testlang.64.o: testlang.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testlang.64.o: testlang.c  language.h array.h string-private.h ../config.h debug-private.h
+testlang.64.o: testlang.c  array.h language.h string-private.h ../config.h debug-private.h
 testlang.64.o: testlang.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testlang.64.o: testlang.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testlang.64.o: testlang.c  language-private.h ../cups/transcode.h thread-private.h
 testppd.64.o: testppd.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testppd.64.o: testppd.c  language.h array.h string-private.h ../config.h debug-private.h
+testppd.64.o: testppd.c  array.h language.h string-private.h ../config.h debug-private.h
 testppd.64.o: testppd.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testppd.64.o: testppd.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testppd.64.o: testppd.c  language-private.h ../cups/transcode.h thread-private.h
-testpwg.64.o: testpwg.c  ppd-private.h ../cups/ppd.h cups.h array.h versioning.h file.h
-testpwg.64.o: testpwg.c  pwg-private.h ../cups/cups.h ipp.h http.h language.h
+testpwg.64.o: testpwg.c  ppd-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+testpwg.64.o: testpwg.c  array.h language.h ../cups/ppd.h cups.h pwg-private.h
 testsnmp.64.o: testsnmp.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
-testsnmp.64.o: testsnmp.c  language.h array.h string-private.h ../config.h debug-private.h
+testsnmp.64.o: testsnmp.c  array.h language.h string-private.h ../config.h debug-private.h
 testsnmp.64.o: testsnmp.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
 testsnmp.64.o: testsnmp.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
 testsnmp.64.o: testsnmp.c  language-private.h ../cups/transcode.h thread-private.h
index 051d3c4a907f82e9c3d55ea41a98e95c3c52b481..87c396d81891363c8a735d2391bd9976b1bb559f 100644 (file)
@@ -131,6 +131,17 @@ typedef struct _cups_globals_s             /**** CUPS global state data ****/
                        servername[256];/* Server hostname */
   cups_password_cb2_t  password_cb;    /* Password callback */
   void                 *password_data; /* Password user data */
+  http_tls_credentials_t tls_credentials;
+                                       /* Default client credentials */
+  cups_client_cert_cb_t        client_cert_cb; /* Client certificate callback */
+  void                 *client_cert_data;
+                                       /* Client certificate user data */
+  cups_server_cert_cb_t        server_cert_cb; /* Server certificate callback */
+  void                 *server_cert_data;
+                                       /* Server certificate user data */
+  int                  any_root,       /* Allow any root */
+                       expired_certs,  /* Allow expired certs */
+                       expired_root;   /* Allow expired root */
 
   /* util.c */
   char                 def_printer[256];
index 30c35ebcfc8e2b61bf2add2e8340916c1d09ee74..198e04a74a667293b9f91bdf1ee698fccc404fb1 100644 (file)
@@ -169,6 +169,15 @@ typedef struct cups_job_s          /**** Job ****/
   time_t       processing_time;        /* Time the job was processed */
 } cups_job_t;
 
+typedef int (*cups_client_cert_cb_t)(http_t *http, void *tls,
+                                    cups_array_t *distinguished_names, 
+                                    void *user_data);
+                                       /**** Client credentials callback @since CUPS 1.5@ ****/
+
+typedef int (*cups_server_cert_cb_t)(http_t *http, void *tls,
+                                    cups_array_t *certs, void *user_data);
+                                       /**** Server credentials callback @since CUPS 1.5@ ****/
+
 
 /*
  * Functions...
@@ -317,6 +326,14 @@ extern http_status_t       cupsStartDocument(http_t *http, const char *name,
 extern http_status_t   cupsWriteRequestData(http_t *http, const char *buffer,
                                             size_t length) _CUPS_API_1_4;
 
+/**** New in CUPS 1.5 ****/
+extern void            cupsSetClientCertCB(cups_client_cert_cb_t cb,
+                                           void *user_data) _CUPS_API_1_5;
+extern int             cupsSetCredentials(cups_array_t *certs) _CUPS_API_1_5;
+extern void            cupsSetServerCertCB(cups_server_cert_cb_t cb,
+                                           void *user_data) _CUPS_API_1_5;
+
+
 #  ifdef __cplusplus
 }
 #  endif /* __cplusplus */
index 6d56f9b00138156a43217c7c5491d4a3b42d9786..6e171cb78cf7803bfe4e253572965a44520fc294 100644 (file)
@@ -57,9 +57,19 @@ extern "C" {
  */
 
 #  ifdef DEBUG
+#    ifdef WIN32
+#      ifdef LIBCUPS2_EXPORTS
+#        define DLLExport __declspec(dllexport)
+#      else
+#        define DLLExport
+#      endif /* LIBCUPS2_EXPORTS */
+#    else
+#      define DLLExport
+#    endif /* WIN32 */
 #    define DEBUG_puts(x) _cups_debug_puts(x)
 #    define DEBUG_printf(x) _cups_debug_printf x
 #  else
+#    define DLLExport
 #    define DEBUG_puts(x)
 #    define DEBUG_printf(x)
 #  endif /* DEBUG */
@@ -71,12 +81,12 @@ extern "C" {
 
 extern int     _cups_debug_fd;
 extern int     _cups_debug_level;
-extern void    _cups_debug_printf(const char *format, ...)
+extern void    DLLExport _cups_debug_printf(const char *format, ...)
 #ifdef __GNUC__
 __attribute__ ((__format__ (__printf__, 1, 2)))
 #endif /* __GNUC__ */
 ;
-extern void    _cups_debug_puts(const char *s);
+extern void    DLLExport _cups_debug_puts(const char *s);
 
 #  ifdef __cplusplus
 }
index c119c67418e0b752aa445349d4671267e68567f1..8d81316a3bd8c471aa7f98ebc7676d3acdb25c3f 100644 (file)
 #include "cups-private.h"
 #include "thread-private.h"
 #ifdef WIN32
+#  include <sys/timeb.h>
+#  include <time.h>
 #  include <io.h>
+static int                             /* O  - 0 on success, -1 on failure */
+gettimeofday(struct timeval    *tv,    /* I  - Timeval struct */
+             void              *tz)    /* I  - Timezone */
+{   
+  struct _timeb timebuffer;            /* Time buffer struct */
+  _ftime(&timebuffer);
+  tv->tv_sec = timebuffer.time;
+  tv->tv_usec = timebuffer.millitm * 1000;  
+  return 0;
+}
 #else
 #  include <sys/time.h>
 #  include <unistd.h>
 #endif /* WIN32 */
 #include <fcntl.h>
-#ifndef WIN32
-#  include <regex.h>
-#endif /* WIN32 */
+#include <regex.h>
 
 
 /*
@@ -53,10 +63,8 @@ int                  _cups_debug_level = 1;
  * Local globals...
  */
 
-#  ifndef WIN32
 static regex_t         *debug_filter = NULL;
                                        /* Filter expression for messages */
-#  endif /* !WIN32 */
 static int             debug_init = 0; /* Did we initialize debugging? */
 static _cups_mutex_t   debug_mutex = _CUPS_MUTEX_INITIALIZER;
                                        /* Mutex to control initialization */
@@ -396,7 +404,7 @@ debug_vsnprintf(char       *buffer, /* O - Output buffer */
  * '_cups_debug_printf()' - Write a formatted line to the log.
  */
 
-void
+void DLLExport
 _cups_debug_printf(const char *format, /* I - Printf-style format string */
                    ...)                        /* I - Additional arguments as needed */
 {
@@ -525,7 +533,7 @@ _cups_debug_printf(const char *format,      /* I - Printf-style format string */
  * '_cups_debug_puts()' - Write a single line to the log.
  */
 
-void
+void DLLExport
 _cups_debug_puts(const char *s)                /* I - String to output */
 {
   char format[4];                      /* C%s */
index b0e28ed0f593477f803927c583281e246321043f..172a0790596295989079ea1415d49bf31c6164dc 100644 (file)
@@ -202,8 +202,9 @@ cups_globals_alloc(void)
   */
 
   memset(cg, 0, sizeof(_cups_globals_t));
-  cg->encryption  = (http_encryption_t)-1;
-  cg->password_cb = (cups_password_cb2_t)_cupsGetPassword;
+  cg->encryption    = (http_encryption_t)-1;
+  cg->password_cb   = (cups_password_cb2_t)_cupsGetPassword;
+  cg->expired_certs = 1;
 
  /*
   * Then set directories as appropriate...
@@ -316,13 +317,13 @@ cups_globals_free(_cups_globals_t *cg)    /* I - Pointer to global data */
 
   httpClose(cg->http);
 
+  _httpFreeCredentials(cg->tls_credentials);
+
   cupsFileClose(cg->stdio_files[0]);
   cupsFileClose(cg->stdio_files[1]);
   cupsFileClose(cg->stdio_files[2]);
 
-#  ifndef CUPS_LITE
   cupsFreeOptions(cg->cupsd_num_settings, cg->cupsd_settings);
-#  endif /* !CUPS_LITE */
 
   free(cg);
 }
index 4f54cba23333f0ac6f7a5b6c4fffd6ebaefc04c6..52910e8b5b255d44a4520476d8c494f3cc3cbc3c 100644 (file)
@@ -102,6 +102,16 @@ httpAddrConnect(
     setsockopt(*sock, SOL_SOCKET, SO_NOSIGPIPE, &val, sizeof(val));
 #endif /* SO_NOSIGPIPE */
 
+#ifdef __APPLE__
+   /*
+    * Use a 30-second read timeout when connecting to limit the amount of time
+    * we block...
+    */
+
+    val = 30;
+    setsockopt(*sock, SOL_SOCKET, SO_RCVTIMEO, &val, sizeof(val));
+#endif /* __APPLE__ */
+
    /*
     * Using TCP_NODELAY improves responsiveness, especially on systems
     * with a slow loopback interface...
@@ -154,6 +164,9 @@ httpAddrConnect(
     addrlist = addrlist->next;
   }
 
+  if (!addrlist)
+    _cupsSetError(HTTP_SERVICE_UNAVAILABLE, _("Unable to connect to server"), 1);
+
   return (addrlist);
 }
 
index a19b39efcb7f0e3d9276aaf5eb62da2145065bd2..f55e6e152b199ee431ae2442e9409e7a1ac73d25 100644 (file)
@@ -90,7 +90,8 @@ typedef int socklen_t;
 #    include <openssl/rand.h>
 #    include <openssl/ssl.h>
 
-typedef SSL http_tls_t;
+typedef SSL  *http_tls_t;
+typedef void *http_tls_credentials_t;
 
 extern BIO_METHOD *_httpBIOMethods(void);
 
@@ -99,13 +100,11 @@ extern BIO_METHOD *_httpBIOMethods(void);
  * The GNU TLS library is more of a "bare metal" SSL/TLS library...
  */
 #    include <gnutls/gnutls.h>
+#    include <gnutls/x509.h>
 #    include <gcrypt.h>
 
-typedef struct
-{
-  gnutls_session       session;        /* GNU TLS session object */
-  void                 *credentials;   /* GNU TLS credentials object */
-} http_tls_t;
+typedef gnutls_session http_tls_t;
+typedef void *http_tls_credentials_t;
 
 extern ssize_t _httpReadGNUTLS(gnutls_transport_ptr ptr, void *data,
                                size_t length);
@@ -118,13 +117,43 @@ extern ssize_t    _httpWriteGNUTLS(gnutls_transport_ptr ptr, const void *data,
  * for its IO and protocol management...
  */
 
+#    include <CoreFoundation/CoreFoundation.h>
+#    include <Security/Security.h>
 #    include <Security/SecureTransport.h>
-
-typedef struct                         /**** CDSA connection information ****/
-{
-  SSLContextRef                session;        /* CDSA session object */
-  CFArrayRef           certsArray;     /* Certificates array */
-} http_tls_t;
+#    include <Security/SecItem.h>
+#    ifdef HAVE_SECBASEPRIV_H
+#      include <Security/SecBasePriv.h>
+#    elif defined(HAVE_CSSMERRORSTRING) /* Declare prototype for function in that header... */
+extern const char *cssmErrorString(int error);
+#    endif /* HAVE_SECBASEPRIV_H */
+#    ifdef HAVE_SECCERTIFICATE_H
+#      include <Security/SecCertificate.h>
+#      include <Security/SecIdentity.h>
+#    endif /* HAVE_SECCERTIFICATE_H */
+#    ifdef HAVE_SECITEMPRIV_H
+#      include <Security/SecItemPriv.h>
+#    else /* Declare constants from that header... */
+extern const CFTypeRef kSecClassCertificate;
+extern const CFTypeRef kSecClassIdentity;
+#    endif /* HAVE_SECITEMPRIV_H */
+#    ifdef HAVE_SECIDENTITYSEARCHPRIV_H
+#      include <Security/SecIdentitySearchPriv.h>
+#    elif defined(HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY) /* Declare prototype for function in that header... */
+extern OSStatus SecIdentitySearchCreateWithPolicy(SecPolicyRef policy,
+                               CFStringRef idString, CSSM_KEYUSE keyUsage,
+                               CFTypeRef keychainOrArray,
+                               Boolean returnOnlyValidIdentities,
+                               SecIdentitySearchRef* searchRef);
+#    endif /* HAVE_SECIDENTITYSEARCHPRIV_H */
+#    ifdef HAVE_SECPOLICYPRIV_H
+#      include <Security/SecPolicyPriv.h>
+#    elif defined(HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY) /* Declare prototype for function in that header... */
+extern OSStatus SecPolicySetValue(SecPolicyRef policyRef,
+                                  const CSSM_DATA *value);
+#    endif /* HAVE_SECPOLICYPRIV_H */
+
+typedef SSLContextRef  http_tls_t;
+typedef CFArrayRef     http_tls_credentials_t;
 
 extern OSStatus        _httpReadCDSA(SSLConnectionRef connection, void *data,
                              size_t *dataLength);
@@ -133,6 +162,10 @@ extern OSStatus    _httpWriteCDSA(SSLConnectionRef connection, const void *data,
 
 #  elif defined(HAVE_SSPISSL)
 #    include "sspi-private.h"
+typedef _sspi_struct_t * http_tls_t;
+typedef void *http_tls_credentials_t;
+#  else
+typedef void *http_tls_t;
 #  endif /* HAVE_LIBSSL */
 
 
@@ -162,7 +195,7 @@ struct _http_s                              /**** HTTP connection structure. ****/
   char                 nonce[HTTP_MAX_VALUE];
                                        /* Nonce value */
   int                  nonce_count;    /* Nonce count */
-  void                 *tls;           /* TLS state information */
+  http_tls_t           tls;            /* TLS state information */
   http_encryption_t    encryption;     /* Encryption requirements */
   /**** New in CUPS 1.1.19 ****/
   fd_set               *input_set;     /* select() set for httpWait() @deprecated@ */
@@ -193,6 +226,9 @@ struct _http_s                              /**** HTTP connection structure. ****/
 #  ifdef HAVE_AUTHORIZATION_H
   AuthorizationRef     auth_ref;       /* Authorization ref */
 #  endif /* HAVE_AUTHORIZATION_H */
+  /**** New in CUPS 1.5 ****/
+  http_tls_credentials_t tls_credentials;
+                                       /* TLS credentials */
 };
 
 
@@ -267,11 +303,14 @@ extern void       _cups_freeifaddrs(struct ifaddrs *addrs);
  */
 
 extern int             _httpAddrPort(http_addr_t *addr);
+extern http_tls_credentials_t
+                       _httpConvertCredentials(cups_array_t *credentials);
 extern http_t          *_httpCreate(const char *host, int port,
                                     http_encryption_t encryption);
 extern void            _httpDisconnect(http_t *http);
 extern char            *_httpEncodeURI(char *dst, const char *src,
                                        size_t dstsize);
+extern void            _httpFreeCredentials(http_tls_credentials_t credentials);
 extern ssize_t         _httpPeek(http_t *http, char *buffer, size_t length);
 extern const char      *_httpResolveURI(const char *uri, char *resolved_uri,
                                         size_t resolved_size, int log);
index 3f6f04941c59dc8ed83d5e80f4083889bc8652ff..b4a169bc46482dba2ad4c8941ccd5c48611d339f 100644 (file)
@@ -297,7 +297,7 @@ httpAssembleURI(
       * Otherwise, just copy the host string...
       */
 
-      ptr = http_copy_encode(ptr, host, end, ":/?#[]@\\", NULL,
+      ptr = http_copy_encode(ptr, host, end, ":/?#[]@\\\"", NULL,
                              encoding & HTTP_URI_CODING_HOSTNAME);
 
       if (!ptr)
@@ -944,7 +944,7 @@ httpSeparateURI(
     *port = 80;
   else if (!strcmp(scheme, "https"))
     *port = 443;
-  else if (!strcmp(scheme, "ipp"))
+  else if (!strcmp(scheme, "ipp") || !strcmp(scheme, "ipps"))
     *port = 631;
   else if (!strcasecmp(scheme, "lpd"))
     *port = 515;
@@ -1247,6 +1247,9 @@ httpStatus(http_status_t status)  /* I - HTTP status code */
     case HTTP_SERVER_ERROR :
         s = _("Internal Server Error");
        break;
+    case HTTP_PKI_ERROR :
+        s = _("SSL/TLS Negotiation Error");
+       break;
 
     default :
         s = _("Unknown");
index a30c71b0f5ec63a2c18fbdf1c4fd8f874435211a..c97d86f8f4ee0b98c5e72cb0c50383ebd8959c6d 100644 (file)
  *
  * Contents:
  *
- *   _httpBIOMethods()    - Get the OpenSSL BIO methods for HTTP connections.
- *   httpBlocking()       - Set blocking/non-blocking behavior on a connection.
- *   httpCheck()          - Check to see if there is a pending response from the
- *                          server.
- *   httpClearCookie()    - Clear the cookie value(s).
- *   httpClearFields()    - Clear HTTP request fields.
- *   httpClose()          - Close an HTTP connection.
- *   httpConnect()        - Connect to a HTTP server.
- *   httpConnectEncrypt() - Connect to a HTTP server using encryption.
- *   _httpCreate()        - Create an unconnected HTTP connection.
- *   httpDelete()         - Send a DELETE request to the server.
- *   _httpDisconnect()    - Disconnect a HTTP connection.
- *   httpEncryption()     - Set the required encryption on the link.
- *   httpError()          - Get the last error on a connection.
- *   httpFlush()          - Flush data from a HTTP connection.
- *   httpFlushWrite()     - Flush data in write buffer.
- *   httpGet()            - Send a GET request to the server.
- *   httpGetAuthString()  - Get the current authorization string.
- *   httpGetBlocking()    - Get the blocking/non-block state of a connection.
- *   httpGetCookie()      - Get any cookie data from the response.
- *   httpGetFd()          - Get the file descriptor associated with a
- *                          connection.
- *   httpGetField()       - Get a field value from a request/response.
- *   httpGetLength()      - Get the amount of data remaining from the
- *                          content-length or transfer-encoding fields.
- *   httpGetLength2()     - Get the amount of data remaining from the
- *                          content-length or transfer-encoding fields.
- *   httpGetStatus()      - Get the status of the last HTTP request.
- *   httpGetSubField()    - Get a sub-field value.
- *   httpGetSubField2()   - Get a sub-field value.
- *   httpGets()           - Get a line of text from a HTTP connection.
- *   httpHead()           - Send a HEAD request to the server.
- *   httpInitialize()     - Initialize the HTTP interface library and set the
- *                          default HTTP proxy (if any).
- *   httpOptions()        - Send an OPTIONS request to the server.
- *   _httpPeek()          - Peek at data from a HTTP connection.
- *   httpPost()           - Send a POST request to the server.
- *   httpPrintf()         - Print a formatted string to a HTTP connection.
- *   httpPut()            - Send a PUT request to the server.
- *   httpRead()           - Read data from a HTTP connection.
- *   httpRead2()          - Read data from a HTTP connection.
- *   _httpReadCDSA()      - Read function for the CDSA library.
- *   _httpReadGNUTLS()    - Read function for the GNU TLS library.
- *   httpReconnect()      - Reconnect to a HTTP server.
- *   httpSetAuthString()  - Set the current authorization string.
- *   httpSetCookie()      - Set the cookie value(s).
- *   httpSetExpect()      - Set the Expect: header in a request.
- *   httpSetField()       - Set the value of an HTTP header.
- *   httpSetLength()      - Set the content-length and content-encoding.
- *   httpTrace()          - Send an TRACE request to the server.
- *   httpUpdate()         - Update the current HTTP state for incoming data.
- *   _httpWait()          - Wait for data available on a connection (no flush).
- *   httpWait()           - Wait for data available on a connection.
- *   httpWrite()          - Write data to a HTTP connection.
- *   httpWrite2()         - Write data to a HTTP connection.
- *   _httpWriteCDSA()     - Write function for the CDSA library.
- *   _httpWriteGNUTLS()   - Write function for the GNU TLS library.
- *   http_bio_ctrl()      - Control the HTTP connection.
- *   http_bio_free()      - Free OpenSSL data.
- *   http_bio_new()       - Initialize an OpenSSL BIO structure.
- *   http_bio_puts()      - Send a string for OpenSSL.
- *   http_bio_read()      - Read data for OpenSSL.
- *   http_bio_write()     - Write data for OpenSSL.
- *   http_debug_hex()     - Do a hex dump of a buffer.
- *   http_field()         - Return the field index for a field name.
- *   http_read_ssl()      - Read from a SSL/TLS connection.
- *   http_locking_cb()    - Lock/unlock a thread's mutex.
- *   http_send()          - Send a request with all fields and the trailing
- *                          blank line.
- *   http_setup_ssl()     - Set up SSL/TLS support on a connection.
- *   http_shutdown_ssl()  - Shut down SSL/TLS on a connection.
- *   http_threadid_cb()   - Return the current thread ID.
- *   http_upgrade()       - Force upgrade to TLS encryption.
- *   http_write()         - Write a buffer to a HTTP connection.
- *   http_write_chunk()   - Write a chunked buffer.
- *   http_write_ssl()     - Write to a SSL/TLS connection.
+ *   httpAddCredential()       - Allocates and adds a single credential to an
+ *                               array.
+ *   _httpBIOMethods()         - Get the OpenSSL BIO methods for HTTP
+ *                               connections.
+ *   httpBlocking()            - Set blocking/non-blocking behavior on a
+ *                               connection.
+ *   httpCheck()               - Check to see if there is a pending response
+ *                               from the server.
+ *   httpClearCookie()         - Clear the cookie value(s).
+ *   httpClearFields()         - Clear HTTP request fields.
+ *   httpClose()               - Close an HTTP connection.
+ *   httpConnect()             - Connect to a HTTP server.
+ *   httpConnectEncrypt()      - Connect to a HTTP server using encryption.
+ *   httpCopyCredentials()     - Copy the credentials associated with an
+ *                               encrypted connection.
+ *   _httpConvertCredentials() - Convert credentials to the internal format.
+ *   _httpCreate()             - Create an unconnected HTTP connection.
+ *   httpDelete()              - Send a DELETE request to the server.
+ *   _httpDisconnect()         - Disconnect a HTTP connection.
+ *   httpEncryption()          - Set the required encryption on the link.
+ *   httpError()               - Get the last error on a connection.
+ *   httpFlush()               - Flush data from a HTTP connection.
+ *   httpFlushWrite()          - Flush data in write buffer.
+ *   _httpFreeCredentials()    - Free internal credentials.
+ *   httpFreeCredentials()     - Free an array of credentials.
+ *   httpGet()                 - Send a GET request to the server.
+ *   httpGetAuthString()       - Get the current authorization string.
+ *   httpGetBlocking()         - Get the blocking/non-block state of a
+ *                               connection.
+ *   httpGetCookie()           - Get any cookie data from the response.
+ *   httpGetFd()               - Get the file descriptor associated with a
+ *                               connection.
+ *   httpGetField()            - Get a field value from a request/response.
+ *   httpGetLength()           - Get the amount of data remaining from the
+ *                               content-length or transfer-encoding fields.
+ *   httpGetLength2()          - Get the amount of data remaining from the
+ *                               content-length or transfer-encoding fields.
+ *   httpGetStatus()           - Get the status of the last HTTP request.
+ *   httpGetSubField()         - Get a sub-field value.
+ *   httpGetSubField2()        - Get a sub-field value.
+ *   httpGets()                - Get a line of text from a HTTP connection.
+ *   httpHead()                - Send a HEAD request to the server.
+ *   httpInitialize()          - Initialize the HTTP interface library and set
+ *                               the default HTTP proxy (if any).
+ *   httpOptions()             - Send an OPTIONS request to the server.
+ *   _httpPeek()               - Peek at data from a HTTP connection.
+ *   httpPost()                - Send a POST request to the server.
+ *   httpPrintf()              - Print a formatted string to a HTTP connection.
+ *   httpPut()                 - Send a PUT request to the server.
+ *   httpRead()                - Read data from a HTTP connection.
+ *   httpRead2()               - Read data from a HTTP connection.
+ *   _httpReadCDSA()           - Read function for the CDSA library.
+ *   _httpReadGNUTLS()         - Read function for the GNU TLS library.
+ *   httpReconnect()           - Reconnect to a HTTP server.
+ *   httpSetAuthString()       - Set the current authorization string.
+ *   httpSetCredentials()      - Set the credentials associated with an
+ *                               encrypted connection.
+ *   httpSetCookie()           - Set the cookie value(s).
+ *   httpSetExpect()           - Set the Expect: header in a request.
+ *   httpSetField()            - Set the value of an HTTP header.
+ *   httpSetLength()           - Set the content-length and content-encoding.
+ *   httpTrace()               - Send an TRACE request to the server.
+ *   httpUpdate()              - Update the current HTTP state for incoming
+ *                               data.
+ *   _httpWait()               - Wait for data available on a connection (no
+ *                               flush).
+ *   httpWait()                - Wait for data available on a connection.
+ *   httpWrite()               - Write data to a HTTP connection.
+ *   httpWrite2()              - Write data to a HTTP connection.
+ *   _httpWriteCDSA()          - Write function for the CDSA library.
+ *   _httpWriteGNUTLS()        - Write function for the GNU TLS library.
+ *   http_bio_ctrl()           - Control the HTTP connection.
+ *   http_bio_free()           - Free OpenSSL data.
+ *   http_bio_new()            - Initialize an OpenSSL BIO structure.
+ *   http_bio_puts()           - Send a string for OpenSSL.
+ *   http_bio_read()           - Read data for OpenSSL.
+ *   http_bio_write()          - Write data for OpenSSL.
+ *   http_debug_hex()          - Do a hex dump of a buffer.
+ *   http_field()              - Return the field index for a field name.
+ *   http_read_ssl()           - Read from a SSL/TLS connection.
+ *   http_locking_cb()         - Lock/unlock a thread's mutex.
+ *   http_send()               - Send a request with all fields and the trailing
+ *                               blank line.
+ *   http_set_credentials()    - Set the SSL/TLS credentials.
+ *   http_setup_ssl()          - Set up SSL/TLS support on a connection.
+ *   http_shutdown_ssl()       - Shut down SSL/TLS on a connection.
+ *   http_threadid_cb()        - Return the current thread ID.
+ *   http_upgrade()            - Force upgrade to TLS encryption.
+ *   http_write()              - Write a buffer to a HTTP connection.
+ *   http_write_chunk()        - Write a chunked buffer.
+ *   http_write_ssl()          - Write to a SSL/TLS connection.
  */
 
 /*
@@ -142,6 +157,7 @@ static int          http_write_chunk(http_t *http, const char *buffer,
                                         int length);
 #ifdef HAVE_SSL
 static int             http_read_ssl(http_t *http, char *buf, int len);
+static int             http_set_credentials(http_t *http);
 static int             http_setup_ssl(http_t *http);
 static void            http_shutdown_ssl(http_t *http);
 static int             http_upgrade(http_t *http);
@@ -242,8 +258,45 @@ static BIO_METHOD  http_bio_methods =
                          http_bio_free,
                          NULL,
                        };
+#endif /* HAVE_SSL && HAVE_LIBSSL */
+
+
+/*
+ * 'httpAddCredential()' - Allocates and adds a single credential to an array.
+ *
+ * Use @code cupsArrayNew(NULL, NULL)@ to create a credentials array.
+ *
+ * @since CUPS 1.5@
+ */
+
+int                                    /* O - 0 on success, -1 on error */
+httpAddCredential(
+    cups_array_t *credentials,         /* I - Credentials array */
+    const void   *data,                        /* I - PEM-encoded X.509 data */
+    size_t       datalen)              /* I - Length of data */
+{
+  http_credential_t    *credential;    /* Credential data */
+
+
+  if ((credential = malloc(sizeof(http_credential_t))) != NULL)
+  {
+    credential->datalen = datalen;
+
+    if ((credential->data = malloc(datalen)) != NULL)
+    {
+      memcpy(credential->data, data, datalen);
+      cupsArrayAdd(credentials, credential);
+      return (0);
+    }
+
+    free(credential);
+  }
+
+  return (-1);
+}
 
 
+#if defined(HAVE_SSL) && defined(HAVE_LIBSSL)
 /*
  * '_httpBIOMethods()' - Get the OpenSSL BIO methods for HTTP connections.
  */
@@ -442,6 +495,129 @@ httpConnectEncrypt(
 }
 
 
+/*
+ * 'httpCopyCredentials()' - Copy the credentials associated with an encrypted
+ *                          connection.
+ *
+ * @since CUPS 1.5@
+ */
+
+int                                    /* O - Status of call (0 = success) */
+httpCopyCredentials(
+    http_t      *http,                 /* I - Connection to server */
+    cups_array_t **credentials)                /* O - Array of credentials */
+{
+#  ifdef HAVE_LIBSSL
+#  elif defined(HAVE_GNUTLS)
+#  elif defined(HAVE_CDSASSL)
+  OSStatus             error;          /* Error code */
+  CFIndex              count;          /* Number of credentials */
+  CFArrayRef           peerCerts;      /* Peer certificates */
+  SecCertificateRef    secCert;        /* Certificate reference */
+  CFDataRef            data;           /* Certificate data */
+  int                  i;              /* Looping var */
+#  elif defined(HAVE_SSPISSL)
+#  endif /* HAVE_LIBSSL */
+
+
+  if (credentials)
+    *credentials = NULL;
+
+  if (!http || !http->tls || !credentials)
+    return (-1);
+
+#  ifdef HAVE_LIBSSL
+  return (-1);
+
+#  elif defined(HAVE_GNUTLS)
+  return (-1);
+
+#  elif defined(HAVE_CDSASSL)
+  if (!(error = SSLCopyPeerCertificates(http->tls, &peerCerts)) && peerCerts)
+  {
+    if ((*credentials = cupsArrayNew(NULL, NULL)) != NULL)
+    {
+      for (i = 0, count = CFArrayGetCount(peerCerts); i < count; i++)
+      {
+       secCert = (SecCertificateRef)CFArrayGetValueAtIndex(peerCerts, i);
+       if ((data = SecCertificateCopyData(secCert)))
+       {
+         httpAddCredential(*credentials, CFDataGetBytePtr(data),
+                           CFDataGetLength(data));
+         CFRelease(data);
+       }
+      }
+    }
+
+    CFRelease(peerCerts);
+  }
+
+  return (error);
+
+#  elif defined(HAVE_SSPISSL)
+  return (-1);
+#  endif /* HAVE_LIBSSL */
+}
+
+
+/*
+ * '_httpConvertCredentials()' - Convert credentials to the internal format.
+ */
+
+http_tls_credentials_t                 /* O - Internal credentials */
+_httpConvertCredentials(
+    cups_array_t *credentials)         /* I - Array of credentials */
+{
+  if (!credentials)
+    return (NULL);
+
+#  ifdef HAVE_LIBSSL
+  return (NULL);
+
+#  elif defined(HAVE_GNUTLS)
+  return (NULL);
+
+#  elif defined(HAVE_CDSASSL)
+  CFMutableArrayRef    peerCerts;      /* Peer credentials reference */
+  SecCertificateRef    secCert;        /* Certificate reference */
+  CFDataRef            data;           /* Credential data reference */
+  http_credential_t    *credential;    /* Credential data */
+
+
+  if ((peerCerts = CFArrayCreateMutable(kCFAllocatorDefault,
+                                       cupsArrayCount(credentials),
+                                       &kCFTypeArrayCallBacks)) == NULL)
+    return (NULL);
+
+  for (credential = (http_credential_t *)cupsArrayFirst(credentials);
+       credential;
+       credential = (http_credential_t *)cupsArrayNext(credentials))
+  {
+    if ((data = CFDataCreate(kCFAllocatorDefault, credential->data, 
+                            credential->datalen)))
+    {
+      if ((secCert = SecCertificateCreateWithData(kCFAllocatorDefault, data))
+              != NULL)
+      {
+       CFArrayAppendValue(peerCerts, secCert);
+       CFRelease(secCert);
+      }
+
+      CFRelease(data);
+    }
+  }
+
+  return (peerCerts);
+
+#  elif defined(HAVE_SSPISSL)
+  return (NULL);
+
+#  else
+  return (NULL);
+#  endif /* HAVE_LIBSSL */
+}
+
+
 /*
  * '_httpCreate()' - Create an unconnected HTTP connection.
  */
@@ -687,6 +863,57 @@ httpFlushWrite(http_t *http)               /* I - Connection to server */
 }
 
 
+/*
+ * '_httpFreeCredentials()' - Free internal credentials.
+ */
+
+void
+_httpFreeCredentials(
+    http_tls_credentials_t credentials)        /* I - Internal credentials */
+{
+  if (!credentials)
+    return;
+
+#ifdef HAVE_LIBSSL
+  (void)credentials;
+
+#elif defined(HAVE_GNUTLS)
+  (void)credentials;
+
+#elif defined(HAVE_CDSASSL)
+  CFRelease(credentials);
+
+#elif defined(HAVE_SSPISSL)
+  (void)credentials;
+
+#endif /* HAVE_LIBSSL */
+}
+
+
+/*
+ * 'httpFreeCredentials()' - Free an array of credentials.
+ */
+
+void
+httpFreeCredentials(
+    cups_array_t *credentials)         /* I - Array of credentials */
+{
+  http_credential_t    *credential;    /* Credential */
+
+
+  for (credential = (http_credential_t *)cupsArrayFirst(credentials);
+       credential;
+       credential = (http_credential_t *)cupsArrayNext(credentials))
+  {
+    cupsArrayRemove(credentials, credential);
+    free((void *)credential->data);
+    free(credential);
+  }
+
+  cupsArrayDelete(credentials);
+}
+
+
 /*
  * 'httpGet()' - Send a GET request to the server.
  */
@@ -2084,6 +2311,28 @@ httpSetAuthString(http_t     *http,      /* I - Connection to server */
 }
 
 
+/*
+ * 'httpSetCredentials()' - Set the credentials associated with an encrypted
+ *                         connection.
+ *
+ * @since CUPS 1.5@
+ */
+
+int                                            /* O - Status of call (0 = success) */
+httpSetCredentials(http_t      *http,          /* I - Connection to server */
+                  cups_array_t *credentials)   /* I - Array of credentials */
+{
+  if (!http || cupsArrayCount(credentials) < 1)
+    return (-1);
+
+  _httpFreeCredentials(http->tls_credentials);
+
+  http->tls_credentials = _httpConvertCredentials(credentials);
+
+  return (http->tls_credentials ? 0 : -1);
+}
+
+
 /*
  * 'httpSetCookie()' - Set the cookie value(s).
  *
@@ -2450,14 +2699,14 @@ _httpWait(http_t *http,                 /* I - Connection to server */
   if (http->tls && usessl)
   {
 #  ifdef HAVE_LIBSSL
-    if (SSL_pending((SSL *)(http->tls)))
+    if (SSL_pending(http->tls))
     {
       DEBUG_puts("5_httpWait: Return 1 since there is pending SSL data.");
       return (1);
     }
 
 #  elif defined(HAVE_GNUTLS)
-    if (gnutls_record_check_pending(((http_tls_t *)(http->tls))->session))
+    if (gnutls_record_check_pending(http->tls))
     {
       DEBUG_puts("5_httpWait: Return 1 since there is pending SSL data.");
       return (1);
@@ -2466,7 +2715,7 @@ _httpWait(http_t *http,                   /* I - Connection to server */
 #  elif defined(HAVE_CDSASSL)
     size_t bytes;                      /* Bytes that are available */
 
-    if (!SSLGetBufferedReadSize(((http_tls_t *)(http->tls))->session, &bytes) &&
+    if (!SSLGetBufferedReadSize(http->tls, &bytes) &&
         bytes > 0)
     {
       DEBUG_puts("5_httpWait: Return 1 since there is pending SSL data.");
@@ -3007,7 +3256,7 @@ http_read_ssl(http_t *http,               /* I - Connection to server */
   ssize_t      result;                 /* Return value */
 
 
-  result = gnutls_record_recv(((http_tls_t *)(http->tls))->session, buf, len);
+  result = gnutls_record_recv(http->tls, buf, len);
 
   if (result < 0 && !errno)
   {
@@ -3041,7 +3290,7 @@ http_read_ssl(http_t *http,               /* I - Connection to server */
   size_t       processed;              /* Number of bytes processed */
 
 
-  error = SSLRead(((http_tls_t *)http->tls)->session, buf, len, &processed);
+  error = SSLRead(http->tls, buf, len, &processed);
 
   switch (error)
   {
@@ -3248,6 +3497,93 @@ http_send(http_t       *http,    /* I - Connection to server */
 
 
 #ifdef HAVE_SSL
+/*
+ * 'http_set_credentials()' - Set the SSL/TLS credentials.
+ */
+
+static int                             /* O - Status of connection */
+http_set_credentials(http_t *http)     /* I - Connection to server */
+{
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+#  ifdef HAVE_CDSASSL
+  OSStatus             error = 0;      /* Error code */
+  http_tls_credentials_t credentials = NULL;
+                                       /* TLS credentials */
+#  endif /* HAVE_CDSASSL */
+
+
+  DEBUG_printf(("7http_set_credentials(%p)", http));
+
+#  ifdef HAVE_LIBSSL
+  return (-1);
+
+#  elif defined(HAVE_GNUTLS)
+  return (-1);
+
+#  elif defined(HAVE_CDSASSL)
+ /*
+  * Prefer connection specific credentials...
+  */
+
+  if ((credentials = http->tls_credentials) == NULL)
+    credentials = cg->tls_credentials;
+
+ /*
+  * Otherwise root around in the user's keychain to see if one can be found...
+  */
+
+  if (!credentials)
+  {
+    CFDictionaryRef    query;          /* Query dictionary */
+    CFTypeRef          matches;        /* Matching credentials */
+    CFArrayRef         dn_array = NULL;/* Distinguished names array */
+    CFTypeRef          keys[]   = { kSecClass,
+                                    kSecMatchLimit,
+                                    kSecReturnRef };
+                                       /* Keys for dictionary */
+    CFTypeRef          values[] = { kSecClassCertificate,
+                                    kSecMatchLimitOne,
+                                    kCFBooleanTrue };
+                                       /* Values for dictionary */
+
+   /*
+    * Get the names associated with the server.
+    */
+
+    if (SSLCopyDistinguishedNames(http->tls, &dn_array) != noErr)
+      return (-1);
+
+   /*
+    * Create a query which will return all identities that can sign and match
+    * the passed in policy.
+    */
+
+    query = CFDictionaryCreate(NULL,
+                              (const void**)(&keys[0]),
+                              (const void**)(&values[0]),
+                              sizeof(keys) / sizeof(keys[0]),
+                              &kCFTypeDictionaryKeyCallBacks,
+                              &kCFTypeDictionaryValueCallBacks);
+    error = SecItemCopyMatching(query, &matches);
+
+    CFRelease(query);
+    CFRelease(matches);
+
+    if (dn_array)
+      CFRelease(dn_array);
+  }
+
+  if (credentials)
+    error = SSLSetCertificate(http->tls, credentials);
+
+  return (error);
+
+#  elif defined(HAVE_SSPISSL)
+  return (-1);
+#  endif /* HAVE_LIBSSL */
+}
+
+
 /*
  * 'http_setup_ssl()' - Set up SSL/TLS support on a connection.
  */
@@ -3255,27 +3591,44 @@ http_send(http_t       *http,   /* I - Connection to server */
 static int                             /* O - Status of connection */
 http_setup_ssl(http_t *http)           /* I - Connection to server */
 {
+  _cups_globals_t      *cg = _cupsGlobals();
+                                       /* Pointer to library globals */
+  int                  any_root;       /* Allow any root */
+
 #  ifdef HAVE_LIBSSL
   SSL_CTX      *context;               /* Context for encryption */
-  SSL          *conn;                  /* Connection for encryption */
   BIO          *bio;                   /* BIO data */
 #  elif defined(HAVE_GNUTLS)
-  http_tls_t   *conn;                  /* TLS session object */
   gnutls_certificate_client_credentials *credentials;
                                        /* TLS credentials */
 #  elif defined(HAVE_CDSASSL)
   OSStatus     error;                  /* Error code */
-  http_tls_t   *conn;                  /* CDSA connection information */
+  char         *message = NULL;        /* Error message */
+  cups_array_t *credentials;           /* Credentials array */
+  char         *hostname;              /* Hostname */
+  cups_array_t *names;                 /* CUPS distinguished names */
+  CFArrayRef   dn_array;               /* CF distinguished names array */
+  CFIndex      count;                  /* Number of credentials */
+  CFDataRef    data;                   /* Certificate data */
+  int          i;                      /* Looping var */
+  http_credential_t
+               *credential;            /* Credential data */
 #  elif defined(HAVE_SSPISSL)
   TCHAR                username[256];          /* Username returned from GetUserName() */
   TCHAR                commonName[256];        /* Common name for certificate */
   DWORD                dwSize;                 /* 32 bit size */
-  _sspi_struct_t *conn;                        /* SSPI connection information */
 #  endif /* HAVE_LIBSSL */
 
 
   DEBUG_printf(("7http_setup_ssl(http=%p)", http));
 
+ /*
+  * Allways allow self-signed certificates for the local loopback address...
+  */
+
+  if ((any_root = cg->any_root) == 0 && httpAddrLocalhost(http->hostaddr))
+    any_root = 1;
+
 #  ifdef HAVE_LIBSSL
   context = SSL_CTX_new(SSLv23_client_method());
 
@@ -3284,10 +3637,10 @@ http_setup_ssl(http_t *http)            /* I - Connection to server */
   bio = BIO_new(_httpBIOMethods());
   BIO_ctrl(bio, BIO_C_SET_FILE_PTR, 0, (char *)http);
 
-  conn = SSL_new(context);
-  SSL_set_bio(conn, bio, bio);
+  http->tls = SSL_new(context);
+  SSL_set_bio(http->tls_credentials, bio, bio);
 
-  if (SSL_connect(conn) != 1)
+  if (SSL_connect(http->tls) != 1)
   {
 #    ifdef DEBUG
     unsigned long      error;  /* Error code */
@@ -3297,7 +3650,8 @@ http_setup_ssl(http_t *http)              /* I - Connection to server */
 #    endif /* DEBUG */
 
     SSL_CTX_free(context);
-    SSL_free(conn);
+    SSL_free(http->tls);
+    http->tls = NULL;
 
 #    ifdef WIN32
     http->error  = WSAGetLastError();
@@ -3310,20 +3664,10 @@ http_setup_ssl(http_t *http)            /* I - Connection to server */
   }
 
 #  elif defined(HAVE_GNUTLS)
-  if ((conn = (http_tls_t *)malloc(sizeof(http_tls_t))) == NULL)
-  {
-    http->error  = errno;
-    http->status = HTTP_ERROR;
-
-    return (-1);
-  }
-
   credentials = (gnutls_certificate_client_credentials *)
                     malloc(sizeof(gnutls_certificate_client_credentials));
   if (credentials == NULL)
   {
-    free(conn);
-
     http->error = errno;
     http->status = HTTP_ERROR;
 
@@ -3332,107 +3676,248 @@ http_setup_ssl(http_t *http)          /* I - Connection to server */
 
   gnutls_certificate_allocate_credentials(credentials);
 
-  gnutls_init(&(conn->session), GNUTLS_CLIENT);
-  gnutls_set_default_priority(conn->session);
-  gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials);
-  gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr)http);
-  gnutls_transport_set_pull_function(conn->session, _httpReadGNUTLS);
-  gnutls_transport_set_push_function(conn->session, _httpWriteGNUTLS);
+  gnutls_init(&http->tls, GNUTLS_CLIENT);
+  gnutls_set_default_priority(http->tls);
+  gnutls_credentials_set(http->tls, GNUTLS_CRD_CERTIFICATE, *credentials);
+  gnutls_transport_set_ptr(http->tls, (gnutls_transport_ptr)http);
+  gnutls_transport_set_pull_function(http->tls, _httpReadGNUTLS);
+  gnutls_transport_set_push_function(http->tls, _httpWriteGNUTLS);
 
-  if ((gnutls_handshake(conn->session)) != GNUTLS_E_SUCCESS)
+  if ((gnutls_handshake(http->tls)) != GNUTLS_E_SUCCESS)
   {
     http->error  = errno;
     http->status = HTTP_ERROR;
 
-    gnutls_deinit(conn->session);
+    gnutls_deinit(http->tls);
     gnutls_certificate_free_credentials(*credentials);
     free(credentials);
-    free(conn);
+    http->tls = NULL;
 
     return (-1);
   }
 
-  conn->credentials = credentials;
+  http->tls_credentials = credentials;
 
 #  elif defined(HAVE_CDSASSL)
-  conn = (http_tls_t *)calloc(1, sizeof(http_tls_t));
-
-  if (conn == NULL)
-    return (-1);
-
-  if ((error = SSLNewContext(false, &conn->session)))
+  if ((error = SSLNewContext(false, &http->tls)))
   {
     http->error  = error;
     http->status = HTTP_ERROR;
 
-    free(conn);
     return (-1);
   }
 
- /*
-  * Use a union to resolve warnings about int/pointer size mismatches...
-  */
+  error = SSLSetConnection(http->tls, http);
 
-  error = SSLSetConnection(conn->session, http);
+  if (!error)
+    error = SSLSetIOFuncs(http->tls, _httpReadCDSA, _httpWriteCDSA);
 
   if (!error)
-    error = SSLSetIOFuncs(conn->session, _httpReadCDSA, _httpWriteCDSA);
+    error = SSLSetProtocolVersionEnabled(http->tls, kSSLProtocol2, false);
 
   if (!error)
-    error = SSLSetAllowsExpiredCerts(conn->session, true);
+    error = SSLSetAllowsAnyRoot(http->tls, any_root);
 
   if (!error)
-    error = SSLSetAllowsAnyRoot(conn->session, true);
+    error = SSLSetAllowsExpiredCerts(http->tls, cg->expired_certs);
 
   if (!error)
-    error = SSLSetProtocolVersionEnabled(conn->session, kSSLProtocol2, false);
+    error = SSLSetAllowsExpiredRoots(http->tls, cg->expired_root);
 
   if (!error)
   {
-    while ((error = SSLHandshake(conn->session)) == errSSLWouldBlock)
-      usleep(1000);
+    if (cg->client_cert_cb)
+      error = SSLSetSessionOption(http->tls,
+                                 kSSLSessionOptionBreakOnCertRequested, true);
+    else
+      error = http_set_credentials(http);
+  }
+
+ /*
+  * If there's a server certificate callback installed let it evaluate the
+  * certificate(s) during the handshake...
+  */
+
+  if (!error && cg->server_cert_cb != NULL)
+  {
+    error = SSLSetEnableCertVerify(http->tls, false);
+
+    if (!error)
+      error = SSLSetSessionOption(http->tls,
+                                 kSSLSessionOptionBreakOnServerAuth, true);
+  }
+
+  if (!error)
+  {
+    hostname = httpAddrLocalhost(http->hostaddr) ? "localhost" : http->hostname;
+    error    = SSLSetPeerDomainName(http->tls, hostname, strlen(hostname));
+  }
+
+  if (!error)
+  {
+    int done = 0;                      /* Are we done yet? */
+
+    while (!error && !done)
+    {
+      error = SSLHandshake(http->tls);
+
+      DEBUG_printf(("4_httpWait: SSLHandshake returned %d.", (int)error));
+
+      switch (error)
+      {
+       case noErr :
+           done = 1;
+           break;
+
+       case errSSLWouldBlock :
+           usleep(1000);
+           break;
+
+       case errSSLServerAuthCompleted :
+           error = 0;
+           if (cg->server_cert_cb)
+           {
+             error = httpCopyCredentials(http, &credentials);
+             if (!error)
+             {
+               error = (cg->server_cert_cb)(http, http->tls, credentials,
+                                            cg->server_cert_data);
+               httpFreeCredentials(credentials);
+             }
+
+             DEBUG_printf(("4_httpWait: Server certificate callback returned "
+                           "%d.", (int)error));
+           }
+           break;
+
+       case errSSLClientCertRequested :
+           error = 0;
+
+           if (cg->client_cert_cb)
+           {
+             names = NULL;
+             if (!(error = SSLCopyDistinguishedNames(http->tls, &dn_array)) && 
+                 dn_array)
+             {
+               if ((names = cupsArrayNew(NULL, NULL)) != NULL)
+               {
+                 for (i = 0, count = CFArrayGetCount(dn_array); i < count; i++)
+                 {
+                   data = (CFDataRef)CFArrayGetValueAtIndex(dn_array, i);
+
+                   if ((credential = malloc(sizeof(*credential))))
+                   {
+                     credential->datalen = CFDataGetLength(data);
+                     if ((credential->data = malloc(credential->datalen)))
+                     {
+                       memcpy((void *)credential->data, CFDataGetBytePtr(data), 
+                              credential->datalen);
+                       cupsArrayAdd(names, credential);
+                     }
+                   }
+                 }
+               }
+
+               CFRelease(dn_array);
+             }
+
+             if (!error)
+             {
+               error = (cg->client_cert_cb)(http, http->tls, names, 
+                                            cg->client_cert_data);
+
+               DEBUG_printf(("4_httpWait: Client certificate callback "
+                             "returned %d.", (int)error));
+             }
+
+             httpFreeCredentials(names);
+           }
+           break;
+
+       case errSSLUnknownRootCert :
+       case errSSLNoRootCert :
+           message = _("Unable to establish a secure connection to host "
+                       "(unknown root certificate).");
+           break;
+
+       case errSSLCertExpired :
+           message = _("Unable to establish a secure connection to host "
+                       "(expired certificate).");
+           break;
+
+       case errSSLCertNotYetValid :
+           message = _("Unable to establish a secure connection to host "
+                       "(certificate not yet valid).");
+           break;
+
+       case errSSLHostNameMismatch :
+           message = _("Unable to establish a secure connection to host "
+                       "(host name mismatch).");
+           break;
+
+       case errSSLXCertChainInvalid :
+           message = _("Unable to establish a secure connection to host "
+                       "(certificate chain invalid).");
+           break;
+
+       default :
+           break;
+      }
+    }
   }
 
   if (error)
   {
     http->error  = error;
     http->status = HTTP_ERROR;
+    errno        = ECONNREFUSED;
+
+    SSLDisposeContext(http->tls);
+    http->tls = NULL;
 
-    SSLDisposeContext(conn->session);
+   /*
+    * If an error string wasn't set by the callbacks use a generic one...
+    */
 
-    free(conn);
+    if (!message)
+      message = _("Unable to establish a secure connection to host.");
+
+    _cupsSetError(HTTP_PKI_ERROR, message, 1);
 
     return (-1);
   }
+
 #  elif defined(HAVE_SSPISSL)
-  conn = _sspiAlloc();
+  http->tls = _sspiAlloc();
 
-  if (!conn)
+  if (!http->tls)
     return (-1);
 
-  conn->sock = http->fd;
-  dwSize     = sizeof(username) / sizeof(TCHAR);
+  http->tls->sock = http->fd;
+  dwSize          = sizeof(username) / sizeof(TCHAR);
   GetUserName(username, &dwSize);
   _sntprintf_s(commonName, sizeof(commonName) / sizeof(TCHAR),
                sizeof(commonName) / sizeof(TCHAR), TEXT("CN=%s"), username);
 
-  if (!_sspiGetCredentials(conn, L"ClientContainer", commonName, FALSE))
+  if (!_sspiGetCredentials(http->tls_credentials, L"ClientContainer",
+                           commonName, FALSE))
   {
-    _sspiFree(conn);
+    _sspiFree(http->tls_credentials);
+    http->tls_credentials = NULL;
     return (-1);
   }
 
-  _sspiSetAllowsAnyRoot(conn, TRUE);
-  _sspiSetAllowsExpiredCerts(conn, TRUE);
+  _sspiSetAllowsAnyRoot(http->tls_credentials, TRUE);
+  _sspiSetAllowsExpiredCerts(http->tls_credentials, TRUE);
 
-  if (!_sspiConnect(conn, http->hostname))
+  if (!_sspiConnect(http->tls_credentials, http->hostname))
   {
-    _sspiFree(conn);
+    _sspiFree(http->tls_credentials);
+    http->tls_credentials = NULL;
     return (-1);
   }
 #  endif /* HAVE_CDSASSL */
 
-  http->tls = conn;
   return (0);
 }
 #endif /* HAVE_SSL */
@@ -3448,51 +3933,35 @@ http_shutdown_ssl(http_t *http)         /* I - Connection to server */
 {
 #  ifdef HAVE_LIBSSL
   SSL_CTX      *context;               /* Context for encryption */
-  SSL          *conn;                  /* Connection for encryption */
-
 
-  conn    = (SSL *)(http->tls);
-  context = SSL_get_SSL_CTX(conn);
+  context = SSL_get_SSL_CTX(http->tls_credentials);
 
-  SSL_shutdown(conn);
+  SSL_shutdown(http->tls_credentials);
   SSL_CTX_free(context);
-  SSL_free(conn);
+  SSL_free(http->tls_credentials);
 
 #  elif defined(HAVE_GNUTLS)
-  http_tls_t      *conn;               /* Encryption session */
   gnutls_certificate_client_credentials *credentials;
                                        /* TLS credentials */
 
+  credentials = (gnutls_certificate_client_credentials *)(http->tls_credentials);
 
-  conn = (http_tls_t *)(http->tls);
-  credentials = (gnutls_certificate_client_credentials *)(conn->credentials);
-
-  gnutls_bye(conn->session, GNUTLS_SHUT_RDWR);
-  gnutls_deinit(conn->session);
+  gnutls_bye(http->tls, GNUTLS_SHUT_RDWR);
+  gnutls_deinit(http->tls);
   gnutls_certificate_free_credentials(*credentials);
   free(credentials);
-  free(conn);
 
 #  elif defined(HAVE_CDSASSL)
-  http_tls_t      *conn;               /* CDSA connection information */
-
-
-  conn = (http_tls_t *)(http->tls);
-
-  while (SSLClose(conn->session) == errSSLWouldBlock)
+  while (SSLClose(http->tls) == errSSLWouldBlock)
     usleep(1000);
 
-  SSLDisposeContext(conn->session);
+  SSLDisposeContext(http->tls);
 
-  if (conn->certsArray)
-    CFRelease(conn->certsArray);
+  if (http->tls_credentials)
+    CFRelease(http->tls_credentials);
 
-  free(conn);
 #  elif defined(HAVE_SSPISSL)
-  _sspi_struct_t  *conn;               /* SSPI connection information */
-
-  conn = (_sspi_struct_t*)(http->tls);
-  _sspiFree(conn);
+  _sspiFree(http->tls_credentials);
 #  endif /* HAVE_LIBSSL */
 
   http->tls = NULL;
@@ -3554,7 +4023,7 @@ http_upgrade(http_t *http)                /* I - Connection to server */
 
   httpClearFields(http);
   httpSetField(http, HTTP_FIELD_CONNECTION, "upgrade");
-  httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.0, SSL/2.0, SSL/3.0");
+  httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.2, TLS/1.1, TLS/1.0, SSL/3.0");
 
   if ((ret = httpOptions(http, "*")) == 0)
   {
@@ -3735,7 +4204,7 @@ http_write_ssl(http_t     *http,  /* I - Connection to server */
   result = SSL_write((SSL *)(http->tls), buf, len);
 
 #  elif defined(HAVE_GNUTLS)
-  result = gnutls_record_send(((http_tls_t *)(http->tls))->session, buf, len);
+  result = gnutls_record_send(http->tls, buf, len);
 
   if (result < 0 && !errno)
   {
@@ -3766,7 +4235,7 @@ http_write_ssl(http_t     *http,  /* I - Connection to server */
   size_t       processed;              /* Number of bytes processed */
 
 
-  error = SSLWrite(((http_tls_t *)http->tls)->session, buf, len, &processed);
+  error = SSLWrite(http->tls, buf, len, &processed);
 
   switch (error)
   {
index fb75928bcdbe2260cf20ae6547434b0b917741d4..4c9b4f5f64559eb5b8cb069f8fe8d1ae7748ef20 100644 (file)
@@ -1,10 +1,9 @@
 /*
  * "$Id$"
  *
- *   Hyper-Text Transport Protocol definitions for the Common UNIX Printing
- *   System (CUPS).
+ *   Hyper-Text Transport Protocol definitions for CUPS.
  *
- *   Copyright 2007-2009 by Apple Inc.
+ *   Copyright 2007-2010 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -24,6 +23,7 @@
  */
 
 #  include "versioning.h"
+#  include "array.h"
 #  include <string.h>
 #  include <time.h>
 #  include <sys/types.h>
@@ -250,11 +250,11 @@ typedef enum http_status_e                /**** HTTP status codes ****/
   HTTP_GATEWAY_TIMEOUT,                        /* Gateway connection timed out */
   HTTP_NOT_SUPPORTED,                  /* HTTP version not supported */
 
-  HTTP_AUTHORIZATION_CANCELED = 1000   /* User canceled authorization */
-
+  HTTP_AUTHORIZATION_CANCELED = 1000,  /* User canceled authorization @since CUPS 1.4@ */
+  HTTP_PKI_ERROR                       /* Error negotiating a secure connection @since CUPS 1.5@ */
 } http_status_t;
 
-typedef enum http_uri_status_e         /**** URI separation status @since CUPS1.2@ ****/
+typedef enum http_uri_status_e         /**** URI separation status @since CUPS 1.2@ ****/
 {
   HTTP_URI_OVERFLOW = -8,              /* URI buffer for httpAssembleURI is too small */
   HTTP_URI_BAD_ARGUMENTS = -7,         /* Bad arguments to function (error) */
@@ -317,6 +317,12 @@ typedef struct http_addrlist_s             /**** Socket address list, which is
 
 typedef struct _http_s http_t;         /**** HTTP connection type ****/
 
+typedef struct http_credential_s       /**** Credential data @since CUPS 1.5@ ****/
+{
+  void         *data;                  /* Pointer to credential data */
+  size_t       datalen;                /* Credential length */
+} http_credential_t;
+
 
 /*
  * Prototypes...
@@ -440,6 +446,17 @@ extern char                *httpGetAuthString(http_t *http) _CUPS_API_1_3;
 extern void            httpSetAuthString(http_t *http, const char *scheme,
                                          const char *data) _CUPS_API_1_3;
 
+/**** New in CUPS 1.5 ****/
+extern int             httpAddCredential(cups_array_t *credentials,
+                                         const void *data, size_t datalen)
+                                         _CUPS_API_1_5;
+extern int             httpCopyCredentials(http_t *http, 
+                                           cups_array_t **credentials) 
+                                           _CUPS_API_1_5;
+extern void            httpFreeCredentials(cups_array_t *certs) _CUPS_API_1_5;
+extern int             httpSetCredentials(http_t *http, cups_array_t *certs)
+                                          _CUPS_API_1_5;
+
 /*
  * C++ magic...
  */
index 88a09dac159881fa67d61dac7eb9182bc83ebd77..b35423d6822a19a5e97542cbe748cde3841aac78 100644 (file)
@@ -90,6 +90,12 @@ static const char * const ipp_status_oks[] = /* "OK" status codes */
                  "server-error-job-canceled",
                  "server-error-multiple-document-jobs-not-supported",
                  "server-error-printer-is-deactivated"
+               },
+               * const ipp_status_1000s[] =            /* CUPS internal */
+               {
+                 "cups-authorization-canceled",
+                 "cups-pki-error",
+                 "cups-upgrade-required"
                };
 static char    * const ipp_std_ops[] =
                {
@@ -331,7 +337,7 @@ _ippAttrString(ipp_attribute_t *attr,       /* I - Attribute */
   {
     if (val > attr->values)
     {
-      if (bufptr < bufend)
+      if (buffer && bufptr < bufend)
         *bufptr++ = ',';
       else
         bufptr ++;
@@ -346,7 +352,7 @@ _ippAttrString(ipp_attribute_t *attr,       /* I - Attribute */
           {
             ptr = printer_states[val->integer - IPP_PRINTER_IDLE];
 
-            if (bufptr < bufend)
+            if (buffer && bufptr < bufend)
               strlcpy(bufptr, ptr, bufend - bufptr + 1);
 
             bufptr += strlen(ptr);
@@ -358,7 +364,7 @@ _ippAttrString(ipp_attribute_t *attr,       /* I - Attribute */
           {
             ptr = job_states[val->integer - IPP_JOB_PENDING];
 
-            if (bufptr < bufend)
+            if (buffer && bufptr < bufend)
               strlcpy(bufptr, ptr, bufend - bufptr + 1);
 
             bufptr += strlen(ptr);
@@ -366,14 +372,14 @@ _ippAttrString(ipp_attribute_t *attr,     /* I - Attribute */
           }
 
       case IPP_TAG_INTEGER :
-          if (bufptr < bufend)
+          if (buffer && bufptr < bufend)
             bufptr += snprintf(bufptr, bufend - bufptr + 1, "%d", val->integer);
           else
             bufptr += snprintf(temp, sizeof(temp), "%d", val->integer);
           break;
 
       case IPP_TAG_BOOLEAN :
-          if (bufptr < bufend)
+          if (buffer && bufptr < bufend)
             strlcpy(bufptr, val->boolean ? "true" : "false",
                     bufend - bufptr + 1);
 
@@ -381,7 +387,7 @@ _ippAttrString(ipp_attribute_t *attr,       /* I - Attribute */
           break;
 
       case IPP_TAG_RANGE :
-          if (bufptr < bufend)
+          if (buffer && bufptr < bufend)
             bufptr += snprintf(bufptr, bufend - bufptr + 1, "%d-%d",
                                val->range.lower, val->range.upper);
           else
@@ -390,7 +396,7 @@ _ippAttrString(ipp_attribute_t *attr,       /* I - Attribute */
           break;
 
       case IPP_TAG_RESOLUTION :
-          if (bufptr < bufend)
+          if (buffer && bufptr < bufend)
             bufptr += snprintf(bufptr, bufend - bufptr + 1, "%dx%d%s",
                                val->resolution.xres, val->resolution.yres,
                                val->resolution.units == IPP_RES_PER_INCH ?
@@ -419,7 +425,7 @@ _ippAttrString(ipp_attribute_t *attr,       /* I - Attribute */
                       val->date[5], val->date[6], val->date[8], val->date[9],
                       val->date[10]);
 
-            if (bufptr < bufend)
+            if (buffer && bufptr < bufend)
               strlcpy(bufptr, temp, bufend - bufptr + 1);
 
             bufptr += strlen(temp);
@@ -435,23 +441,26 @@ _ippAttrString(ipp_attribute_t *attr,     /* I - Attribute */
       case IPP_TAG_LANGUAGE :
       case IPP_TAG_TEXTLANG :
       case IPP_TAG_NAMELANG :
+         if (!val->string.text)
+           break;
+
           for (ptr = val->string.text; *ptr; ptr ++)
           {
             if (*ptr == '\\' || *ptr == '\"')
             {
-              if (bufptr < bufend)
+              if (buffer && bufptr < bufend)
                 *bufptr = '\\';
               bufptr ++;
             }
 
-            if (bufptr < bufend)
+            if (buffer && bufptr < bufend)
               *bufptr = *ptr;
             bufptr ++;
           }
           break;
 
       case IPP_TAG_BEGIN_COLLECTION :
-          if (bufptr < bufend)
+          if (buffer && bufptr < bufend)
             bufptr += ipp_col_string(val->collection, bufptr,
                                      bufend - bufptr + 1);
           else
@@ -463,17 +472,17 @@ _ippAttrString(ipp_attribute_t *attr,     /* I - Attribute */
           {
             if (*ptr == '\\' || isspace(*ptr & 255))
             {
-              if (bufptr < bufend)
+              if (buffer && bufptr < bufend)
                 *bufptr = '\\';
               bufptr ++;
 
-              if (bufptr < bufend)
+              if (buffer && bufptr < bufend)
                 *bufptr = *ptr;
               bufptr ++;
             }
             else if (!isprint(*ptr & 255))
             {
-              if (bufptr < bufend)
+              if (buffer && bufptr < bufend)
                 bufptr += snprintf(bufptr, bufend - bufptr + 1, "\\%03o",
                                    *ptr & 255);
               else
@@ -482,7 +491,7 @@ _ippAttrString(ipp_attribute_t *attr,       /* I - Attribute */
             }
             else
             {
-              if (bufptr < bufend)
+              if (buffer && bufptr < bufend)
                 *bufptr = *ptr;
               bufptr ++;
             }
@@ -491,14 +500,14 @@ _ippAttrString(ipp_attribute_t *attr,     /* I - Attribute */
 
       default :
           ptr = ippTagString(attr->value_tag);
-          if (bufptr < bufend)
+          if (buffer && bufptr < bufend)
             strlcpy(bufptr, ptr, bufend - bufptr + 1);
           bufptr += strlen(ptr);
           break;
     }
   }
 
-  if (bufptr < bufend)
+  if (buffer && bufptr < bufend)
     *bufptr = '\0';
   else if (bufend)
     *bufend = '\0';
@@ -531,6 +540,8 @@ ippErrorString(ipp_status_t error)  /* I - Error status */
     return (ipp_status_400s[error - IPP_BAD_REQUEST]);
   else if (error >= IPP_INTERNAL_ERROR && error <= IPP_PRINTER_IS_DEACTIVATED)
     return (ipp_status_500s[error - IPP_INTERNAL_ERROR]);
+  else if (error >= IPP_AUTHORIZATION_CANCELED && error <= IPP_UPGRADE_REQUIRED)
+    return (ipp_status_1000s[error - IPP_AUTHORIZATION_CANCELED]);
 
  /*
   * No, build an "unknown-xxxx" error string...
@@ -572,6 +583,10 @@ ippErrorValue(const char *name)            /* I - Name */
     if (!strcasecmp(name, ipp_status_500s[i]))
       return ((ipp_status_t)(i + 0x500));
 
+  for (i = 0; i < (sizeof(ipp_status_1000s) / sizeof(ipp_status_1000s[0])); i ++)
+    if (!strcasecmp(name, ipp_status_1000s[i]))
+      return ((ipp_status_t)(i + 0x1000));
+
   return ((ipp_status_t)-1);
 }
 
index d24d33cac35f8ea2b2ddfaa0d3c795c00e5fc2d3..51013f4aa489c8412c9a3501db779d8036d59709 100644 (file)
@@ -310,7 +310,11 @@ typedef enum ipp_status_e          /**** IPP status codes ****/
   IPP_PRINTER_BUSY,                    /* server-error-busy */
   IPP_ERROR_JOB_CANCELED,              /* server-error-job-canceled */
   IPP_MULTIPLE_JOBS_NOT_SUPPORTED,     /* server-error-multiple-document-jobs-not-supported */
-  IPP_PRINTER_IS_DEACTIVATED           /* server-error-printer-is-deactivated */
+  IPP_PRINTER_IS_DEACTIVATED,          /* server-error-printer-is-deactivated */
+
+  IPP_AUTHORIZATION_CANCELED = 0x1000, /* Authorization canceled by user @since CUPS 1.4@ */
+  IPP_PKI_ERROR,                       /* Error negotiating a secure connection @since CUPS 1.5@ */
+  IPP_UPGRADE_REQUIRED                 /* TLS upgrade required */
 } ipp_status_t;
 #define IPP_ERROR_JOB_CANCELLED IPP_ERROR_JOB_CANCELED
 
index 722a8ad9535b57cd16f8fa28d92b654b35633042..a3013657e71fea39984c09de9f21b76cf62f9033 100644 (file)
@@ -1,5 +1,5 @@
 LIBRARY libcups2\r
-VERSION 2.8\r
+VERSION 2.9\r
 EXPORTS\r
 _cupsGetPassword\r
 _cupsGlobals\r
@@ -154,6 +154,7 @@ cupsRemoveOption
 cupsResolveConflicts\r
 cupsSendRequest\r
 cupsServer\r
+cupsSetCredentials\r
 cupsSetDests\r
 cupsSetDests2\r
 cupsSetEncryption\r
@@ -168,6 +169,7 @@ cupsUTF8ToCharset
 cupsUTF8ToUTF32\r
 cupsUser\r
 cupsWriteRequestData\r
+httpAddCredential\r
 httpAddrAny\r
 httpAddrConnect\r
 httpAddrEqual\r
@@ -195,6 +197,7 @@ httpEncryption
 httpError\r
 httpFlush\r
 httpFlushWrite\r
+httpFreeCredential\r
 httpGet\r
 httpGetBlocking\r
 httpGetCookie\r
@@ -227,6 +230,7 @@ httpSeparate
 httpSeparate2\r
 httpSeparateURI\r
 httpSetCookie\r
+httpSetCredentials\r
 httpSetExpect\r
 httpSetField\r
 httpSetLength\r
index f003b05a798b9cd05305a00b40ce1f9a5304b36e..59a50a62fb174ec6766439c14b3353350602d3f4 100644 (file)
@@ -30,9 +30,7 @@
  * Include necessary headers...
  */
 
-#include "cups.h"
-#include "string-private.h"
-#include "debug-private.h"
+#include "cups-private.h"
 
 
 /*
index b5a769b490f1be65487153eb609d76a24b7a6b08..d44c1ca0403b10f2821eb9b71ae60ede3b693d4d 100644 (file)
@@ -148,7 +148,6 @@ extern const char   *_pwgGetSource(_pwg_t *pwg, const char *input_slot);
 extern const char      *_pwgGetType(_pwg_t *pwg, const char *media_type);
 extern const char      *_pwgInputSlotForSource(const char *media_source,
                                                char *name, size_t namesize);
-extern _pwg_media_t    *_pwgMediaForPPD(const char *ppd);
 extern const char      *_pwgMediaTypeForType(const char *media_type,
                                              char *name, size_t namesize);
 extern const char      *_pwgPageSizeForMedia(_pwg_media_t *media,
index 909c90a8e3273fe4155fe2b8846c749d3cee8a81..7a502699f46260209cda64e9050066ec30ca0782 100644 (file)
@@ -417,12 +417,15 @@ _pwgInitSize(_pwg_size_t *size,           /* I - Size to initialize */
   else
   {
     if ((media = ippFindAttribute(job, "media", IPP_TAG_NAME)) == NULL)
-      media = ippFindAttribute(job, "media", IPP_TAG_KEYWORD);
+      if ((media = ippFindAttribute(job, "media", IPP_TAG_KEYWORD)) == NULL)
+        if ((media = ippFindAttribute(job, "PageSize", IPP_TAG_NAME)) == NULL)
+         media = ippFindAttribute(job, "PageRegion", IPP_TAG_NAME);
 
     if (media)
     {
       if ((pwg = _pwgMediaForPWG(media->values[0].string.text)) == NULL)
-       pwg = _pwgMediaForLegacy(media->values[0].string.text);
+       if ((pwg = _pwgMediaForLegacy(media->values[0].string.text)) == NULL)
+         pwg = _pwgMediaForPPD(media->values[0].string.text);
 
       if (pwg)
       {
index 33a0790aff4fe8a8c56051411009eea85537f01c..41849b48ccddbc6720bf04e553299a840a833452 100644 (file)
@@ -86,6 +86,7 @@ extern void           _pwgGenerateSize(char *keyword, size_t keysize,
 extern int             _pwgInitSize(_pwg_size_t *size, ipp_t *job,
                                     int *margins_set);
 extern _pwg_media_t    *_pwgMediaForLegacy(const char *legacy);
+extern _pwg_media_t    *_pwgMediaForPPD(const char *ppd);
 extern _pwg_media_t    *_pwgMediaForPWG(const char *pwg);
 extern _pwg_media_t    *_pwgMediaForSize(int width, int length);
 
index dab06a7d2019b31d80785585989d61fd3a794807..ff656eec20b9c55ca636767870db967a5dda994a 100644 (file)
@@ -969,10 +969,13 @@ _cupsSetHTTPError(http_status_t status)   /* I - HTTP status code */
        break;
 
     case HTTP_UNAUTHORIZED :
-    case HTTP_AUTHORIZATION_CANCELED :
        _cupsSetError(IPP_NOT_AUTHORIZED, httpStatus(status), 0);
        break;
 
+    case HTTP_AUTHORIZATION_CANCELED :
+       _cupsSetError(IPP_AUTHORIZATION_CANCELED, httpStatus(status), 0);
+       break;
+
     case HTTP_FORBIDDEN :
        _cupsSetError(IPP_FORBIDDEN, httpStatus(status), 0);
        break;
@@ -993,6 +996,10 @@ _cupsSetHTTPError(http_status_t status)    /* I - HTTP status code */
        _cupsSetError(IPP_VERSION_NOT_SUPPORTED, httpStatus(status), 0);
        break;
 
+    case HTTP_UPGRADE_REQUIRED :
+       _cupsSetError(IPP_UPGRADE_REQUIRED, httpStatus(status), 0);
+        break;
+
     default :
        DEBUG_printf(("4_cupsSetHTTPError: HTTP error %d mapped to "
                      "IPP_SERVICE_UNAVAILABLE!", status));
index edf6f831291f4e72bd025b467190b51bd51df37f..4cb0035a417be555f702f1f60b878119ba9fadc2 100644 (file)
@@ -93,6 +93,8 @@ static uri_test_t     uri_tests[] =   /* URI test data */
                            "http", "", "server", "/admin?DEVICE_URI=usb://HP/Photosmart%25202600%2520series?serial=MY53OK70V10400", 80, 0 },
                          { HTTP_URI_OK, "lpd://Acme%20Laser%20(01%3A23%3A45).local._tcp._printer/",
                            "lpd", "", "Acme Laser (01:23:45).local._tcp._printer", "/", 515, 0 },
+                         { HTTP_URI_OK, "ipp://HP%20Officejet%204500%20G510n-z%20%40%20Will's%20MacBook%20Pro%2015%22._ipp._tcp.local./",
+                           "ipp", "", "HP Officejet 4500 G510n-z @ Will's MacBook Pro 15\"._ipp._tcp.local.", "/", 631, 0 },
 
                          /* Missing scheme */
                          { HTTP_URI_MISSING_SCHEME, "/path/to/file/index.html",
index f0da46320de7136e7103ab94a27f927ee6a6c5fc..73023608bf552d3c366102246949413647a3db01 100644 (file)
  *                             password callback.
  *   cupsServer()            - Return the hostname/address of the current
  *                             server.
+ *   cupsSetClientCertCB()   - Set the client certificate callback.
  *   cupsSetEncryption()     - Set the encryption preference.
  *   cupsSetPasswordCB()     - Set the password callback for CUPS.
  *   cupsSetPasswordCB2()    - Set the advanced password callback for CUPS.
  *   cupsSetServer()         - Set the default server name and port.
+ *   cupsSetServerCertCB()   - Set the server certificate callback.
  *   cupsSetUser()           - Set the default user name.
  *   cupsUser()              - Return the current user's name.
  *   _cupsGetPassword()      - Get a password from the user.
 static void    cups_read_client_conf(cups_file_t *fp,
                                      _cups_globals_t *cg,
                                      const char *cups_encryption,
-                                     const char *cups_server);
+                                     const char *cups_server,
+                                     const char *cups_anyroot,
+                                     const char *cups_expiredroot,
+                                     const char *cups_expiredcerts);
 
 
 /*
@@ -167,6 +172,59 @@ cupsServer(void)
 }
 
 
+/*
+ * 'cupsSetClientCertCB()' - Set the client certificate callback.
+ *
+ * Pass @code NULL@ to restore the default callback.
+ *
+ * Note: The current certificate callback is tracked separately for each thread
+ * in a program. Multi-threaded programs that override the callback need to do
+ * so in each thread for the same callback to be used.
+ *
+ * @since CUPS 1.5@
+ */
+
+void
+cupsSetClientCertCB(
+    cups_client_cert_cb_t cb,          /* I - Callback function */
+    void                  *user_data)  /* I - User data pointer */
+{
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+
+
+  cg->client_cert_cb   = cb;
+  cg->client_cert_data = user_data;
+}
+
+
+/*
+ * 'cupsSetCredentials()' - Set the default credentials to be used for SSL/TLS
+ *                         connections.
+ *
+ * Note: The default credentials are tracked separately for each thread in a
+ * program. Multi-threaded programs that override the setting need to do so in
+ * each thread for the same setting to be used.
+ *
+ * @since CUPS 1.5@
+ */
+
+int                                    /* O - Status of call (0 = success) */
+cupsSetCredentials(
+    cups_array_t *credentials)         /* I - Array of credentials */
+{
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+
+
+  if (cupsArrayCount(credentials) < 1)
+    return (-1);
+
+  _httpFreeCredentials(cg->tls_credentials);
+  cg->tls_credentials = _httpConvertCredentials(credentials);
+
+  return (cg->tls_credentials ? 0 : -1);
+}
+
+
 /*
  * 'cupsSetEncryption()' - Set the encryption preference.
  *
@@ -305,6 +363,31 @@ cupsSetServer(const char *server)  /* I - Server name */
 }
 
 
+/*
+ * 'cupsSetServerCertCB()' - Set the server certificate callback.
+ *
+ * Pass @code NULL@ to restore the default callback.
+ *
+ * Note: The current credentials callback is tracked separately for each thread
+ * in a program. Multi-threaded programs that override the callback need to do
+ * so in each thread for the same callback to be used.
+ *
+ * @since CUPS 1.5@
+ */
+
+void
+cupsSetServerCertCB(
+    cups_server_cert_cb_t cb,          /* I - Callback function */
+    void                 *user_data)   /* I - User data pointer */
+{
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+
+
+  cg->server_cert_cb   = cb;
+  cg->server_cert_data = user_data;
+}
+
+
 /*
  * 'cupsSetUser()' - Set the default user name.
  *
@@ -428,7 +511,10 @@ _cupsSetDefaults(void)
   cups_file_t  *fp;                    /* File */
   const char   *home,                  /* Home directory of user */
                *cups_encryption,       /* CUPS_ENCRYPTION env var */
-               *cups_server;           /* CUPS_SERVER env var */
+               *cups_server,           /* CUPS_SERVER env var */
+               *cups_anyroot,          /* CUPS_ANYROOT env var */
+               *cups_expiredroot,      /* CUPS_EXPIREDROOT env var */
+               *cups_expiredcerts;     /* CUPS_EXPIREDCERTS env var */
   char         filename[1024];         /* Filename */
   _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
 
@@ -439,8 +525,11 @@ _cupsSetDefaults(void)
   * First collect environment variables...
   */
 
-  cups_encryption = getenv("CUPS_ENCRYPTION");
-  cups_server     = getenv("CUPS_SERVER");
+  cups_encryption   = getenv("CUPS_ENCRYPTION");
+  cups_server      = getenv("CUPS_SERVER");
+  cups_anyroot     = getenv("CUPS_ANYROOT");
+  cups_expiredroot  = getenv("CUPS_EXPIREDROOT");
+  cups_expiredcerts = getenv("CUPS_EXPIREDCERTS");
 
  /*
   * Then, if needed, the .cups/client.conf or .cupsrc file in the home
@@ -457,7 +546,10 @@ _cupsSetDefaults(void)
     snprintf(filename, sizeof(filename), "%s/.cups/client.conf", home);
     if ((fp = cupsFileOpen(filename, "r")) != NULL)
     {
-      cups_read_client_conf(fp, cg, cups_encryption, cups_server);
+      cups_read_client_conf(fp, cg, cups_encryption, cups_server,
+                           cups_anyroot, cups_expiredroot,
+                           cups_expiredcerts);
+
       cupsFileClose(fp);
     }
   }
@@ -472,7 +564,9 @@ _cupsSetDefaults(void)
     snprintf(filename, sizeof(filename), "%s/client.conf", cg->cups_serverroot);
     if ((fp = cupsFileOpen(filename, "r")) != NULL)
     {
-      cups_read_client_conf(fp, cg, cups_encryption, cups_server);
+      cups_read_client_conf(fp, cg, cups_encryption, cups_server,
+                           cups_anyroot, cups_expiredroot,
+                           cups_expiredcerts);
       cupsFileClose(fp);
     }
   }
@@ -536,13 +630,19 @@ cups_read_client_conf(
     cups_file_t     *fp,               /* I - File to read */
     _cups_globals_t *cg,               /* I - Global data */
     const char      *cups_encryption,  /* I - CUPS_ENCRYPTION env var */
-    const char      *cups_server)      /* I - CUPS_SERVER env var */
+    const char      *cups_server,      /* I - CUPS_SERVER env var */
+    const char     *cups_anyroot,      /* I - CUPS_ANYROOT env var */
+    const char     *cups_expiredroot,  /* I - CUPS_EXPIREDROOT env var */
+    const char     *cups_expiredcerts) /* I - CUPS_EXPIREDCERTS env var */
 {
   int  linenum;                        /* Current line number */
   char line[1024],                     /* Line from file */
         *value,                                /* Pointer into line */
        encryption[1024],               /* Encryption value */
-       server_name[1024];              /* ServerName value */
+       server_name[1024],              /* ServerName value */
+       any_root[1024],                 /* AllowAnyRoot value */
+       expired_root[1024],             /* AllowExpiredRoot value */
+       expired_certs[1024];            /* AllowExpiredCerts value */
 
 
  /*
@@ -564,6 +664,23 @@ cups_read_client_conf(
       strlcpy(server_name, value, sizeof(server_name));
       cups_server = server_name;
     }
+    else if (!cups_anyroot && !strcasecmp(line, "AllowAnyRoot") && value)
+    {
+      strlcpy(any_root, value, sizeof(any_root));
+      cups_anyroot = any_root;
+    }
+    else if (!cups_expiredroot && !strcasecmp(line, "AllowExpiredRoot") &&
+             value)
+    {
+      strlcpy(expired_root, value, sizeof(expired_root));
+      cups_expiredroot = expired_root;
+    }
+    else if (!cups_expiredcerts && !strcasecmp(line, "AllowExpiredCerts") &&
+             value)
+    {
+      strlcpy(expired_certs, value, sizeof(expired_certs));
+      cups_expiredcerts = expired_certs;
+    }
   }
 
  /*
@@ -613,6 +730,21 @@ cups_read_client_conf(
     if (!cg->ipp_port && value)
       cg->ipp_port = atoi(value);
   }
+
+  if (cups_anyroot)
+    cg->any_root = !strcasecmp(cups_anyroot, "yes") ||
+                  !strcasecmp(cups_anyroot, "on")  ||
+                  !strcasecmp(cups_anyroot, "true");
+
+  if (cups_expiredroot)
+    cg->expired_root  = !strcasecmp(cups_expiredroot, "yes") ||
+                       !strcasecmp(cups_expiredroot, "on")  ||
+                       !strcasecmp(cups_expiredroot, "true");
+
+  if (cups_expiredcerts)
+    cg->expired_certs = !strcasecmp(cups_expiredcerts, "yes") ||
+                       !strcasecmp(cups_expiredcerts, "on")  ||
+                       !strcasecmp(cups_expiredcerts, "true");
 }
 
 
index 323fea5a838d43dbb31416ff4295af103ba1dd87..92a0a52eb4f2afb391bf1f790430ef553c8eb41d 100644 (file)
@@ -20,8 +20,8 @@
 /*
  * This header defines several constants - _CUPS_DEPRECATED,
  * _CUPS_API_1_1, _CUPS_API_1_1_19, _CUPS_API_1_1_20, _CUPS_API_1_1_21,
- * _CUPS_API_1_2, _CUPS_API_1_3, _CUPS_API_1_4 - which add compiler-
- * specific attributes that flag functions that are deprecated or added
+ * _CUPS_API_1_2, _CUPS_API_1_3, _CUPS_API_1_4, _CUPS_API_1_5 - which add
+ * compiler-specific attributes that flag functions that are deprecated or added
  * in particular releases.
  *
  * On Mac OS X, the _CUPS_API_* constants are defined based on the values of
 #    ifndef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
 #      define AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER __attribute__((unavailable))
 #    endif /* !AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER */
+#    ifndef AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+#      define AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER __attribute__((unavailable))
+#    endif /* !AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER */
 #    define _CUPS_API_1_1_19 AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
 #    define _CUPS_API_1_1_20 AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
 #    define _CUPS_API_1_1_21 AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
 #    define _CUPS_API_1_2 AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
 #    define _CUPS_API_1_3 AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
 #    define _CUPS_API_1_4 AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
-#    define _CUPS_API_1_5
+#    define _CUPS_API_1_5 AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
 #  else
 #    define _CUPS_API_1_1_19
 #    define _CUPS_API_1_1_20
index 889ef6a5a0a29d220c78fc1b1786ba74ba7636b6..fe926691ec3cd4621e517ff635e5b37d85a75b03 100644 (file)
@@ -28,6 +28,7 @@ WEBIMAGES     =       \
                        images/color-wheel.png \
                        images/cups.png \
                        images/cups-icon.png \
+                       images/generic.png \
                        images/left.gif \
                        images/right.gif \
                        images/sel.gif \
index 7d12f2f0bea73075d7a68a2fb444f38f705fc130..20783b950c74793f2b41f12ac48adbb132d69fc2 100644 (file)
@@ -1,65 +1,65 @@
 # DO NOT DELETE
 
 commandtoescpx.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h
-commandtoescpx.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-commandtoescpx.o: ../cups/array.h driver.h ../cups/raster.h ../cups/cups.h
+commandtoescpx.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+commandtoescpx.o: ../cups/language.h driver.h ../cups/raster.h ../cups/cups.h
 commandtoescpx.o: ../cups/ppd.h ../cups/string-private.h ../config.h
 commandtoescpx.o: ../data/escp.h
 commandtopclx.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h
-commandtopclx.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-commandtopclx.o: ../cups/array.h driver.h ../cups/raster.h ../cups/cups.h
+commandtopclx.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+commandtopclx.o: ../cups/language.h driver.h ../cups/raster.h ../cups/cups.h
 commandtopclx.o: ../cups/ppd.h ../cups/string-private.h ../config.h
 commandtopclx.o: ../data/pcl.h
 rastertoescpx.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-rastertoescpx.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-rastertoescpx.o: ../cups/array.h ../cups/raster.h ../cups/cups.h
+rastertoescpx.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+rastertoescpx.o: ../cups/language.h ../cups/raster.h ../cups/cups.h
 rastertoescpx.o: ../cups/ppd.h ../cups/language-private.h ../cups/transcode.h
 rastertoescpx.o: ../cups/string-private.h ../config.h ../data/escp.h
 rastertopclx.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-rastertopclx.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-rastertopclx.o: ../cups/array.h ../cups/raster.h ../cups/cups.h ../cups/ppd.h
-rastertopclx.o: ../cups/language-private.h ../cups/transcode.h
+rastertopclx.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+rastertopclx.o: ../cups/language.h ../cups/raster.h ../cups/cups.h
+rastertopclx.o: ../cups/ppd.h ../cups/language-private.h ../cups/transcode.h
 rastertopclx.o: ../cups/string-private.h ../config.h pcl-common.h
 rastertopclx.o: ../data/pcl.h
 pcl-common.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-pcl-common.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+pcl-common.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pcl-common.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h pcl-common.h
 pcl-common.o: ../cups/string-private.h ../config.h ../data/pcl.h
 testcmyk.o: ../cups/string-private.h ../config.h driver.h ../cups/cups.h
 testcmyk.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-testcmyk.o: ../cups/language.h ../cups/array.h ../cups/raster.h
+testcmyk.o: ../cups/array.h ../cups/language.h ../cups/raster.h
 testcmyk.o: ../cups/cups.h ../cups/ppd.h
 testdither.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-testdither.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+testdither.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 testdither.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h
 testdither.o: ../cups/string-private.h ../config.h
 testrgb.o: ../cups/string-private.h ../config.h driver.h ../cups/cups.h
 testrgb.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-testrgb.o: ../cups/language.h ../cups/array.h ../cups/raster.h ../cups/cups.h
+testrgb.o: ../cups/array.h ../cups/language.h ../cups/raster.h ../cups/cups.h
 testrgb.o: ../cups/ppd.h
 attr.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-attr.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+attr.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 attr.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h
 attr.o: ../cups/string-private.h ../config.h
 check.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-check.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+check.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 check.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h
 cmyk.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-cmyk.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+cmyk.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 cmyk.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h
 cmyk.o: ../cups/string-private.h ../config.h
 dither.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-dither.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+dither.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 dither.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h ../config.h
 lut.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-lut.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+lut.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 lut.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h
 pack.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-pack.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+pack.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pack.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h
 rgb.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-rgb.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+rgb.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 rgb.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h
 srgb.o: driver.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-srgb.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+srgb.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 srgb.o: ../cups/raster.h ../cups/cups.h ../cups/ppd.h
index c84e4072f0d118fed8445ac653aa38af6ed42d5c..ef7b6661fc557386c94bbc5de99283fd926951d9 100644 (file)
 
 image-bmp.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-bmp.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-bmp.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-bmp.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-bmp.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-colorspace.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-colorspace.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-colorspace.o: ../cups/http.h ../cups/language.h ../cups/array.h
+image-colorspace.o: ../cups/http.h ../cups/array.h ../cups/language.h
 image-colorspace.o: ../cups/ppd.h ../cups/cups.h ../cups/debug-private.h
 image-colorspace.o: ../cups/string-private.h ../config.h
 image-gif.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-gif.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-gif.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-gif.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-gif.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-jpeg.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-jpeg.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-jpeg.o: ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-jpeg.o: ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-jpeg.o: ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-jpeg.o: ../config.h
 image-photocd.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-photocd.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-photocd.o: ../cups/http.h ../cups/language.h ../cups/array.h
+image-photocd.o: ../cups/http.h ../cups/array.h ../cups/language.h
 image-photocd.o: ../cups/ppd.h ../cups/cups.h ../cups/debug-private.h
 image-photocd.o: ../cups/string-private.h ../config.h
 image-pix.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-pix.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-pix.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-pix.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-pix.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-png.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-png.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-png.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-png.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-png.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-pnm.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-pnm.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-pnm.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-pnm.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-pnm.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-sgi.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-sgi.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-sgi.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-sgi.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-sgi.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-sgi.o: image-sgi.h
 image-sgilib.o: image-sgi.h
 image-sun.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-sun.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-sun.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-sun.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-sun.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-tiff.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-tiff.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-tiff.o: ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-tiff.o: ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-tiff.o: ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-tiff.o: ../config.h
 image-zoom.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-zoom.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-zoom.o: ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-zoom.o: ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-zoom.o: ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-zoom.o: ../config.h
 image.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 image.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 error.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 error.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-error.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+error.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 error.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 interpret.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 interpret.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-interpret.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+interpret.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 interpret.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 raster.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 raster.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-raster.o: ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+raster.o: ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 raster.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 bannertops.o: pstext.h common.h ../cups/string-private.h ../config.h
 bannertops.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 bannertops.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-bannertops.o: ../cups/language.h ../cups/array.h ../cups/transcode.h image.h
+bannertops.o: ../cups/array.h ../cups/language.h ../cups/transcode.h image.h
 bannertops.o: ../cups/raster.h ../cups/ppd.h ../cups/language-private.h
 commandtops.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 commandtops.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-commandtops.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+commandtops.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 commandtops.o: ../config.h ../cups/sidechannel.h
 gziptoany.o: ../cups/cups-private.h ../cups/cups.h ../cups/string-private.h
 gziptoany.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 gziptoany.o: ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-gziptoany.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+gziptoany.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 gziptoany.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
 gziptoany.o: ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h
 gziptoany.o: ../cups/language-private.h ../cups/transcode.h
 gziptoany.o: ../cups/thread-private.h
 imagetops.o: common.h ../cups/string-private.h ../config.h ../cups/cups.h
 imagetops.o: ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-imagetops.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+imagetops.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 imagetops.o: image.h ../cups/raster.h ../cups/ppd.h
 imagetops.o: ../cups/language-private.h ../cups/transcode.h
 imagetoraster.o: common.h ../cups/string-private.h ../config.h ../cups/cups.h
 imagetoraster.o: ../cups/ppd.h ../cups/cups.h ../cups/file.h
 imagetoraster.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-imagetoraster.o: ../cups/language.h ../cups/array.h image-private.h image.h
+imagetoraster.o: ../cups/array.h ../cups/language.h image-private.h image.h
 imagetoraster.o: ../cups/raster.h ../cups/ppd.h ../cups/debug-private.h
 imagetoraster.o: ../cups/language-private.h ../cups/transcode.h
 common.o: common.h ../cups/string-private.h ../config.h ../cups/cups.h
 common.o: ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-common.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+common.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pdftops.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-pdftops.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-pdftops.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-pdftops.o: ../config.h ../cups/language-private.h ../cups/transcode.h
+pdftops.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+pdftops.o: ../cups/language.h ../cups/string-private.h ../config.h
+pdftops.o: ../cups/language-private.h ../cups/transcode.h
 pstext.o: pstext.h common.h ../cups/string-private.h ../config.h
 pstext.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-pstext.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-pstext.o: ../cups/language.h ../cups/array.h ../cups/transcode.h
-pstext.o: ../cups/language-private.h
+pstext.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+pstext.o: ../cups/language.h ../cups/transcode.h ../cups/language-private.h
 pstops.o: common.h ../cups/string-private.h ../config.h ../cups/cups.h
 pstops.o: ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-pstops.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+pstops.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pstops.o: ../cups/file.h ../cups/array.h ../cups/language-private.h
 pstops.o: ../cups/transcode.h
 rasterbench.o: ../config.h ../cups/raster.h ../cups/cups.h ../cups/file.h
 rasterbench.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rasterbench.o: ../cups/language.h ../cups/array.h ../cups/ppd.h
+rasterbench.o: ../cups/array.h ../cups/language.h ../cups/ppd.h
 rastertoepson.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertoepson.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertoepson.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertoepson.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertoepson.o: ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertoepson.o: ../cups/raster.h ../cups/ppd.h
 rastertohp.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertohp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertohp.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertohp.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertohp.o: ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertohp.o: ../cups/raster.h ../cups/ppd.h
 rastertolabel.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertolabel.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertolabel.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertolabel.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertolabel.o: ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertolabel.o: ../cups/raster.h ../cups/ppd.h
 testimage.o: image.h ../cups/raster.h ../cups/cups.h ../cups/file.h
 testimage.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-testimage.o: ../cups/language.h ../cups/array.h ../cups/ppd.h
+testimage.o: ../cups/array.h ../cups/language.h ../cups/ppd.h
 testraster.o: image-private.h image.h ../cups/raster.h ../cups/cups.h
 testraster.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-testraster.o: ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+testraster.o: ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 testraster.o: ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 testraster.o: ../config.h
 textcommon.o: textcommon.h common.h ../cups/string-private.h ../config.h
 textcommon.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 textcommon.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-textcommon.o: ../cups/language.h ../cups/array.h ../cups/language-private.h
+textcommon.o: ../cups/array.h ../cups/language.h ../cups/language-private.h
 textcommon.o: ../cups/transcode.h
 texttops.o: textcommon.h common.h ../cups/string-private.h ../config.h
 texttops.o: ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-texttops.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-texttops.o: ../cups/language.h ../cups/array.h ../cups/language-private.h
-texttops.o: ../cups/transcode.h
+texttops.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+texttops.o: ../cups/language.h ../cups/language-private.h ../cups/transcode.h
 # DO NOT DELETE
 
 image-bmp.32.o: image-bmp.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-bmp.32.o: image-bmp.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-bmp.32.o: image-bmp.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-bmp.32.o: image-bmp.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-bmp.32.o: image-bmp.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-colorspace.32.o: image-colorspace.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-colorspace.32.o: image-colorspace.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-colorspace.32.o: image-colorspace.c  ../cups/http.h ../cups/language.h ../cups/array.h
+image-colorspace.32.o: image-colorspace.c  ../cups/http.h ../cups/array.h ../cups/language.h
 image-colorspace.32.o: image-colorspace.c  ../cups/ppd.h ../cups/cups.h ../cups/debug-private.h
 image-colorspace.32.o: image-colorspace.c  ../cups/string-private.h ../config.h
 image-gif.32.o: image-gif.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-gif.32.o: image-gif.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-gif.32.o: image-gif.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-gif.32.o: image-gif.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-gif.32.o: image-gif.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-jpeg.32.o: image-jpeg.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-jpeg.32.o: image-jpeg.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-jpeg.32.o: image-jpeg.c  ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-jpeg.32.o: image-jpeg.c  ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-jpeg.32.o: image-jpeg.c  ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-jpeg.32.o: image-jpeg.c  ../config.h
 image-photocd.32.o: image-photocd.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-photocd.32.o: image-photocd.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-photocd.32.o: image-photocd.c  ../cups/http.h ../cups/language.h ../cups/array.h
+image-photocd.32.o: image-photocd.c  ../cups/http.h ../cups/array.h ../cups/language.h
 image-photocd.32.o: image-photocd.c  ../cups/ppd.h ../cups/cups.h ../cups/debug-private.h
 image-photocd.32.o: image-photocd.c  ../cups/string-private.h ../config.h
 image-pix.32.o: image-pix.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-pix.32.o: image-pix.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-pix.32.o: image-pix.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-pix.32.o: image-pix.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-pix.32.o: image-pix.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-png.32.o: image-png.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-png.32.o: image-png.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-png.32.o: image-png.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-png.32.o: image-png.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-png.32.o: image-png.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-pnm.32.o: image-pnm.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-pnm.32.o: image-pnm.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-pnm.32.o: image-pnm.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-pnm.32.o: image-pnm.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-pnm.32.o: image-pnm.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-sgi.32.o: image-sgi.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-sgi.32.o: image-sgi.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-sgi.32.o: image-sgi.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-sgi.32.o: image-sgi.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-sgi.32.o: image-sgi.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-sgi.32.o: image-sgi.c  image-sgi.h
 image-sgilib.32.o: image-sgilib.c  image-sgi.h
 image-sun.32.o: image-sun.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-sun.32.o: image-sun.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-sun.32.o: image-sun.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-sun.32.o: image-sun.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-sun.32.o: image-sun.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-tiff.32.o: image-tiff.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-tiff.32.o: image-tiff.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-tiff.32.o: image-tiff.c  ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-tiff.32.o: image-tiff.c  ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-tiff.32.o: image-tiff.c  ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-tiff.32.o: image-tiff.c  ../config.h
 image-zoom.32.o: image-zoom.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-zoom.32.o: image-zoom.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-zoom.32.o: image-zoom.c  ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-zoom.32.o: image-zoom.c  ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-zoom.32.o: image-zoom.c  ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-zoom.32.o: image-zoom.c  ../config.h
 image.32.o: image.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image.32.o: image.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image.32.o: image.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image.32.o: image.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image.32.o: image.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 error.32.o: error.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 error.32.o: error.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-error.32.o: error.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+error.32.o: error.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 error.32.o: error.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 interpret.32.o: interpret.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 interpret.32.o: interpret.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-interpret.32.o: interpret.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+interpret.32.o: interpret.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 interpret.32.o: interpret.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 raster.32.o: raster.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 raster.32.o: raster.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-raster.32.o: raster.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+raster.32.o: raster.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 raster.32.o: raster.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 bannertops.32.o: bannertops.c  pstext.h common.h ../cups/string-private.h ../config.h
 bannertops.32.o: bannertops.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 bannertops.32.o: bannertops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-bannertops.32.o: bannertops.c  ../cups/language.h ../cups/array.h ../cups/transcode.h image.h
+bannertops.32.o: bannertops.c  ../cups/array.h ../cups/language.h ../cups/transcode.h image.h
 bannertops.32.o: bannertops.c  ../cups/raster.h ../cups/ppd.h ../cups/language-private.h
 commandtops.32.o: commandtops.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 commandtops.32.o: commandtops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-commandtops.32.o: commandtops.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
+commandtops.32.o: commandtops.c  ../cups/array.h ../cups/language.h ../cups/string-private.h
 commandtops.32.o: commandtops.c  ../config.h ../cups/sidechannel.h
 gziptoany.32.o: gziptoany.c  ../cups/cups-private.h ../cups/cups.h ../cups/string-private.h
 gziptoany.32.o: gziptoany.c  ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 gziptoany.32.o: gziptoany.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-gziptoany.32.o: gziptoany.c  ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+gziptoany.32.o: gziptoany.c  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 gziptoany.32.o: gziptoany.c  ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
 gziptoany.32.o: gziptoany.c  ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h
 gziptoany.32.o: gziptoany.c  ../cups/language-private.h ../cups/transcode.h
 gziptoany.32.o: gziptoany.c  ../cups/thread-private.h
 imagetops.32.o: imagetops.c  common.h ../cups/string-private.h ../config.h ../cups/cups.h
 imagetops.32.o: imagetops.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-imagetops.32.o: imagetops.c  ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+imagetops.32.o: imagetops.c  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 imagetops.32.o: imagetops.c  image.h ../cups/raster.h ../cups/ppd.h
 imagetops.32.o: imagetops.c  ../cups/language-private.h ../cups/transcode.h
 imagetoraster.32.o: imagetoraster.c  common.h ../cups/string-private.h ../config.h ../cups/cups.h
 imagetoraster.32.o: imagetoraster.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h
 imagetoraster.32.o: imagetoraster.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-imagetoraster.32.o: imagetoraster.c  ../cups/language.h ../cups/array.h image-private.h image.h
+imagetoraster.32.o: imagetoraster.c  ../cups/array.h ../cups/language.h image-private.h image.h
 imagetoraster.32.o: imagetoraster.c  ../cups/raster.h ../cups/ppd.h ../cups/debug-private.h
 imagetoraster.32.o: imagetoraster.c  ../cups/language-private.h ../cups/transcode.h
 common.32.o: common.c  common.h ../cups/string-private.h ../config.h ../cups/cups.h
 common.32.o: common.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-common.32.o: common.c  ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+common.32.o: common.c  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pdftops.32.o: pdftops.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-pdftops.32.o: pdftops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-pdftops.32.o: pdftops.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
-pdftops.32.o: pdftops.c  ../config.h ../cups/language-private.h ../cups/transcode.h
+pdftops.32.o: pdftops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+pdftops.32.o: pdftops.c  ../cups/language.h ../cups/string-private.h ../config.h
+pdftops.32.o: pdftops.c  ../cups/language-private.h ../cups/transcode.h
 pstext.32.o: pstext.c  pstext.h common.h ../cups/string-private.h ../config.h
 pstext.32.o: pstext.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-pstext.32.o: pstext.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-pstext.32.o: pstext.c  ../cups/language.h ../cups/array.h ../cups/transcode.h
-pstext.32.o: pstext.c  ../cups/language-private.h
+pstext.32.o: pstext.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+pstext.32.o: pstext.c  ../cups/language.h ../cups/transcode.h ../cups/language-private.h
 pstops.32.o: pstops.c  common.h ../cups/string-private.h ../config.h ../cups/cups.h
 pstops.32.o: pstops.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-pstops.32.o: pstops.c  ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+pstops.32.o: pstops.c  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pstops.32.o: pstops.c  ../cups/file.h ../cups/array.h ../cups/language-private.h
 pstops.32.o: pstops.c  ../cups/transcode.h
 rasterbench.32.o: rasterbench.c  ../config.h ../cups/raster.h ../cups/cups.h ../cups/file.h
 rasterbench.32.o: rasterbench.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rasterbench.32.o: rasterbench.c  ../cups/language.h ../cups/array.h ../cups/ppd.h
+rasterbench.32.o: rasterbench.c  ../cups/array.h ../cups/language.h ../cups/ppd.h
 rastertoepson.32.o: rastertoepson.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertoepson.32.o: rastertoepson.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertoepson.32.o: rastertoepson.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertoepson.32.o: rastertoepson.c  ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertoepson.32.o: rastertoepson.c  ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertoepson.32.o: rastertoepson.c  ../cups/raster.h ../cups/ppd.h
 rastertohp.32.o: rastertohp.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertohp.32.o: rastertohp.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertohp.32.o: rastertohp.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertohp.32.o: rastertohp.c  ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertohp.32.o: rastertohp.c  ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertohp.32.o: rastertohp.c  ../cups/raster.h ../cups/ppd.h
 rastertolabel.32.o: rastertolabel.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertolabel.32.o: rastertolabel.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertolabel.32.o: rastertolabel.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertolabel.32.o: rastertolabel.c  ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertolabel.32.o: rastertolabel.c  ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertolabel.32.o: rastertolabel.c  ../cups/raster.h ../cups/ppd.h
 testimage.32.o: testimage.c  image.h ../cups/raster.h ../cups/cups.h ../cups/file.h
 testimage.32.o: testimage.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-testimage.32.o: testimage.c  ../cups/language.h ../cups/array.h ../cups/ppd.h
+testimage.32.o: testimage.c  ../cups/array.h ../cups/language.h ../cups/ppd.h
 testraster.32.o: testraster.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 testraster.32.o: testraster.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-testraster.32.o: testraster.c  ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+testraster.32.o: testraster.c  ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 testraster.32.o: testraster.c  ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 testraster.32.o: testraster.c  ../config.h
 textcommon.32.o: textcommon.c  textcommon.h common.h ../cups/string-private.h ../config.h
 textcommon.32.o: textcommon.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 textcommon.32.o: textcommon.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-textcommon.32.o: textcommon.c  ../cups/language.h ../cups/array.h ../cups/language-private.h
+textcommon.32.o: textcommon.c  ../cups/array.h ../cups/language.h ../cups/language-private.h
 textcommon.32.o: textcommon.c  ../cups/transcode.h
 texttops.32.o: texttops.c  textcommon.h common.h ../cups/string-private.h ../config.h
 texttops.32.o: texttops.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-texttops.32.o: texttops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-texttops.32.o: texttops.c  ../cups/language.h ../cups/array.h ../cups/language-private.h
-texttops.32.o: texttops.c  ../cups/transcode.h
+texttops.32.o: texttops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+texttops.32.o: texttops.c  ../cups/language.h ../cups/language-private.h ../cups/transcode.h
 # DO NOT DELETE
 
 image-bmp.64.o: image-bmp.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-bmp.64.o: image-bmp.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-bmp.64.o: image-bmp.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-bmp.64.o: image-bmp.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-bmp.64.o: image-bmp.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-colorspace.64.o: image-colorspace.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-colorspace.64.o: image-colorspace.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-colorspace.64.o: image-colorspace.c  ../cups/http.h ../cups/language.h ../cups/array.h
+image-colorspace.64.o: image-colorspace.c  ../cups/http.h ../cups/array.h ../cups/language.h
 image-colorspace.64.o: image-colorspace.c  ../cups/ppd.h ../cups/cups.h ../cups/debug-private.h
 image-colorspace.64.o: image-colorspace.c  ../cups/string-private.h ../config.h
 image-gif.64.o: image-gif.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-gif.64.o: image-gif.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-gif.64.o: image-gif.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-gif.64.o: image-gif.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-gif.64.o: image-gif.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-jpeg.64.o: image-jpeg.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-jpeg.64.o: image-jpeg.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-jpeg.64.o: image-jpeg.c  ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-jpeg.64.o: image-jpeg.c  ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-jpeg.64.o: image-jpeg.c  ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-jpeg.64.o: image-jpeg.c  ../config.h
 image-photocd.64.o: image-photocd.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-photocd.64.o: image-photocd.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-photocd.64.o: image-photocd.c  ../cups/http.h ../cups/language.h ../cups/array.h
+image-photocd.64.o: image-photocd.c  ../cups/http.h ../cups/array.h ../cups/language.h
 image-photocd.64.o: image-photocd.c  ../cups/ppd.h ../cups/cups.h ../cups/debug-private.h
 image-photocd.64.o: image-photocd.c  ../cups/string-private.h ../config.h
 image-pix.64.o: image-pix.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-pix.64.o: image-pix.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-pix.64.o: image-pix.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-pix.64.o: image-pix.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-pix.64.o: image-pix.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-png.64.o: image-png.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-png.64.o: image-png.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-png.64.o: image-png.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-png.64.o: image-png.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-png.64.o: image-png.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-pnm.64.o: image-pnm.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-pnm.64.o: image-pnm.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-pnm.64.o: image-pnm.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-pnm.64.o: image-pnm.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-pnm.64.o: image-pnm.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-sgi.64.o: image-sgi.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-sgi.64.o: image-sgi.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-sgi.64.o: image-sgi.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-sgi.64.o: image-sgi.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-sgi.64.o: image-sgi.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-sgi.64.o: image-sgi.c  image-sgi.h
 image-sgilib.64.o: image-sgilib.c  image-sgi.h
 image-sun.64.o: image-sun.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-sun.64.o: image-sun.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image-sun.64.o: image-sun.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image-sun.64.o: image-sun.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image-sun.64.o: image-sun.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 image-tiff.64.o: image-tiff.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-tiff.64.o: image-tiff.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-tiff.64.o: image-tiff.c  ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-tiff.64.o: image-tiff.c  ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-tiff.64.o: image-tiff.c  ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-tiff.64.o: image-tiff.c  ../config.h
 image-zoom.64.o: image-zoom.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image-zoom.64.o: image-zoom.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-image-zoom.64.o: image-zoom.c  ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+image-zoom.64.o: image-zoom.c  ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 image-zoom.64.o: image-zoom.c  ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 image-zoom.64.o: image-zoom.c  ../config.h
 image.64.o: image.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 image.64.o: image.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-image.64.o: image.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+image.64.o: image.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 image.64.o: image.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 error.64.o: error.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 error.64.o: error.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-error.64.o: error.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+error.64.o: error.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 error.64.o: error.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 interpret.64.o: interpret.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 interpret.64.o: interpret.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-interpret.64.o: interpret.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+interpret.64.o: interpret.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 interpret.64.o: interpret.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 raster.64.o: raster.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 raster.64.o: raster.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-raster.64.o: raster.c  ../cups/language.h ../cups/array.h ../cups/ppd.h ../cups/cups.h
+raster.64.o: raster.c  ../cups/array.h ../cups/language.h ../cups/ppd.h ../cups/cups.h
 raster.64.o: raster.c  ../cups/debug-private.h ../cups/string-private.h ../config.h
 bannertops.64.o: bannertops.c  pstext.h common.h ../cups/string-private.h ../config.h
 bannertops.64.o: bannertops.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 bannertops.64.o: bannertops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-bannertops.64.o: bannertops.c  ../cups/language.h ../cups/array.h ../cups/transcode.h image.h
+bannertops.64.o: bannertops.c  ../cups/array.h ../cups/language.h ../cups/transcode.h image.h
 bannertops.64.o: bannertops.c  ../cups/raster.h ../cups/ppd.h ../cups/language-private.h
 commandtops.64.o: commandtops.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 commandtops.64.o: commandtops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-commandtops.64.o: commandtops.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
+commandtops.64.o: commandtops.c  ../cups/array.h ../cups/language.h ../cups/string-private.h
 commandtops.64.o: commandtops.c  ../config.h ../cups/sidechannel.h
 gziptoany.64.o: gziptoany.c  ../cups/cups-private.h ../cups/cups.h ../cups/string-private.h
 gziptoany.64.o: gziptoany.c  ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 gziptoany.64.o: gziptoany.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-gziptoany.64.o: gziptoany.c  ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+gziptoany.64.o: gziptoany.c  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 gziptoany.64.o: gziptoany.c  ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
 gziptoany.64.o: gziptoany.c  ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h
 gziptoany.64.o: gziptoany.c  ../cups/language-private.h ../cups/transcode.h
 gziptoany.64.o: gziptoany.c  ../cups/thread-private.h
 imagetops.64.o: imagetops.c  common.h ../cups/string-private.h ../config.h ../cups/cups.h
 imagetops.64.o: imagetops.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-imagetops.64.o: imagetops.c  ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+imagetops.64.o: imagetops.c  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 imagetops.64.o: imagetops.c  image.h ../cups/raster.h ../cups/ppd.h
 imagetops.64.o: imagetops.c  ../cups/language-private.h ../cups/transcode.h
 imagetoraster.64.o: imagetoraster.c  common.h ../cups/string-private.h ../config.h ../cups/cups.h
 imagetoraster.64.o: imagetoraster.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h
 imagetoraster.64.o: imagetoraster.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-imagetoraster.64.o: imagetoraster.c  ../cups/language.h ../cups/array.h image-private.h image.h
+imagetoraster.64.o: imagetoraster.c  ../cups/array.h ../cups/language.h image-private.h image.h
 imagetoraster.64.o: imagetoraster.c  ../cups/raster.h ../cups/ppd.h ../cups/debug-private.h
 imagetoraster.64.o: imagetoraster.c  ../cups/language-private.h ../cups/transcode.h
 common.64.o: common.c  common.h ../cups/string-private.h ../config.h ../cups/cups.h
 common.64.o: common.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-common.64.o: common.c  ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+common.64.o: common.c  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pdftops.64.o: pdftops.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-pdftops.64.o: pdftops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-pdftops.64.o: pdftops.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
-pdftops.64.o: pdftops.c  ../config.h ../cups/language-private.h ../cups/transcode.h
+pdftops.64.o: pdftops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+pdftops.64.o: pdftops.c  ../cups/language.h ../cups/string-private.h ../config.h
+pdftops.64.o: pdftops.c  ../cups/language-private.h ../cups/transcode.h
 pstext.64.o: pstext.c  pstext.h common.h ../cups/string-private.h ../config.h
 pstext.64.o: pstext.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-pstext.64.o: pstext.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-pstext.64.o: pstext.c  ../cups/language.h ../cups/array.h ../cups/transcode.h
-pstext.64.o: pstext.c  ../cups/language-private.h
+pstext.64.o: pstext.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+pstext.64.o: pstext.c  ../cups/language.h ../cups/transcode.h ../cups/language-private.h
 pstops.64.o: pstops.c  common.h ../cups/string-private.h ../config.h ../cups/cups.h
 pstops.64.o: pstops.c  ../cups/ppd.h ../cups/cups.h ../cups/file.h ../cups/versioning.h
-pstops.64.o: pstops.c  ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+pstops.64.o: pstops.c  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 pstops.64.o: pstops.c  ../cups/file.h ../cups/array.h ../cups/language-private.h
 pstops.64.o: pstops.c  ../cups/transcode.h
 rasterbench.64.o: rasterbench.c  ../config.h ../cups/raster.h ../cups/cups.h ../cups/file.h
 rasterbench.64.o: rasterbench.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rasterbench.64.o: rasterbench.c  ../cups/language.h ../cups/array.h ../cups/ppd.h
+rasterbench.64.o: rasterbench.c  ../cups/array.h ../cups/language.h ../cups/ppd.h
 rastertoepson.64.o: rastertoepson.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertoepson.64.o: rastertoepson.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertoepson.64.o: rastertoepson.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertoepson.64.o: rastertoepson.c  ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertoepson.64.o: rastertoepson.c  ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertoepson.64.o: rastertoepson.c  ../cups/raster.h ../cups/ppd.h
 rastertohp.64.o: rastertohp.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertohp.64.o: rastertohp.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertohp.64.o: rastertohp.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertohp.64.o: rastertohp.c  ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertohp.64.o: rastertohp.c  ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertohp.64.o: rastertohp.c  ../cups/raster.h ../cups/ppd.h
 rastertolabel.64.o: rastertolabel.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 rastertolabel.64.o: rastertolabel.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-rastertolabel.64.o: rastertolabel.c  ../cups/language.h ../cups/array.h ../cups/string-private.h
+rastertolabel.64.o: rastertolabel.c  ../cups/array.h ../cups/language.h ../cups/string-private.h
 rastertolabel.64.o: rastertolabel.c  ../config.h ../cups/language-private.h ../cups/transcode.h
 rastertolabel.64.o: rastertolabel.c  ../cups/raster.h ../cups/ppd.h
 testimage.64.o: testimage.c  image.h ../cups/raster.h ../cups/cups.h ../cups/file.h
 testimage.64.o: testimage.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-testimage.64.o: testimage.c  ../cups/language.h ../cups/array.h ../cups/ppd.h
+testimage.64.o: testimage.c  ../cups/array.h ../cups/language.h ../cups/ppd.h
 testraster.64.o: testraster.c  image-private.h image.h ../cups/raster.h ../cups/cups.h
 testraster.64.o: testraster.c  ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-testraster.64.o: testraster.c  ../cups/http.h ../cups/language.h ../cups/array.h ../cups/ppd.h
+testraster.64.o: testraster.c  ../cups/http.h ../cups/array.h ../cups/language.h ../cups/ppd.h
 testraster.64.o: testraster.c  ../cups/cups.h ../cups/debug-private.h ../cups/string-private.h
 testraster.64.o: testraster.c  ../config.h
 textcommon.64.o: textcommon.c  textcommon.h common.h ../cups/string-private.h ../config.h
 textcommon.64.o: textcommon.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
 textcommon.64.o: textcommon.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-textcommon.64.o: textcommon.c  ../cups/language.h ../cups/array.h ../cups/language-private.h
+textcommon.64.o: textcommon.c  ../cups/array.h ../cups/language.h ../cups/language-private.h
 textcommon.64.o: textcommon.c  ../cups/transcode.h
 texttops.64.o: texttops.c  textcommon.h common.h ../cups/string-private.h ../config.h
 texttops.64.o: texttops.c  ../cups/cups.h ../cups/ppd.h ../cups/cups.h ../cups/file.h
-texttops.64.o: texttops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-texttops.64.o: texttops.c  ../cups/language.h ../cups/array.h ../cups/language-private.h
-texttops.64.o: texttops.c  ../cups/transcode.h
+texttops.64.o: texttops.c  ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+texttops.64.o: texttops.c  ../cups/language.h ../cups/language-private.h ../cups/transcode.h
index da2e94cd3672fa00609bfe241ae78c67471b570f..45dd3faeccbd4e2003eb3aef939ed0f4ffb76348 100644 (file)
@@ -1,16 +1,16 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 checkpo.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-checkpo.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-checkpo.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-checkpo.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-checkpo.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-checkpo.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-checkpo.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-checkpo.o: ../cups/transcode.h ../cups/thread-private.h
+checkpo.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+checkpo.o: ../cups/language.h ../cups/string-private.h ../config.h
+checkpo.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+checkpo.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+checkpo.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+checkpo.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+checkpo.o: ../cups/thread-private.h
 po2strings.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 po2strings.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-po2strings.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+po2strings.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 po2strings.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 po2strings.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 po2strings.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -18,7 +18,7 @@ po2strings.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 po2strings.o: ../cups/transcode.h ../cups/thread-private.h
 translate.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 translate.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-translate.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+translate.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 translate.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 translate.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 translate.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
index d5130c0b050f627d051cf6e1c089a6a13c100a6b..83791215b70889477cfa0e7b66f7e67818a28e19 100644 (file)
@@ -1,8 +1,8 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 bcp.o: ../cups/string-private.h ../config.h ../cups/cups.h ../cups/file.h
-bcp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-bcp.o: ../cups/array.h ../cups/ppd.h ../cups/cups.h
+bcp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+bcp.o: ../cups/language.h ../cups/ppd.h ../cups/cups.h
 tbcp.o: ../cups/string-private.h ../config.h ../cups/cups.h ../cups/file.h
-tbcp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-tbcp.o: ../cups/array.h ../cups/ppd.h ../cups/cups.h
+tbcp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+tbcp.o: ../cups/language.h ../cups/ppd.h ../cups/cups.h
index 85597442d0b308f1e6858ee03afd8e3468cc48cd..0915fde6e73248ede290f338525087f290bc32fe 100644 (file)
@@ -1,15 +1,15 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 dbus.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-dbus.o: ../cups/http.h ../cups/language.h ../cups/array.h
+dbus.o: ../cups/http.h ../cups/array.h ../cups/language.h
 dbus.o: ../cups/string-private.h ../config.h
 mailto.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-mailto.o: ../cups/http.h ../cups/language.h ../cups/array.h
+mailto.o: ../cups/http.h ../cups/array.h ../cups/language.h
 mailto.o: ../cups/language-private.h ../cups/transcode.h
 mailto.o: ../cups/string-private.h ../config.h
 rss.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-rss.o: ../cups/http.h ../cups/language.h ../cups/array.h ../cups/language.h
+rss.o: ../cups/http.h ../cups/array.h ../cups/language.h ../cups/language.h
 rss.o: ../cups/string-private.h ../config.h ../cups/array.h
 testnotify.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h
-testnotify.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+testnotify.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 testnotify.o: ../cups/language.h ../cups/string-private.h ../config.h
index 42c909e102885497dfd5ce23ac2be5f1312c2ca3..8d49d58439e69beefab2cf21be681986b083e102 100644 (file)
@@ -2,7 +2,7 @@
 
 ppdc-array.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-array.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-array.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+ppdc-array.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 ppdc-array.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdc-array.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdc-array.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -11,7 +11,7 @@ ppdc-array.o: ../cups/language-private.h ../cups/transcode.h
 ppdc-array.o: ../cups/thread-private.h
 ppdc-attr.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-attr.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-attr.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+ppdc-attr.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 ppdc-attr.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdc-attr.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdc-attr.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -20,8 +20,8 @@ ppdc-attr.o: ../cups/language-private.h ../cups/transcode.h
 ppdc-attr.o: ../cups/thread-private.h
 ppdc-catalog.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-catalog.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-catalog.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-catalog.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-catalog.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-catalog.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-catalog.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-catalog.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-catalog.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -29,8 +29,8 @@ ppdc-catalog.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-catalog.o: ../cups/thread-private.h
 ppdc-choice.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-choice.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-choice.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-choice.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-choice.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-choice.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-choice.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-choice.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-choice.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -38,8 +38,8 @@ ppdc-choice.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-choice.o: ../cups/thread-private.h
 ppdc-constraint.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-constraint.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-constraint.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-constraint.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-constraint.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-constraint.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-constraint.o: ../cups/debug-private.h ../cups/ppd-private.h
 ppdc-constraint.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 ppdc-constraint.o: ../cups/http-private.h ../cups/http.h
@@ -48,8 +48,8 @@ ppdc-constraint.o: ../cups/language-private.h ../cups/transcode.h
 ppdc-constraint.o: ../cups/thread-private.h
 ppdc-driver.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-driver.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-driver.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-driver.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-driver.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-driver.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-driver.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-driver.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-driver.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -57,7 +57,7 @@ ppdc-driver.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-driver.o: ../cups/thread-private.h
 ppdc-file.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-file.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-file.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+ppdc-file.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 ppdc-file.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdc-file.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdc-file.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -66,8 +66,8 @@ ppdc-file.o: ../cups/language-private.h ../cups/transcode.h
 ppdc-file.o: ../cups/thread-private.h
 ppdc-filter.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-filter.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-filter.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-filter.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-filter.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-filter.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-filter.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-filter.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-filter.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -75,7 +75,7 @@ ppdc-filter.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-filter.o: ../cups/thread-private.h
 ppdc-font.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-font.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-font.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+ppdc-font.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 ppdc-font.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdc-font.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdc-font.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -84,7 +84,7 @@ ppdc-font.o: ../cups/language-private.h ../cups/transcode.h
 ppdc-font.o: ../cups/thread-private.h
 ppdc-group.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-group.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-group.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+ppdc-group.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 ppdc-group.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdc-group.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdc-group.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -93,8 +93,8 @@ ppdc-group.o: ../cups/language-private.h ../cups/transcode.h
 ppdc-group.o: ../cups/thread-private.h
 ppdc-import.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-import.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-import.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-import.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-import.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-import.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-import.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-import.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-import.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -102,8 +102,8 @@ ppdc-import.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-import.o: ../cups/thread-private.h
 ppdc-mediasize.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-mediasize.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-mediasize.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-mediasize.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-mediasize.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-mediasize.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-mediasize.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-mediasize.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-mediasize.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -111,8 +111,8 @@ ppdc-mediasize.o: ../cups/ipp.h ../cups/language-private.h
 ppdc-mediasize.o: ../cups/transcode.h ../cups/thread-private.h
 ppdc-message.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-message.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-message.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-message.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-message.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-message.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-message.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-message.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-message.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -120,8 +120,8 @@ ppdc-message.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-message.o: ../cups/thread-private.h
 ppdc-option.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-option.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-option.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-option.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-option.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-option.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-option.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-option.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-option.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -129,8 +129,8 @@ ppdc-option.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-option.o: ../cups/thread-private.h
 ppdc-profile.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-profile.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-profile.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-profile.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-profile.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-profile.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-profile.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-profile.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-profile.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -138,8 +138,8 @@ ppdc-profile.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-profile.o: ../cups/thread-private.h
 ppdc-shared.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-shared.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-shared.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-shared.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-shared.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-shared.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-shared.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-shared.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-shared.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -147,8 +147,8 @@ ppdc-shared.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-shared.o: ../cups/thread-private.h
 ppdc-source.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-source.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-source.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-source.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-source.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-source.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-source.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-source.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-source.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -158,8 +158,8 @@ ppdc-source.o: ../data/epson.h ../data/escp.h ../data/hp.h ../data/label.h
 ppdc-source.o: ../data/pcl.h
 ppdc-string.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-string.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-string.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-string.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-string.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-string.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-string.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-string.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-string.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -167,8 +167,8 @@ ppdc-string.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-string.o: ../cups/thread-private.h
 ppdc-variable.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc-variable.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdc-variable.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-ppdc-variable.o: ../cups/array.h ../cups/string-private.h ../config.h
+ppdc-variable.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+ppdc-variable.o: ../cups/language.h ../cups/string-private.h ../config.h
 ppdc-variable.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ppdc-variable.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ppdc-variable.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -176,7 +176,7 @@ ppdc-variable.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 ppdc-variable.o: ../cups/thread-private.h
 genstrings.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 genstrings.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-genstrings.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+genstrings.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 genstrings.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 genstrings.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 genstrings.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -185,7 +185,7 @@ genstrings.o: ../cups/language-private.h ../cups/transcode.h
 genstrings.o: ../cups/thread-private.h
 ppdc.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdc.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h ../cups/ipp.h
-ppdc.o: ../cups/http.h ../cups/language.h ../cups/array.h
+ppdc.o: ../cups/http.h ../cups/array.h ../cups/language.h
 ppdc.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdc.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdc.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -194,7 +194,7 @@ ppdc.o: ../cups/language-private.h ../cups/transcode.h
 ppdc.o: ../cups/thread-private.h
 ppdhtml.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdhtml.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h ../cups/ipp.h
-ppdhtml.o: ../cups/http.h ../cups/language.h ../cups/array.h
+ppdhtml.o: ../cups/http.h ../cups/array.h ../cups/language.h
 ppdhtml.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdhtml.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdhtml.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -203,7 +203,7 @@ ppdhtml.o: ../cups/language-private.h ../cups/transcode.h
 ppdhtml.o: ../cups/thread-private.h
 ppdi.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdi.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h ../cups/ipp.h
-ppdi.o: ../cups/http.h ../cups/language.h ../cups/array.h
+ppdi.o: ../cups/http.h ../cups/array.h ../cups/language.h
 ppdi.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdi.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdi.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -211,17 +211,16 @@ ppdi.o: ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h
 ppdi.o: ../cups/language-private.h ../cups/transcode.h
 ppdi.o: ../cups/thread-private.h
 ppdmerge.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ppdmerge.o: ../cups/ipp.h ../cups/http.h ../cups/versioning.h
-ppdmerge.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-ppdmerge.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-ppdmerge.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-ppdmerge.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-ppdmerge.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-ppdmerge.o: ../cups/transcode.h ../cups/thread-private.h
-ppdmerge.o: ../cups/ppd-private.h ../cups/array.h
+ppdmerge.o: ../cups/ipp.h ../cups/http.h ../cups/versioning.h ../cups/array.h
+ppdmerge.o: ../cups/language.h ../cups/string-private.h ../config.h
+ppdmerge.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+ppdmerge.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+ppdmerge.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+ppdmerge.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+ppdmerge.o: ../cups/thread-private.h ../cups/ppd-private.h ../cups/array.h
 ppdpo.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 ppdpo.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h ../cups/ipp.h
-ppdpo.o: ../cups/http.h ../cups/language.h ../cups/array.h
+ppdpo.o: ../cups/http.h ../cups/array.h ../cups/language.h
 ppdpo.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
 ppdpo.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
 ppdpo.o: ../cups/pwg-private.h ../cups/http-private.h ../cups/http.h
@@ -230,8 +229,8 @@ ppdpo.o: ../cups/language-private.h ../cups/transcode.h
 ppdpo.o: ../cups/thread-private.h
 testcatalog.o: ppdc-private.h ppdc.h ../cups/file.h ../cups/versioning.h
 testcatalog.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-testcatalog.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-testcatalog.o: ../cups/array.h ../cups/string-private.h ../config.h
+testcatalog.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+testcatalog.o: ../cups/language.h ../cups/string-private.h ../config.h
 testcatalog.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 testcatalog.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 testcatalog.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
index 9d86f98dc8822fe1a2dd197a0ce4abefacf0f8a9..d1e099d3956e9f7ec6328510e66b2f352ab7e160 100644 (file)
@@ -1,8 +1,8 @@
 # DO NOT DELETE
 
 auth.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-auth.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-auth.o: ../cups/array.h ../cups/string-private.h ../config.h
+auth.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+auth.o: ../cups/language.h ../cups/string-private.h ../config.h
 auth.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 auth.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 auth.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -12,19 +12,19 @@ auth.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 auth.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 auth.o: network.h subscriptions.h
 banners.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-banners.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-banners.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-banners.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-banners.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-banners.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-banners.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-banners.o: ../cups/transcode.h ../cups/thread-private.h mime.h
-banners.o: ../cups/array.h ../cups/file.h sysman.h statbuf.h cert.h auth.h
-banners.o: client.h policy.h printers.h ../cups/pwg-private.h classes.h job.h
-banners.o: conf.h banners.h dirsvc.h network.h subscriptions.h ../cups/dir.h
+banners.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+banners.o: ../cups/language.h ../cups/string-private.h ../config.h
+banners.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+banners.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+banners.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+banners.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+banners.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+banners.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+banners.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+banners.o: network.h subscriptions.h ../cups/dir.h
 cert.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-cert.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-cert.o: ../cups/array.h ../cups/string-private.h ../config.h
+cert.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+cert.o: ../cups/language.h ../cups/string-private.h ../config.h
 cert.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 cert.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 cert.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -34,30 +34,30 @@ cert.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 cert.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 cert.o: network.h subscriptions.h
 classes.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-classes.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-classes.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-classes.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-classes.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-classes.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-classes.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-classes.o: ../cups/transcode.h ../cups/thread-private.h mime.h
-classes.o: ../cups/array.h ../cups/file.h sysman.h statbuf.h cert.h auth.h
-classes.o: client.h policy.h printers.h ../cups/pwg-private.h classes.h job.h
-classes.o: conf.h banners.h dirsvc.h network.h subscriptions.h
+classes.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+classes.o: ../cups/language.h ../cups/string-private.h ../config.h
+classes.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+classes.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+classes.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+classes.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+classes.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+classes.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+classes.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+classes.o: network.h subscriptions.h
 client.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-client.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-client.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-client.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-client.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-client.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-client.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-client.o: ../cups/transcode.h ../cups/thread-private.h mime.h ../cups/array.h
-client.o: ../cups/file.h sysman.h statbuf.h cert.h auth.h client.h policy.h
-client.o: printers.h ../cups/pwg-private.h classes.h job.h conf.h banners.h
-client.o: dirsvc.h network.h subscriptions.h
+client.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+client.o: ../cups/language.h ../cups/string-private.h ../config.h
+client.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+client.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+client.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+client.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+client.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+client.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+client.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+client.o: network.h subscriptions.h
 conf.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-conf.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-conf.o: ../cups/array.h ../cups/string-private.h ../config.h
+conf.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+conf.o: ../cups/language.h ../cups/string-private.h ../config.h
 conf.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 conf.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 conf.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -67,19 +67,19 @@ conf.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 conf.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 conf.o: network.h subscriptions.h
 dirsvc.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-dirsvc.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-dirsvc.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-dirsvc.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-dirsvc.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-dirsvc.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-dirsvc.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-dirsvc.o: ../cups/transcode.h ../cups/thread-private.h mime.h ../cups/array.h
-dirsvc.o: ../cups/file.h sysman.h statbuf.h cert.h auth.h client.h policy.h
-dirsvc.o: printers.h ../cups/pwg-private.h classes.h job.h conf.h banners.h
-dirsvc.o: dirsvc.h network.h subscriptions.h
+dirsvc.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+dirsvc.o: ../cups/language.h ../cups/string-private.h ../config.h
+dirsvc.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+dirsvc.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+dirsvc.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+dirsvc.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+dirsvc.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+dirsvc.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+dirsvc.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+dirsvc.o: network.h subscriptions.h
 env.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-env.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-env.o: ../cups/array.h ../cups/string-private.h ../config.h
+env.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+env.o: ../cups/language.h ../cups/string-private.h ../config.h
 env.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 env.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 env.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -89,8 +89,8 @@ env.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 env.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 env.o: network.h subscriptions.h
 main.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-main.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-main.o: ../cups/array.h ../cups/string-private.h ../config.h
+main.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+main.o: ../cups/language.h ../cups/string-private.h ../config.h
 main.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 main.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 main.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -100,8 +100,8 @@ main.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 main.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 main.o: network.h subscriptions.h ../cups/dir.h
 ipp.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ipp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-ipp.o: ../cups/array.h ../cups/string-private.h ../config.h
+ipp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+ipp.o: ../cups/language.h ../cups/string-private.h ../config.h
 ipp.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 ipp.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 ipp.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -111,19 +111,19 @@ ipp.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 ipp.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 ipp.o: network.h subscriptions.h ../cups/ppd-private.h
 listen.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-listen.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-listen.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-listen.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-listen.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-listen.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-listen.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-listen.o: ../cups/transcode.h ../cups/thread-private.h mime.h ../cups/array.h
-listen.o: ../cups/file.h sysman.h statbuf.h cert.h auth.h client.h policy.h
-listen.o: printers.h ../cups/pwg-private.h classes.h job.h conf.h banners.h
-listen.o: dirsvc.h network.h subscriptions.h
+listen.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+listen.o: ../cups/language.h ../cups/string-private.h ../config.h
+listen.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+listen.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+listen.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+listen.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+listen.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+listen.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+listen.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+listen.o: network.h subscriptions.h
 job.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-job.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-job.o: ../cups/array.h ../cups/string-private.h ../config.h
+job.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+job.o: ../cups/language.h ../cups/string-private.h ../config.h
 job.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 job.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 job.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -133,8 +133,8 @@ job.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 job.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 job.o: network.h subscriptions.h ../cups/backend.h ../cups/dir.h
 log.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-log.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-log.o: ../cups/array.h ../cups/string-private.h ../config.h
+log.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+log.o: ../cups/language.h ../cups/string-private.h ../config.h
 log.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 log.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 log.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
@@ -146,8 +146,8 @@ log.o: network.h subscriptions.h
 network.o: ../cups/http-private.h ../config.h ../cups/http.h
 network.o: ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h cupsd.h
 network.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-network.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-network.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+network.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+network.o: ../cups/language.h ../cups/string-private.h
 network.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 network.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 network.o: ../cups/language-private.h ../cups/transcode.h
@@ -156,53 +156,52 @@ network.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 network.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 network.o: network.h subscriptions.h
 policy.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-policy.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-policy.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-policy.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-policy.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-policy.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-policy.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-policy.o: ../cups/transcode.h ../cups/thread-private.h mime.h ../cups/array.h
-policy.o: ../cups/file.h sysman.h statbuf.h cert.h auth.h client.h policy.h
-policy.o: printers.h ../cups/pwg-private.h classes.h job.h conf.h banners.h
-policy.o: dirsvc.h network.h subscriptions.h
+policy.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+policy.o: ../cups/language.h ../cups/string-private.h ../config.h
+policy.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+policy.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+policy.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+policy.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+policy.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+policy.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+policy.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+policy.o: network.h subscriptions.h
 printers.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-printers.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-printers.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-printers.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-printers.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-printers.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-printers.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-printers.o: ../cups/transcode.h ../cups/thread-private.h mime.h
-printers.o: ../cups/array.h ../cups/file.h sysman.h statbuf.h cert.h auth.h
-printers.o: client.h policy.h printers.h ../cups/pwg-private.h classes.h
-printers.o: job.h conf.h banners.h dirsvc.h network.h subscriptions.h
-printers.o: ../cups/dir.h
+printers.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+printers.o: ../cups/language.h ../cups/string-private.h ../config.h
+printers.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+printers.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+printers.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+printers.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+printers.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+printers.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+printers.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+printers.o: network.h subscriptions.h ../cups/dir.h
 process.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-process.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-process.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-process.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-process.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-process.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-process.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-process.o: ../cups/transcode.h ../cups/thread-private.h mime.h
-process.o: ../cups/array.h ../cups/file.h sysman.h statbuf.h cert.h auth.h
-process.o: client.h policy.h printers.h ../cups/pwg-private.h classes.h job.h
-process.o: conf.h banners.h dirsvc.h network.h subscriptions.h
+process.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+process.o: ../cups/language.h ../cups/string-private.h ../config.h
+process.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+process.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+process.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+process.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+process.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+process.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+process.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+process.o: network.h subscriptions.h
 quotas.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-quotas.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-quotas.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-quotas.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-quotas.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-quotas.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-quotas.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-quotas.o: ../cups/transcode.h ../cups/thread-private.h mime.h ../cups/array.h
-quotas.o: ../cups/file.h sysman.h statbuf.h cert.h auth.h client.h policy.h
-quotas.o: printers.h ../cups/pwg-private.h classes.h job.h conf.h banners.h
-quotas.o: dirsvc.h network.h subscriptions.h
+quotas.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+quotas.o: ../cups/language.h ../cups/string-private.h ../config.h
+quotas.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+quotas.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+quotas.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+quotas.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+quotas.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+quotas.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+quotas.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+quotas.o: network.h subscriptions.h
 removefile.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 removefile.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-removefile.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+removefile.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 removefile.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 removefile.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 removefile.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -212,42 +211,42 @@ removefile.o: ../cups/array.h ../cups/file.h sysman.h statbuf.h cert.h auth.h
 removefile.o: client.h policy.h printers.h ../cups/pwg-private.h classes.h
 removefile.o: job.h conf.h banners.h dirsvc.h network.h subscriptions.h
 select.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-select.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-select.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-select.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-select.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-select.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-select.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-select.o: ../cups/transcode.h ../cups/thread-private.h mime.h ../cups/array.h
-select.o: ../cups/file.h sysman.h statbuf.h cert.h auth.h client.h policy.h
-select.o: printers.h ../cups/pwg-private.h classes.h job.h conf.h banners.h
-select.o: dirsvc.h network.h subscriptions.h
+select.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+select.o: ../cups/language.h ../cups/string-private.h ../config.h
+select.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+select.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+select.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+select.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+select.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+select.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+select.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+select.o: network.h subscriptions.h
 server.o: ../cups/http-private.h ../config.h ../cups/http.h
 server.o: ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h cupsd.h
 server.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-server.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-server.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-server.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
-server.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+server.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+server.o: ../cups/language.h ../cups/string-private.h ../cups/debug-private.h
+server.o: ../cups/ppd-private.h ../cups/ppd.h ../cups/cups.h
+server.o: ../cups/pwg-private.h ../cups/http-private.h
 server.o: ../cups/language-private.h ../cups/transcode.h
 server.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
 server.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
 server.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
 server.o: network.h subscriptions.h
 statbuf.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-statbuf.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-statbuf.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-statbuf.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-statbuf.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-statbuf.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-statbuf.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-statbuf.o: ../cups/transcode.h ../cups/thread-private.h mime.h
-statbuf.o: ../cups/array.h ../cups/file.h sysman.h statbuf.h cert.h auth.h
-statbuf.o: client.h policy.h printers.h ../cups/pwg-private.h classes.h job.h
-statbuf.o: conf.h banners.h dirsvc.h network.h subscriptions.h
+statbuf.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+statbuf.o: ../cups/language.h ../cups/string-private.h ../config.h
+statbuf.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+statbuf.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+statbuf.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+statbuf.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+statbuf.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+statbuf.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+statbuf.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+statbuf.o: network.h subscriptions.h
 subscriptions.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 subscriptions.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-subscriptions.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+subscriptions.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 subscriptions.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 subscriptions.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 subscriptions.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -258,16 +257,16 @@ subscriptions.o: ../cups/file.h sysman.h statbuf.h cert.h auth.h client.h
 subscriptions.o: policy.h printers.h ../cups/pwg-private.h classes.h job.h
 subscriptions.o: conf.h banners.h dirsvc.h network.h subscriptions.h
 sysman.o: cupsd.h ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-sysman.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-sysman.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-sysman.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-sysman.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-sysman.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-sysman.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-sysman.o: ../cups/transcode.h ../cups/thread-private.h mime.h ../cups/array.h
-sysman.o: ../cups/file.h sysman.h statbuf.h cert.h auth.h client.h policy.h
-sysman.o: printers.h ../cups/pwg-private.h classes.h job.h conf.h banners.h
-sysman.o: dirsvc.h network.h subscriptions.h
+sysman.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+sysman.o: ../cups/language.h ../cups/string-private.h ../config.h
+sysman.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+sysman.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+sysman.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+sysman.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+sysman.o: ../cups/thread-private.h mime.h ../cups/array.h ../cups/file.h
+sysman.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+sysman.o: ../cups/pwg-private.h classes.h job.h conf.h banners.h dirsvc.h
+sysman.o: network.h subscriptions.h
 filter.o: ../cups/string-private.h ../config.h ../cups/debug-private.h mime.h
 filter.o: ../cups/array.h ../cups/ipp.h ../cups/file.h
 mime.o: ../cups/string-private.h ../config.h ../cups/debug-private.h
@@ -277,7 +276,7 @@ type.o: ../cups/string-private.h ../config.h ../cups/debug-private.h mime.h
 type.o: ../cups/array.h ../cups/ipp.h ../cups/file.h
 cupsfilter.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 cupsfilter.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cupsfilter.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+cupsfilter.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 cupsfilter.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 cupsfilter.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 cupsfilter.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -286,48 +285,48 @@ cupsfilter.o: ../cups/transcode.h ../cups/thread-private.h mime.h
 cupsfilter.o: ../cups/array.h ../cups/file.h
 cups-deviced.o: util.h ../cups/file-private.h ../cups/cups-private.h
 cups-deviced.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h
-cups-deviced.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-cups-deviced.o: ../cups/array.h ../cups/string-private.h ../config.h
+cups-deviced.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+cups-deviced.o: ../cups/language.h ../cups/string-private.h ../config.h
 cups-deviced.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 cups-deviced.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 cups-deviced.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
 cups-deviced.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 cups-deviced.o: ../cups/thread-private.h ../cups/array.h ../cups/dir.h
 cups-lpd.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-cups-lpd.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cups-lpd.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-cups-lpd.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-cups-lpd.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-cups-lpd.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-cups-lpd.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-cups-lpd.o: ../cups/transcode.h ../cups/thread-private.h
+cups-lpd.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+cups-lpd.o: ../cups/language.h ../cups/string-private.h ../config.h
+cups-lpd.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+cups-lpd.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+cups-lpd.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+cups-lpd.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+cups-lpd.o: ../cups/thread-private.h
 cups-polld.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 cups-polld.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cups-polld.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+cups-polld.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 cups-polld.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 cups-polld.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 cups-polld.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
 cups-polld.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 cups-polld.o: ../cups/transcode.h ../cups/thread-private.h
 testdirsvc.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h
-testdirsvc.o: ../cups/ipp.h ../cups/http.h ../cups/language.h ../cups/array.h
+testdirsvc.o: ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h
 testdirsvc.o: ../cups/string-private.h ../config.h
 testlpd.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-testlpd.o: ../cups/http.h ../cups/language.h ../cups/array.h
+testlpd.o: ../cups/http.h ../cups/array.h ../cups/language.h
 testlpd.o: ../cups/string-private.h ../config.h
 testmime.o: ../cups/string-private.h ../config.h ../cups/dir.h
 testmime.o: ../cups/versioning.h mime.h ../cups/array.h ../cups/ipp.h
 testmime.o: ../cups/file.h
 testspeed.o: ../cups/string-private.h ../config.h ../cups/cups.h
 testspeed.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-testspeed.o: ../cups/language.h ../cups/array.h ../cups/language.h
+testspeed.o: ../cups/array.h ../cups/language.h ../cups/language.h
 testspeed.o: ../cups/debug-private.h
 testsub.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h
-testsub.o: ../cups/http.h ../cups/language.h ../cups/array.h
+testsub.o: ../cups/http.h ../cups/array.h ../cups/language.h
 testsub.o: ../cups/debug-private.h ../cups/string-private.h ../config.h
 util.o: util.h ../cups/file-private.h ../cups/cups-private.h ../cups/cups.h
 util.o: ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-util.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+util.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 util.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 util.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 util.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -335,8 +334,8 @@ util.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 util.o: ../cups/transcode.h ../cups/thread-private.h
 cups-driverd.o: util.h ../cups/file-private.h ../cups/cups-private.h
 cups-driverd.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h
-cups-driverd.o: ../cups/ipp.h ../cups/http.h ../cups/language.h
-cups-driverd.o: ../cups/array.h ../cups/string-private.h ../config.h
+cups-driverd.o: ../cups/ipp.h ../cups/http.h ../cups/array.h
+cups-driverd.o: ../cups/language.h ../cups/string-private.h ../config.h
 cups-driverd.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 cups-driverd.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 cups-driverd.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
index 1443cb79514f46f047e4e27bdb383535a8c4d809..3ed65e9de6933291f4bcd1d7cbe55f2a71086aed 100644 (file)
 
 #include "cupsd.h"
 
-#ifdef HAVE_CDSASSL
-#  include <Security/Security.h>
-#  include <Security/SecItem.h>
-#  ifdef HAVE_SECITEMPRIV_H
-#    include <Security/SecItemPriv.h>
-#  else /* Declare constant from that header... */
-extern const CFTypeRef kSecClassIdentity;
-#  endif /* HAVE_SECITEMPRIV_H */
-#  ifdef HAVE_SECIDENTITYSEARCHPRIV_H
-#    include <Security/SecIdentitySearchPriv.h>
-#  else /* Declare prototype for function in that header... */
-extern OSStatus SecIdentitySearchCreateWithPolicy(SecPolicyRef policy,
-                               CFStringRef idString, CSSM_KEYUSE keyUsage,
-                               CFTypeRef keychainOrArray,
-                               Boolean returnOnlyValidIdentities,
-                               SecIdentitySearchRef* searchRef);
-#  endif /* HAVE_SECIDENTITYSEARCHPRIV_H */
-#  ifdef HAVE_SECPOLICYPRIV_H
-#    include <Security/SecPolicyPriv.h>
-#  else /* Declare prototype for function in that header... */
-extern OSStatus SecPolicySetValue(SecPolicyRef policyRef,
-                                  const CSSM_DATA *value);
-#  endif /* HAVE_SECPOLICYPRIV_H */
-#  ifdef HAVE_SECBASEPRIV_H
-#    include <Security/SecBasePriv.h>
-#  else /* Declare prototype for function in that header... */
-extern const char *cssmErrorString(int error);
-#  endif /* HAVE_SECBASEPRIV_H */
-#endif /* HAVE_CDSASSL */
-
-#ifdef HAVE_GNUTLS
-#  include <gnutls/x509.h>
-#endif /* HAVE_GNUTLS */
-
 #ifdef HAVE_TCPD_H
 #  include <tcpd.h>
 #endif /* HAVE_TCPD_H */
@@ -538,15 +504,12 @@ cupsdCloseClient(cupsd_client_t *con)     /* I - Client to close */
   int          partial;                /* Do partial close for SSL? */
 #ifdef HAVE_LIBSSL
   SSL_CTX      *context;               /* Context for encryption */
-  SSL          *conn;                  /* Connection for encryption */
   unsigned long        error;                  /* Error code */
 #elif defined(HAVE_GNUTLS)
-  http_tls_t   *conn;                  /* TLS connection information */
   int          error;                  /* Error code */
   gnutls_certificate_server_credentials *credentials;
                                        /* TLS credentials */
 #  elif defined(HAVE_CDSASSL)
-  http_tls_t   *conn;                  /* CDSA connection information */
 #endif /* HAVE_LIBSSL */
 
 
@@ -570,10 +533,9 @@ cupsdCloseClient(cupsd_client_t *con)      /* I - Client to close */
     partial = 1;
 
 #  ifdef HAVE_LIBSSL
-    conn    = (SSL *)(con->http.tls);
-    context = SSL_get_SSL_CTX(conn);
+    context = SSL_get_SSL_CTX(con->http.tls);
 
-    switch (SSL_shutdown(conn))
+    switch (SSL_shutdown(con->http.tls))
     {
       case 1 :
           cupsdLogMessage(CUPSD_LOG_DEBUG,
@@ -590,13 +552,12 @@ cupsdCloseClient(cupsd_client_t *con)     /* I - Client to close */
     }
 
     SSL_CTX_free(context);
-    SSL_free(conn);
+    SSL_free(con->http.tls);
 
 #  elif defined(HAVE_GNUTLS)
-    conn        = (http_tls_t *)(con->http.tls);
-    credentials = (gnutls_certificate_server_credentials *)(conn->credentials);
+    credentials = (gnutls_certificate_server_credentials *)(con->http.tls_credentials);
 
-    error = gnutls_bye(conn->session, GNUTLS_SHUT_WR);
+    error = gnutls_bye(con->http.tls, GNUTLS_SHUT_WR);
     switch (error)
     {
       case GNUTLS_E_SUCCESS:
@@ -609,23 +570,19 @@ cupsdCloseClient(cupsd_client_t *con)     /* I - Client to close */
        break;
     }
 
-    gnutls_deinit(conn->session);
+    gnutls_deinit(con->http.tls);
     gnutls_certificate_free_credentials(*credentials);
     free(credentials);
-    free(conn);
 
 #  elif defined(HAVE_CDSASSL)
-    conn = (http_tls_t *)(con->http.tls);
-
-    while (SSLClose(conn->session) == errSSLWouldBlock)
+    while (SSLClose(con->http.tls) == errSSLWouldBlock)
       usleep(1000);
 
-    SSLDisposeContext(conn->session);
+    SSLDisposeContext(con->http.tls);
 
-    if (conn->certsArray)
-      CFRelease(conn->certsArray);
+    if (con->http.tls_credentials)
+      CFRelease(con->http.tls_credentials);
 
-    free(conn);
 #  endif /* HAVE_LIBSSL */
 
     con->http.tls = NULL;
@@ -1382,6 +1339,35 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
                break;
              }
            }
+            else if ((!strncmp(con->uri, "/printers/", 10) ||
+                     !strncmp(con->uri, "/classes/", 9)) &&
+                    !strcmp(con->uri + strlen(con->uri) - 4, ".png"))
+           {
+            /*
+             * Send icon file - get the real queue name since queue names are
+             * not case sensitive but filenames can be...
+             */
+
+             con->uri[strlen(con->uri) - 4] = '\0';    /* Drop ".png" */
+
+              if (!strncmp(con->uri, "/printers/", 10))
+                p = cupsdFindPrinter(con->uri + 10);
+              else
+                p = cupsdFindClass(con->uri + 9);
+
+              if (p)
+               snprintf(con->uri, sizeof(con->uri), "/icons/%s.png", p->name);
+             else
+             {
+               if (!cupsdSendError(con, HTTP_NOT_FOUND, CUPSD_AUTH_NONE))
+               {
+                 cupsdCloseClient(con);
+                 return;
+               }
+
+               break;
+             }
+           }
 
            if ((!strncmp(con->uri, "/admin", 6) &&
                 strncmp(con->uri, "/admin/conf/", 12) &&
@@ -3091,13 +3077,12 @@ data_ready(cupsd_client_t *con)         /* I - Client */
     if (SSL_pending((SSL *)(con->http.tls)))
       return (1);
 #  elif defined(HAVE_GNUTLS)
-    if (gnutls_record_check_pending(((http_tls_t *)(con->http.tls))->session))
+    if (gnutls_record_check_pending(con->http.tls))
       return (1);
 #  elif defined(HAVE_CDSASSL)
     size_t bytes;                      /* Bytes that are available */
 
-    if (!SSLGetBufferedReadSize(((http_tls_t *)(con->http.tls))->session,
-                                &bytes) && bytes > 0)
+    if (!SSLGetBufferedReadSize(con->http.tls, &bytes) && bytes > 0)
       return (1);
 #  endif /* HAVE_LIBSSL */
   }
@@ -3117,7 +3102,6 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
 {
 #  ifdef HAVE_LIBSSL
   SSL_CTX      *context;               /* Context for encryption */
-  SSL          *conn;                  /* Connection for encryption */
   BIO          *bio;                   /* BIO data */
   unsigned long        error;                  /* Error code */
 
@@ -3154,10 +3138,10 @@ encrypt_client(cupsd_client_t *con)     /* I - Client to encrypt */
   bio = BIO_new(_httpBIOMethods());
   BIO_ctrl(bio, BIO_C_SET_FILE_PTR, 0, (char *)HTTP(con));
 
-  conn = SSL_new(context);
-  SSL_set_bio(conn, bio, bio);
+  con->http.tls = SSL_new(context);
+  SSL_set_bio(con->http.tls, bio, bio);
 
-  if (SSL_accept(conn) != 1)
+  if (SSL_accept(con->http.tls) != 1)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to encrypt connection from %s!",
                     con->http.hostname);
@@ -3166,18 +3150,17 @@ encrypt_client(cupsd_client_t *con)     /* I - Client to encrypt */
       cupsdLogMessage(CUPSD_LOG_ERROR, "%s", ERR_error_string(error, NULL));
 
     SSL_CTX_free(context);
-    SSL_free(conn);
+    SSL_free(con->http.tls);
+    con->http.tls = NULL;
     return (0);
   }
 
   cupsdLogMessage(CUPSD_LOG_DEBUG, "Connection from %s now encrypted.",
                   con->http.hostname);
 
-  con->http.tls = conn;
   return (1);
 
 #  elif defined(HAVE_GNUTLS)
-  http_tls_t   *conn;                  /* TLS session object */
   int          error;                  /* Error code */
   gnutls_certificate_server_credentials *credentials;
                                        /* TLS credentials */
@@ -3204,11 +3187,6 @@ encrypt_client(cupsd_client_t *con)      /* I - Client to encrypt */
   * Create the SSL object and perform the SSL handshake...
   */
 
-  conn = (http_tls_t *)malloc(sizeof(http_tls_t));
-
-  if (conn == NULL)
-    return (0);
-
   credentials = (gnutls_certificate_server_credentials *)
                     malloc(sizeof(gnutls_certificate_server_credentials));
   if (credentials == NULL)
@@ -3217,7 +3195,6 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
                     "Unable to encrypt connection from %s - %s",
                     con->http.hostname, strerror(errno));
 
-    free(conn);
     return (0);
   }
 
@@ -3225,14 +3202,14 @@ encrypt_client(cupsd_client_t *con)     /* I - Client to encrypt */
   gnutls_certificate_set_x509_key_file(*credentials, ServerCertificate,
                                       ServerKey, GNUTLS_X509_FMT_PEM);
 
-  gnutls_init(&(conn->session), GNUTLS_SERVER);
-  gnutls_set_default_priority(conn->session);
-  gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials);
-  gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr)HTTP(con));
-  gnutls_transport_set_pull_function(conn->session, _httpReadGNUTLS);
-  gnutls_transport_set_push_function(conn->session, _httpWriteGNUTLS);
+  gnutls_init(&con->http.tls), GNUTLS_SERVER);
+  gnutls_set_default_priority(con->http.tls);
+  gnutls_credentials_set(con->http.tls, GNUTLS_CRD_CERTIFICATE, *credentials);
+  gnutls_transport_set_ptr(con->http.tls, (gnutls_transport_ptr)HTTP(con));
+  gnutls_transport_set_pull_function(con->http.tls, _httpReadGNUTLS);
+  gnutls_transport_set_push_function(con->http.tls, _httpWriteGNUTLS);
 
-  error = gnutls_handshake(conn->session);
+  error = gnutls_handshake(con->http.tls);
 
   if (error != GNUTLS_E_SUCCESS)
   {
@@ -3240,9 +3217,9 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
                     "Unable to encrypt connection from %s - %s",
                     con->http.hostname, gnutls_strerror(error));
 
-    gnutls_deinit(conn->session);
+    gnutls_deinit(con->http.tls);
     gnutls_certificate_free_credentials(*credentials);
-    free(conn);
+    con->http.tls = NULL;
     free(credentials);
     return (0);
   }
@@ -3250,36 +3227,30 @@ encrypt_client(cupsd_client_t *con)     /* I - Client to encrypt */
   cupsdLogMessage(CUPSD_LOG_DEBUG, "Connection from %s now encrypted.",
                   con->http.hostname);
 
-  conn->credentials = credentials;
-  con->http.tls = conn;
+  con->http.tls_credentials = credentials;
   return (1);
 
 #  elif defined(HAVE_CDSASSL)
   OSStatus     error;                  /* Error code */
-  http_tls_t   *conn;                  /* CDSA connection information */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2, "encrypt_client(con=%p(%d))", con,
                   con->http.fd);
 
-  if ((conn = (http_tls_t *)malloc(sizeof(http_tls_t))) == NULL)
-    return (0);
+  error                     = 0;
+  con->http.tls_credentials = get_cdsa_certificate(con);
 
-  error            = 0;
-  conn->session    = NULL;
-  conn->certsArray = get_cdsa_certificate(con);
-
-  if (!conn->certsArray)
+  if (!con->http.tls_credentials)
   {
    /*
     * No keychain (yet), make a self-signed certificate...
     */
 
     if (make_certificate(con))
-      conn->certsArray = get_cdsa_certificate(con);
+      con->http.tls_credentials = get_cdsa_certificate(con);
   }
 
-  if (!conn->certsArray)
+  if (!con->http.tls_credentials)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
                    "Could not find signing key in keychain \"%s\"",
@@ -3288,25 +3259,25 @@ encrypt_client(cupsd_client_t *con)     /* I - Client to encrypt */
   }
 
   if (!error)
-    error = SSLNewContext(true, &conn->session);
+    error = SSLNewContext(true, &con->http.tls);
 
   if (!error)
-    error = SSLSetIOFuncs(conn->session, _httpReadCDSA, _httpWriteCDSA);
+    error = SSLSetIOFuncs(con->http.tls, _httpReadCDSA, _httpWriteCDSA);
 
   if (!error)
-    error = SSLSetProtocolVersionEnabled(conn->session, kSSLProtocol2, false);
+    error = SSLSetProtocolVersionEnabled(con->http.tls, kSSLProtocol2, false);
 
   if (!error)
-    error = SSLSetConnection(conn->session, HTTP(con));
+    error = SSLSetConnection(con->http.tls, HTTP(con));
 
   if (!error)
-    error = SSLSetAllowsExpiredCerts(conn->session, true);
+    error = SSLSetAllowsExpiredCerts(con->http.tls, true);
 
   if (!error)
-    error = SSLSetAllowsAnyRoot(conn->session, true);
+    error = SSLSetAllowsAnyRoot(con->http.tls, true);
 
   if (!error)
-    error = SSLSetCertificate(conn->session, conn->certsArray);
+    error = SSLSetCertificate(con->http.tls, con->http.tls_credentials);
 
   if (!error)
   {
@@ -3314,7 +3285,7 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
     * Perform SSL/TLS handshake
     */
 
-    while ((error = SSLHandshake(conn->session)) == errSSLWouldBlock)
+    while ((error = SSLHandshake(con->http.tls)) == errSSLWouldBlock)
       usleep(1000);
   }
 
@@ -3327,13 +3298,14 @@ encrypt_client(cupsd_client_t *con)     /* I - Client to encrypt */
     con->http.error  = error;
     con->http.status = HTTP_ERROR;
 
-    if (conn->session)
-      SSLDisposeContext(conn->session);
-
-    if (conn->certsArray)
-      CFRelease(conn->certsArray);
+    if (con->http.tls)
+    {
+      SSLDisposeContext(con->http.tls);
+      con->http.tls = NULL;
+    }
 
-    free(conn);
+    if (con->http.tls_credentials)
+      CFRelease(con->http.tls_credentials);
 
     return (0);
   }
@@ -3341,7 +3313,16 @@ encrypt_client(cupsd_client_t *con)      /* I - Client to encrypt */
   cupsdLogMessage(CUPSD_LOG_DEBUG, "Connection from %s now encrypted.",
                   con->http.hostname);
 
-  con->http.tls = conn;
+  CFArrayRef           peerCerts;      /* Peer certificates */
+
+  if (!(error = SSLCopyPeerCertificates(con->http.tls, &peerCerts)) && peerCerts)
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "Received %d peer certificates!",
+                   (int)CFArrayGetCount(peerCerts));
+  }
+  else
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "Received NO peer certificates!");
+
   return (1);
 
 #  endif /* HAVE_LIBSSL */
@@ -3354,9 +3335,9 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
  * 'get_cdsa_certificate()' - Get a SSL/TLS certificate from the System keychain.
  */
 
-static CFArrayRef                      /* O - Array of certificates */
+static CFArrayRef                              /* O - Array of certificates */
 get_cdsa_certificate(
-    cupsd_client_t *con)               /* I - Client connection */
+    cupsd_client_t *con)                       /* I - Client connection */
 {
   OSStatus             err;            /* Error info */
   SecKeychainRef       keychain = NULL;/* Keychain reference */
@@ -3588,7 +3569,6 @@ get_cdsa_certificate(
     CFRelease(policy);
   if (query)
     CFRelease(query);
-
 #  elif defined(HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY)
   if (policy)
     CFRelease(policy);
@@ -3623,8 +3603,14 @@ get_file(cupsd_client_t *con,            /* I  - Client connection */
 
   language[0] = '\0';
 
-  if (!strncmp(con->uri, "/ppd/", 5))
+  if (!strncmp(con->uri, "/ppd/", 5) && !strchr(con->uri + 5, '/'))
     snprintf(filename, len, "%s%s", ServerRoot, con->uri);
+  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);
+  }
   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))
@@ -3657,7 +3643,9 @@ get_file(cupsd_client_t *con,             /* I  - Client connection */
   */
 
   if ((status = stat(filename, filestats)) != 0 && language[0] &&
+      strncmp(con->uri, "/icons/", 7) &&
       strncmp(con->uri, "/ppd/", 5) &&
+      strncmp(con->uri, "/rss/", 5) &&
       strncmp(con->uri, "/admin/conf/", 12) &&
       strncmp(con->uri, "/admin/log/", 11))
   {
@@ -4517,7 +4505,7 @@ make_certificate(cupsd_client_t *con)     /* I - Client connection */
     return (0);
   }
 
-  cupsFilePrintf(fp, "%s\nr\n\ny\nb\ns\ny\n%s\n\n\n\n\n%s\ny\n", 
+  cupsFilePrintf(fp, "%s\nr\n\ny\nb\ns\ny\n%s\n\n\n\n\n%s\ny\n",
                 con->servername, con->servername, ServerAdmin);
   cupsFileClose(fp);
 
index a276dad1f02b96724de9138ff1b5ebf9630abf51..39450ad79af1403eec0e61ff0d8b1867fa257c61 100644 (file)
@@ -2347,8 +2347,8 @@ dnssdBuildTxtRecord(
     int             for_lpd)           /* I - 1 = LPD, 0 = IPP */
 {
   int          i;                      /* Looping var */
-  char         adminurl_str[256],      /* URL for th admin page */
-               type_str[32],           /* Type to string buffer */
+  char         adminurl_str[256],      /* URL for the admin page */
+               type_str[32],           /* Type to string buffer */
                state_str[32],          /* State to string buffer */
                rp_str[1024],           /* Queue name string buffer */
                air_str[1024],          /* auth-info-required string buffer */
index 34cb0868b72eb9201638775146d0d4c0a1bb0c42..ead61aae0c5b7eae9a6390f0d8ed36d16945f24b 100644 (file)
@@ -5664,6 +5664,8 @@ copy_printer_attrs(
 {
   char                 printer_uri[HTTP_MAX_URI];
                                        /* Printer URI */
+  char                 printer_icons[HTTP_MAX_URI];
+                                       /* Printer icons */
   time_t               curtime;        /* Current time */
   int                  i;              /* Looping var */
   ipp_attribute_t      *history;       /* History collection */
@@ -5763,6 +5765,16 @@ copy_printer_attrs(
                    sizeof(errors) / sizeof(errors[0]), NULL, errors);
   }
 
+  if (!ra || cupsArrayFind(ra, "printer-icons"))
+  {
+    httpAssembleURIf(HTTP_URI_CODING_ALL, printer_icons, sizeof(printer_icons),
+                     "http", NULL, con->servername, con->serverport,
+                    "/icons/%s.png", printer->name);
+    ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-icons",
+                 NULL, printer_icons);
+    cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-icons=\"%s\"", printer_icons);
+  }
+
   if (!ra || cupsArrayFind(ra, "printer-is-accepting-jobs"))
     ippAddBoolean(con->response, IPP_TAG_PRINTER, "printer-is-accepting-jobs",
                   printer->accepting);
@@ -6659,6 +6671,9 @@ delete_printer(cupsd_client_t  *con,      /* I - Client connection */
   snprintf(filename, sizeof(filename), "%s/%s.ipp3", CacheDir, printer->name);
   unlink(filename);
 
+  snprintf(filename, sizeof(filename), "%s/%s.png", CacheDir, printer->name);
+  unlink(filename);
+
   snprintf(filename, sizeof(filename), "%s/%s.pwg2", CacheDir, printer->name);
   unlink(filename);
 
index a3353647c0670bb7d2a0bc924de3e8de60aa0e04..71347be6ee9b36fe52514480d42f5e1b8bc42c11 100644 (file)
@@ -3131,7 +3131,6 @@ get_options(cupsd_job_t *job,             /* I - Job */
        num_pwgppds = cupsAddOption("AP_D_InputSlot", "", num_pwgppds,
                                    &pwgppds);
     }
-
     if (!ippFindAttribute(job->attrs, "MediaType", IPP_TAG_ZERO) &&
        (ppd = _pwgGetMediaType(pwg, job->attrs, NULL)) != NULL)
       num_pwgppds = cupsAddOption("MediaType", ppd, num_pwgppds, &pwgppds);
index 299b2d6f8b7f57d4730327589b789ae4420746a8..4a856d0e9912ec6356a7d4522bcc3d70819ca70f 100644 (file)
 
 #include "cupsd.h"
 #include <cups/dir.h>
+#ifdef HAVE_APPLICATIONSERVICES_H
+#  include <ApplicationServices/ApplicationServices.h>
+#endif /* HAVE_APPLICATIONSERVICES_H */
+#ifdef HAVE_SYS_MOUNT_H
+#  include <sys/mount.h>
+#endif /* HAVE_SYS_MOUNT_H */
+#ifdef HAVE_SYS_STATFS_H
+#  include <sys/statfs.h>
+#endif /* HAVE_SYS_STATFS_H */
+#ifdef HAVE_SYS_STATVFS_H
+#  include <sys/statvfs.h>
+#endif /* HAVE_SYS_STATVFS_H */
+#ifdef HAVE_SYS_VFS_H
+#  include <sys/vfs.h>
+#endif /* HAVE_SYS_VFS_H */
 
 
 /*
@@ -270,6 +285,14 @@ cupsdCreateCommonData(void)
   char                 filename[1024], /* Filename */
                        *notifier;      /* Current notifier */
   cupsd_policy_t       *p;             /* Current policy */
+  int                  k_supported;    /* Maximum file size supported */
+#ifdef HAVE_STATFS
+  struct statfs                spoolinfo;      /* FS info for spool directory */
+  double               spoolsize;      /* FS size */
+#elif defined(HAVE_STATVFS)
+  struct statvfs       spoolinfo;      /* FS info for spool directory */
+  double               spoolsize;      /* FS size */
+#endif /* HAVE_STATFS */
   static const int nups[] =            /* number-up-supported values */
                { 1, 2, 4, 6, 9, 16 };
   static const int orients[4] =/* orientation-requested-supported values */
@@ -419,6 +442,7 @@ cupsdCreateCommonData(void)
                  "multiple-document-handling",
                  "number-up",
                  "output-bin",
+                 "output-mode",
                  "orientation-requested",
                  "page-ranges",
                  "print-quality",
@@ -437,6 +461,7 @@ cupsdCreateCommonData(void)
                  "multiple-document-handling",
                  "number-up",
                  "output-bin",
+                 "output-mode",
                  "orientation-requested",
                  "page-ranges",
                  "print-quality",
@@ -449,17 +474,17 @@ cupsdCreateCommonData(void)
                  "printer-location"
                };
   static const char * const which_jobs[] =
-  {                                    /* which-jobs-supported values */
-    "completed",
-    "not-completed",
-    "aborted",
-    "all",
-    "canceled",
-    "pending",
-    "pending-held",
-    "processing",
-    "processing-stopped"
-  };
+               {                       /* which-jobs-supported values */
+                 "completed",
+                 "not-completed",
+                 "aborted",
+                 "all",
+                 "canceled",
+                 "pending",
+                 "pending-held",
+                 "processing",
+                 "processing-stopped"
+               };
 
 
   if (CommonData)
@@ -467,6 +492,34 @@ cupsdCreateCommonData(void)
 
   CommonData = ippNew();
 
+ /*
+  * Get the maximum spool size based on the size of the filesystem used for
+  * the RequestRoot directory.  If the host OS doesn't support the statfs call
+  * or the filesystem is larger than 2TiB, always report INT_MAX.
+  */
+
+#ifdef HAVE_STATFS
+  if (statfs(RequestRoot, &spoolinfo))
+    k_supported = INT_MAX;
+  else if ((spoolsize = (double)spoolinfo.f_bsize * spoolinfo.f_blocks / 1024) >
+               INT_MAX)
+    k_supported = INT_MAX;
+  else
+    k_supported = (int)spoolsize;
+
+#elif defined(HAVE_STATVFS)
+  if (statvfs(RequestRoot, &spoolinfo))
+    k_supported = INT_MAX;
+  else if ((spoolsize = (double)spoolinfo.f_frsize * spoolinfo.f_blocks / 1024) >
+               INT_MAX)
+    k_supported = INT_MAX;
+  else
+    k_supported = (int)spoolsize;
+
+#else
+  k_supported = INT_MAX;
+#endif /* HAVE_STATFS */
+
  /*
   * This list of attributes is sorted to improve performance when the
   * client provides a requested-attributes attribute...
@@ -521,6 +574,10 @@ cupsdCreateCommonData(void)
   /* job-ids-supported */
   ippAddBoolean(CommonData, IPP_TAG_PRINTER, "job-ids-supported", 1);
 
+  /* job-k-octets-supported */
+  ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+                "job-k-octets-supported", k_supported);
+
   /* job-priority-supported */
   ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
                 "job-priority-supported", 100);
@@ -663,9 +720,9 @@ cupsdCreateCommonData(void)
   /* page-ranges-supported */
   ippAddBoolean(CommonData, IPP_TAG_PRINTER, "page-ranges-supported", 1);
 
-  /* pdf-override-supported */
+  /* pdl-override-supported */
   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
-               "pdl-override-supported", NULL, "not-attempted");
+               "pdl-override-supported", NULL, "attempted");
 
   /* printer-op-policy-supported */
   attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
@@ -3633,12 +3690,11 @@ add_printer_filter(
     if (!RunUser)
     {
      /*
-      * Only use filters that are owned by root and do not have group or world
-      * write permissions.
+      * Only use filters that are owned by root and do not have world write
+      * permissions.
       */
 
-      if (fileinfo.st_uid ||
-          (fileinfo.st_mode & (S_ISUID | S_IWGRP | S_IWOTH)) != 0)
+      if (fileinfo.st_uid || (fileinfo.st_mode & (S_ISUID | S_IWOTH)) != 0)
       {
        if (fileinfo.st_uid)
          snprintf(p->state_message, sizeof(p->state_message),
@@ -3665,7 +3721,7 @@ add_printer_filter(
 
        if (!stat(filename, &fileinfo) &&
            (fileinfo.st_uid ||
-            (fileinfo.st_mode & (S_ISUID | S_IWGRP | S_IWOTH)) != 0))
+            (fileinfo.st_mode & (S_ISUID | S_IWOTH)) != 0))
        {
          if (fileinfo.st_uid)
            snprintf(p->state_message, sizeof(p->state_message),
@@ -4511,6 +4567,31 @@ load_ppd(cupsd_printer_t *p)             /* I - Printer */
                   "output-bin-default", NULL, "face-down");
     }
 
+   /*
+    * output-mode...
+    */
+
+    if (ppd->color_device)
+    {
+      static const char * const output_modes[] =
+      {
+        "monochrome",
+       "color"
+      };
+
+      ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+                    "output-mode-supported", 2, NULL, output_modes);
+      ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+                   "output-mode-default", NULL, "color");
+    }
+    else
+    {
+      ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+                   "output-mode-supported", NULL, "monochrome");
+      ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+                   "output-mode-default", NULL, "monochrome");
+    }
+
    /*
     * Printer resolutions...
     */
@@ -4544,7 +4625,7 @@ load_ppd(cupsd_printer_t *p)              /* I - Printer */
          cupsdLogMessage(CUPSD_LOG_WARN,
                          "Bad resolution \"%s\" for printer %s.",
                          choice->choice, p->name);
-         xdpi = ydpi = 72;
+         xdpi = ydpi = 300;
        }
 
         attr->values[i].resolution.xres  = xdpi;
@@ -4578,7 +4659,7 @@ load_ppd(cupsd_printer_t *p)              /* I - Printer */
        cupsdLogMessage(CUPSD_LOG_WARN,
                        "Bad default resolution \"%s\" for printer %s.",
                        ppd_attr->value, p->name);
-       xdpi = ydpi = 72;
+       xdpi = ydpi = 300;
       }
 
       ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER,
@@ -4596,10 +4677,10 @@ load_ppd(cupsd_printer_t *p)            /* I - Printer */
 
       ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER,
                       "printer-resolution-default", IPP_RES_PER_INCH,
-                      72, 72);
+                      300, 300);
       ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER,
                       "printer-resolution-supported", IPP_RES_PER_INCH,
-                      72, 72);
+                      300, 300);
     }
 
    /*
@@ -4867,6 +4948,129 @@ load_ppd(cupsd_printer_t *p)            /* I - Printer */
     if (ppdFindAttr(ppd, "APRemoteQueueID", NULL))
       p->type |= CUPS_PRINTER_REMOTE;
 
+#ifdef HAVE_APPLICATIONSERVICES_H
+   /*
+    * Convert the file referenced in APPrinterIconPath to a 128x128 PNG
+    * and save it as cacheDir/printername.png
+    */
+
+    if ((ppd_attr = ppdFindAttr(ppd, "APPrinterIconPath", NULL)) != NULL &&
+        ppd_attr->value)
+    {
+      CGImageRef       imageRef = NULL;/* Current icon image */
+      CGImageRef       biggestIconRef = NULL;
+                                       /* Biggest icon image */
+      CGImageRef       closestTo128IconRef = NULL;
+                                       /* Icon image closest to and >= 128 */
+      CGImageSourceRef sourceRef;      /* The file's image source */
+      char             outPath[HTTP_MAX_URI];
+                                       /* The path to the PNG file */
+      CFURLRef         outUrl;         /* The URL made from the outPath */
+      CFURLRef         icnsFileUrl;    /* The URL of the original ICNS icon file */
+      CGImageDestinationRef destRef;   /* The image destination to write */
+      size_t           bytesPerRow;    /* The bytes per row used for resizing */
+      CGContextRef     context;        /* The CG context used for resizing */
+
+      snprintf(outPath, sizeof(outPath), "%s/%s.png", CacheDir, p->name);
+      outUrl      = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault,
+                                                            (UInt8 *)outPath,
+                                                           strlen(outPath),
+                                                           FALSE);
+      icnsFileUrl = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault,
+                                                           (UInt8 *)ppd_attr->value,
+                                                           strlen(ppd_attr->value),
+                                                           FALSE);
+      if (outUrl && icnsFileUrl)
+      {
+        sourceRef = CGImageSourceCreateWithURL(icnsFileUrl, NULL);
+        if (sourceRef)
+        {
+          for (i = 0; i < CGImageSourceGetCount(sourceRef); i ++)
+          {
+            imageRef = CGImageSourceCreateImageAtIndex(sourceRef, i, NULL);
+            if (imageRef &&
+                CGImageGetWidth(imageRef) == CGImageGetHeight(imageRef))
+            {
+             /*
+              * Loop through remembering the icon closest to 128 but >= 128
+              * and then remember the largest icon.
+              */
+
+              if (CGImageGetWidth(imageRef) >= 128 &&
+                 (!closestTo128IconRef ||
+                  CGImageGetWidth(imageRef) <
+                      CGImageGetWidth(closestTo128IconRef)))
+              {
+                CGImageRelease(closestTo128IconRef);
+                CGImageRetain(imageRef);
+                closestTo128IconRef = imageRef;
+              }
+
+              if (!biggestIconRef ||
+                 CGImageGetWidth(imageRef) > CGImageGetWidth(biggestIconRef))
+              {
+                CGImageRelease(biggestIconRef);
+                CGImageRetain(imageRef);
+                biggestIconRef = imageRef;
+              }
+
+              CGImageRelease(imageRef);
+            }
+          }
+
+          if (biggestIconRef)
+          {
+           /*
+            * If biggestIconRef is NULL, we found no icons. Otherwise we first
+            * want the closest to 128, but if none are larger than 128, we want
+            * the largest icon available.
+            */
+
+            imageRef = closestTo128IconRef ? closestTo128IconRef :
+                                             biggestIconRef;
+            CGImageRetain(imageRef);
+            CGImageRelease(biggestIconRef);
+            CGImageRelease(closestTo128IconRef);
+            destRef = CGImageDestinationCreateWithURL(outUrl, kUTTypePNG, 1,
+                                                      NULL);
+            if (destRef)
+            {
+              if (CGImageGetWidth(imageRef) != 128)
+              {
+                bytesPerRow = CGImageGetBytesPerRow(imageRef) /
+                              CGImageGetWidth(imageRef) * 128;
+                context     = CGBitmapContextCreate(NULL, 128, 128,
+                                                   CGImageGetBitsPerComponent(imageRef),
+                                                   bytesPerRow,
+                                                   CGImageGetColorSpace(imageRef),
+                                                   kCGImageAlphaPremultipliedFirst);
+                if (context)
+                {
+                  CGContextDrawImage(context, CGRectMake(0, 0, 128, 128),
+                                    imageRef);
+                  CGImageRelease(imageRef);
+                  imageRef = CGBitmapContextCreateImage(context);
+                  CGContextRelease(context);
+                }
+              }
+
+              CGImageDestinationAddImage(destRef, imageRef, NULL);
+              CGImageDestinationFinalize(destRef);
+              CFRelease(destRef);
+            }
+
+            CGImageRelease(imageRef);
+          }
+
+          CFRelease(sourceRef);
+          CFRelease(icnsFileUrl);
+        }
+
+        CFRelease(outUrl);
+      }
+    }
+#endif /* HAVE_APPLICATIONSERVICES_H */
+
    /*
     * Close the PPD and set the type...
     */
index 7775c994a657cbbb24bea3e7d447e7c1a0773908..d3c60c70f7fefc53565c36c0a6bf759bef0ea29a 100644 (file)
@@ -2,6 +2,6 @@
 
 phpcups.o: ../../cups/string-private.h ../../config.h phpcups.h
 phpcups.o: ../../cups/cups.h ../../cups/file.h ../../cups/versioning.h
-phpcups.o: ../../cups/ipp.h ../../cups/http.h ../../cups/language.h
-phpcups.o: ../../cups/array.h ../../cups/language.h
+phpcups.o: ../../cups/ipp.h ../../cups/http.h ../../cups/array.h
+phpcups.o: ../../cups/language.h ../../cups/language.h
 phpcups.o: ../../cups/debug-private.h
index eca4275ebd3ae9ae082d233e801f2f8c411a056f..a7aa88c31ad0780a01d81540e51638178c595962 100644 (file)
@@ -1,16 +1,16 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 cancel.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-cancel.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cancel.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-cancel.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-cancel.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-cancel.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-cancel.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-cancel.o: ../cups/transcode.h ../cups/thread-private.h
+cancel.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+cancel.o: ../cups/language.h ../cups/string-private.h ../config.h
+cancel.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+cancel.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+cancel.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+cancel.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+cancel.o: ../cups/thread-private.h
 cupsaccept.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 cupsaccept.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cupsaccept.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+cupsaccept.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 cupsaccept.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 cupsaccept.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 cupsaccept.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -18,7 +18,7 @@ cupsaccept.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 cupsaccept.o: ../cups/transcode.h ../cups/thread-private.h
 cupsaddsmb.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 cupsaddsmb.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cupsaddsmb.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+cupsaddsmb.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 cupsaddsmb.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 cupsaddsmb.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 cupsaddsmb.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -26,16 +26,16 @@ cupsaddsmb.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 cupsaddsmb.o: ../cups/transcode.h ../cups/thread-private.h
 cupsaddsmb.o: ../cups/adminutil.h
 cupsctl.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-cupsctl.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cupsctl.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-cupsctl.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-cupsctl.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-cupsctl.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-cupsctl.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-cupsctl.o: ../cups/transcode.h ../cups/thread-private.h ../cups/adminutil.h
+cupsctl.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+cupsctl.o: ../cups/language.h ../cups/string-private.h ../config.h
+cupsctl.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+cupsctl.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+cupsctl.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+cupsctl.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+cupsctl.o: ../cups/thread-private.h ../cups/adminutil.h
 cupstestdsc.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 cupstestdsc.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cupstestdsc.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+cupstestdsc.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 cupstestdsc.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 cupstestdsc.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 cupstestdsc.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -43,7 +43,7 @@ cupstestdsc.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 cupstestdsc.o: ../cups/transcode.h ../cups/thread-private.h
 cupstestppd.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 cupstestppd.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-cupstestppd.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+cupstestppd.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 cupstestppd.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 cupstestppd.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 cupstestppd.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
@@ -51,59 +51,58 @@ cupstestppd.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 cupstestppd.o: ../cups/transcode.h ../cups/thread-private.h ../cups/dir.h
 cupstestppd.o: ../cups/ppd-private.h ../cups/raster.h ../cups/ppd.h
 lp.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/language.h
-lp.o: ../cups/array.h ../cups/string-private.h ../config.h
+lp.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lp.o: ../cups/language.h ../cups/string-private.h ../config.h
 lp.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
 lp.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
 lp.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
 lp.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
 lp.o: ../cups/thread-private.h
 lpadmin.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lpadmin.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-lpadmin.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-lpadmin.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-lpadmin.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-lpadmin.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-lpadmin.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-lpadmin.o: ../cups/transcode.h ../cups/thread-private.h
+lpadmin.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lpadmin.o: ../cups/language.h ../cups/string-private.h ../config.h
+lpadmin.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+lpadmin.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+lpadmin.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+lpadmin.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+lpadmin.o: ../cups/thread-private.h
 lpinfo.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lpinfo.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-lpinfo.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-lpinfo.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-lpinfo.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-lpinfo.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-lpinfo.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-lpinfo.o: ../cups/transcode.h ../cups/thread-private.h
+lpinfo.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lpinfo.o: ../cups/language.h ../cups/string-private.h ../config.h
+lpinfo.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+lpinfo.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+lpinfo.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+lpinfo.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+lpinfo.o: ../cups/thread-private.h
 lpmove.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lpmove.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-lpmove.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-lpmove.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-lpmove.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-lpmove.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-lpmove.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-lpmove.o: ../cups/transcode.h ../cups/thread-private.h
+lpmove.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lpmove.o: ../cups/language.h ../cups/string-private.h ../config.h
+lpmove.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+lpmove.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+lpmove.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+lpmove.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+lpmove.o: ../cups/thread-private.h
 lpoptions.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
 lpoptions.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-lpoptions.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
+lpoptions.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
 lpoptions.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
 lpoptions.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
 lpoptions.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
 lpoptions.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
 lpoptions.o: ../cups/transcode.h ../cups/thread-private.h
 lppasswd.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lppasswd.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-lppasswd.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-lppasswd.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-lppasswd.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-lppasswd.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-lppasswd.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-lppasswd.o: ../cups/transcode.h ../cups/thread-private.h
-lppasswd.o: ../cups/md5-private.h
+lppasswd.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lppasswd.o: ../cups/language.h ../cups/string-private.h ../config.h
+lppasswd.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+lppasswd.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+lppasswd.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+lppasswd.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+lppasswd.o: ../cups/thread-private.h ../cups/md5-private.h
 lpstat.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-lpstat.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-lpstat.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-lpstat.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-lpstat.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-lpstat.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-lpstat.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-lpstat.o: ../cups/transcode.h ../cups/thread-private.h
+lpstat.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+lpstat.o: ../cups/language.h ../cups/string-private.h ../config.h
+lpstat.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+lpstat.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+lpstat.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+lpstat.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+lpstat.o: ../cups/thread-private.h
index 1487c3aa5a721d90a42433cbc69863c775a62be9..ac77ec7fcc9937a2d05732556e11672aa3962f95 100644 (file)
@@ -1,11 +1,11 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 ipptool.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
-ipptool.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
-ipptool.o: ../cups/language.h ../cups/array.h ../cups/string-private.h
-ipptool.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
-ipptool.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
-ipptool.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
-ipptool.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
-ipptool.o: ../cups/transcode.h ../cups/thread-private.h
-ipptool.o: ../cups/file-private.h ../cups/cups-private.h
+ipptool.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+ipptool.o: ../cups/language.h ../cups/string-private.h ../config.h
+ipptool.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+ipptool.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+ipptool.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+ipptool.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+ipptool.o: ../cups/thread-private.h ../cups/file-private.h
+ipptool.o: ../cups/cups-private.h
index 9f746dcb0e0aab26994102424eb15e2fc4511f64..0c70e8e78c217bb9cbebd3fbf897e71e3824b74d 100644 (file)
@@ -14,7 +14,7 @@
 #
 # Usage:
 #
-#   ./ipptool -V 2.0 -f filename -t printer-uri ipp-2.0.test
+#   ./ipptool -V 2.0 {-d PRINTER_IS_COLOR=1} -f filename -t printer-uri ipp-2.0.test
 #
 
 # Do all of the IPP/1.1 tests as an IPP/2.0 client
@@ -59,7 +59,7 @@ INCLUDE "ipp-1.1.test"
        # Printer description attributes
        EXPECT color-supported OF-TYPE boolean IN-GROUP printer-attributes-tag COUNT 1
        EXPECT pages-per-minute OF-TYPE integer IN-GROUP printer-attributes-tag COUNT 1
-       EXPECT pages-per-minute-color OF-TYPE integer IN-GROUP printer-attributes-tag COUNT 1
+       EXPECT pages-per-minute-color OF-TYPE integer IN-GROUP printer-attributes-tag COUNT 1 IF-DEFINED PRINTER_IS_COLOR
        EXPECT printer-info OF-TYPE text IN-GROUP printer-attributes-tag COUNT 1 WITH-VALUE "/^.{0,127}$$/"
        EXPECT printer-location OF-TYPE text IN-GROUP printer-attributes-tag COUNT 1 WITH-VALUE "/^.{0,127}$$/"
        EXPECT printer-make-and-model OF-TYPE text IN-GROUP printer-attributes-tag COUNT 1 WITH-VALUE "/^.{0,127}$$/"
index e52cb25e7ddce8664cd4b5d5d0ea701d4a8d4e78..98126947e1ad2201b5dc27d1361d47e9f9fbe6d4 100644 (file)
@@ -14,7 +14,7 @@
 #
 # Usage:
 #
-#   ./ipptool -V 2.1 -f filename -t printer-uri ipp-2.1.test
+#   ./ipptool -V 2.1 {-d PRINTER_IS_COLOR=1} -f filename -t printer-uri ipp-2.1.test
 #
 
 # Do all of the IPP/1.1 and IPP/2.0 tests as an IPP/2.1 client