]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Merge changes from CUPS 1.5svn-r9717.
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Fri, 22 Apr 2011 23:02:56 +0000 (23:02 +0000)
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Fri, 22 Apr 2011 23:02:56 +0000 (23:02 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@3171 a1ca3aef-8c08-0410-bb20-df032aa958be

67 files changed:
CHANGES-1.4.txt
Makedefs.in
backend/ipp.c
backend/lpd.c
backend/snmp.c
backend/socket.c
backend/usb-darwin.c
config-scripts/cups-compiler.m4
cups/Dependencies
cups/api-filter.shtml
cups/auth.c
cups/backend.h
cups/file-private.h
cups/file.c
cups/http-addr.c
cups/http-addrlist.c
cups/http-private.h
cups/http.c
cups/libcups2.def
cups/libcups_s.exp
cups/ppd-cache.c
cups/request.c
cups/snmp.c
cups/transcode.c
data/media.defs
doc/help/accounting.html
doc/help/api-cups.html
doc/help/api-filedir.html
doc/help/api-filter.html
doc/help/api-mime.html
doc/help/spec-ppd.html
filter/Dependencies
filter/spec-ppd.header
filter/spec-ppd.shtml
locale/cups.pot
locale/cups.strings
man/backend.man
notifier/Dependencies
scheduler/client.c
scheduler/conf.c
scheduler/conf.h
scheduler/cups-deviced.c
scheduler/cups-driverd.cxx
scheduler/cups-exec.c
scheduler/cups-polld.c
scheduler/cupsd.h
scheduler/dirsvc.c
scheduler/filter.c
scheduler/ipp.c
scheduler/job.c
scheduler/listen.c
scheduler/log.c
scheduler/main.c
scheduler/mime.c
scheduler/network.c
scheduler/org.cups.cupsd.plist
scheduler/printers.c
scheduler/process.c
scheduler/testdirsvc.c
scheduler/testmime.c
scheduler/type.c
scheduler/util.c
scheduler/util.h
systemv/cupstestppd.c
test/get-jobs.test
test/ippserver.c
xcode/CUPS.xcodeproj/project.pbxproj

index f9191242e0fe0625e94dbbed8a709e044d0a59b4..1cf3a8f2235103cc5907d1f87ff726a6939fc24f 100644 (file)
@@ -4,11 +4,15 @@ CHANGES-1.4.txt
 CHANGES IN CUPS V1.4.7
 
        - Documentation changes (STR #3710, STR #3720, STR #3745, STR #3750,
-         STR #3757, STR #3758, STR #3782)
+         STR #3757, STR #3758, STR #3782, STR #3826, STR #3829)
        - Web interface fixes (STR #3412, STR #3345, STR #3455, STR #3707,
          STR #3755, STR #3769, STR #3783)
        - Configure script fixes (STR #3659, STR #3691)
        - Compilation fixes (STR #3718, STR #3771, STR #3774)
+       - The scheduler might leave old job data files in the spool directory
+         (STR #3795)
+       - CUPS did not work with locales using the ASCII character set
+         (STR #3832)
        - httpAddrString() did not return a URI-style IPv6 numeric address
          (STR #3814)
        - Fixed an issue when reading compressed CUPS raster streams (STR #3812)
index 61f12bb59dc2bf3ae28425b5481a3539bb06aa24..10fb71da84638c9eede48c3928ffa43c0cb3e797 100644 (file)
@@ -3,7 +3,7 @@
 #
 #   Common makefile definitions for CUPS.
 #
-#   Copyright 2007-2010 by Apple Inc.
+#   Copyright 2007-2011 by Apple Inc.
 #   Copyright 1997-2007 by Easy Software Products, all rights reserved.
 #
 #   These coded instructions, statements, and computer programs are the
index d54bd3def257dcd6b7d62187b9175f33e7f8b428..7fac198edda82bad84973c5a2baa27604dc87b1d 100644 (file)
@@ -640,22 +640,20 @@ main(int  argc,                           /* I - Number of command-line args */
        {
          case EHOSTDOWN :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" may not exist or "
-                                    "is unavailable at this time."),
-                                  hostname);
+                                  _("The printer may not exist or "
+                                    "is unavailable at this time."));
              break;
 
          case EHOSTUNREACH :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" is unreachable at "
-                                    "this time."), hostname);
+                                  _("The printer is unreachable at this "
+                                    "time."));
              break;
 
          case ECONNREFUSED :
          default :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" is busy."),
-                                  hostname);
+                                  _("The printer is busy."));
              break;
         }
 
@@ -666,8 +664,7 @@ main(int  argc,                             /* I - Number of command-line args */
       else
       {
        _cupsLangPrintFilter(stderr, "ERROR",
-                            _("Network printer \"%s\" is not responding."),
-                            hostname);
+                            _("The printer is not responding."));
        sleep(30);
       }
 
@@ -685,17 +682,9 @@ main(int  argc,                            /* I - Number of command-line args */
   fputs("STATE: -connecting-to-device\n", stderr);
   _cupsLangPrintFilter(stderr, "INFO", _("Connected to printer."));
 
-#ifdef AF_INET6
-  if (http->hostaddr->addr.sa_family == AF_INET6)
-    fprintf(stderr, "DEBUG: Connected to [%s]:%d (IPv6)...\n",
-           httpAddrString(http->hostaddr, addrname, sizeof(addrname)),
-           ntohs(http->hostaddr->ipv6.sin6_port));
-  else
-#endif /* AF_INET6 */
-    if (http->hostaddr->addr.sa_family == AF_INET)
-      fprintf(stderr, "DEBUG: Connected to %s:%d (IPv4)...\n",
-             httpAddrString(http->hostaddr, addrname, sizeof(addrname)),
-             ntohs(http->hostaddr->ipv4.sin_port));
+  fprintf(stderr, "DEBUG: Connected to %s:%d...\n",
+         httpAddrString(http->hostaddr, addrname, sizeof(addrname)),
+         _httpAddrPort(http->hostaddr));
 
  /*
   * Build a URI for the printer and fill the standard IPP attributes for
@@ -763,6 +752,9 @@ main(int  argc,                             /* I - Number of command-line args */
     supported  = cupsDoRequest(http, request, resource);
     ipp_status = cupsLastError();
 
+    fprintf(stderr, "DEBUG: Get-Printer-Attributes: %s (%s)\n",
+            ippErrorString(ipp_status), cupsLastErrorString());
+
     if (ipp_status > IPP_OK_CONFLICT)
     {
       fprintf(stderr, "DEBUG: Get-Printer-Attributes returned %s.\n",
@@ -778,9 +770,7 @@ main(int  argc,                             /* I - Number of command-line args */
          return (CUPS_BACKEND_FAILED);
        }
 
-       _cupsLangPrintFilter(stderr, "WARNING",
-                            _("Network host \"%s\" is busy; will retry in %d "
-                              "seconds."), hostname, delay);
+       _cupsLangPrintFilter(stderr, "INFO", _("The printer is busy."));
 
         report_printer_state(supported, 0);
 
@@ -818,8 +808,7 @@ main(int  argc,                             /* I - Number of command-line args */
                             _("The printer URI is incorrect or no longer "
                               "exists."));
 
-       if (supported)
-          ippDelete(supported);
+       ippDelete(supported);
 
        return (CUPS_BACKEND_STOP);
       }
@@ -835,17 +824,49 @@ main(int  argc,                           /* I - Number of command-line args */
       else
       {
        _cupsLangPrintFilter(stderr, "ERROR",
-                            _("Unable to get printer status: %s"),
-                            cupsLastErrorString());
+                            _("Unable to get printer status."));
         sleep(10);
       }
 
-      if (supported)
-        ippDelete(supported);
-
+      ippDelete(supported);
+      supported = NULL;
       continue;
     }
 
+   /*
+    * Check printer-state-reasons for the "spool-area-full" keyword...
+    */
+
+    if ((printer_state = ippFindAttribute(supported, "printer-state-reasons",
+                                          IPP_TAG_KEYWORD)) != NULL)
+    {
+      for (i = 0; i < printer_state->num_values; i ++)
+        if (!strcmp(printer_state->values[0].string.text, "spool-area-full") ||
+           !strncmp(printer_state->values[0].string.text, "spool-area-full-",
+                    16))
+          break;
+
+      if (i < printer_state->num_values)
+      {
+       _cupsLangPrintFilter(stderr, "INFO", _("The printer is busy."));
+
+        report_printer_state(supported, 0);
+
+       sleep(delay);
+
+        delay = _cupsNextDelay(delay, &prev_delay);
+
+       ippDelete(supported);
+       supported = NULL;
+       continue;
+      }
+    }
+    else
+      _cupsLangPrintFilter(stderr, "ERROR",
+                           _("This printer does not conform to the IPP "
+                            "standard. Please contact the manufacturer of "
+                            "your printer for assistance."));
+
    /*
     * Check for supported attributes...
     */
@@ -1086,7 +1107,7 @@ main(int  argc,                           /* I - Number of command-line args */
   * Validate access to the printer...
   */
 
-  while (!job_canceled)
+  while (!job_canceled && validate_job)
   {
     request = new_request(IPP_VALIDATE_JOB, version, uri, argv[2], argv[3],
                           num_options, options, compression,
@@ -1097,48 +1118,47 @@ main(int  argc,                         /* I - Number of command-line args */
 
     ipp_status = cupsLastError();
 
-    if (ipp_status > IPP_OK_CONFLICT &&
-        ipp_status != IPP_OPERATION_NOT_SUPPORTED)
-    {
-      if (job_canceled)
-        break;
+    fprintf(stderr, "DEBUG: Validate-Job: %s (%s)\n",
+            ippErrorString(ipp_status), cupsLastErrorString());
 
-      if (ipp_status == IPP_SERVICE_UNAVAILABLE ||
-         ipp_status == IPP_PRINTER_BUSY)
-      {
-        _cupsLangPrintFilter(stderr, "INFO",
-                            _("Printer busy; will retry in 10 seconds."));
-       sleep(10);
-      }
-      else
-      {
-       /*
-       * Update auth-info-required as needed...
-       */
+    if (job_canceled)
+      break;
 
-        _cupsLangPrintFilter(stderr, "ERROR", "%s", cupsLastErrorString());
+    if (ipp_status == IPP_SERVICE_UNAVAILABLE || ipp_status == IPP_PRINTER_BUSY)
+    {
+      _cupsLangPrintFilter(stderr, "INFO", _("The printer is busy."));
+      sleep(10);
+    }
+    else if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
+    {
+     /*
+      * Update auth-info-required as needed...
+      */
 
-       if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
-       {
-         fprintf(stderr, "DEBUG: WWW-Authenticate=\"%s\"\n",
-                 httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE));
+      fprintf(stderr, "DEBUG: WWW-Authenticate=\"%s\"\n",
+             httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE));
 
-         /*
-         * Normal authentication goes through the password callback, which sets
-         * auth_info_required to "username,password".  Kerberos goes directly
-         * through GSSAPI, so look for Negotiate in the WWW-Authenticate header
-         * here and set auth_info_required as needed...
-         */
+     /*
+      * Normal authentication goes through the password callback, which sets
+      * auth_info_required to "username,password".  Kerberos goes directly
+      * through GSSAPI, so look for Negotiate in the WWW-Authenticate header
+      * here and set auth_info_required as needed...
+      */
 
-         if (!strncmp(httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE),
-                      "Negotiate", 9))
-           auth_info_required = "negotiate";
-       }
+      if (!strncmp(httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE),
+                  "Negotiate", 9))
+       auth_info_required = "negotiate";
 
-       goto cleanup;
-      }
+      goto cleanup;
     }
-    else
+    else if (ipp_status == IPP_OPERATION_NOT_SUPPORTED)
+    {
+      _cupsLangPrintFilter(stderr, "WARNING",
+                          _("This printer does not conform to the IPP "
+                            "standard and may not work."));
+      break;
+    }
+    else if (ipp_status < IPP_REDIRECTION_OTHER_SITE)
       break;
   }
 
@@ -1220,6 +1240,10 @@ main(int  argc,                          /* I - Number of command-line args */
 
     ipp_status = cupsLastError();
 
+    fprintf(stderr, "DEBUG: %s: %s (%s)\n",
+            num_files > 1 ? "Create-Job" : "Print-Job",
+            ippErrorString(ipp_status), cupsLastErrorString());
+
     if (ipp_status > IPP_OK_CONFLICT)
     {
       job_id = 0;
@@ -1230,9 +1254,18 @@ main(int  argc,                          /* I - Number of command-line args */
       if (ipp_status == IPP_SERVICE_UNAVAILABLE ||
          ipp_status == IPP_PRINTER_BUSY)
       {
-        _cupsLangPrintFilter(stderr, "INFO",
-                            _("Printer busy; will retry in 10 seconds."));
+       _cupsLangPrintFilter(stderr, "INFO", _("The printer is busy."));
        sleep(10);
+
+       if (num_files == 0)
+       {
+        /*
+         * We can't re-submit when we have no files to print, so exit
+         * immediately with the right status code...
+         */
+
+         goto cleanup;
+       }
       }
       else
       {
@@ -1241,8 +1274,7 @@ main(int  argc,                           /* I - Number of command-line args */
        */
 
         _cupsLangPrintFilter(stderr, "ERROR",
-                            _("Print file was not accepted: %s"),
-                            cupsLastErrorString());
+                            _("Print file was not accepted."));
 
        if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
        {
@@ -1260,6 +1292,18 @@ main(int  argc,                          /* I - Number of command-line args */
                       "Negotiate", 9))
            auth_info_required = "negotiate";
        }
+       else
+         sleep(10);
+
+       if (num_files == 0)
+       {
+        /*
+         * We can't re-submit when we have no files to print, so exit
+         * immediately with the right status code...
+         */
+
+         goto cleanup;
+       }
       }
     }
     else if ((job_id_attr = ippFindAttribute(response, "job-id",
@@ -1340,13 +1384,15 @@ main(int  argc,                         /* I - Number of command-line args */
        ippDelete(cupsGetResponse(http, resource));
        ippDelete(request);
 
+       fprintf(stderr, "DEBUG: Send-Document: %s (%s)\n",
+               ippErrorString(cupsLastError()), cupsLastErrorString());
+
        if (cupsLastError() > IPP_OK_CONFLICT)
        {
          ipp_status = cupsLastError();
 
          _cupsLangPrintFilter(stderr, "ERROR",
-                              _("Unable to add file to job: %s"),
-                              cupsLastErrorString());
+                              _("Unable to add document to print job."));
          break;
        }
       }
@@ -1422,6 +1468,9 @@ main(int  argc,                           /* I - Number of command-line args */
         break;
       }
 
+      fprintf(stderr, "DEBUG: Get-Job-Attributes: %s (%s)\n",
+             ippErrorString(ipp_status), cupsLastErrorString());
+
       if (ipp_status > IPP_OK_CONFLICT)
       {
        if (ipp_status != IPP_SERVICE_UNAVAILABLE &&
@@ -1430,8 +1479,7 @@ main(int  argc,                           /* I - Number of command-line args */
          ippDelete(response);
 
           _cupsLangPrintFilter(stderr, "ERROR",
-                              _("Unable to get job attributes: %s"),
-                              cupsLastErrorString());
+                              _("Unable to get print job status."));
           break;
        }
       }
@@ -1574,8 +1622,11 @@ main(int  argc,                          /* I - Number of command-line args */
     return (CUPS_BACKEND_AUTH_REQUIRED);
   else if (ipp_status == IPP_INTERNAL_ERROR)
     return (CUPS_BACKEND_STOP);
-  else if (ipp_status > IPP_OK_CONFLICT)
+  else if (ipp_status == IPP_DOCUMENT_FORMAT ||
+           ipp_status == IPP_CONFLICT)
     return (CUPS_BACKEND_FAILED);
+  else if (ipp_status > IPP_OK_CONFLICT)
+    return (CUPS_BACKEND_RETRY_CURRENT);
   else
   {
     _cupsLangPrintFilter(stderr, "INFO", _("Ready to print."));
@@ -1620,8 +1671,7 @@ cancel_job(http_t     *http,              /* I - HTTP connection */
   ippDelete(cupsDoRequest(http, request, resource));
 
   if (cupsLastError() > IPP_OK_CONFLICT)
-    _cupsLangPrintFilter(stderr, "ERROR", _("Unable to cancel job: %s"),
-                        cupsLastErrorString());
+    _cupsLangPrintFilter(stderr, "ERROR", _("Unable to cancel print job."));
 }
 
 
@@ -1675,6 +1725,9 @@ check_printer_state(
     ippDelete(response);
   }
 
+  fprintf(stderr, "DEBUG: Get-Printer-Attributes: %s (%s)\n",
+         ippErrorString(cupsLastError()), cupsLastErrorString());
+
  /*
   * Return the printer-state value...
   */
@@ -1831,6 +1884,9 @@ monitor_printer(
 
        response = cupsDoRequest(http, request, monitor->resource);
 
+       fprintf(stderr, "DEBUG: Get-Job-Attributes: %s (%s)\n",
+               ippErrorString(cupsLastError()), cupsLastErrorString());
+
        if ((attr = ippFindAttribute(response, "job-state",
                                     IPP_TAG_ENUM)) != NULL)
          monitor->job_state = (ipp_jstate_t)attr->values[0].integer;
index af690adb0a4622ba97da3c7a0866601d8bd36ab1..d17493af34aace41b3fade83d4f14df2aec1de89 100644 (file)
@@ -816,22 +816,20 @@ lpd_queue(const char      *hostname,      /* I - Host to connect to */
        {
          case EHOSTDOWN :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" may not exist or "
-                                    "is unavailable at this time."),
-                                  hostname);
+                                  _("The printer may not exist or "
+                                    "is unavailable at this time."));
              break;
 
          case EHOSTUNREACH :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" is unreachable at "
-                                    "this time."), hostname);
+                                  _("The printer is unreachable at "
+                                    "this time."));
              break;
 
          case ECONNREFUSED :
          default :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" is busy."),
-                                  hostname);
+                                  _("The printer is busy."));
              break;
         }
 
@@ -851,8 +849,7 @@ lpd_queue(const char      *hostname,        /* I - Host to connect to */
       else
       {
        _cupsLangPrintFilter(stderr, "ERROR",
-                            _("Network printer \"%s\" is not responding."),
-                            hostname);
+                            _("The printer is not responding."));
        sleep(30);
       }
     }
@@ -860,17 +857,9 @@ lpd_queue(const char      *hostname,       /* I - Host to connect to */
     fputs("STATE: -connecting-to-device\n", stderr);
     _cupsLangPrintFilter(stderr, "INFO", _("Connected to printer."));
 
-#ifdef AF_INET6
-    if (addr->addr.addr.sa_family == AF_INET6)
-      fprintf(stderr, "DEBUG: Connected to [%s]:%d (IPv6) (local port %d)...\n", 
-             httpAddrString(&addr->addr, addrname, sizeof(addrname)),
-             ntohs(addr->addr.ipv6.sin6_port), lport);
-    else
-#endif /* AF_INET6 */
-      if (addr->addr.addr.sa_family == AF_INET)
-       fprintf(stderr, "DEBUG: Connected to %s:%d (IPv4) (local port %d)...\n",
-               httpAddrString(&addr->addr, addrname, sizeof(addrname)),
-               ntohs(addr->addr.ipv4.sin_port), lport);
+    fprintf(stderr, "DEBUG: Connected to %s:%d (local port %d)...\n",
+           httpAddrString(&(addr->addr), addrname, sizeof(addrname)),
+           _httpAddrPort(&(addr->addr)), lport);
 
    /*
     * See if the printer supports SNMP...
@@ -1278,12 +1267,7 @@ rresvport_af(int *port,                  /* IO - Port number to bind to */
     * Set the port number...
     */
 
-#  ifdef AF_INET6
-    if (family == AF_INET6)
-      addr.ipv6.sin6_port = htons(*port);
-    else
-#  endif /* AF_INET6 */
-    addr.ipv4.sin_port = htons(*port);
+    _httpAddrSetPort(&addr, *port);
 
    /*
     * Try binding the port to the socket; return if all is OK...
index aa66c16ce679c949543317053b4472248c50c857..34494d0e7f98716edceaf86434ea3dedfa9cc1da 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * "$Id: snmp.c 7810 2008-07-29 01:11:15Z mike $"
  *
- *   SNMP discovery backend for the Common UNIX Printing System (CUPS).
+ *   SNMP discovery backend for CUPS.
  *
- *   Copyright 2007-2009 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 2006-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -164,7 +164,7 @@ static void         probe_device(snmp_cache_t *device);
 static void            read_snmp_conf(const char *address);
 static void            read_snmp_response(int fd);
 static double          run_time(void);
-static void            scan_devices(int fd);
+static void            scan_devices(int ipv4, int ipv6);
 static int             try_connect(http_addr_t *addr, const char *addrname,
                                    int port);
 static void            update_cache(snmp_cache_t *device, const char *uri,
@@ -202,7 +202,8 @@ int                                 /* O - Exit status */
 main(int  argc,                                /* I - Number of command-line arguments (6 or 7) */
      char *argv[])                     /* I - Command-line arguments */
 {
-  int          fd;                     /* SNMP socket */
+  int          ipv4,                   /* SNMP IPv4 socket */
+               ipv6;                   /* SNMP IPv6 socket */
 #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
   struct sigaction action;             /* Actions for POSIX signals */
 #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
@@ -245,9 +246,16 @@ main(int  argc,                            /* I - Number of command-line arguments (6 or 7) */
   * Open the SNMP socket...
   */
 
-  if ((fd = _cupsSNMPOpen(AF_INET)) < 0)
+  if ((ipv4 = _cupsSNMPOpen(AF_INET)) < 0)
     return (1);
 
+#ifdef AF_INET6
+  if ((ipv6 = _cupsSNMPOpen(AF_INET6)) < 0)
+    return (1);
+#else
+  ipv6 = -1;
+#endif /* AF_INET6 */
+
  /*
   * Read the configuration file and any cache data...
   */
@@ -262,13 +270,15 @@ main(int  argc,                           /* I - Number of command-line arguments (6 or 7) */
   * Scan for devices...
   */
 
-  scan_devices(fd);
+  scan_devices(ipv4, ipv6);
 
  /*
   * Close, free, and return with no errors...
   */
 
-  _cupsSNMPClose(fd);
+  _cupsSNMPClose(ipv4);
+  if (ipv6 >= 0)
+    _cupsSNMPClose(ipv6);
 
   free_array(Addresses);
   free_array(Communities);
@@ -708,7 +718,7 @@ probe_device(snmp_cache_t *device)  /* I - Device */
 
 #ifdef __APPLE__
  /*
-  * TODO: Try an mDNS query first, and then fallback on direct probes...
+  * If the printer supports Bonjour/mDNS, don't report it from the SNMP backend.
   */
 
   if (!try_connect(&(device->address), device->addrname, 5353))
@@ -1146,8 +1156,11 @@ run_time(void)
  */
 
 static void
-scan_devices(int fd)                   /* I - SNMP socket */
+scan_devices(int ipv4,                 /* I - SNMP IPv4 socket */
+             int ipv6)                 /* I - SNMP IPv6 socket */
 {
+  int                  fd,             /* File descriptor for this address */
+                       busy;           /* Are we busy processing something? */
   char                 *address,       /* Current address */
                        *community;     /* Current community */
   fd_set               input;          /* Input set for select() */
@@ -1156,6 +1169,7 @@ scan_devices(int fd)                      /* I - SNMP socket */
   http_addrlist_t      *addrs,         /* List of addresses */
                        *addr;          /* Current address */
   snmp_cache_t         *device;        /* Current device */
+  char                 temp[1024];     /* Temporary address string */
 
 
   gettimeofday(&StartTime, NULL);
@@ -1174,7 +1188,6 @@ scan_devices(int fd)                      /* I - SNMP socket */
     {
       char     ifname[255];            /* Interface name */
 
-
       strlcpy(ifname, address + 4, sizeof(ifname));
       if (ifname[0])
         ifname[strlen(ifname) - 1] = '\0';
@@ -1182,7 +1195,7 @@ scan_devices(int fd)                      /* I - SNMP socket */
       addrs = get_interface_addresses(ifname);
     }
     else
-      addrs = httpAddrGetList(address, AF_INET, NULL);
+      addrs = httpAddrGetList(address, AF_UNSPEC, NULL);
 
     if (!addrs)
     {
@@ -1198,8 +1211,20 @@ scan_devices(int fd)                     /* I - SNMP socket */
                   community, address);
 
       for (addr = addrs; addr; addr = addr->next)
+      {
+#ifdef AF_INET6
+        if (_httpAddrFamily(&(addr->addr)) == AF_INET6)
+         fd = ipv6;
+       else
+#endif /* AF_INET6 */
+        fd = ipv4;
+
+        debug_printf("DEBUG: Sending get request to %s...\n",
+                    httpAddrString(&(addr->addr), temp, sizeof(temp)));
+
         _cupsSNMPWrite(fd, &(addr->addr), CUPS_SNMP_VERSION_1, community,
                       CUPS_ASN1_GET_REQUEST, DEVICE_TYPE, DeviceTypeOID);
+      }
     }
 
     httpAddrFreeList(addrs);
@@ -1218,17 +1243,33 @@ scan_devices(int fd)                    /* I - SNMP socket */
     timeout.tv_sec  = 2;
     timeout.tv_usec = 0;
 
-    FD_SET(fd, &input);
+    FD_SET(ipv4, &input);
+    if (ipv6 >= 0)
+      FD_SET(ipv6, &input);
+
+    fd = ipv4 > ipv6 ? ipv4 : ipv6;
     if (select(fd + 1, &input, NULL, NULL, &timeout) < 0)
     {
-      fprintf(stderr, "ERROR: %.3f select() for %d failed: %s\n", run_time(),
-              fd, strerror(errno));
+      fprintf(stderr, "ERROR: %.3f select() for %d/%d failed: %s\n", run_time(),
+              ipv4, ipv6, strerror(errno));
       break;
     }
 
-    if (FD_ISSET(fd, &input))
-      read_snmp_response(fd);
-    else
+    busy = 0;
+
+    if (FD_ISSET(ipv4, &input))
+    {
+      read_snmp_response(ipv4);
+      busy = 1;
+    }
+
+    if (ipv6 >= 0 && FD_ISSET(ipv6, &input))
+    {
+      read_snmp_response(ipv6);
+      busy = 1;
+    }
+
+    if (!busy)
     {
      /*
       * List devices with complete information...
@@ -1274,14 +1315,14 @@ try_connect(http_addr_t *addr,          /* I - Socket address */
   debug_printf("DEBUG: %.3f Trying %s://%s:%d...\n", run_time(),
                port == 515 ? "lpd" : "socket", addrname, port);
 
-  if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+  if ((fd = socket(_httpAddrFamily(addr), SOCK_STREAM, 0)) < 0)
   {
     fprintf(stderr, "ERROR: Unable to create socket: %s\n",
             strerror(errno));
     return (-1);
   }
 
-  addr->ipv4.sin_port = htons(port);
+  _httpAddrSetPort(addr, port);
 
   alarm(1);
 
index 4149559489c3ef45922460ae8fdf40f326ddbdb4..d993dbabc27a1c54b53c8c7380390db0e64f7a0e 100644 (file)
@@ -352,22 +352,20 @@ main(int  argc,                           /* I - Number of command-line arguments (6 or 7) */
        {
          case EHOSTDOWN :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" may not exist or "
-                                    "is unavailable at this time."),
-                                  hostname);
+                                  _("The printer may not exist or "
+                                    "is unavailable at this time."));
              break;
 
          case EHOSTUNREACH :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" is unreachable at "
-                                    "this time."), hostname);
+                                  _("The printer is unreachable at this "
+                                    "time."));
              break;
 
          case ECONNREFUSED :
          default :
              _cupsLangPrintFilter(stderr, "WARNING",
-                                  _("Network printer \"%s\" is busy."),
-                                  hostname);
+                                  _("The printer is busy."));
              break;
         }
 
@@ -379,8 +377,7 @@ main(int  argc,                             /* I - Number of command-line arguments (6 or 7) */
       else
       {
        _cupsLangPrintFilter(stderr, "ERROR",
-                            _("Network printer \"%s\" is not responding."),
-                            hostname);
+                            _("The printer is not responding."));
        sleep(30);
       }
     }
@@ -391,17 +388,9 @@ main(int  argc,                            /* I - Number of command-line arguments (6 or 7) */
   fputs("STATE: -connecting-to-device\n", stderr);
   _cupsLangPrintFilter(stderr, "INFO", _("Connected to printer."));
 
-#ifdef AF_INET6
-  if (addr->addr.addr.sa_family == AF_INET6)
-    fprintf(stderr, "DEBUG: Connected to [%s]:%d (IPv6)...\n",
-           httpAddrString(&addr->addr, addrname, sizeof(addrname)),
-           ntohs(addr->addr.ipv6.sin6_port));
-  else
-#endif /* AF_INET6 */
-    if (addr->addr.addr.sa_family == AF_INET)
-      fprintf(stderr, "DEBUG: Connected to %s:%d (IPv4)...\n",
-             httpAddrString(&addr->addr, addrname, sizeof(addrname)),
-             ntohs(addr->addr.ipv4.sin_port));
+  fprintf(stderr, "DEBUG: Connected to %s:%d...\n",
+         httpAddrString(&(addr->addr), addrname, sizeof(addrname)),
+         _httpAddrPort(&(addr->addr)));
 
  /*
   * Print everything...
index 0733891b1ba9917c4f74a9a0c97acc7f4c879b00..63061fc1340550ad499b219f59ee7a11cc0c8182 100644 (file)
 #include <mach/mach_error.h>
 #include <mach/mach_time.h>
 #include <cups/debug-private.h>
+#include <cups/file-private.h>
 #include <cups/sidechannel.h>
 #include <cups/language-private.h>
 #include "backend-private.h"
-
 #include <CoreFoundation/CoreFoundation.h>
 #include <IOKit/usb/IOUSBLib.h>
 #include <IOKit/IOCFPlugIn.h>
@@ -1405,7 +1405,6 @@ static kern_return_t load_classdriver(CFStringRef     driverPath,
   classdriver_t        **driver = NULL;
   CFStringRef  bundle = driverPath ? driverPath : kUSBGenericTOPrinterClassDriver;
   char                 bundlestr[1024];        /* Bundle path */
-  struct stat  bundleinfo;             /* File information for bundle */
   CFURLRef     url;                    /* URL for driver */
   CFPlugInRef  plugin = NULL;          /* Plug-in address */
 
@@ -1416,41 +1415,14 @@ static kern_return_t load_classdriver(CFStringRef           driverPath,
   * Validate permissions for the class driver...
   */
 
-  if (stat(bundlestr, &bundleinfo))
-  {
-    fprintf(stderr, "DEBUG: Class driver \"%s\" not available: %s\n",
-           bundlestr, strerror(errno));
-    fputs("STATE: +cups-missing-filter-warning\n", stderr);
+  _cups_fc_result_t result = _cupsFileCheck(bundlestr,
+                                            _CUPS_FILE_CHECK_DIRECTORY, 1,
+                                            _cupsFileCheckFilter, NULL);
 
-    if (errno == ENOENT && driverPath)
-      return (load_classdriver(NULL, intf, printerDriver));
-    else
-      return (kr);
-  }
-  else if (bundleinfo.st_uid ||
-           (bundleinfo.st_gid && (bundleinfo.st_mode & S_IWGRP)) ||
-          (bundleinfo.st_mode & S_IWOTH))
-  {
-    fprintf(stderr, "DEBUG: Class driver \"%s\" has insecure file "
-                   "permissions (0%o/uid=%d/gid=%d).\n", bundlestr,
-                   bundleinfo.st_mode, (int)bundleinfo.st_uid,
-                   (int)bundleinfo.st_gid);
-    if (bundleinfo.st_uid ||
-       (bundleinfo.st_gid && bundleinfo.st_gid != 80 &&
-        (bundleinfo.st_mode & S_IWGRP)) ||
-       (bundleinfo.st_mode & (S_ISUID | S_IWOTH)))
-      fputs("STATE: +cups-insecure-filter-warning\n", stderr);
-
-    if (bundleinfo.st_uid ||
-        (bundleinfo.st_gid && bundleinfo.st_gid != 80 &&
-        (bundleinfo.st_mode & S_IWOTH)))
-    {
-      if (driverPath)
-        return (load_classdriver(NULL, intf, printerDriver));
-      else
-        return (kr);
-    }
-  }
+  if (result && driverPath)
+    return (load_classdriver(NULL, intf, printerDriver));
+  else if (result)
+    return (kr);
 
  /*
   * Try loading the class driver...
index a733269a14698deb3f4776367a65adc7dd870e76..34050c7ef2aa5db46665b838f1949e9f6cf33584 100644 (file)
@@ -1,9 +1,9 @@
 dnl
 dnl "$Id: cups-compiler.m4 7871 2008-08-27 21:12:43Z mike $"
 dnl
-dnl   Compiler stuff for the Common UNIX Printing System (CUPS).
+dnl   Compiler stuff for CUPS.
 dnl
-dnl   Copyright 2007-2009 by Apple Inc.
+dnl   Copyright 2007-2011 by Apple Inc.
 dnl   Copyright 1997-2007 by Easy Software Products, all rights reserved.
 dnl
 dnl   These coded instructions, statements, and computer programs are the
@@ -131,15 +131,15 @@ if test -n "$GCC"; then
                AC_MSG_RESULT(no))
        CFLAGS="$OLDCFLAGS"
 
-       # The -pie option is available with some versions of GCC and adds
+       # The -fPIE option is available with some versions of GCC and adds
        # randomization of addresses, which avoids another class of exploits
        # that depend on a fixed address for common functions.
-       AC_MSG_CHECKING(if GCC supports -pie)
+       AC_MSG_CHECKING(if GCC supports -fPIE)
        OLDCFLAGS="$CFLAGS"
-       CFLAGS="$CFLAGS -pie -fPIE"
+       CFLAGS="$CFLAGS -fPIE"
        AC_TRY_COMPILE(,,
-               PIEFLAGS="-pie -fPIE"
-               AC_MSG_RESULT(yes),
+               [PIEFLAGS="-fPIE -Wl,-pie"
+               AC_MSG_RESULT(yes)],
                AC_MSG_RESULT(no))
        CFLAGS="$OLDCFLAGS"
 
@@ -160,7 +160,7 @@ if test -n "$GCC"; then
                        # checking, basically wrapping all string functions
                        # with buffer-limited ones.  Not strictly needed for
                        # CUPS since we already use buffer-limited calls, but
-                       # this will catch any additions that are broken.                
+                       # this will catch any additions that are broken.
                        CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
 
                        if test x$enable_pie = xyes; then
index 5ce028e009a9e7687f8e0ef30bf66a52389e45fd..5b374f882565627d754cca9f74f09f6f226b1d0d 100644 (file)
@@ -149,21 +149,16 @@ 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: 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
+ppd-cache.o: cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+ppd-cache.o: array.h language.h string-private.h ../config.h debug-private.h
+ppd-cache.o: ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
+ppd-cache.o: ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
+ppd-cache.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: 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: 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: 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
@@ -398,21 +393,16 @@ ppd.32.o: ppd.c  language.h string-private.h ../config.h debug-private.h ppd-pri
 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  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
+ppd-cache.32.o: ppd-cache.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+ppd-cache.32.o: ppd-cache.c  array.h language.h string-private.h ../config.h debug-private.h
+ppd-cache.32.o: ppd-cache.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
+ppd-cache.32.o: ppd-cache.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
+ppd-cache.32.o: ppd-cache.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  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  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  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
@@ -647,21 +637,16 @@ ppd.64.o: ppd.c  language.h string-private.h ../config.h debug-private.h ppd-pri
 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  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
+ppd-cache.64.o: ppd-cache.c  cups-private.h ../cups/cups.h file.h versioning.h ipp.h http.h
+ppd-cache.64.o: ppd-cache.c  array.h language.h string-private.h ../config.h debug-private.h
+ppd-cache.64.o: ppd-cache.c  ppd-private.h ../cups/ppd.h cups.h pwg-private.h http-private.h
+ppd-cache.64.o: ppd-cache.c  ../cups/http.h md5-private.h ipp-private.h ../cups/ipp.h
+ppd-cache.64.o: ppd-cache.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  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  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  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
index 0af098f3f30cceee35aaee012570c4aeb33e83cb..e44c7063ab16826d7edacd7c19583e060d48454a 100644 (file)
@@ -1,10 +1,9 @@
 <!--
   "$Id: api-filter.shtml 7677 2008-06-19 23:22:19Z mike $"
 
-  Filter and backend programming introduction for the Common UNIX Printing
-  System (CUPS).
+  Filter and backend programming introduction for CUPS.
 
-  Copyright 2007-2009 by Apple Inc.
+  Copyright 2007-2011 by Apple Inc.
   Copyright 1997-2006 by Easy Software Products, all rights reserved.
 
   These coded instructions, statements, and computer programs are the
@@ -85,6 +84,14 @@ that further limit file system access, even for backends running as root. On
 Mac OS X, for example, no backend may write to a user's home directory.</p>
 </blockquote>
 
+<h3><a name="SIGNALS">Signal Handling</a><h3>
+
+<p>The scheduler sends <code>SIGTERM</code> when a printing job is canceled or
+held. Filters, backends, and port monitors <em>must</em> catch
+<code>SIGTERM</code> and perform any cleanup necessary to produce a valid output
+file or return the printer to a known good state. The recommended behavior is to
+end the output on the current page.</p>
+
 <h3><a name="PERMISSIONS">File Permissions</a></h3>
 
 <p>For security reasons, CUPS will only run filters and backends that are owned
@@ -424,7 +431,7 @@ the "DEBUG:" prefix string.</p>
 <p>Filters can communicate with the backend via the
 <a href="#cupsBackChannelRead"><code>cupsBackChannelRead</code></a> and
 <a href="#cupsSideChannelDoRequest"><code>cupsSideChannelDoRequest</code></a>
-functions. The 
+functions. The
 <a href="#cupsBackChannelRead"><code>cupsBackChannelRead</code></a> function
 reads data that has been sent back from the device and is typically used to
 obtain status and configuration information. For example, the following code
index abc22eb904f10d3972aa4a4651457053d46aa9b3..5d66ddd4a8f820a8ba62872154d1dad42ec47ddd 100644 (file)
@@ -309,9 +309,11 @@ _cupsSetNegotiateAuthString(
     return (-1);
   }
 
+#ifdef DEBUG
   if (major_status == GSS_S_CONTINUE_NEEDED)
     cups_gss_printf(major_status, minor_status,
                    "_cupsSetNegotiateAuthString: Continuation needed!");
+#endif /* DEBUG */
 
   if (output_token.length > 0 && output_token.length <= 65536)
   {
index 569baa59b75fa49970ffe8b5b5302c7aa6c59fff..ccfb7c49abc5979a22b4ae85ae266470ae1dab5f 100644 (file)
@@ -45,7 +45,9 @@ enum cups_backend_e                   /**** Backend exit codes ****/
   CUPS_BACKEND_AUTH_REQUIRED = 2,      /* Job failed, authentication required */
   CUPS_BACKEND_HOLD = 3,               /* Job failed, hold job */
   CUPS_BACKEND_STOP = 4,               /* Job failed, stop queue */
-  CUPS_BACKEND_CANCEL = 5              /* Job failed, cancel job */
+  CUPS_BACKEND_CANCEL = 5,             /* Job failed, cancel job */
+  CUPS_BACKEND_RETRY = 6,              /* Job failed, retry this job later */
+  CUPS_BACKEND_RETRY_CURRENT = 7       /* Job failed, retry this job immediately */
 };
 typedef enum cups_backend_e cups_backend_t;
                                        /**** Backend exit codes ****/
index 0cfd9a549a19ef1ad4240a271176c720bf802623..42e4bfab7296189dba9bbe9df90b452bcbbc592e 100644 (file)
@@ -8,7 +8,7 @@
  *   our own file functions allows us to provide transparent support of
  *   gzip'd print files, PPD files, etc.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
 #  endif /* !O_BINARY */
 
 
+#  ifdef __cplusplus
+extern "C" {
+#  endif /* __cplusplus */
+
+
 /*
  * Types and structures...
  */
 
+typedef enum                           /**** _cupsFileCheck return values ****/
+{
+  _CUPS_FILE_CHECK_OK = 0,             /* Everything OK */
+  _CUPS_FILE_CHECK_MISSING = 1,                /* File is missing */
+  _CUPS_FILE_CHECK_PERMISSIONS = 2,    /* File (or parent dir) has bad perms */
+  _CUPS_FILE_CHECK_WRONG_TYPE = 3      /* File has wrong type */
+} _cups_fc_result_t;
+
+typedef enum                           /**** _cupsFileCheck file type values ****/
+{
+  _CUPS_FILE_CHECK_FILE = 0,           /* Check the file and parent directory */
+  _CUPS_FILE_CHECK_PROGRAM = 1,                /* Check the program and parent directory */
+  _CUPS_FILE_CHECK_FILE_ONLY = 2,      /* Check the file only */
+  _CUPS_FILE_CHECK_DIRECTORY = 3       /* Check the directory */
+} _cups_fc_filetype_t;
+
+typedef void (*_cups_fc_func_t)(void *context, _cups_fc_result_t result,
+                               const char *message);
+
 struct _cups_file_s                    /**** CUPS file structure... ****/
 
 {
@@ -88,6 +112,23 @@ struct _cups_file_s                 /**** CUPS file structure... ****/
 };
 
 
+/*
+ * Prototypes...
+ */
+
+extern _cups_fc_result_t       _cupsFileCheck(const char *filename,
+                                              _cups_fc_filetype_t filetype,
+                                              int dorootchecks,
+                                              _cups_fc_func_t cb,
+                                              void *context);
+extern void                    _cupsFileCheckFilter(void *context,
+                                                    _cups_fc_result_t result,
+                                                    const char *message);
+
+#  ifdef __cplusplus
+}
+#  endif /* __cplusplus */
+
 #endif /* !_CUPS_FILE_PRIVATE_H_ */
 
 /*
index 78f05c8fdad8fd8a07ddda379736d7b5ddc2284a..4a08f6eeaaf1711721f90490d67221cbc709005a 100644 (file)
@@ -8,7 +8,7 @@
  *   our own file functions allows us to provide transparent support of
  *   gzip'd print files, PPD files, etc.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
  *
  * Contents:
  *
- *   cupsFileClose()       - Close a CUPS file.
- *   cupsFileCompression() - Return whether a file is compressed.
- *   cupsFileEOF()         - Return the end-of-file status.
- *   cupsFileFind()        - Find a file using the specified path.
- *   cupsFileFlush()       - Flush pending output.
- *   cupsFileGetChar()     - Get a single character from a file.
- *   cupsFileGetConf()     - Get a line from a configuration file...
- *   cupsFileGetLine()     - Get a CR and/or LF-terminated line that may contain
- *                           binary data.
- *   cupsFileGets()        - Get a CR and/or LF-terminated line.
- *   cupsFileLock()        - Temporarily lock access to a file.
- *   cupsFileNumber()      - Return the file descriptor associated with a CUPS
- *                           file.
- *   cupsFileOpen()        - Open a CUPS file.
- *   cupsFileOpenFd()      - Open a CUPS file using a file descriptor.
- *   cupsFilePeekChar()    - Peek at the next character from a file.
- *   cupsFilePrintf()      - Write a formatted string.
- *   cupsFilePutChar()     - Write a character.
- *   cupsFilePuts()        - Write a string.
- *   cupsFileRead()        - Read from a file.
- *   cupsFileRewind()      - Set the current file position to the beginning of
- *                           the file.
- *   cupsFileSeek()        - Seek in a file.
- *   cupsFileStderr()      - Return a CUPS file associated with stderr.
- *   cupsFileStdin()       - Return a CUPS file associated with stdin.
- *   cupsFileStdout()      - Return a CUPS file associated with stdout.
- *   cupsFileTell()        - Return the current file position.
- *   cupsFileUnlock()      - Unlock access to a file.
- *   cupsFileWrite()       - Write to a file.
- *   cups_compress()       - Compress a buffer of data...
- *   cups_fill()           - Fill the input buffer...
- *   cups_read()           - Read from a file descriptor.
- *   cups_write()          - Write to a file descriptor.
+ *   _cupsFileCheck()       - Check the permissions of the given filename.
+ *   _cupsFileCheckFilter() - Report file check results as CUPS filter messages.
+ *   cupsFileClose()        - Close a CUPS file.
+ *   cupsFileCompression()  - Return whether a file is compressed.
+ *   cupsFileEOF()          - Return the end-of-file status.
+ *   cupsFileFind()         - Find a file using the specified path.
+ *   cupsFileFlush()        - Flush pending output.
+ *   cupsFileGetChar()      - Get a single character from a file.
+ *   cupsFileGetConf()      - Get a line from a configuration file.
+ *   cupsFileGetLine()      - Get a CR and/or LF-terminated line that may
+ *                            contain binary data.
+ *   cupsFileGets()         - Get a CR and/or LF-terminated line.
+ *   cupsFileLock()         - Temporarily lock access to a file.
+ *   cupsFileNumber()       - Return the file descriptor associated with a CUPS
+ *                            file.
+ *   cupsFileOpen()         - Open a CUPS file.
+ *   cupsFileOpenFd()       - Open a CUPS file using a file descriptor.
+ *   cupsFilePeekChar()     - Peek at the next character from a file.
+ *   cupsFilePrintf()       - Write a formatted string.
+ *   cupsFilePutChar()      - Write a character.
+ *   cupsFilePuts()         - Write a string.
+ *   cupsFileRead()         - Read from a file.
+ *   cupsFileRewind()       - Set the current file position to the beginning of
+ *                            the file.
+ *   cupsFileSeek()         - Seek in a file.
+ *   cupsFileStderr()       - Return a CUPS file associated with stderr.
+ *   cupsFileStdin()        - Return a CUPS file associated with stdin.
+ *   cupsFileStdout()       - Return a CUPS file associated with stdout.
+ *   cupsFileTell()         - Return the current file position.
+ *   cupsFileUnlock()       - Unlock access to a file.
+ *   cupsFileWrite()        - Write to a file.
+ *   cups_compress()        - Compress a buffer of data.
+ *   cups_fill()            - Fill the input buffer.
+ *   cups_read()            - Read from a file descriptor.
+ *   cups_write()           - Write to a file descriptor.
  */
 
 /*
@@ -76,6 +78,256 @@ static ssize_t      cups_read(cups_file_t *fp, char *buf, size_t bytes);
 static ssize_t cups_write(cups_file_t *fp, const char *buf, size_t bytes);
 
 
+/*
+ * '_cupsFileCheck()' - Check the permissions of the given filename.
+ */
+
+_cups_fc_result_t                      /* O - Check result */
+_cupsFileCheck(
+    const char          *filename,     /* I - Filename to check */
+    _cups_fc_filetype_t filetype,      /* I - Type of file checks? */
+    int                 dorootchecks,  /* I - Check for root permissions? */
+    _cups_fc_func_t     cb,            /* I - Callback function */
+    void                *context)      /* I - Context pointer for callback */
+    
+{
+  struct stat          fileinfo;       /* File information */
+  char                 message[1024],  /* Message string */
+                       temp[1024],     /* Parent directory filename */
+                       *ptr;           /* Pointer into parent directory */
+  _cups_fc_result_t    result;         /* Check result */
+
+
+ /*
+  * Does the program even exist and is it accessible?
+  */
+
+  if (stat(filename, &fileinfo))
+  {
+   /*
+    * Nope...
+    */
+
+    result = _CUPS_FILE_CHECK_MISSING;
+    goto finishup;
+  }
+
+ /*
+  * Check the execute bit...
+  */
+
+  result = _CUPS_FILE_CHECK_OK;
+
+  switch (filetype)
+  {
+    case _CUPS_FILE_CHECK_DIRECTORY :
+        if (!S_ISDIR(fileinfo.st_mode))
+         result = _CUPS_FILE_CHECK_WRONG_TYPE;
+        break;
+
+    default :
+        if (!S_ISREG(fileinfo.st_mode))
+         result = _CUPS_FILE_CHECK_WRONG_TYPE;
+        break;
+  }
+
+  if (result)
+    goto finishup;
+
+ /*
+  * Are we doing root checks?
+  */
+
+  if (!dorootchecks)
+  {
+   /*
+    * Nope, so anything (else) goes...
+    */
+
+    goto finishup;
+  }
+
+ /*
+  * Verify permission of the file itself:
+  *
+  * 1. Must be owned by root
+  * 2. Must not be writable by group unless group is root/wheel/admin
+  * 3. Must not be setuid
+  * 4. Must not be writable by others
+  */
+
+  if (fileinfo.st_uid ||               /* 1. Must be owned by root */
+#ifdef __APPLE__
+      ((fileinfo.st_mode & S_IWGRP) && fileinfo.st_gid &&
+       fileinfo.st_gid != 80) ||       /* 2. Must not be writable by group */
+#else
+      ((fileinfo.st_mode & S_IWGRP) && fileinfo.st_gid) ||
+                                       /* 2. Must not be writable by group */
+#endif /* __APPLE__ */
+      (fileinfo.st_mode & S_ISUID) ||  /* 3. Must not be setuid */
+      (fileinfo.st_mode & S_IWOTH))    /* 4. Must not be writable by others */
+  {
+    result = _CUPS_FILE_CHECK_PERMISSIONS;
+    goto finishup;
+  }
+
+  if (filetype == _CUPS_FILE_CHECK_DIRECTORY ||
+      filetype == _CUPS_FILE_CHECK_FILE_ONLY)
+    goto finishup;
+
+ /*
+  * Now check the containing directory...
+  */
+
+  strlcpy(temp, filename, sizeof(temp));
+  if ((ptr = strrchr(temp, '/')) != NULL)
+  {
+    if (ptr == temp)
+      ptr[1] = '\0';
+    else
+      *ptr = '\0';
+  }
+
+  if (stat(temp, &fileinfo))
+  {
+   /*
+    * Doesn't exist?!?
+    */
+
+    result   = _CUPS_FILE_CHECK_MISSING;
+    filetype = _CUPS_FILE_CHECK_DIRECTORY;
+    filename = temp;
+
+    goto finishup;
+  }
+
+  if (fileinfo.st_uid ||               /* 1. Must be owned by root */
+#ifdef __APPLE__
+      ((fileinfo.st_mode & S_IWGRP) && fileinfo.st_gid &&
+       fileinfo.st_gid != 80) ||       /* 2. Must not be writable by group */
+#else
+      ((fileinfo.st_mode & S_IWGRP) && fileinfo.st_gid) ||
+                                       /* 2. Must not be writable by group */
+#endif /* __APPLE__ */
+      (fileinfo.st_mode & S_ISUID) ||  /* 3. Must not be setuid */
+      (fileinfo.st_mode & S_IWOTH))    /* 4. Must not be writable by others */
+  {
+    result   = _CUPS_FILE_CHECK_PERMISSIONS;
+    filetype = _CUPS_FILE_CHECK_DIRECTORY;
+    filename = temp;
+  }
+
+ /*
+  * Common return point...
+  */
+
+  finishup:
+
+  if (cb)
+  {
+    cups_lang_t *lang = cupsLangDefault();
+                                       /* Localization information */
+
+    switch (result)
+    {
+      case _CUPS_FILE_CHECK_OK :
+         if (filetype == _CUPS_FILE_CHECK_DIRECTORY)
+           snprintf(message, sizeof(message),
+                    _cupsLangString(lang, _("Directory \"%s\" permissions OK "
+                                            "(0%o/uid=%d/gid=%d).")),
+                    filename, fileinfo.st_mode, (int)fileinfo.st_uid,
+                    (int)fileinfo.st_gid);
+         else
+           snprintf(message, sizeof(message),
+                    _cupsLangString(lang, _("File \"%s\" permissions OK "
+                                            "(0%o/uid=%d/gid=%d).")),
+                    filename, fileinfo.st_mode, (int)fileinfo.st_uid,
+                    (int)fileinfo.st_gid);
+          break;
+
+      case _CUPS_FILE_CHECK_MISSING :
+         if (filetype == _CUPS_FILE_CHECK_DIRECTORY)
+           snprintf(message, sizeof(message),
+                    _cupsLangString(lang, _("Directory \"%s\" not available: "
+                                            "%s")),
+                    filename, strerror(errno));
+         else
+           snprintf(message, sizeof(message),
+                    _cupsLangString(lang, _("File \"%s\" not available: %s")),
+                    filename, strerror(errno));
+          break;
+
+      case _CUPS_FILE_CHECK_PERMISSIONS :
+         if (filetype == _CUPS_FILE_CHECK_DIRECTORY)
+           snprintf(message, sizeof(message),
+                    _cupsLangString(lang, _("Directory \"%s\" has insecure "
+                                            "permissions "
+                                            "(0%o/uid=%d/gid=%d).")),
+                    filename, fileinfo.st_mode, (int)fileinfo.st_uid,
+                    (int)fileinfo.st_gid);
+         else
+           snprintf(message, sizeof(message),
+                    _cupsLangString(lang, _("File \"%s\" has insecure "
+                                            "permissions "
+                                            "(0%o/uid=%d/gid=%d).")),
+                    filename, fileinfo.st_mode, (int)fileinfo.st_uid,
+                    (int)fileinfo.st_gid);
+          break;
+
+      case _CUPS_FILE_CHECK_WRONG_TYPE :
+         if (filetype == _CUPS_FILE_CHECK_DIRECTORY)
+           snprintf(message, sizeof(message),
+                    _cupsLangString(lang, _("Directory \"%s\" is a file.")),
+                    filename);
+         else
+           snprintf(message, sizeof(message),
+                    _cupsLangString(lang, _("File \"%s\" is a directory.")),
+                    filename);
+          break;
+    }
+
+    (*cb)(context, result, message);
+  }
+
+  return (result);
+}
+
+
+/*
+ * '_cupsFileCheckFilter()' - Report file check results as CUPS filter messages.
+ */
+
+void
+_cupsFileCheckFilter(
+    void              *context,                /* I - Context pointer (unused) */
+    _cups_fc_result_t result,          /* I - Result code */
+    const char        *message)                /* I - Message text */
+{
+  const char   *prefix;                /* Messaging prefix */
+
+
+  switch (result)
+  {
+    case _CUPS_FILE_CHECK_OK :
+        prefix = "DEBUG2";
+       break;
+
+    case _CUPS_FILE_CHECK_MISSING :
+    case _CUPS_FILE_CHECK_WRONG_TYPE :
+        prefix = "ERROR";
+       fputs("STATE: +cups-missing-filter-warning\n", stderr);
+       break;
+
+    case _CUPS_FILE_CHECK_PERMISSIONS :
+        prefix = "ERROR";
+       fputs("STATE: +cups-insecure-filter-warning\n", stderr);
+       break;
+  }
+
+  fprintf(stderr, "%s: %s\n", prefix, message);
+}
+
+
 /*
  * 'cupsFileClose()' - Close a CUPS file.
  *
@@ -436,7 +688,7 @@ cupsFileGetChar(cups_file_t *fp)    /* I - CUPS file */
 
 
 /*
- * 'cupsFileGetConf()' - Get a line from a configuration file...
+ * 'cupsFileGetConf()' - Get a line from a configuration file.
  *
  * @since CUPS 1.2/Mac OS X 10.5@
  */
@@ -1855,7 +2107,7 @@ cupsFileWrite(cups_file_t *fp,            /* I - CUPS file */
 
 #ifdef HAVE_LIBZ
 /*
- * 'cups_compress()' - Compress a buffer of data...
+ * 'cups_compress()' - Compress a buffer of data.
  */
 
 static ssize_t                         /* O - Number of bytes written or -1 */
@@ -1906,7 +2158,7 @@ cups_compress(cups_file_t *fp,            /* I - CUPS file */
 
 
 /*
- * 'cups_fill()' - Fill the input buffer...
+ * 'cups_fill()' - Fill the input buffer.
  */
 
 static ssize_t                         /* O - Number of bytes or -1 */
index 22d3a77f0d4da8d64c16ef5807b4694d8301d60f..78f1f8191afc9d64e30a540c2a02839ace0d03ae 100644 (file)
@@ -19,6 +19,7 @@
  *   httpAddrLocalhost() - Check for the local loopback address.
  *   httpAddrLookup()    - Lookup the hostname associated with the address.
  *   _httpAddrPort()     - Get the port number associated with an address.
+ *   _httpAddrSetPort()  - Set the port number associated with an address.
  *   httpAddrString()    - Convert an IP address to a dotted string.
  *   httpGetHostByName() - Lookup a hostname or IP address, and return
  *                         address records for the specified name.
@@ -317,6 +318,27 @@ _httpAddrPort(http_addr_t *addr)   /* I - Address */
 }
 
 
+/*
+ * '_httpAddrSetPort()' - Set the port number associated with an address.
+ */
+
+void
+_httpAddrSetPort(http_addr_t *addr,    /* I - Address */
+                 int         port)     /* I - Port */
+{
+  if (!addr || port <= 0)
+    return;
+
+#ifdef AF_INET6
+  if (addr->addr.sa_family == AF_INET6)
+    addr->ipv6.sin6_port = htons(port);
+  else
+#endif /* AF_INET6 */
+  if (addr->addr.sa_family == AF_INET)
+    addr->ipv4.sin_port = htons(port);
+}
+
+
 /*
  * 'httpAddrString()' - Convert an address to a numeric string.
  *
index ac47a79afb2a803bbafdc3ac1ab623affa984c97..8af8dd45bb755173ac16460588a4efd2f000509b 100644 (file)
@@ -71,7 +71,7 @@ httpAddrConnect(
                  httpAddrString(&(addrlist->addr), temp, sizeof(temp)),
                  _httpAddrPort(&(addrlist->addr))));
 
-    if ((*sock = (int)socket(addrlist->addr.addr.sa_family, SOCK_STREAM,
+    if ((*sock = (int)socket(_httpAddrFamily(&(addrlist->addr)), SOCK_STREAM,
                              0)) < 0)
     {
      /*
index 79ff84d6e605b738798496a913a0c6976b5b0245..05379a61370ddc809affd1a43c3e3ce15c71e163 100644 (file)
@@ -345,7 +345,9 @@ extern void _cups_freeifaddrs(struct ifaddrs *addrs);
  * Prototypes...
  */
 
+#define                        _httpAddrFamily(addrp) (addrp)->addr.sa_family
 extern int             _httpAddrPort(http_addr_t *addr);
+extern void            _httpAddrSetPort(http_addr_t *addr, int port);
 extern char            *_httpAssembleUUID(const char *server, int port,
                                           const char *name, int number,
                                           char *buffer, size_t bufsize);
index 5bcf7facdd254397c2c91a9642e81e38643e1656..9cd7b9002666c2de4eede44f2aaa0d8328a00d34 100644 (file)
@@ -868,7 +868,7 @@ httpFlushWrite(http_t *http)                /* I - Connection to server */
 
   http->wused = 0;
 
-  DEBUG_printf(("1httpFlushWrite: Returning %d.", bytes));
+  DEBUG_printf(("1httpFlushWrite: Returning %d, errno=%d.", bytes, errno));
 
   return (bytes);
 }
@@ -1327,7 +1327,7 @@ httpGets(char   *line,                    /* I - Line to read into */
       * No newline; see if there is more data to be read...
       */
 
-      if (!http->blocking && !_httpWait(http, 10000, 1))
+      if (!_httpWait(http, http->blocking ? 30000 : 10000, 1))
       {
         DEBUG_puts("3httpGets: Timed out!");
 #ifdef WIN32
@@ -2951,11 +2951,16 @@ httpWait(http_t *http,                  /* I - Connection to server */
   * First see if there is data in the buffer...
   */
 
+  DEBUG_printf(("2httpWait(http=%p, msec=%d)", http, msec));
+
   if (http == NULL)
     return (0);
 
   if (http->used)
+  {
+    DEBUG_puts("3httpWait: Returning 1 since there is buffered data ready.");
     return (1);
+  }
 
  /*
   * Flush pending data, if any...
@@ -2963,6 +2968,8 @@ httpWait(http_t *http,                    /* I - Connection to server */
 
   if (http->wused)
   {
+    DEBUG_puts("3httpWait: Flushing write buffer.");
+
     if (httpFlushWrite(http) < 0)
       return (0);
   }
index 13009f340ff2136db6c2efaaa647ce5598647ff9..6d589d2ecca1b9a08ff6ab5e8d24291a08002c8d 100644 (file)
@@ -29,6 +29,7 @@ _cups_strcpy
 _cups_strlcat\r
 _cups_strlcpy\r
 _httpAddrPort\r
+_httpAddrSetPort\r
 _httpAssembleUUID\r
 _httpCreate\r
 _httpEncodeURI\r
index c36b87810b57513d2cbdf8566be49695f1d7161c..4d095537a0118a9b3a28f9b7b284449f2d81e1b9 100644 (file)
@@ -41,6 +41,7 @@ _cups_strcpy
 _cups_strlcat
 _cups_strlcpy
 _httpAddrPort
+_httpAddrSetPort
 _httpAssembleUUID
 _httpBIOMethods
 _httpCreate
index 395bce381c88ba460816f88d581c2ab9120a9508..77a56622c6d1a4fa60edace8b90a0b61a773e191 100644 (file)
@@ -139,8 +139,7 @@ _ppdCacheCreateWithFile(
     return (NULL);
   }
 
-  if (strncmp(line, "#CUPS-PPD-CACHE-", 16) ||
-      atoi(line + 16) != _PPD_CACHE_VERSION)
+  if (strncmp(line, "#CUPS-PPD-CACHE-", 16))
   {
     _cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
     DEBUG_printf(("_ppdCacheCreateWithFile: Wrong first line \"%s\".", line));
@@ -148,6 +147,15 @@ _ppdCacheCreateWithFile(
     return (NULL);
   }
 
+  if (atoi(line + 16) != _PPD_CACHE_VERSION)
+  {
+    _cupsSetError(IPP_INTERNAL_ERROR, _("Out of date PPD cache file."), 1);
+    DEBUG_printf(("_ppdCacheCreateWithFile: Cache file has version %s, "
+                  "expected %d.", line + 16, _PPD_CACHE_VERSION));
+    cupsFileClose(fp);
+    return (NULL);
+  }
+
  /*
   * Allocate the mapping data structure...
   */
@@ -528,8 +536,6 @@ _ppdCacheCreateWithFile(
     {
       DEBUG_printf(("_ppdCacheCreateWithFile: Unknown %s on line %d.", line,
                    linenum));
-      _cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
-      goto create_error;
     }
   }
 
@@ -571,7 +577,10 @@ _ppdCacheCreateWithFile(
   _ppdCacheDestroy(pc);
 
   if (attrs)
+  {
     ippDelete(*attrs);
+    *attrs = NULL;
+  }
 
   return (NULL);
 }
index 641a51ce09f9a1101d06cf9d4e838ebaf8d141d9..0b61327d19980d03e4ceec10934fe3df809d6287 100644 (file)
@@ -396,7 +396,7 @@ cupsGetResponse(http_t     *http,   /* I - Connection to server or @code CUPS_HTTP
   {
     status = httpUpdate(http);
   }
-  while (http->state == HTTP_POST_RECV);
+  while (status != HTTP_ERROR && http->state == HTTP_POST_RECV);
 
   DEBUG_printf(("2cupsGetResponse: status=%d", status));
 
@@ -738,6 +738,14 @@ cupsSendRequest(http_t     *http,  /* I - Connection to server or @code CUPS_HTTP
          break;
       }
 
+    if (state == IPP_ERROR)
+    {
+      http->status = HTTP_ERROR;
+      http->state  = HTTP_WAITING;
+
+      return (HTTP_ERROR);
+    }
+
    /*
     * Wait up to 1 second to get the 100-continue response as needed...
     */
index a2aeafbba8c6fbede5463a053f3f17cce4d8ed4e..d5f6126f27cb79f1121e2d6d3385254f81a97ddb 100644 (file)
@@ -761,12 +761,7 @@ _cupsSNMPWrite(
 
   temp = *address;
 
-#ifdef AF_INET6
-  if (temp.addr.sa_family == AF_INET6)
-    temp.ipv6.sin6_port = htons(CUPS_SNMP_PORT);
-  else
-#endif /* AF_INET6 */
-  temp.ipv4.sin_port = htons(CUPS_SNMP_PORT);
+  _httpAddrSetPort(&temp, CUPS_SNMP_PORT);
 
   return (sendto(fd, buffer, bytes, 0, (void *)&temp,
                  httpAddrLength(&temp)) == bytes);
index 0e33744ad254814eedf2fd0af371dd69e007043e..f9736029a850afa6816803633f9d62c8e643dbbc 100644 (file)
@@ -230,7 +230,7 @@ cupsUTF8ToCharset(
   * Handle identity conversions...
   */
 
-  if (encoding == CUPS_UTF8 || encoding <= CUPS_US_ASCII ||
+  if (encoding == CUPS_UTF8 ||
       encoding >= CUPS_ENCODING_VBCS_END)
   {
     strlcpy(dest, (char *)src, maxout);
@@ -243,12 +243,13 @@ cupsUTF8ToCharset(
 
   destptr = dest;
 
-  if (encoding == CUPS_ISO8859_1)
+  if (encoding == CUPS_ISO8859_1 || encoding <= CUPS_US_ASCII)
   {
-    int                ch;                     /* Character from string */
+    int                ch,                     /* Character from string */
+               maxch;                  /* Maximum character for charset */
     char       *destend;               /* End of ISO-8859-1 buffer */
 
-
+    maxch   = encoding == CUPS_ISO8859_1 ? 256 : 128;
     destend = dest + maxout - 1;
 
     while (*src && destptr < destend)
@@ -259,7 +260,7 @@ cupsUTF8ToCharset(
       {
        ch = ((ch & 0x1f) << 6) | (*src++ & 0x3f);
 
-       if (ch < 256)
+       if (ch < maxch)
           *destptr++ = ch;
        else
           *destptr++ = '?';
index 98148729eb5a594559f56cda10bd0335d78fcdac..799e542d25bd46e94fa941ecf07365075d4b407c 100644 (file)
 #media "9x11/9 x 11\"" 648 792
 #media "9x12/9 x 12\"" 648 864
 #media "A0/A0" 2384 3370
-#media "A0.Transverse/A0" 3370 2384
+#media "A0.Transverse/A0 Long Edge" 3370 2384
 #media "A1/A1" 1684 2384
-#media "A1.Transverse/A1" 2384 1684
+#media "A1.Transverse/A1 Long Edge" 2384 1684
 #media "A2/A2" 1191 1684
-#media "A2.Transverse/A2" 1684 1191
+#media "A2.Transverse/A2 Long Edge" 1684 1191
 #media "A3/A3" 842 1191
-#media "A3.Transverse/A3" 1191 842
+#media "A3.Transverse/A3 Long Edge" 1191 842
 #media "A3Extra/A3 Oversize" 913 1262
-#media "A3Extra.Transverse/A3 Oversize" 913 1262
-#media "A3Rotated/A3" 1191 842
+#media "A3Extra.Transverse/A3 Oversize Long Edge" 913 1262
+#media "A3Rotated/A3 Long Edge" 1191 842
 #media "A4/A4" 595 842
 #media "A4Extra/A4 Oversize" 667 914
 #media "A4Plus/A4 Oversize" 595 936
-#media "A4Rotated/A4" 842 595
+#media "A4Rotated/A4 Long Edge" 842 595
 #media "A4Small/A4 Small" 595 842
-#media "A4.Transverse/A4" 842 595
+#media "A4.Transverse/A4 Long Edge" 842 595
 #media "A5/A5" 420 595
 #media "A5Extra/A5 Oversize" 492 668
-#media "A5Rotated/A5" 595 420
-#media "A5.Transverse/A5" 595 420
+#media "A5Rotated/A5 Long Edge" 595 420
+#media "A5.Transverse/A5 Long Edge" 595 420
 #media "A6/A6" 297 420
-#media "A6Rotated/A6" 420 297
+#media "A6Rotated/A6 Long Edge" 420 297
 #media "A7/A7" 210 297
 #media "A8/A8" 148 210
 #media "A9/A9" 105 148
 #media "AnsiD/ANSI D" 1584 2448
 #media "AnsiE/ANSI E" 2448 3168
 #media "ARCHA/Letter Oversize" 648 864
-#media "ARCHA.Transverse/Letter Oversize" 864 648
+#media "ARCHA.Transverse/Letter Oversize Long Edge" 864 648
 #media "ARCHB/Tabloid Oversize" 864 1296
-#media "ARCHB.Transverse/Tabloid Oversize" 1296 864
+#media "ARCHB.Transverse/Tabloid Oversize Long Edge" 1296 864
 #media "ARCHC/ARCH C" 1296 1728
-#media "ARCHC.Transverse/ARCH C" 1728 1296
+#media "ARCHC.Transverse/ARCH C Long Edge" 1728 1296
 #media "ARCHD/ARCH D" 1728 2592
-#media "ARCHD.Transverse/ARCH D" 2592 1728
+#media "ARCHD.Transverse/ARCH D Long Edge" 2592 1728
 #media "ARCHE/ARCH E" 2592 3456
-#media "ARCHE.Transverse/ARCH E" 3456 2592
-#media "B0/JB0" 2920 4127
-#media "B10/JB10" 91 127
-#media "B1/JB1" 2064 2918
-#media "B1/JB1" 2064 2920
-#media "B2/JB2" 1460 2064
-#media "B3/JB3" 1032 1460
-#media "B4/JB4" 729 1032
-#media "B4Rotated/JB4" 1032 729
-#media "B5/B5 JIS" 516 729
-#media "B5Rotated/B5 JIS" 729 516
-#media "B5.Transverse/B5 JIS" 516 729
-#media "B6/JB6" 363 516
-#media "B6Rotated/JB6" 516 363
-#media "B7/JB7" 258 363
-#media "B8/JB8" 181 258
-#media "B9/JB9" 127 181
+#media "ARCHE.Transverse/ARCH E Long Edge" 3456 2592
+#media "B0/JIS B0" 2920 4127
+#media "B10/JIS B10" 91 127
+#media "B1/JIS B1" 2064 2918
+#media "B1/JIS B1" 2064 2920
+#media "B2/JIS B2" 1460 2064
+#media "B3/JIS B3" 1032 1460
+#media "B4/JIS B4" 729 1032
+#media "B4Rotated/JIS B4 Long Edge" 1032 729
+#media "B5/JIS B5" 516 729
+#media "B5Rotated/JIS B5 Long Edge" 729 516
+#media "B5.Transverse/JIS B5 Long Edge" 516 729
+#media "B6/JIS B6" 363 516
+#media "B6Rotated/JIS B6 Long Edge" 516 363
+#media "B7/JIS B7" 258 363
+#media "B8/JIS B8" 181 258
+#media "B9/JIS B9" 127 181
 #media "C4/Envelope C4" 649 918
 #media "C5/Envelope C5" 459 649
 #media "C6/Envelope C6" 323 459
 #media "DL/Envelope DL" 312 624
 #media "DoublePostcard/Postcard Double " 567 420
-#media "DoublePostcardRotated/Postcard Double" 420 567
+#media "DoublePostcardRotated/Postcard Double Long Edge" 420 567
 #media "Env10/Envelope #10 " 297 684
 #media "Env11/Envelope #11" 324 747
 #media "Env12/Envelope #12" 342 792
 #media "EnvC6/Envelope C6" 323 459
 #media "EnvC7/Envelope C7" 230 323
 #media "EnvChou3/Envelope Choukei 3" 340 666
-#media "EnvChou3Rotated/Envelope Choukei 3" 666 340
+#media "EnvChou3Rotated/Envelope Choukei 3 Long Edge" 666 340
 #media "EnvChou4/Envelope Choukei 4" 255 581
-#media "EnvChou4Rotated/Envelope Choukei 4" 581 255
+#media "EnvChou4Rotated/Envelope Choukei 4 Long Edge" 581 255
 #media "EnvDL/Envelope DL" 312 624
 #media "EnvInvite/Envelope Invite" 624 624
 #media "EnvISOB4/Envelope B4" 708 1001
 #media "EnvISOB6/Envelope B6" 499 354
 #media "EnvItalian/Envelope Italian" 312 652
 #media "EnvKaku2/Envelope Kaku2" 680 941
-#media "EnvKaku2Rotated/Envelope Kaku2" 941 680
+#media "EnvKaku2Rotated/Envelope Kaku2 Long Edge" 941 680
 #media "EnvKaku3/Envelope Kaku3" 612 785
-#media "EnvKaku3Rotated/Envelope Kaku3" 785 612
+#media "EnvKaku3Rotated/Envelope Kaku3 Long Edge" 785 612
 #media "EnvMonarch/Envelope Monarch" 279 540
 #media "EnvPersonal/Envelope Personal" 261 468
 #media "EnvPRC1/Envelope PRC1 " 289 468
-#media "EnvPRC1Rotated/Envelope PRC1 " 468 289
+#media "EnvPRC1Rotated/Envelope PRC1 Long Edge" 468 289
 #media "EnvPRC2/Envelope PRC2" 289 499
-#media "EnvPRC2Rotated/Envelope PRC2" 499 289
+#media "EnvPRC2Rotated/Envelope PRC2 Long Edge" 499 289
 #media "EnvPRC3/Envelope PRC3" 354 499
-#media "EnvPRC3Rotated/Envelope PRC3" 499 354
+#media "EnvPRC3Rotated/Envelope PRC3 Long Edge" 499 354
 #media "EnvPRC4/Envelope PRC4" 312 590
-#media "EnvPRC4Rotated/Envelope PRC4" 590 312
+#media "EnvPRC4Rotated/Envelope PRC4 Long Edge" 590 312
 #media "EnvPRC5/Envelope PRC5PRC5" 312 624
-#media "EnvPRC5Rotated/Envelope PRC5" 624 312
+#media "EnvPRC5Rotated/Envelope PRC5 Long Edge" 624 312
 #media "EnvPRC6/Envelope PRC6" 340 652
-#media "EnvPRC6Rotated/Envelope PRC6" 652 340
+#media "EnvPRC6Rotated/Envelope PRC6 Long Edge" 652 340
 #media "EnvPRC7/Envelope PRC7" 454 652
-#media "EnvPRC7Rotated/Envelope PRC7" 652 454
+#media "EnvPRC7Rotated/Envelope PRC7 Long Edge" 652 454
 #media "EnvPRC8/Envelope PRC8" 340 876
-#media "EnvPRC8Rotated/Envelope PRC8" 876 340
+#media "EnvPRC8Rotated/Envelope PRC8 Long Edge" 876 340
 #media "EnvPRC9/Envelope PRC9" 649 918
-#media "EnvPRC9Rotated/Envelope PRC9" 918 649
+#media "EnvPRC9Rotated/Envelope PRC9 Long Edge" 918 649
 #media "EnvPRC10/Envelope PRC10" 918 1298
-#media "EnvPRC10Rotated/Envelope PRC10" 1298 918
+#media "EnvPRC10Rotated/Envelope PRC10 Long Edge" 1298 918
 #media "EnvYou4/Envelope You4" 298 666
-#media "EnvYou4Rotated/Envelope You4" 666 298
+#media "EnvYou4Rotated/Envelope You4 Long Edge" 666 298
 #media "Executive/Executive" 522 756
 #media "FanFoldGerman/FanFold German" 612 864
 #media "FanFoldGermanLegal/FanFold Legal German" 612 936
 #media "Legal/US Legal" 612 1008
 #media "LegalExtra/US Legal Oversize" 684 1080
 #media "Letter/US Letter" 612 792
-#media "Letter.Transverse/US Letter" 792 612
+#media "Letter.Transverse/US Letter Long Edge" 792 612
 #media "LetterExtra/US Letter Oversize" 684 864
-#media "LetterExtra.Transverse/US Letter Oversize" 864 684
+#media "LetterExtra.Transverse/US Letter Oversize Long Edge" 864 684
 #media "LetterPlus/US Letter Oversize" 612 914
-#media "LetterRotated/US Letter" 792 612
+#media "LetterRotated/US Letter Long Edge" 792 612
 #media "LetterSmall/US Letter Small" 612 792
 #media "Monarch/Envelope Monarch" 279 540
 #media "Note/Note" 612 792
 #media "Postcard/Postcard" 284 419
-#media "PostcardRotated/Postcard" 419 284
+#media "PostcardRotated/Postcard Long Edge" 419 284
 #media "PRC16K/PRC16K" 414 610
-#media "PRC16KRotated/PRC16K" 610 414
+#media "PRC16KRotated/PRC16K Long Edge" 610 414
 #media "PRC32K/PRC32K" 275 428
 #media "PRC32KBig/PRC32K Oversize" 275 428
-#media "PRC32KBigRotated/PRC32K Oversize" 428 275
-#media "PRC32KRotated/PRC32K" 428 275
+#media "PRC32KBigRotated/PRC32K Oversize Long Edge" 428 275
+#media "PRC32KRotated/PRC32K Long Edge" 428 275
 #media "Quarto/Quarto" 610 780
 #media "Statement/Statement" 396 612
 #media "SuperA/Super A" 643 1009
index fe995956f361788febfdff99111886532086b035..66c34ec1f3d28cad34a91d7b24a50ade2fd49c31 100644 (file)
@@ -18,15 +18,15 @@ support, there are several third-party solutions that can be found on
 
 <P>CUPS supports page and size-based quotas for each printer.
 The quotas are tracked individually for each user, but a single set of
-limits applies to all users for a partiuclar printer. For example, you
+limits applies to all users for a particular printer. For example, you
 can limit every user to 5 pages per day on an expensive printer, but
 you cannot limit every user except Johnny.</P>
 
-<P>The <CODE>job-k-limit</CODE>, <CODE>job-page-limit</CODE>, and <CODE>job-quota-peiod</CODE>
+<P>The <CODE>job-k-limit</CODE>, <CODE>job-page-limit</CODE>, and <CODE>job-quota-period</CODE>
 options determine whether and how quotas are enforced for a printer.
 The <CODE>job-quota-period</CODE> option determines the time interval for
 quota tracking. The interval is expressed in seconds, so a day is
-86,400, a week is 604,800 and a month is 2,592,000 seconds. The
+86,400, a week is 604,800, and a month is 2,592,000 seconds. The
 <CODE>job-k-limit</CODE> option specifies the job size limit in killobytes. The 
 <CODE>job-page-limit</CODE> option specifies the number of pages limit.</P>
 
index 7967e082addcbcfa458a3677d1cc869a21790545..19760cd85b5e6fe0ebf2fb1f18d4773bb711f97d 100644 (file)
@@ -478,6 +478,10 @@ connections.">cupsSetCredentials</a></li>
        <li><a href="#cups_job_s" title="Job">cups_job_s</a></li>
        <li><a href="#cups_option_s" title="Printer Options">cups_option_s</a></li>
 </ul></li>
+<li><a href="#VARIABLES">Variables</a><ul class="code">
+       <li><a href="#CF_RETURNS_RETAINED" title="Get the Apple language identifier associated with a
+locale ID.">CF_RETURNS_RETAINED</a></li>
+</ul></li>
 <li><a href="#ENUMERATIONS">Constants</a><ul class="code">
        <li><a href="#cups_ptype_e" title="Printer type/capability bit constants">cups_ptype_e</a></li>
 </ul></li>
@@ -2445,6 +2449,11 @@ typedef int (*cups_server_cert_cb_t)(http_t *http, void *tls, cups_array_t *cert
 <dt>value </dt>
 <dd class="description">Value of option</dd>
 </dl>
+<h2 class="title"><a name="VARIABLES">Variables</a></h2>
+<h3 class="variable"><a name="CF_RETURNS_RETAINED">CF_RETURNS_RETAINED</a></h3>
+<p class="description">Get the Apple language identifier associated with a
+locale ID.</p>
+<p class="code">const char *locale) CF_RETURNS_RETAINED;</p>
 <h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
 <h3 class="enumeration"><a name="cups_ptype_e">cups_ptype_e</a></h3>
 <p class="description">Printer type/capability bit constants</p>
index a4cde044e9b3d152f4e96bfd5156d8d154183cfd..45f5e33fca70a8e89ddf02fb7f60dba1a96b0d53 100644 (file)
@@ -390,7 +390,7 @@ div.contents ul.subcontents li {
        <li><a href="#cupsFileFind" title="Find a file using the specified path.">cupsFileFind</a></li>
        <li><a href="#cupsFileFlush" title="Flush pending output.">cupsFileFlush</a></li>
        <li><a href="#cupsFileGetChar" title="Get a single character from a file.">cupsFileGetChar</a></li>
-       <li><a href="#cupsFileGetConf" title="Get a line from a configuration file...">cupsFileGetConf</a></li>
+       <li><a href="#cupsFileGetConf" title="Get a line from a configuration file.">cupsFileGetConf</a></li>
        <li><a href="#cupsFileGetLine" title="Get a CR and/or LF-terminated line that may
 contain binary data.">cupsFileGetLine</a></li>
        <li><a href="#cupsFileGets" title="Get a CR and/or LF-terminated line.">cupsFileGets</a></li>
@@ -602,7 +602,7 @@ int cupsFileGetChar (<br>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Character or -1 on end of file</p>
 <h3 class="function"><span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span><a name="cupsFileGetConf">cupsFileGetConf</a></h3>
-<p class="description">Get a line from a configuration file...</p>
+<p class="description">Get a line from a configuration file.</p>
 <p class="code">
 char *cupsFileGetConf (<br>
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
index d6e4dc8be2acd8b7273ea127eaa441d750babae5..904926fe246dc704c94910ccea4d4f34ed3eb9cd 100644 (file)
@@ -386,7 +386,7 @@ div.contents ul.subcontents li {
 <ul class="contents">
 <li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
        <li><a href="#SECURITY">Security Considerations</a></li>
-       <li><a href="#PERMISSIONS">File Permissions</a></li>
+       <li><a href="#SIGNALS">Signal Handling</a></li>
        <li><a href="#TEMPFILES">Temporary Files</a></li>
        <li><a href="#COPIES">Copy Generation</a></li>
        <li><a href="#EXITCODES">Exit Codes</a></li>
@@ -428,10 +428,9 @@ div.contents ul.subcontents li {
 <!--
   "$Id$"
 
-  Filter and backend programming introduction for the Common UNIX Printing
-  System (CUPS).
+  Filter and backend programming introduction for CUPS.
 
-  Copyright 2007-2009 by Apple Inc.
+  Copyright 2007-2011 by Apple Inc.
   Copyright 1997-2006 by Easy Software Products, all rights reserved.
 
   These coded instructions, statements, and computer programs are the
@@ -512,6 +511,14 @@ that further limit file system access, even for backends running as root. On
 Mac OS X, for example, no backend may write to a user's home directory.</p>
 </blockquote>
 
+<h3><a name="SIGNALS">Signal Handling</a><h3>
+
+<p>The scheduler sends <code>SIGTERM</code> when a printing job is canceled or
+held. Filters, backends, and port monitors <em>must</em> catch
+<code>SIGTERM</code> and perform any cleanup necessary to produce a valid output
+file or return the printer to a known good state. The recommended behavior is to
+end the output on the current page.</p>
+
 <h3><a name="PERMISSIONS">File Permissions</a></h3>
 
 <p>For security reasons, CUPS will only run filters and backends that are owned
@@ -851,7 +858,7 @@ the "DEBUG:" prefix string.</p>
 <p>Filters can communicate with the backend via the
 <a href="#cupsBackChannelRead"><code>cupsBackChannelRead</code></a> and
 <a href="#cupsSideChannelDoRequest"><code>cupsSideChannelDoRequest</code></a>
-functions. The 
+functions. The
 <a href="#cupsBackChannelRead"><code>cupsBackChannelRead</code></a> function
 reads data that has been sent back from the device and is typically used to
 obtain status and configuration information. For example, the following code
@@ -1352,6 +1359,10 @@ typedef void (*cups_sc_walk_func_t)(const char *oid, const char *data, int datal
 <dd class="description">Job failed, hold job</dd>
 <dt>CUPS_BACKEND_OK </dt>
 <dd class="description">Job completed successfully</dd>
+<dt>CUPS_BACKEND_RETRY </dt>
+<dd class="description">Job failed, retry this job later</dd>
+<dt>CUPS_BACKEND_RETRY_CURRENT </dt>
+<dd class="description">Job failed, retry this job immediately</dd>
 <dt>CUPS_BACKEND_STOP </dt>
 <dd class="description">Job failed, stop queue</dd>
 </dl>
index 58cbf1a265fc9d8bacea93d8de7b667bd705c051..7631e6a7d98b647dc61a6ebc80c1e0c0d898a28a 100644 (file)
@@ -386,7 +386,9 @@ div.contents ul.subcontents li {
        <li><a href="#mimeDeleteType" title="Delete a type from the MIME database.">mimeDeleteType</a></li>
        <li><a href="#mimeFileType" title="Determine the type of a file.">mimeFileType</a></li>
        <li><a href="#mimeFilter" title="Find the fastest way to convert from one type to another.">mimeFilter</a></li>
-       <li><a href="#mimeFilterLookup" title="Lookup a filter...">mimeFilterLookup</a></li>
+       <li><a href="#mimeFilter2" title="Find the fastest way to convert from one type to another,
+including file size.">mimeFilter2</a></li>
+       <li><a href="#mimeFilterLookup" title="Lookup a filter.">mimeFilterLookup</a></li>
        <li><a href="#mimeFirstFilter" title="Get the first filter in the MIME database.">mimeFirstFilter</a></li>
        <li><a href="#mimeFirstType" title="Get the first type in the MIME database.">mimeFirstType</a></li>
        <li><a href="#mimeLoad" title="Create a new MIME database from disk.">mimeLoad</a></li>
@@ -394,7 +396,7 @@ div.contents ul.subcontents li {
        <li><a href="#mimeLoadTypes" title="Load type definitions from disk.">mimeLoadTypes</a></li>
        <li><a href="#mimeNextFilter" title="Get the next filter in the MIME database.">mimeNextFilter</a></li>
        <li><a href="#mimeNextType" title="Get the next type in the MIME database.">mimeNextType</a></li>
-       <li><a href="#mimeNumFilters" title="MIME database">mimeNumFilters</a></li>
+       <li><a href="#mimeNumFilters" title="Next type">mimeNumFilters</a></li>
        <li><a href="#mimeNumTypes" title="MIME database">mimeNumTypes</a></li>
        <li><a href="#mimeType" title="Lookup a file type.">mimeType</a></li>
 </ul></li>
@@ -567,8 +569,34 @@ cups_array_t *mimeFilter (<br>
 </dl>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Array of filters to run</p>
+<h3 class="function"><a name="mimeFilter2">mimeFilter2</a></h3>
+<p class="description">Find the fastest way to convert from one type to another,
+including file size.</p>
+<p class="code">
+cups_array_t *mimeFilter2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t srcsize,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *cost<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>src</dt>
+<dd class="description">Source file type</dd>
+<dt>srcsize</dt>
+<dd class="description">Size of source file</dd>
+<dt>dst</dt>
+<dd class="description">Destination file type</dd>
+<dt>cost</dt>
+<dd class="description">Cost of filters</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Array of filters to run</p>
 <h3 class="function"><a name="mimeFilterLookup">mimeFilterLookup</a></h3>
-<p class="description">Lookup a filter...</p>
+<p class="description">Lookup a filter.</p>
 <p class="code">
 <a href="#mime_filter_t">mime_filter_t</a> *mimeFilterLookup (<br>
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
@@ -699,7 +727,7 @@ Use <a href="#mimeLoadFilters"><code>mimeLoadFilters</code></a> to load all filt
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Type or NULL</p>
 <h3 class="function"><a name="mimeNumFilters">mimeNumFilters</a></h3>
-<p class="description">MIME database</p>
+<p class="description">Next type</p>
 <p class="code">
 int mimeNumFilters (<br>
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
index c66d6f5bbd08ca677ded3f7bfaff85101609cd3c..872fb72b697ea6af6af832015341929dfb212fc5 100644 (file)
@@ -345,7 +345,7 @@ div.contents ul.subcontents li {
 
   PPD extension documentation for CUPS.
 
-  Copyright 2007-2010 by Apple Inc.
+  Copyright 2007-2011 by Apple Inc.
   Copyright 1997-2007 by Easy Software Products.
 
   These coded instructions, statements, and computer programs are the
@@ -1563,6 +1563,12 @@ the special filter program "-" may be specified.</p>
 
 <p>This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified. The destination type is automatically created as needed and is passed to the filters and backend as the FINAL_CONTENT_TYPE value.</p>
 
+<blockquote><b>Note:</b>
+
+<p>The presence of a single <code>cupsFilter2</code> keyword in the PPD file will hide any <code>cupsFilter</code> keywords from the CUPS scheduler. When using <code>cupsFilter2</code> to provide filters specific for CUPS 1.5 and later, provide a <code>cupsFilter2</code> line for every filter and a <code>cupsFilter</code> line for each filter that is compatible with older versions of CUPS.</p>
+
+</blockquote>
+
 <p>Examples:</p>
 
 <pre class='command'>
index 648d0b16421bbf4fa6d4c954a769cea794f95ce3..f4a4c5b89fd2c478c3f8138b914471b2b123cd3b 100644 (file)
@@ -138,6 +138,11 @@ rastertolabel.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.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
+rastertopwg.o: ../cups/cups.h ../cups/language-private.h ../cups/transcode.h
+rastertopwg.o: ../cups/language.h ../cups/array.h ../cups/versioning.h
+rastertopwg.o: ../cups/raster.h ../cups/cups.h ../cups/file.h ../cups/ipp.h
+rastertopwg.o: ../cups/http.h ../cups/ppd.h ../cups/string-private.h
+rastertopwg.o: ../config.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/array.h ../cups/language.h ../cups/ppd.h
@@ -295,6 +300,11 @@ rastertolabel.32.o: rastertolabel.c  ../cups/versioning.h ../cups/ipp.h ../cups/
 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
+rastertopwg.32.o: rastertopwg.c  ../cups/cups.h ../cups/language-private.h ../cups/transcode.h
+rastertopwg.32.o: rastertopwg.c  ../cups/language.h ../cups/array.h ../cups/versioning.h
+rastertopwg.32.o: rastertopwg.c  ../cups/raster.h ../cups/cups.h ../cups/file.h ../cups/ipp.h
+rastertopwg.32.o: rastertopwg.c  ../cups/http.h ../cups/ppd.h ../cups/string-private.h
+rastertopwg.32.o: rastertopwg.c  ../config.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/array.h ../cups/language.h ../cups/ppd.h
@@ -452,6 +462,11 @@ rastertolabel.64.o: rastertolabel.c  ../cups/versioning.h ../cups/ipp.h ../cups/
 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
+rastertopwg.64.o: rastertopwg.c  ../cups/cups.h ../cups/language-private.h ../cups/transcode.h
+rastertopwg.64.o: rastertopwg.c  ../cups/language.h ../cups/array.h ../cups/versioning.h
+rastertopwg.64.o: rastertopwg.c  ../cups/raster.h ../cups/cups.h ../cups/file.h ../cups/ipp.h
+rastertopwg.64.o: rastertopwg.c  ../cups/http.h ../cups/ppd.h ../cups/string-private.h
+rastertopwg.64.o: rastertopwg.c  ../config.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/array.h ../cups/language.h ../cups/ppd.h
index 8292be8a78988a5ef2ce5bfa783564f516dc748c..40433aa5536eed4ed94a93b59e6ffeac9668d40c 100644 (file)
@@ -3,7 +3,7 @@
 
   PPD extension documentation for CUPS.
 
-  Copyright 2007-2010 by Apple Inc.
+  Copyright 2007-2011 by Apple Inc.
   Copyright 1997-2007 by Easy Software Products.
 
   These coded instructions, statements, and computer programs are the
index 1bc623ec5bf06903bae2644d48262fed452c01b8..a0cf1e895d534aea3f6801792c45de4f1bf097a5 100644 (file)
@@ -1124,6 +1124,12 @@ the special filter program "-" may be specified.</p>
 
 <p>This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified. The destination type is automatically created as needed and is passed to the filters and backend as the FINAL_CONTENT_TYPE value.</p>
 
+<blockquote><b>Note:</b>
+
+<p>The presence of a single <code>cupsFilter2</code> keyword in the PPD file will hide any <code>cupsFilter</code> keywords from the CUPS scheduler. When using <code>cupsFilter2</code> to provide filters specific for CUPS 1.5 and later, provide a <code>cupsFilter2</code> line for every filter and a <code>cupsFilter</code> line for each filter that is compatible with older versions of CUPS.</p>
+
+</blockquote>
+
 <p>Examples:</p>
 
 <pre class='command'>
index 2f2cdb30f64e94c37d39a24095b433616672f84e..80871068d37d33b565186237cd437905f2aa850b 100644 (file)
@@ -30,7 +30,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.5\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2011-03-21 15:59-0700\n"
+"POT-Creation-Date: 2011-04-22 10:53-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -198,11 +198,11 @@ msgid ""
 "    DETAILED CONFORMANCE TEST RESULTS"
 msgstr ""
 
-#: systemv/cupstestppd.c:3493
+#: systemv/cupstestppd.c:3619
 msgid "                          Ignore specific warnings."
 msgstr ""
 
-#: systemv/cupstestppd.c:3497
+#: systemv/cupstestppd.c:3623
 msgid "                          Issue warnings instead of errors."
 msgstr ""
 
@@ -320,29 +320,18 @@ msgstr ""
 msgid "        PASS    ShortNickName"
 msgstr ""
 
-#: systemv/cupstestppd.c:3420
-#, c-format
-msgid ""
-"        WARN    \"%s %s\" conflicts with \"%s %s\"\n"
-"                (constraint=\"%s %s %s %s\")."
-msgstr ""
-
 #: systemv/cupstestppd.c:1338
 #, c-format
 msgid "        WARN    %s has no corresponding options."
 msgstr ""
 
-#: systemv/cupstestppd.c:1459
+#: systemv/cupstestppd.c:1450
 #, c-format
 msgid ""
 "        WARN    %s shares a common prefix with %s\n"
 "                REF: Page 15, section 3.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:1347
-msgid "        WARN    Default choices conflicting."
-msgstr ""
-
 #: systemv/cupstestppd.c:1309
 #, c-format
 msgid ""
@@ -350,63 +339,63 @@ msgid ""
 "                REF: Page 122, section 5.17"
 msgstr ""
 
-#: systemv/cupstestppd.c:1717
+#: systemv/cupstestppd.c:1708
 msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings."
 msgstr ""
 
-#: systemv/cupstestppd.c:1363
+#: systemv/cupstestppd.c:1354
 msgid ""
 "        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
 "                REF: Pages 56-57, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1699
+#: systemv/cupstestppd.c:1690
 #, c-format
 msgid "        WARN    Line %d only contains whitespace."
 msgstr ""
 
-#: systemv/cupstestppd.c:1371
+#: systemv/cupstestppd.c:1362
 msgid ""
 "        WARN    Manufacturer required by PPD 4.3 spec.\n"
 "                REF: Pages 58-59, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1722
+#: systemv/cupstestppd.c:1713
 msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF."
 msgstr ""
 
-#: systemv/cupstestppd.c:1355
+#: systemv/cupstestppd.c:1346
 #, c-format
 msgid ""
 "        WARN    Obsolete PPD version %.1f.\n"
 "                REF: Page 42, section 5.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:1386
+#: systemv/cupstestppd.c:1377
 msgid ""
 "        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
 "                REF: Pages 61-62, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1394
+#: systemv/cupstestppd.c:1385
 msgid ""
 "        WARN    PCFileName should contain a unique filename.\n"
 "                REF: Pages 61-62, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1429
+#: systemv/cupstestppd.c:1420
 msgid ""
 "        WARN    Protocols contains PJL but JCL attributes are not set.\n"
 "                REF: Pages 78-79, section 5.7."
 msgstr ""
 
-#: systemv/cupstestppd.c:1420
+#: systemv/cupstestppd.c:1411
 msgid ""
 "        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
 "                REF: Pages 78-79, section 5.7."
 msgstr ""
 
-#: systemv/cupstestppd.c:1403
+#: systemv/cupstestppd.c:1394
 msgid ""
 "        WARN    ShortNickName required by PPD 4.3 spec.\n"
 "                REF: Pages 64-65, section 5.3."
@@ -420,183 +409,205 @@ msgstr ""
 msgid "       cupstestdsc [options] -"
 msgstr ""
 
-#: systemv/cupstestppd.c:3488
+#: systemv/cupstestppd.c:3614
 msgid "       program | cupstestppd [options] -"
 msgstr ""
 
-#: systemv/cupstestppd.c:2205
+#: systemv/cupstestppd.c:3546
+#, c-format
+msgid ""
+"      %s  \"%s %s\" conflicts with \"%s %s\"\n"
+"                (constraint=\"%s %s %s %s\")."
+msgstr ""
+
+#: systemv/cupstestppd.c:2212
 #, c-format
 msgid "      %s  %s %s does not exist."
 msgstr ""
 
-#: systemv/cupstestppd.c:3577
+#: systemv/cupstestppd.c:3703
 #, c-format
 msgid "      %s  %s file \"%s\" has the wrong capitalization."
 msgstr ""
 
-#: systemv/cupstestppd.c:2275
+#: systemv/cupstestppd.c:2282
 #, c-format
 msgid ""
 "      %s  Bad %s choice %s.\n"
 "                REF: Page 122, section 5.17"
 msgstr ""
 
-#: systemv/cupstestppd.c:3181 systemv/cupstestppd.c:3230
-#: systemv/cupstestppd.c:3269
+#: systemv/cupstestppd.c:3306 systemv/cupstestppd.c:3355
+#: systemv/cupstestppd.c:3394
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:3135
+#: systemv/cupstestppd.c:3260
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2328
+#: systemv/cupstestppd.c:2335
 #, c-format
 msgid "      %s  Bad cupsFilter value \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:2807
+#: systemv/cupstestppd.c:2814
 #, c-format
 msgid "      %s  Bad cupsICCProfile %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2414
+#: systemv/cupstestppd.c:2421
 #, c-format
 msgid "      %s  Bad cupsPreFilter value \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:1795
+#: systemv/cupstestppd.c:1786
 #, c-format
 msgid "      %s  Bad cupsUIConstraints %s: \"%s\""
 msgstr ""
 
-#: systemv/cupstestppd.c:3085
+#: systemv/cupstestppd.c:3210
 #, c-format
 msgid "      %s  Bad language \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:2372 systemv/cupstestppd.c:2458
-#: systemv/cupstestppd.c:2516 systemv/cupstestppd.c:2571
-#: systemv/cupstestppd.c:2626 systemv/cupstestppd.c:2681
-#: systemv/cupstestppd.c:2734 systemv/cupstestppd.c:2856
+#: systemv/cupstestppd.c:2379 systemv/cupstestppd.c:2465
+#: systemv/cupstestppd.c:2523 systemv/cupstestppd.c:2578
+#: systemv/cupstestppd.c:2633 systemv/cupstestppd.c:2688
+#: systemv/cupstestppd.c:2741 systemv/cupstestppd.c:2863
 #, c-format
 msgid "      %s  Bad permissions on %s file \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:2398 systemv/cupstestppd.c:2485
-#: systemv/cupstestppd.c:2540 systemv/cupstestppd.c:2595
-#: systemv/cupstestppd.c:2650 systemv/cupstestppd.c:2705
+#: systemv/cupstestppd.c:2405 systemv/cupstestppd.c:2492
+#: systemv/cupstestppd.c:2547 systemv/cupstestppd.c:2602
+#: systemv/cupstestppd.c:2657 systemv/cupstestppd.c:2712
 #, c-format
 msgid "      %s  Bad spelling of %s - should be %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2750
+#: systemv/cupstestppd.c:2757
 #, c-format
 msgid "      %s  Cannot provide both APScanAppPath and APScanAppBundleID."
 msgstr ""
 
-#: systemv/cupstestppd.c:1776
+#: systemv/cupstestppd.c:2169
+#, c-format
+msgid "      %s  Default choices conflicting."
+msgstr ""
+
+#: systemv/cupstestppd.c:1767
 #, c-format
 msgid "      %s  Empty cupsUIConstraints %s"
 msgstr ""
 
-#: systemv/cupstestppd.c:3213 systemv/cupstestppd.c:3253
+#: systemv/cupstestppd.c:3338 systemv/cupstestppd.c:3378
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s, choice %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:3121
+#: systemv/cupstestppd.c:3246
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2357 systemv/cupstestppd.c:2443
-#: systemv/cupstestppd.c:2501 systemv/cupstestppd.c:2556
-#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2666
-#: systemv/cupstestppd.c:2718 systemv/cupstestppd.c:2841
+#: systemv/cupstestppd.c:2364 systemv/cupstestppd.c:2450
+#: systemv/cupstestppd.c:2508 systemv/cupstestppd.c:2563
+#: systemv/cupstestppd.c:2618 systemv/cupstestppd.c:2673
+#: systemv/cupstestppd.c:2725 systemv/cupstestppd.c:2848
 #, c-format
 msgid "      %s  Missing %s file \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:2952
+#: systemv/cupstestppd.c:2971
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageRegion option.\n"
 "                REF: Page 100, section 5.14."
 msgstr ""
 
-#: systemv/cupstestppd.c:2937
+#: systemv/cupstestppd.c:2956
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageSize option.\n"
 "                REF: Page 99, section 5.14."
 msgstr ""
 
-#: systemv/cupstestppd.c:1986 systemv/cupstestppd.c:2027
+#: systemv/cupstestppd.c:1977 systemv/cupstestppd.c:2018
 #, c-format
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:1881
+#: systemv/cupstestppd.c:1872
 #, c-format
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
 msgstr ""
 
-#: systemv/cupstestppd.c:1813
+#: systemv/cupstestppd.c:1804
 #, c-format
 msgid "      %s  Missing cupsUIResolver %s"
 msgstr ""
 
-#: systemv/cupstestppd.c:1972 systemv/cupstestppd.c:2013
+#: systemv/cupstestppd.c:1963 systemv/cupstestppd.c:2004
 #, c-format
 msgid "      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:1865
+#: systemv/cupstestppd.c:1856
 #, c-format
 msgid "      %s  Missing option %s in cupsUIConstraints %s: \"%s\""
 msgstr ""
 
-#: systemv/cupstestppd.c:3307
+#: systemv/cupstestppd.c:3432
 #, c-format
 msgid "      %s  No base translation \"%s\" is included in file."
 msgstr ""
 
-#: systemv/cupstestppd.c:2251
+#: systemv/cupstestppd.c:2258
 #, c-format
 msgid ""
 "      %s  REQUIRED %s does not define choice None.\n"
 "                REF: Page 122, section 5.17"
 msgstr ""
 
-#: systemv/cupstestppd.c:3010 systemv/cupstestppd.c:3024
+#: systemv/cupstestppd.c:3029 systemv/cupstestppd.c:3043
 #, c-format
 msgid "      %s  Size \"%s\" defined for %s but not for %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2990
+#: systemv/cupstestppd.c:3009
 #, c-format
 msgid "      %s  Size \"%s\" has unexpected dimensions (%gx%g)."
 msgstr ""
 
-#: systemv/cupstestppd.c:2884
+#: systemv/cupstestppd.c:3152
+#, c-format
+msgid "      %s  Size \"%s\" should be \"%s\"."
+msgstr ""
+
+#: systemv/cupstestppd.c:3118
+#, c-format
+msgid "      %s  Size \"%s\" should be the Adobe standard name \"%s\"."
+msgstr ""
+
+#: systemv/cupstestppd.c:2891
 #, c-format
 msgid "      %s  cupsICCProfile %s hash value collides with %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:1936
+#: systemv/cupstestppd.c:1927
 #, c-format
 msgid "      %s  cupsUIResolver %s causes a loop."
 msgstr ""
 
-#: systemv/cupstestppd.c:1918
+#: systemv/cupstestppd.c:1909
 #, c-format
 msgid "      %s  cupsUIResolver %s does not list at least two different options."
 msgstr ""
 
-#: systemv/cupstestppd.c:2136
+#: systemv/cupstestppd.c:2127
 #, c-format
 msgid "      **FAIL**  %s choice names %s and %s differ only by case."
 msgstr ""
@@ -703,7 +714,7 @@ msgstr ""
 msgid "      **FAIL**  Bad LanguageVersion %s - must be English."
 msgstr ""
 
-#: systemv/cupstestppd.c:3447 systemv/cupstestppd.c:3469
+#: systemv/cupstestppd.c:3573 systemv/cupstestppd.c:3595
 #, c-format
 msgid "      **FAIL**  Default option code cannot be interpreted: %s"
 msgstr ""
@@ -718,17 +729,17 @@ msgstr ""
 msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters."
 msgstr ""
 
-#: systemv/cupstestppd.c:2074
+#: systemv/cupstestppd.c:2065
 #, c-format
 msgid "      **FAIL**  Group names %s and %s differ only by case."
 msgstr ""
 
-#: systemv/cupstestppd.c:2119
+#: systemv/cupstestppd.c:2110
 #, c-format
 msgid "      **FAIL**  Multiple occurrences of %s choice name %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2096
+#: systemv/cupstestppd.c:2087
 #, c-format
 msgid "      **FAIL**  Option names %s and %s differ only by case."
 msgstr ""
@@ -863,7 +874,7 @@ msgstr ""
 msgid "      **FAIL**  Unable to open PPD file - %s on line %d."
 msgstr ""
 
-#: systemv/cupstestppd.c:1471
+#: systemv/cupstestppd.c:1462
 #, c-format
 msgid "    %d ERRORS FOUND"
 msgstr ""
@@ -932,7 +943,7 @@ msgid ""
 "        REF: Page 43, %%Pages:"
 msgstr ""
 
-#: systemv/cupstestppd.c:1473
+#: systemv/cupstestppd.c:1464
 msgid "    NO ERRORS FOUND"
 msgstr ""
 
@@ -1033,7 +1044,7 @@ msgstr ""
 msgid "  -E                      Test with TLS encryption."
 msgstr ""
 
-#: scheduler/main.c:2251
+#: scheduler/main.c:2191
 msgid "  -F                      Run in the foreground but detach from console."
 msgstr ""
 
@@ -1049,7 +1060,7 @@ msgstr ""
 msgid "  -I include-dir          Add include directory to search path."
 msgstr ""
 
-#: systemv/cupstestppd.c:3492
+#: systemv/cupstestppd.c:3618
 msgid "  -I {filename,filters,none,profiles}"
 msgstr ""
 
@@ -1065,7 +1076,7 @@ msgstr ""
 msgid "  -P filename.ppd         Set PPD file."
 msgstr ""
 
-#: systemv/cupstestppd.c:3494
+#: systemv/cupstestppd.c:3620
 msgid "  -R root-directory       Set alternate root."
 msgstr ""
 
@@ -1093,7 +1104,7 @@ msgstr ""
 msgid "  -V version              Set default IPP version."
 msgstr ""
 
-#: systemv/cupstestppd.c:3495
+#: systemv/cupstestppd.c:3621
 msgid "  -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}"
 msgstr ""
 
@@ -1113,7 +1124,7 @@ msgstr ""
 msgid "  -c catalog.po           Load the specified message catalog."
 msgstr ""
 
-#: scheduler/main.c:2248
+#: scheduler/main.c:2188
 msgid "  -c config-file          Load alternate configuration file."
 msgstr ""
 
@@ -1141,7 +1152,7 @@ msgstr ""
 msgid "  -e                      Use every filter from the PPD file."
 msgstr ""
 
-#: scheduler/main.c:2250
+#: scheduler/main.c:2190
 msgid "  -f                      Run in the foreground."
 msgstr ""
 
@@ -1153,7 +1164,7 @@ msgstr ""
 msgid "  -f filename             Set file to be converted (otherwise stdin)."
 msgstr ""
 
-#: scheduler/main.c:2253
+#: scheduler/main.c:2193
 msgid "  -h                      Show this usage message."
 msgstr ""
 
@@ -1181,7 +1192,7 @@ msgstr ""
 msgid "  -j mime/type            Set output MIME type (otherwise application/pdf)."
 msgstr ""
 
-#: scheduler/main.c:2254
+#: scheduler/main.c:2194
 msgid "  -l                      Run cupsd from launchd(8)."
 msgstr ""
 
@@ -1229,11 +1240,11 @@ msgstr ""
 msgid "  -q                      Be quiet - no output except errors."
 msgstr ""
 
-#: systemv/cupstestppd.c:3499
+#: systemv/cupstestppd.c:3625
 msgid "  -q                      Run silently."
 msgstr ""
 
-#: systemv/cupstestppd.c:3500
+#: systemv/cupstestppd.c:3626
 msgid "  -r                      Use 'relaxed' open mode."
 msgstr ""
 
@@ -1245,7 +1256,7 @@ msgstr ""
 msgid "  -t                      Test PPDs instead of generating them."
 msgstr ""
 
-#: scheduler/main.c:2255
+#: scheduler/main.c:2195
 msgid "  -t                      Test the configuration file."
 msgstr ""
 
@@ -1257,7 +1268,7 @@ msgstr ""
 msgid "  -u                      Remove the PPD file when finished."
 msgstr ""
 
-#: systemv/cupstestppd.c:3501
+#: systemv/cupstestppd.c:3627
 msgid "  -v                      Be slightly verbose."
 msgstr ""
 
@@ -1273,7 +1284,7 @@ msgstr ""
 msgid "  -v                      Show all attributes sent and received."
 msgstr ""
 
-#: systemv/cupstestppd.c:3502
+#: systemv/cupstestppd.c:3628
 msgid "  -vv                     Be very verbose."
 msgstr ""
 
@@ -1300,38 +1311,38 @@ msgstr ""
 #: systemv/cupstestppd.c:1059 systemv/cupstestppd.c:1110
 #: systemv/cupstestppd.c:1129 systemv/cupstestppd.c:1173
 #: systemv/cupstestppd.c:1187 systemv/cupstestppd.c:1219
-#: systemv/cupstestppd.c:1246 systemv/cupstestppd.c:1773
-#: systemv/cupstestppd.c:1792 systemv/cupstestppd.c:1810
-#: systemv/cupstestppd.c:1862 systemv/cupstestppd.c:1878
-#: systemv/cupstestppd.c:1915 systemv/cupstestppd.c:1933
-#: systemv/cupstestppd.c:1969 systemv/cupstestppd.c:1983
-#: systemv/cupstestppd.c:2010 systemv/cupstestppd.c:2024
-#: systemv/cupstestppd.c:2070 systemv/cupstestppd.c:2092
-#: systemv/cupstestppd.c:2115 systemv/cupstestppd.c:2132
-#: systemv/cupstestppd.c:2201 systemv/cupstestppd.c:2248
-#: systemv/cupstestppd.c:2272 systemv/cupstestppd.c:2324
-#: systemv/cupstestppd.c:2354 systemv/cupstestppd.c:2368
-#: systemv/cupstestppd.c:2394 systemv/cupstestppd.c:2410
-#: systemv/cupstestppd.c:2440 systemv/cupstestppd.c:2454
-#: systemv/cupstestppd.c:2481 systemv/cupstestppd.c:2498
-#: systemv/cupstestppd.c:2512 systemv/cupstestppd.c:2536
-#: systemv/cupstestppd.c:2553 systemv/cupstestppd.c:2567
-#: systemv/cupstestppd.c:2591 systemv/cupstestppd.c:2608
-#: systemv/cupstestppd.c:2622 systemv/cupstestppd.c:2646
-#: systemv/cupstestppd.c:2663 systemv/cupstestppd.c:2677
-#: systemv/cupstestppd.c:2701 systemv/cupstestppd.c:2715
-#: systemv/cupstestppd.c:2730 systemv/cupstestppd.c:2747
-#: systemv/cupstestppd.c:2803 systemv/cupstestppd.c:2838
-#: systemv/cupstestppd.c:2852 systemv/cupstestppd.c:2880
-#: systemv/cupstestppd.c:2933 systemv/cupstestppd.c:2948
-#: systemv/cupstestppd.c:2986 systemv/cupstestppd.c:3006
-#: systemv/cupstestppd.c:3020 systemv/cupstestppd.c:3081
-#: systemv/cupstestppd.c:3117 systemv/cupstestppd.c:3131
-#: systemv/cupstestppd.c:3177 systemv/cupstestppd.c:3209
-#: systemv/cupstestppd.c:3226 systemv/cupstestppd.c:3249
-#: systemv/cupstestppd.c:3265 systemv/cupstestppd.c:3303
-#: systemv/cupstestppd.c:3443 systemv/cupstestppd.c:3465
-#: systemv/cupstestppd.c:3573
+#: systemv/cupstestppd.c:1246 systemv/cupstestppd.c:1764
+#: systemv/cupstestppd.c:1783 systemv/cupstestppd.c:1801
+#: systemv/cupstestppd.c:1853 systemv/cupstestppd.c:1869
+#: systemv/cupstestppd.c:1906 systemv/cupstestppd.c:1924
+#: systemv/cupstestppd.c:1960 systemv/cupstestppd.c:1974
+#: systemv/cupstestppd.c:2001 systemv/cupstestppd.c:2015
+#: systemv/cupstestppd.c:2061 systemv/cupstestppd.c:2083
+#: systemv/cupstestppd.c:2106 systemv/cupstestppd.c:2123
+#: systemv/cupstestppd.c:2165 systemv/cupstestppd.c:2208
+#: systemv/cupstestppd.c:2255 systemv/cupstestppd.c:2279
+#: systemv/cupstestppd.c:2331 systemv/cupstestppd.c:2361
+#: systemv/cupstestppd.c:2375 systemv/cupstestppd.c:2401
+#: systemv/cupstestppd.c:2417 systemv/cupstestppd.c:2447
+#: systemv/cupstestppd.c:2461 systemv/cupstestppd.c:2488
+#: systemv/cupstestppd.c:2505 systemv/cupstestppd.c:2519
+#: systemv/cupstestppd.c:2543 systemv/cupstestppd.c:2560
+#: systemv/cupstestppd.c:2574 systemv/cupstestppd.c:2598
+#: systemv/cupstestppd.c:2615 systemv/cupstestppd.c:2629
+#: systemv/cupstestppd.c:2653 systemv/cupstestppd.c:2670
+#: systemv/cupstestppd.c:2684 systemv/cupstestppd.c:2708
+#: systemv/cupstestppd.c:2722 systemv/cupstestppd.c:2737
+#: systemv/cupstestppd.c:2754 systemv/cupstestppd.c:2810
+#: systemv/cupstestppd.c:2845 systemv/cupstestppd.c:2859
+#: systemv/cupstestppd.c:2887 systemv/cupstestppd.c:2952
+#: systemv/cupstestppd.c:2967 systemv/cupstestppd.c:3005
+#: systemv/cupstestppd.c:3025 systemv/cupstestppd.c:3039
+#: systemv/cupstestppd.c:3206 systemv/cupstestppd.c:3242
+#: systemv/cupstestppd.c:3256 systemv/cupstestppd.c:3302
+#: systemv/cupstestppd.c:3334 systemv/cupstestppd.c:3351
+#: systemv/cupstestppd.c:3374 systemv/cupstestppd.c:3390
+#: systemv/cupstestppd.c:3428 systemv/cupstestppd.c:3569
+#: systemv/cupstestppd.c:3591 systemv/cupstestppd.c:3699
 msgid " FAIL"
 msgstr ""
 
@@ -1374,7 +1385,7 @@ msgstr ""
 msgid "%s accepting requests since %s"
 msgstr ""
 
-#: scheduler/ipp.c:11199
+#: scheduler/ipp.c:11155
 #, c-format
 msgid "%s cannot be changed."
 msgstr ""
@@ -1411,7 +1422,7 @@ msgstr ""
 msgid "%s not accepting requests since %s -"
 msgstr ""
 
-#: scheduler/ipp.c:722
+#: scheduler/ipp.c:718
 #, c-format
 msgid "%s not supported."
 msgstr ""
@@ -1750,195 +1761,195 @@ msgstr ""
 msgid "%s: Warning - mode option ignored."
 msgstr ""
 
-#: ppdc/sample.c:281
+#: ppdc/sample.c:316
 msgid "-1"
 msgstr ""
 
-#: ppdc/sample.c:272
+#: ppdc/sample.c:307
 msgid "-10"
 msgstr ""
 
-#: ppdc/sample.c:364
+#: ppdc/sample.c:399
 msgid "-100"
 msgstr ""
 
-#: ppdc/sample.c:363
+#: ppdc/sample.c:398
 msgid "-105"
 msgstr ""
 
-#: ppdc/sample.c:271
+#: ppdc/sample.c:306
 msgid "-11"
 msgstr ""
 
-#: ppdc/sample.c:362
+#: ppdc/sample.c:397
 msgid "-110"
 msgstr ""
 
-#: ppdc/sample.c:361
+#: ppdc/sample.c:396
 msgid "-115"
 msgstr ""
 
-#: ppdc/sample.c:270
+#: ppdc/sample.c:305
 msgid "-12"
 msgstr ""
 
-#: ppdc/sample.c:360
+#: ppdc/sample.c:395
 msgid "-120"
 msgstr ""
 
-#: ppdc/sample.c:269
+#: ppdc/sample.c:304
 msgid "-13"
 msgstr ""
 
-#: ppdc/sample.c:268
+#: ppdc/sample.c:303
 msgid "-14"
 msgstr ""
 
-#: ppdc/sample.c:267
+#: ppdc/sample.c:302
 msgid "-15"
 msgstr ""
 
-#: ppdc/sample.c:280
+#: ppdc/sample.c:315
 msgid "-2"
 msgstr ""
 
-#: ppdc/sample.c:380
+#: ppdc/sample.c:415
 msgid "-20"
 msgstr ""
 
-#: ppdc/sample.c:379
+#: ppdc/sample.c:414
 msgid "-25"
 msgstr ""
 
-#: ppdc/sample.c:279
+#: ppdc/sample.c:314
 msgid "-3"
 msgstr ""
 
-#: ppdc/sample.c:378
+#: ppdc/sample.c:413
 msgid "-30"
 msgstr ""
 
-#: ppdc/sample.c:377
+#: ppdc/sample.c:412
 msgid "-35"
 msgstr ""
 
-#: ppdc/sample.c:278
+#: ppdc/sample.c:313
 msgid "-4"
 msgstr ""
 
-#: ppdc/sample.c:376
+#: ppdc/sample.c:411
 msgid "-40"
 msgstr ""
 
-#: ppdc/sample.c:375
+#: ppdc/sample.c:410
 msgid "-45"
 msgstr ""
 
-#: ppdc/sample.c:277
+#: ppdc/sample.c:312
 msgid "-5"
 msgstr ""
 
-#: ppdc/sample.c:374
+#: ppdc/sample.c:409
 msgid "-50"
 msgstr ""
 
-#: ppdc/sample.c:373
+#: ppdc/sample.c:408
 msgid "-55"
 msgstr ""
 
-#: ppdc/sample.c:276
+#: ppdc/sample.c:311
 msgid "-6"
 msgstr ""
 
-#: ppdc/sample.c:372
+#: ppdc/sample.c:407
 msgid "-60"
 msgstr ""
 
-#: ppdc/sample.c:371
+#: ppdc/sample.c:406
 msgid "-65"
 msgstr ""
 
-#: ppdc/sample.c:275
+#: ppdc/sample.c:310
 msgid "-7"
 msgstr ""
 
-#: ppdc/sample.c:370
+#: ppdc/sample.c:405
 msgid "-70"
 msgstr ""
 
-#: ppdc/sample.c:369
+#: ppdc/sample.c:404
 msgid "-75"
 msgstr ""
 
-#: ppdc/sample.c:274
+#: ppdc/sample.c:309
 msgid "-8"
 msgstr ""
 
-#: ppdc/sample.c:368
+#: ppdc/sample.c:403
 msgid "-80"
 msgstr ""
 
-#: ppdc/sample.c:367
+#: ppdc/sample.c:402
 msgid "-85"
 msgstr ""
 
-#: ppdc/sample.c:273
+#: ppdc/sample.c:308
 msgid "-9"
 msgstr ""
 
-#: ppdc/sample.c:366
+#: ppdc/sample.c:401
 msgid "-90"
 msgstr ""
 
-#: ppdc/sample.c:365
+#: ppdc/sample.c:400
 msgid "-95"
 msgstr ""
 
-#: ppdc/sample.c:282
+#: ppdc/sample.c:317
 msgid "0"
 msgstr ""
 
-#: ppdc/sample.c:283
+#: ppdc/sample.c:318
 msgid "1"
 msgstr ""
 
-#: ppdc/sample.c:355
+#: ppdc/sample.c:390
 msgid "1 inch/sec."
 msgstr ""
 
-#: ppdc/sample.c:143
+#: ppdc/sample.c:178
 msgid "1.25x0.25\""
 msgstr ""
 
-#: ppdc/sample.c:144
+#: ppdc/sample.c:179
 msgid "1.25x2.25\""
 msgstr ""
 
-#: ppdc/sample.c:403
+#: ppdc/sample.c:438
 msgid "1.5 inch/sec."
 msgstr ""
 
-#: ppdc/sample.c:145
+#: ppdc/sample.c:180
 msgid "1.50x0.25\""
 msgstr ""
 
-#: ppdc/sample.c:146
+#: ppdc/sample.c:181
 msgid "1.50x0.50\""
 msgstr ""
 
-#: ppdc/sample.c:147
+#: ppdc/sample.c:182
 msgid "1.50x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:148
+#: ppdc/sample.c:183
 msgid "1.50x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:292
+#: ppdc/sample.c:327
 msgid "10"
 msgstr ""
 
-#: ppdc/sample.c:414
+#: ppdc/sample.c:449
 msgid "10 inches/sec."
 msgstr ""
 
@@ -1954,39 +1965,39 @@ msgstr ""
 msgid "10 x 14\""
 msgstr ""
 
-#: ppdc/sample.c:394
+#: ppdc/sample.c:429
 msgid "100"
 msgstr ""
 
-#: ppdc/sample.c:305
+#: ppdc/sample.c:340
 msgid "100 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:395
+#: ppdc/sample.c:430
 msgid "105"
 msgstr ""
 
-#: ppdc/sample.c:293
+#: ppdc/sample.c:328
 msgid "11"
 msgstr ""
 
-#: ppdc/sample.c:415
+#: ppdc/sample.c:450
 msgid "11 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:396
+#: ppdc/sample.c:431
 msgid "110"
 msgstr ""
 
-#: ppdc/sample.c:397
+#: ppdc/sample.c:432
 msgid "115"
 msgstr ""
 
-#: ppdc/sample.c:294
+#: ppdc/sample.c:329
 msgid "12"
 msgstr ""
 
-#: ppdc/sample.c:416
+#: ppdc/sample.c:451
 msgid "12 inches/sec."
 msgstr ""
 
@@ -1994,39 +2005,39 @@ msgstr ""
 msgid "12 x 11\""
 msgstr ""
 
-#: ppdc/sample.c:398
+#: ppdc/sample.c:433
 msgid "120"
 msgstr ""
 
-#: ppdc/sample.c:306
+#: ppdc/sample.c:341
 msgid "120 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:214
+#: ppdc/sample.c:249
 msgid "120x60dpi"
 msgstr ""
 
-#: ppdc/sample.c:220
+#: ppdc/sample.c:255
 msgid "120x72dpi"
 msgstr ""
 
-#: ppdc/sample.c:295
+#: ppdc/sample.c:330
 msgid "13"
 msgstr ""
 
-#: ppdc/sample.c:203
+#: ppdc/sample.c:238
 msgid "136dpi"
 msgstr ""
 
-#: ppdc/sample.c:296
+#: ppdc/sample.c:331
 msgid "14"
 msgstr ""
 
-#: ppdc/sample.c:297
+#: ppdc/sample.c:332
 msgid "15"
 msgstr ""
 
-#: ppdc/sample.c:299
+#: ppdc/sample.c:334
 msgid "15 mm/sec."
 msgstr ""
 
@@ -2034,407 +2045,407 @@ msgstr ""
 msgid "15 x 11\""
 msgstr ""
 
-#: ppdc/sample.c:307
+#: ppdc/sample.c:342
 msgid "150 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:254
+#: ppdc/sample.c:289
 msgid "150dpi"
 msgstr ""
 
-#: ppdc/sample.c:339
+#: ppdc/sample.c:374
 msgid "16"
 msgstr ""
 
-#: ppdc/sample.c:340
+#: ppdc/sample.c:375
 msgid "17"
 msgstr ""
 
-#: ppdc/sample.c:341
+#: ppdc/sample.c:376
 msgid "18"
 msgstr ""
 
-#: ppdc/sample.c:215
+#: ppdc/sample.c:250
 msgid "180dpi"
 msgstr ""
 
-#: ppdc/sample.c:342
+#: ppdc/sample.c:377
 msgid "19"
 msgstr ""
 
-#: ppdc/sample.c:284
+#: ppdc/sample.c:319
 msgid "2"
 msgstr ""
 
-#: ppdc/sample.c:356
+#: ppdc/sample.c:391
 msgid "2 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:241
+#: ppdc/sample.c:276
 msgid "2-Sided Printing"
 msgstr ""
 
-#: ppdc/sample.c:149
+#: ppdc/sample.c:184
 msgid "2.00x0.37\""
 msgstr ""
 
-#: ppdc/sample.c:150
+#: ppdc/sample.c:185
 msgid "2.00x0.50\""
 msgstr ""
 
-#: ppdc/sample.c:151
+#: ppdc/sample.c:186
 msgid "2.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:152
+#: ppdc/sample.c:187
 msgid "2.00x1.25\""
 msgstr ""
 
-#: ppdc/sample.c:153
+#: ppdc/sample.c:188
 msgid "2.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:154
+#: ppdc/sample.c:189
 msgid "2.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:155
+#: ppdc/sample.c:190
 msgid "2.00x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:156
+#: ppdc/sample.c:191
 msgid "2.00x5.50\""
 msgstr ""
 
-#: ppdc/sample.c:157
+#: ppdc/sample.c:192
 msgid "2.25x0.50\""
 msgstr ""
 
-#: ppdc/sample.c:158
+#: ppdc/sample.c:193
 msgid "2.25x1.25\""
 msgstr ""
 
-#: ppdc/sample.c:159
+#: ppdc/sample.c:194
 msgid "2.25x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:160
+#: ppdc/sample.c:195
 msgid "2.25x5.50\""
 msgstr ""
 
-#: ppdc/sample.c:161
+#: ppdc/sample.c:196
 msgid "2.38x5.50\""
 msgstr ""
 
-#: ppdc/sample.c:404
+#: ppdc/sample.c:439
 msgid "2.5 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:162
+#: ppdc/sample.c:197
 msgid "2.50x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:163
+#: ppdc/sample.c:198
 msgid "2.50x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:164
+#: ppdc/sample.c:199
 msgid "2.75x1.25\""
 msgstr ""
 
-#: ppdc/sample.c:165
+#: ppdc/sample.c:200
 msgid "2.9 x 1\""
 msgstr ""
 
-#: ppdc/sample.c:343
+#: ppdc/sample.c:378
 msgid "20"
 msgstr ""
 
-#: ppdc/sample.c:300
+#: ppdc/sample.c:335
 msgid "20 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:308
+#: ppdc/sample.c:343
 msgid "200 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:204
+#: ppdc/sample.c:239
 msgid "203dpi"
 msgstr ""
 
-#: ppdc/sample.c:344
+#: ppdc/sample.c:379
 msgid "21"
 msgstr ""
 
-#: ppdc/sample.c:345
+#: ppdc/sample.c:380
 msgid "22"
 msgstr ""
 
-#: ppdc/sample.c:346
+#: ppdc/sample.c:381
 msgid "23"
 msgstr ""
 
-#: ppdc/sample.c:347
+#: ppdc/sample.c:382
 msgid "24"
 msgstr ""
 
-#: ppdc/sample.c:212
+#: ppdc/sample.c:247
 msgid "24-Pin Series"
 msgstr ""
 
-#: ppdc/sample.c:221
+#: ppdc/sample.c:256
 msgid "240x72dpi"
 msgstr ""
 
-#: ppdc/sample.c:348
+#: ppdc/sample.c:383
 msgid "25"
 msgstr ""
 
-#: ppdc/sample.c:309
+#: ppdc/sample.c:344
 msgid "250 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:349
+#: ppdc/sample.c:384
 msgid "26"
 msgstr ""
 
-#: ppdc/sample.c:350
+#: ppdc/sample.c:385
 msgid "27"
 msgstr ""
 
-#: ppdc/sample.c:351
+#: ppdc/sample.c:386
 msgid "28"
 msgstr ""
 
-#: ppdc/sample.c:352
+#: ppdc/sample.c:387
 msgid "29"
 msgstr ""
 
-#: ppdc/sample.c:285
+#: ppdc/sample.c:320
 msgid "3"
 msgstr ""
 
-#: ppdc/sample.c:357
+#: ppdc/sample.c:392
 msgid "3 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:166
+#: ppdc/sample.c:201
 msgid "3.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:167
+#: ppdc/sample.c:202
 msgid "3.00x1.25\""
 msgstr ""
 
-#: ppdc/sample.c:168
+#: ppdc/sample.c:203
 msgid "3.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:169
+#: ppdc/sample.c:204
 msgid "3.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:170
+#: ppdc/sample.c:205
 msgid "3.00x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:171
+#: ppdc/sample.c:206
 msgid "3.25x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:172
+#: ppdc/sample.c:207
 msgid "3.25x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:173
+#: ppdc/sample.c:208
 msgid "3.25x5.50\""
 msgstr ""
 
-#: ppdc/sample.c:174
+#: ppdc/sample.c:209
 msgid "3.25x5.83\""
 msgstr ""
 
-#: ppdc/sample.c:175
+#: ppdc/sample.c:210
 msgid "3.25x7.83\""
 msgstr ""
 
-#: ppdc/sample.c:133
+#: ppdc/sample.c:168
 msgid "3.5\" Disk"
 msgstr ""
 
-#: ppdc/sample.c:142
+#: ppdc/sample.c:177
 msgid "3.5\" Disk - 2 1/8 x 2 3/4\""
 msgstr ""
 
-#: ppdc/sample.c:176
+#: ppdc/sample.c:211
 msgid "3.50x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:353
+#: ppdc/sample.c:388
 msgid "30"
 msgstr ""
 
-#: ppdc/sample.c:301
+#: ppdc/sample.c:336
 msgid "30 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:310
+#: ppdc/sample.c:345
 msgid "300 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:205
+#: ppdc/sample.c:240
 msgid "300dpi"
 msgstr ""
 
-#: ppdc/sample.c:381
+#: ppdc/sample.c:416
 msgid "35"
 msgstr ""
 
-#: ppdc/sample.c:217
+#: ppdc/sample.c:252
 msgid "360dpi"
 msgstr ""
 
-#: ppdc/sample.c:216
+#: ppdc/sample.c:251
 msgid "360x180dpi"
 msgstr ""
 
-#: ppdc/sample.c:286
+#: ppdc/sample.c:321
 msgid "4"
 msgstr ""
 
-#: ppdc/sample.c:358
+#: ppdc/sample.c:393
 msgid "4 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:177
+#: ppdc/sample.c:212
 msgid "4.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:185
+#: ppdc/sample.c:220
 msgid "4.00x13.00\""
 msgstr ""
 
-#: ppdc/sample.c:178
+#: ppdc/sample.c:213
 msgid "4.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:179
+#: ppdc/sample.c:214
 msgid "4.00x2.50\""
 msgstr ""
 
-#: ppdc/sample.c:180
+#: ppdc/sample.c:215
 msgid "4.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:181
+#: ppdc/sample.c:216
 msgid "4.00x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:182
+#: ppdc/sample.c:217
 msgid "4.00x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:183
+#: ppdc/sample.c:218
 msgid "4.00x6.00\""
 msgstr ""
 
-#: ppdc/sample.c:184
+#: ppdc/sample.c:219
 msgid "4.00x6.50\""
 msgstr ""
 
-#: ppdc/sample.c:382
+#: ppdc/sample.c:417
 msgid "40"
 msgstr ""
 
-#: ppdc/sample.c:302
+#: ppdc/sample.c:337
 msgid "40 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:383
+#: ppdc/sample.c:418
 msgid "45"
 msgstr ""
 
-#: ppdc/sample.c:287
+#: ppdc/sample.c:322
 msgid "5"
 msgstr ""
 
-#: ppdc/sample.c:408
+#: ppdc/sample.c:443
 msgid "5 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:384
+#: ppdc/sample.c:419
 msgid "50"
 msgstr ""
 
-#: ppdc/sample.c:385
+#: ppdc/sample.c:420
 msgid "55"
 msgstr ""
 
-#: ppdc/sample.c:288
+#: ppdc/sample.c:323
 msgid "6"
 msgstr ""
 
-#: ppdc/sample.c:409
+#: ppdc/sample.c:444
 msgid "6 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:186
+#: ppdc/sample.c:221
 msgid "6.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:187
+#: ppdc/sample.c:222
 msgid "6.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:188
+#: ppdc/sample.c:223
 msgid "6.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:189
+#: ppdc/sample.c:224
 msgid "6.00x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:190
+#: ppdc/sample.c:225
 msgid "6.00x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:191
+#: ppdc/sample.c:226
 msgid "6.00x6.00\""
 msgstr ""
 
-#: ppdc/sample.c:192
+#: ppdc/sample.c:227
 msgid "6.00x6.50\""
 msgstr ""
 
-#: ppdc/sample.c:386
+#: ppdc/sample.c:421
 msgid "60"
 msgstr ""
 
-#: ppdc/sample.c:303
+#: ppdc/sample.c:338
 msgid "60 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:232
+#: ppdc/sample.c:267
 msgid "600dpi"
 msgstr ""
 
-#: ppdc/sample.c:213
+#: ppdc/sample.c:248
 msgid "60dpi"
 msgstr ""
 
-#: ppdc/sample.c:219
+#: ppdc/sample.c:254
 msgid "60x72dpi"
 msgstr ""
 
-#: ppdc/sample.c:387
+#: ppdc/sample.c:422
 msgid "65"
 msgstr ""
 
-#: ppdc/sample.c:289
+#: ppdc/sample.c:324
 msgid "7"
 msgstr ""
 
-#: ppdc/sample.c:411
+#: ppdc/sample.c:446
 msgid "7 inches/sec."
 msgstr ""
 
@@ -2442,23 +2453,23 @@ msgstr ""
 msgid "7 x 9\""
 msgstr ""
 
-#: ppdc/sample.c:388
+#: ppdc/sample.c:423
 msgid "70"
 msgstr ""
 
-#: ppdc/sample.c:223
+#: ppdc/sample.c:258
 msgid "720dpi"
 msgstr ""
 
-#: ppdc/sample.c:389
+#: ppdc/sample.c:424
 msgid "75"
 msgstr ""
 
-#: ppdc/sample.c:290
+#: ppdc/sample.c:325
 msgid "8"
 msgstr ""
 
-#: ppdc/sample.c:412
+#: ppdc/sample.c:447
 msgid "8 inches/sec."
 msgstr ""
 
@@ -2466,51 +2477,51 @@ msgstr ""
 msgid "8 x 10\""
 msgstr ""
 
-#: ppdc/sample.c:193
+#: ppdc/sample.c:228
 msgid "8.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:194
+#: ppdc/sample.c:229
 msgid "8.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:195
+#: ppdc/sample.c:230
 msgid "8.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:196
+#: ppdc/sample.c:231
 msgid "8.00x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:197
+#: ppdc/sample.c:232
 msgid "8.00x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:198
+#: ppdc/sample.c:233
 msgid "8.00x6.00\""
 msgstr ""
 
-#: ppdc/sample.c:199
+#: ppdc/sample.c:234
 msgid "8.00x6.50\""
 msgstr ""
 
-#: ppdc/sample.c:390
+#: ppdc/sample.c:425
 msgid "80"
 msgstr ""
 
-#: ppdc/sample.c:304
+#: ppdc/sample.c:339
 msgid "80 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:391
+#: ppdc/sample.c:426
 msgid "85"
 msgstr ""
 
-#: ppdc/sample.c:291
+#: ppdc/sample.c:326
 msgid "9"
 msgstr ""
 
-#: ppdc/sample.c:413
+#: ppdc/sample.c:448
 msgid "9 inches/sec."
 msgstr ""
 
@@ -2522,15 +2533,15 @@ msgstr ""
 msgid "9 x 12\""
 msgstr ""
 
-#: ppdc/sample.c:218
+#: ppdc/sample.c:253
 msgid "9-Pin Series"
 msgstr ""
 
-#: ppdc/sample.c:392
+#: ppdc/sample.c:427
 msgid "90"
 msgstr ""
 
-#: ppdc/sample.c:393
+#: ppdc/sample.c:428
 msgid "95"
 msgstr ""
 
@@ -2546,12 +2557,12 @@ msgstr ""
 msgid "A Samba username is required to export printer drivers"
 msgstr ""
 
-#: scheduler/ipp.c:2434
+#: scheduler/ipp.c:2431
 #, c-format
 msgid "A class named \"%s\" already exists."
 msgstr ""
 
-#: scheduler/ipp.c:1038
+#: scheduler/ipp.c:1034
 #, c-format
 msgid "A printer named \"%s\" already exists."
 msgstr ""
@@ -2561,98 +2572,142 @@ msgid "A0"
 msgstr ""
 
 #: ppdc/sample.c:13
+msgid "A0 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:14
 msgid "A1"
 msgstr ""
 
-#: ppdc/sample.c:26
+#: ppdc/sample.c:15
+msgid "A1 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:34
 msgid "A10"
 msgstr ""
 
-#: ppdc/sample.c:14
+#: ppdc/sample.c:16
 msgid "A2"
 msgstr ""
 
-#: ppdc/sample.c:15
+#: ppdc/sample.c:17
+msgid "A2 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:18
 msgid "A3"
 msgstr ""
 
-#: ppdc/sample.c:16
+#: ppdc/sample.c:19
+msgid "A3 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:20
 msgid "A3 Oversize"
 msgstr ""
 
-#: ppdc/sample.c:17
+#: ppdc/sample.c:21
+msgid "A3 Oversize Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:22
 msgid "A4"
 msgstr ""
 
-#: ppdc/sample.c:18
+#: ppdc/sample.c:24
+msgid "A4 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:23
 msgid "A4 Oversize"
 msgstr ""
 
-#: ppdc/sample.c:19
+#: ppdc/sample.c:25
 msgid "A4 Small"
 msgstr ""
 
-#: ppdc/sample.c:20
+#: ppdc/sample.c:26
 msgid "A5"
 msgstr ""
 
-#: ppdc/sample.c:21
+#: ppdc/sample.c:28
+msgid "A5 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:27
 msgid "A5 Oversize"
 msgstr ""
 
-#: ppdc/sample.c:22
+#: ppdc/sample.c:29
 msgid "A6"
 msgstr ""
 
-#: ppdc/sample.c:23
+#: ppdc/sample.c:30
+msgid "A6 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:31
 msgid "A7"
 msgstr ""
 
-#: ppdc/sample.c:24
+#: ppdc/sample.c:32
 msgid "A8"
 msgstr ""
 
-#: ppdc/sample.c:25
+#: ppdc/sample.c:33
 msgid "A9"
 msgstr ""
 
-#: ppdc/sample.c:27
+#: ppdc/sample.c:35
 msgid "ANSI A"
 msgstr ""
 
-#: ppdc/sample.c:28
+#: ppdc/sample.c:36
 msgid "ANSI B"
 msgstr ""
 
-#: ppdc/sample.c:29
+#: ppdc/sample.c:37
 msgid "ANSI C"
 msgstr ""
 
-#: ppdc/sample.c:30
+#: ppdc/sample.c:38
 msgid "ANSI D"
 msgstr ""
 
-#: ppdc/sample.c:31
+#: ppdc/sample.c:39
 msgid "ANSI E"
 msgstr ""
 
-#: ppdc/sample.c:34
+#: ppdc/sample.c:44
 msgid "ARCH C"
 msgstr ""
 
-#: ppdc/sample.c:35
+#: ppdc/sample.c:45
+msgid "ARCH C Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:46
 msgid "ARCH D"
 msgstr ""
 
-#: ppdc/sample.c:36
+#: ppdc/sample.c:47
+msgid "ARCH D Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:48
 msgid "ARCH E"
 msgstr ""
 
+#: ppdc/sample.c:49
+msgid "ARCH E Long Edge"
+msgstr ""
+
 #: cgi-bin/classes.c:169 cgi-bin/printers.c:172
 msgid "Accept Jobs"
 msgstr ""
 
-#: cups/http-support.c:1202
+#: cups/http-support.c:1253
 msgid "Accepted"
 msgstr ""
 
@@ -2669,11 +2724,11 @@ msgstr ""
 msgid "Add RSS Subscription"
 msgstr ""
 
-#: ppdc/sample.c:125
+#: ppdc/sample.c:160
 msgid "Address"
 msgstr ""
 
-#: ppdc/sample.c:134
+#: ppdc/sample.c:169
 msgid "Address - 1 1/8 x 3 1/2\""
 msgstr ""
 
@@ -2681,7 +2736,7 @@ msgstr ""
 msgid "Administration"
 msgstr ""
 
-#: ppdc/sample.c:400
+#: ppdc/sample.c:435
 msgid "Always"
 msgstr ""
 
@@ -2689,69 +2744,65 @@ msgstr ""
 msgid "AppSocket/HP JetDirect"
 msgstr ""
 
-#: ppdc/sample.c:421
+#: ppdc/sample.c:456
 msgid "Applicator"
 msgstr ""
 
-#: scheduler/ipp.c:1163
+#: scheduler/ipp.c:1159
 #, c-format
 msgid "Attempt to set %s printer-state to bad value %d."
 msgstr ""
 
-#: scheduler/ipp.c:356
+#: scheduler/ipp.c:352
 #, c-format
 msgid "Attribute groups are out of order (%x < %x)."
 msgstr ""
 
-#: ppdc/sample.c:93
+#: ppdc/sample.c:123
 msgid "B0"
 msgstr ""
 
-#: ppdc/sample.c:94
+#: ppdc/sample.c:124
 msgid "B1"
 msgstr ""
 
-#: ppdc/sample.c:104
+#: ppdc/sample.c:134
 msgid "B10"
 msgstr ""
 
-#: ppdc/sample.c:95
+#: ppdc/sample.c:125
 msgid "B2"
 msgstr ""
 
-#: ppdc/sample.c:96
+#: ppdc/sample.c:126
 msgid "B3"
 msgstr ""
 
-#: ppdc/sample.c:97
+#: ppdc/sample.c:127
 msgid "B4"
 msgstr ""
 
-#: ppdc/sample.c:98
+#: ppdc/sample.c:128
 msgid "B5"
 msgstr ""
 
-#: ppdc/sample.c:43
-msgid "B5 JIS"
-msgstr ""
-
-#: ppdc/sample.c:99
+#: ppdc/sample.c:129
 msgid "B5 Oversize"
 msgstr ""
 
-#: ppdc/sample.c:100
+#: ppdc/sample.c:130
 msgid "B6"
 msgstr ""
 
-#: ppdc/sample.c:101
+#: ppdc/sample.c:131
 msgid "B7"
 msgstr ""
 
-#: ppdc/sample.c:102
+#: ppdc/sample.c:132
 msgid "B8"
 msgstr ""
 
-#: ppdc/sample.c:103
+#: ppdc/sample.c:133
 msgid "B9"
 msgstr ""
 
@@ -2771,24 +2822,24 @@ msgstr ""
 msgid "Bad OrderDependency"
 msgstr ""
 
-#: cups/ppd-cache.c:145 cups/ppd-cache.c:181 cups/ppd-cache.c:219
-#: cups/ppd-cache.c:225 cups/ppd-cache.c:241 cups/ppd-cache.c:257
-#: cups/ppd-cache.c:266 cups/ppd-cache.c:274 cups/ppd-cache.c:291
-#: cups/ppd-cache.c:299 cups/ppd-cache.c:314 cups/ppd-cache.c:322
-#: cups/ppd-cache.c:340 cups/ppd-cache.c:352 cups/ppd-cache.c:367
-#: cups/ppd-cache.c:379 cups/ppd-cache.c:401 cups/ppd-cache.c:409
-#: cups/ppd-cache.c:427 cups/ppd-cache.c:435 cups/ppd-cache.c:450
-#: cups/ppd-cache.c:458 cups/ppd-cache.c:476 cups/ppd-cache.c:484
-#: cups/ppd-cache.c:511 cups/ppd-cache.c:531 cups/ppd-cache.c:540
-#: cups/ppd-cache.c:548 cups/ppd-cache.c:556
+#: cups/ppd-cache.c:144 cups/ppd-cache.c:189 cups/ppd-cache.c:227
+#: cups/ppd-cache.c:233 cups/ppd-cache.c:249 cups/ppd-cache.c:265
+#: cups/ppd-cache.c:274 cups/ppd-cache.c:282 cups/ppd-cache.c:299
+#: cups/ppd-cache.c:307 cups/ppd-cache.c:322 cups/ppd-cache.c:330
+#: cups/ppd-cache.c:348 cups/ppd-cache.c:360 cups/ppd-cache.c:375
+#: cups/ppd-cache.c:387 cups/ppd-cache.c:409 cups/ppd-cache.c:417
+#: cups/ppd-cache.c:435 cups/ppd-cache.c:443 cups/ppd-cache.c:458
+#: cups/ppd-cache.c:466 cups/ppd-cache.c:484 cups/ppd-cache.c:492
+#: cups/ppd-cache.c:519 cups/ppd-cache.c:546 cups/ppd-cache.c:554
+#: cups/ppd-cache.c:562
 msgid "Bad PPD cache file."
 msgstr ""
 
-#: cups/http-support.c:1217
+#: cups/http-support.c:1268
 msgid "Bad Request"
 msgstr ""
 
-#: cups/snmp.c:1007
+#: cups/snmp.c:1002
 msgid "Bad SNMP version number"
 msgstr ""
 
@@ -2811,7 +2862,7 @@ msgstr ""
 msgid "Bad columns value %d."
 msgstr ""
 
-#: scheduler/ipp.c:1464
+#: scheduler/ipp.c:1460
 #, c-format
 msgid "Bad copies value %d."
 msgstr ""
@@ -2825,23 +2876,23 @@ msgstr ""
 msgid "Bad custom parameter"
 msgstr ""
 
-#: cups/http-support.c:1367 scheduler/ipp.c:2553
+#: cups/http-support.c:1420 scheduler/ipp.c:2550
 #, c-format
 msgid "Bad device-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2594
+#: scheduler/ipp.c:2591
 #, c-format
 msgid "Bad device-uri scheme \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9389 scheduler/ipp.c:9405 scheduler/ipp.c:10618
-#: scheduler/ipp.c:12123
+#: scheduler/ipp.c:9382 scheduler/ipp.c:9398 scheduler/ipp.c:10574
+#: scheduler/ipp.c:12079
 #, c-format
 msgid "Bad document-format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10634
+#: scheduler/ipp.c:10590
 #, c-format
 msgid "Bad document-format-default \"%s\"."
 msgstr ""
@@ -2860,27 +2911,27 @@ msgstr ""
 msgid "Bad font description line: %s"
 msgstr ""
 
-#: scheduler/ipp.c:11215
+#: scheduler/ipp.c:11171
 msgid "Bad job-priority value."
 msgstr ""
 
-#: scheduler/ipp.c:1494
+#: scheduler/ipp.c:1490
 #, c-format
 msgid "Bad job-sheets value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1478
+#: scheduler/ipp.c:1474
 msgid "Bad job-sheets value type."
 msgstr ""
 
-#: scheduler/ipp.c:11245
+#: scheduler/ipp.c:11201
 msgid "Bad job-state value."
 msgstr ""
 
-#: scheduler/ipp.c:4064 scheduler/ipp.c:4517 scheduler/ipp.c:7249
-#: scheduler/ipp.c:7396 scheduler/ipp.c:8839 scheduler/ipp.c:9092
-#: scheduler/ipp.c:9940 scheduler/ipp.c:10165 scheduler/ipp.c:10519
-#: scheduler/ipp.c:11107
+#: scheduler/ipp.c:4057 scheduler/ipp.c:4510 scheduler/ipp.c:7242
+#: scheduler/ipp.c:7389 scheduler/ipp.c:8832 scheduler/ipp.c:9085
+#: scheduler/ipp.c:9933 scheduler/ipp.c:10158 scheduler/ipp.c:10475
+#: scheduler/ipp.c:11063
 #, c-format
 msgid "Bad job-uri \"%s\"."
 msgstr ""
@@ -2890,17 +2941,17 @@ msgstr ""
 msgid "Bad lpi value %f."
 msgstr ""
 
-#: scheduler/ipp.c:2198 scheduler/ipp.c:6791
+#: scheduler/ipp.c:2194 scheduler/ipp.c:6784
 #, c-format
 msgid "Bad notify-pull-method \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2162 scheduler/ipp.c:6755
+#: scheduler/ipp.c:2158 scheduler/ipp.c:6748
 #, c-format
 msgid "Bad notify-recipient-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1510
+#: scheduler/ipp.c:1506
 #, c-format
 msgid "Bad number-up value %d."
 msgstr ""
@@ -2910,27 +2961,27 @@ msgstr ""
 msgid "Bad option + choice on line %d."
 msgstr ""
 
-#: scheduler/ipp.c:1527
+#: scheduler/ipp.c:1523
 #, c-format
 msgid "Bad page-ranges values %d-%d."
 msgstr ""
 
-#: scheduler/ipp.c:2637
+#: scheduler/ipp.c:2634
 #, c-format
 msgid "Bad port-monitor \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2689
+#: scheduler/ipp.c:2695
 #, c-format
 msgid "Bad printer-state value %d."
 msgstr ""
 
-#: scheduler/ipp.c:324
+#: scheduler/ipp.c:320
 #, c-format
 msgid "Bad request ID %d."
 msgstr ""
 
-#: scheduler/ipp.c:309
+#: scheduler/ipp.c:305
 #, c-format
 msgid "Bad request version number %d.%d."
 msgstr ""
@@ -2971,11 +3022,11 @@ msgstr ""
 msgid "Billing Information: "
 msgstr ""
 
-#: ppdc/sample.c:258
+#: ppdc/sample.c:293
 msgid "Bond Paper"
 msgstr ""
 
-#: backend/usb-darwin.c:1883
+#: backend/usb-darwin.c:1861
 #, c-format
 msgid "Boolean expected for waiteof option \"%s\"."
 msgstr ""
@@ -2984,11 +3035,11 @@ msgstr ""
 msgid "Buffer overflow detected, aborting."
 msgstr ""
 
-#: ppdc/sample.c:225
+#: ppdc/sample.c:260
 msgid "CMYK"
 msgstr ""
 
-#: ppdc/sample.c:334
+#: ppdc/sample.c:369
 msgid "CPCL Label Printer"
 msgstr ""
 
@@ -2996,11 +3047,15 @@ msgstr ""
 msgid "Cancel RSS Subscription"
 msgstr ""
 
-#: backend/ipp.c:1565
+#: backend/ipp.c:1653
 msgid "Canceling print job."
 msgstr ""
 
-#: ppdc/sample.c:250
+#: scheduler/ipp.c:2675
+msgid "Cannot share a remote Kerberized printer."
+msgstr ""
+
+#: ppdc/sample.c:285
 msgid "Cassette"
 msgstr ""
 
@@ -3009,7 +3064,7 @@ msgstr ""
 msgid "Change Settings"
 msgstr ""
 
-#: scheduler/ipp.c:2210 scheduler/ipp.c:6803
+#: scheduler/ipp.c:2206 scheduler/ipp.c:6796
 #, c-format
 msgid "Character set \"%s\" not supported."
 msgstr ""
@@ -3022,15 +3077,15 @@ msgstr ""
 msgid "Clean Print Heads"
 msgstr ""
 
-#: scheduler/ipp.c:4966
+#: scheduler/ipp.c:4959
 msgid "Close-Job doesn't support the job-uri attribute."
 msgstr ""
 
-#: ppdc/sample.c:253
+#: ppdc/sample.c:288
 msgid "Color"
 msgstr ""
 
-#: ppdc/sample.c:224
+#: ppdc/sample.c:259
 msgid "Color Mode"
 msgstr ""
 
@@ -3041,35 +3096,35 @@ msgid ""
 "exit    help    quit    status  ?"
 msgstr ""
 
-#: cups/snmp.c:1011
+#: cups/snmp.c:1006
 msgid "Community name uses indefinite length"
 msgstr ""
 
-#: backend/ipp.c:666 backend/lpd.c:861 backend/socket.c:392
+#: backend/ipp.c:683 backend/lpd.c:858 backend/socket.c:389
 msgid "Connected to printer."
 msgstr ""
 
-#: backend/ipp.c:570 backend/lpd.c:698 backend/socket.c:308
+#: backend/ipp.c:590 backend/lpd.c:698 backend/socket.c:308
 msgid "Connecting to printer."
 msgstr ""
 
-#: cups/http-support.c:1190
+#: cups/http-support.c:1241
 msgid "Continue"
 msgstr ""
 
-#: ppdc/sample.c:336
+#: ppdc/sample.c:371
 msgid "Continuous"
 msgstr ""
 
-#: backend/lpd.c:1020 backend/lpd.c:1162
+#: backend/lpd.c:1009 backend/lpd.c:1151
 msgid "Control file sent successfully."
 msgstr ""
 
-#: backend/ipp.c:1029 backend/lpd.c:455
+#: backend/ipp.c:1070 backend/lpd.c:455
 msgid "Copying print data."
 msgstr ""
 
-#: cups/http-support.c:1199
+#: cups/http-support.c:1250
 msgid "Created"
 msgstr ""
 
@@ -3081,31 +3136,31 @@ msgstr ""
 msgid "Custom"
 msgstr ""
 
-#: ppdc/sample.c:330
+#: ppdc/sample.c:365
 msgid "CustominCutInterval"
 msgstr ""
 
-#: ppdc/sample.c:328
+#: ppdc/sample.c:363
 msgid "CustominTearInterval"
 msgstr ""
 
-#: ppdc/sample.c:314
+#: ppdc/sample.c:349
 msgid "Cut"
 msgstr ""
 
-#: ppdc/sample.c:422
+#: ppdc/sample.c:457
 msgid "Cutter"
 msgstr ""
 
-#: ppdc/sample.c:210
+#: ppdc/sample.c:245
 msgid "Dark"
 msgstr ""
 
-#: ppdc/sample.c:206
+#: ppdc/sample.c:241
 msgid "Darkness"
 msgstr ""
 
-#: backend/lpd.c:1110
+#: backend/lpd.c:1099
 msgid "Data file sent successfully."
 msgstr ""
 
@@ -3121,11 +3176,11 @@ msgstr ""
 msgid "Description: "
 msgstr ""
 
-#: ppdc/sample.c:252
+#: ppdc/sample.c:287
 msgid "DeskJet Series"
 msgstr ""
 
-#: scheduler/ipp.c:1430
+#: scheduler/ipp.c:1426
 #, c-format
 msgid "Destination \"%s\" is not accepting jobs."
 msgstr ""
@@ -3141,15 +3196,35 @@ msgid ""
 "        location = %s"
 msgstr ""
 
-#: ppdc/sample.c:407
+#: ppdc/sample.c:442
 msgid "Direct Thermal Media"
 msgstr ""
 
-#: ppdc/sample.c:316
+#: cups/file.c:263
+#, c-format
+msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
+msgstr ""
+
+#: cups/file.c:280
+#, c-format
+msgid "Directory \"%s\" is a file."
+msgstr ""
+
+#: cups/file.c:251
+#, c-format
+msgid "Directory \"%s\" not available: %s"
+msgstr ""
+
+#: cups/file.c:236
+#, c-format
+msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
+msgstr ""
+
+#: ppdc/sample.c:351
 msgid "Disabled"
 msgstr ""
 
-#: scheduler/ipp.c:7298
+#: scheduler/ipp.c:7291
 #, c-format
 msgid "Document #%d does not exist in job #%d."
 msgstr ""
@@ -3162,19 +3237,19 @@ msgstr ""
 msgid "Driver Version: "
 msgstr ""
 
-#: ppdc/sample.c:246
+#: ppdc/sample.c:281
 msgid "Duplexer"
 msgstr ""
 
-#: ppdc/sample.c:200
+#: ppdc/sample.c:235
 msgid "Dymo"
 msgstr ""
 
-#: ppdc/sample.c:402
+#: ppdc/sample.c:437
 msgid "EPL1 Label Printer"
 msgstr ""
 
-#: ppdc/sample.c:405
+#: ppdc/sample.c:440
 msgid "EPL2 Label Printer"
 msgstr ""
 
@@ -3208,167 +3283,223 @@ msgstr ""
 msgid "Enter password:"
 msgstr ""
 
-#: scheduler/client.c:2470
+#: scheduler/client.c:2439
 msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."
 msgstr ""
 
-#: ppdc/sample.c:54
+#: ppdc/sample.c:70
 msgid "Envelope #10 "
 msgstr ""
 
-#: ppdc/sample.c:55
+#: ppdc/sample.c:71
 msgid "Envelope #11"
 msgstr ""
 
-#: ppdc/sample.c:56
+#: ppdc/sample.c:72
 msgid "Envelope #12"
 msgstr ""
 
-#: ppdc/sample.c:57
+#: ppdc/sample.c:73
 msgid "Envelope #14"
 msgstr ""
 
-#: ppdc/sample.c:58
+#: ppdc/sample.c:74
 msgid "Envelope #9"
 msgstr ""
 
-#: ppdc/sample.c:68
+#: ppdc/sample.c:86
 msgid "Envelope B4"
 msgstr ""
 
-#: ppdc/sample.c:69
+#: ppdc/sample.c:87
 msgid "Envelope B5"
 msgstr ""
 
-#: ppdc/sample.c:70
+#: ppdc/sample.c:88
 msgid "Envelope B6"
 msgstr ""
 
-#: ppdc/sample.c:59
+#: ppdc/sample.c:75
 msgid "Envelope C0"
 msgstr ""
 
-#: ppdc/sample.c:60
+#: ppdc/sample.c:76
 msgid "Envelope C1"
 msgstr ""
 
-#: ppdc/sample.c:61
+#: ppdc/sample.c:77
 msgid "Envelope C2"
 msgstr ""
 
-#: ppdc/sample.c:62
+#: ppdc/sample.c:78
 msgid "Envelope C3"
 msgstr ""
 
-#: ppdc/sample.c:48
+#: ppdc/sample.c:64
 msgid "Envelope C4"
 msgstr ""
 
-#: ppdc/sample.c:49
+#: ppdc/sample.c:65
 msgid "Envelope C5"
 msgstr ""
 
-#: ppdc/sample.c:50
+#: ppdc/sample.c:66
 msgid "Envelope C6"
 msgstr ""
 
-#: ppdc/sample.c:63
+#: ppdc/sample.c:79
 msgid "Envelope C65"
 msgstr ""
 
-#: ppdc/sample.c:64
+#: ppdc/sample.c:80
 msgid "Envelope C7"
 msgstr ""
 
-#: ppdc/sample.c:65
+#: ppdc/sample.c:81
 msgid "Envelope Choukei 3"
 msgstr ""
 
-#: ppdc/sample.c:66
+#: ppdc/sample.c:82
+msgid "Envelope Choukei 3 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:83
 msgid "Envelope Choukei 4"
 msgstr ""
 
-#: ppdc/sample.c:51
+#: ppdc/sample.c:84
+msgid "Envelope Choukei 4 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:67
 msgid "Envelope DL"
 msgstr ""
 
-#: ppdc/sample.c:240
+#: ppdc/sample.c:275
 msgid "Envelope Feed"
 msgstr ""
 
-#: ppdc/sample.c:67
+#: ppdc/sample.c:85
 msgid "Envelope Invite"
 msgstr ""
 
-#: ppdc/sample.c:71
+#: ppdc/sample.c:89
 msgid "Envelope Italian"
 msgstr ""
 
-#: ppdc/sample.c:72
+#: ppdc/sample.c:90
 msgid "Envelope Kaku2"
 msgstr ""
 
-#: ppdc/sample.c:73
+#: ppdc/sample.c:91
+msgid "Envelope Kaku2 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:92
 msgid "Envelope Kaku3"
 msgstr ""
 
-#: ppdc/sample.c:74
+#: ppdc/sample.c:93
+msgid "Envelope Kaku3 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:94
 msgid "Envelope Monarch"
 msgstr ""
 
-#: ppdc/sample.c:76
+#: ppdc/sample.c:96
 msgid "Envelope PRC1 "
 msgstr ""
 
-#: ppdc/sample.c:86
+#: ppdc/sample.c:97
+msgid "Envelope PRC1 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:114
 msgid "Envelope PRC10"
 msgstr ""
 
-#: ppdc/sample.c:77
+#: ppdc/sample.c:115
+msgid "Envelope PRC10 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:98
 msgid "Envelope PRC2"
 msgstr ""
 
-#: ppdc/sample.c:78
+#: ppdc/sample.c:99
+msgid "Envelope PRC2 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:100
 msgid "Envelope PRC3"
 msgstr ""
 
-#: ppdc/sample.c:79
+#: ppdc/sample.c:101
+msgid "Envelope PRC3 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:102
 msgid "Envelope PRC4"
 msgstr ""
 
-#: ppdc/sample.c:81
-msgid "Envelope PRC5"
+#: ppdc/sample.c:103
+msgid "Envelope PRC4 Long Edge"
 msgstr ""
 
-#: ppdc/sample.c:80
+#: ppdc/sample.c:105
+msgid "Envelope PRC5 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:104
 msgid "Envelope PRC5PRC5"
 msgstr ""
 
-#: ppdc/sample.c:82
+#: ppdc/sample.c:106
 msgid "Envelope PRC6"
 msgstr ""
 
-#: ppdc/sample.c:83
+#: ppdc/sample.c:107
+msgid "Envelope PRC6 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:108
 msgid "Envelope PRC7"
 msgstr ""
 
-#: ppdc/sample.c:84
+#: ppdc/sample.c:109
+msgid "Envelope PRC7 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:110
 msgid "Envelope PRC8"
 msgstr ""
 
-#: ppdc/sample.c:85
+#: ppdc/sample.c:111
+msgid "Envelope PRC8 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:112
 msgid "Envelope PRC9"
 msgstr ""
 
-#: ppdc/sample.c:75
+#: ppdc/sample.c:113
+msgid "Envelope PRC9 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:95
 msgid "Envelope Personal"
 msgstr ""
 
-#: ppdc/sample.c:87
+#: ppdc/sample.c:116
 msgid "Envelope You4"
 msgstr ""
 
-#: ppdc/sample.c:211
+#: ppdc/sample.c:117
+msgid "Envelope You4 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:246
 msgid "Epson"
 msgstr ""
 
@@ -3376,55 +3507,60 @@ msgstr ""
 msgid "Error Policy"
 msgstr ""
 
+#: filter/rastertopwg.c:160 filter/rastertopwg.c:175 filter/rastertopwg.c:186
+#: filter/rastertopwg.c:197
+msgid "Error sending raster data."
+msgstr ""
+
 #: systemv/lpinfo.c:103 systemv/lpmove.c:88
 msgid "Error: need hostname after \"-h\" option."
 msgstr ""
 
-#: ppdc/sample.c:326
+#: ppdc/sample.c:361
 msgid "Every 10 Labels"
 msgstr ""
 
-#: ppdc/sample.c:318
+#: ppdc/sample.c:353
 msgid "Every 2 Labels"
 msgstr ""
 
-#: ppdc/sample.c:319
+#: ppdc/sample.c:354
 msgid "Every 3 Labels"
 msgstr ""
 
-#: ppdc/sample.c:320
+#: ppdc/sample.c:355
 msgid "Every 4 Labels"
 msgstr ""
 
-#: ppdc/sample.c:321
+#: ppdc/sample.c:356
 msgid "Every 5 Labels"
 msgstr ""
 
-#: ppdc/sample.c:322
+#: ppdc/sample.c:357
 msgid "Every 6 Labels"
 msgstr ""
 
-#: ppdc/sample.c:323
+#: ppdc/sample.c:358
 msgid "Every 7 Labels"
 msgstr ""
 
-#: ppdc/sample.c:324
+#: ppdc/sample.c:359
 msgid "Every 8 Labels"
 msgstr ""
 
-#: ppdc/sample.c:325
+#: ppdc/sample.c:360
 msgid "Every 9 Labels"
 msgstr ""
 
-#: ppdc/sample.c:317
+#: ppdc/sample.c:352
 msgid "Every Label"
 msgstr ""
 
-#: ppdc/sample.c:88
+#: ppdc/sample.c:118
 msgid "Executive"
 msgstr ""
 
-#: cups/http-support.c:1245
+#: cups/http-support.c:1296
 msgid "Expectation Failed"
 msgstr ""
 
@@ -3442,27 +3578,47 @@ msgstr ""
 msgid "FAIL"
 msgstr ""
 
-#: ppdc/sample.c:89
+#: ppdc/sample.c:119
 msgid "FanFold German"
 msgstr ""
 
-#: ppdc/sample.c:90
+#: ppdc/sample.c:120
 msgid "FanFold Legal German"
 msgstr ""
 
-#: ppdc/sample.c:91
+#: ppdc/sample.c:121
 msgid "Fanfold US"
 msgstr ""
 
-#: ppdc/sample.c:131
+#: cups/file.c:270
+#, c-format
+msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
+msgstr ""
+
+#: cups/file.c:284
+#, c-format
+msgid "File \"%s\" is a directory."
+msgstr ""
+
+#: cups/file.c:256
+#, c-format
+msgid "File \"%s\" not available: %s"
+msgstr ""
+
+#: cups/file.c:242
+#, c-format
+msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
+msgstr ""
+
+#: ppdc/sample.c:166
 msgid "File Folder"
 msgstr ""
 
-#: ppdc/sample.c:140
+#: ppdc/sample.c:175
 msgid "File Folder - 9/16 x 3 7/16\""
 msgstr ""
 
-#: scheduler/ipp.c:2573
+#: scheduler/ipp.c:2570
 #, c-format
 msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
 msgstr ""
@@ -3474,11 +3630,11 @@ msgstr ""
 msgid "Finished page %d."
 msgstr ""
 
-#: ppdc/sample.c:92
+#: ppdc/sample.c:122
 msgid "Folio"
 msgstr ""
 
-#: cups/http-support.c:1224
+#: cups/http-support.c:1275
 msgid "Forbidden"
 msgstr ""
 
@@ -3491,38 +3647,38 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: ppdc/sample.c:230
+#: ppdc/sample.c:265
 msgid "Generic"
 msgstr ""
 
-#: cups/snmp.c:1021
+#: cups/snmp.c:1016
 msgid "Get-Response-PDU uses indefinite length"
 msgstr ""
 
-#: ppdc/sample.c:261
+#: ppdc/sample.c:296
 msgid "Glossy Paper"
 msgstr ""
 
-#: scheduler/ipp.c:4042 scheduler/ipp.c:4443 scheduler/ipp.c:4978
-#: scheduler/ipp.c:7227 scheduler/ipp.c:7374 scheduler/ipp.c:8816
-#: scheduler/ipp.c:9918 scheduler/ipp.c:10143 scheduler/ipp.c:10497
-#: scheduler/ipp.c:11085
+#: scheduler/ipp.c:4035 scheduler/ipp.c:4436 scheduler/ipp.c:4971
+#: scheduler/ipp.c:7220 scheduler/ipp.c:7367 scheduler/ipp.c:8809
+#: scheduler/ipp.c:9911 scheduler/ipp.c:10136 scheduler/ipp.c:10453
+#: scheduler/ipp.c:11041
 msgid "Got a printer-uri attribute but no job-id."
 msgstr ""
 
-#: ppdc/sample.c:226
+#: ppdc/sample.c:261
 msgid "Grayscale"
 msgstr ""
 
-#: ppdc/sample.c:251
+#: ppdc/sample.c:286
 msgid "HP"
 msgstr ""
 
-#: ppdc/sample.c:132
+#: ppdc/sample.c:167
 msgid "Hanging Folder"
 msgstr ""
 
-#: ppdc/sample.c:141
+#: ppdc/sample.c:176
 msgid "Hanging Folder - 9/16 x 2\""
 msgstr ""
 
@@ -3550,23 +3706,23 @@ msgstr ""
 msgid "Illegal whitespace character"
 msgstr ""
 
-#: ppdc/sample.c:245
+#: ppdc/sample.c:280
 msgid "Installable Options"
 msgstr ""
 
-#: ppdc/sample.c:248
+#: ppdc/sample.c:283
 msgid "Installed"
 msgstr ""
 
-#: ppdc/sample.c:264
+#: ppdc/sample.c:299
 msgid "IntelliBar Label Printer"
 msgstr ""
 
-#: ppdc/sample.c:263
+#: ppdc/sample.c:298
 msgid "Intellitech"
 msgstr ""
 
-#: cups/http-support.c:1251
+#: cups/http-support.c:1302
 msgid "Internal Server Error"
 msgstr ""
 
@@ -3574,116 +3730,132 @@ msgstr ""
 msgid "Internal error"
 msgstr ""
 
-#: ppdc/sample.c:129
+#: ppdc/sample.c:164
 msgid "Internet Postage 2-Part"
 msgstr ""
 
-#: ppdc/sample.c:138
+#: ppdc/sample.c:173
 msgid "Internet Postage 2-Part - 2 1/4 x 7 1/2\""
 msgstr ""
 
-#: ppdc/sample.c:130
-msgid "Internet Postage 3-Part"
+#: ppdc/sample.c:165
+msgid "Internet Postage 3-Part"
+msgstr ""
+
+#: ppdc/sample.c:174
+msgid "Internet Postage 3-Part - 2 1/4 x 7\""
+msgstr ""
+
+#: backend/ipp.c:262
+msgid "Internet Printing Protocol"
+msgstr ""
+
+#: cups/ppd.c:1387
+msgid "JCL"
+msgstr ""
+
+#: ppdc/sample.c:50
+msgid "JIS B0"
 msgstr ""
 
-#: ppdc/sample.c:139
-msgid "Internet Postage 3-Part - 2 1/4 x 7\""
+#: ppdc/sample.c:52
+msgid "JIS B1"
 msgstr ""
 
-#: backend/ipp.c:252
-msgid "Internet Printing Protocol"
+#: ppdc/sample.c:51
+msgid "JIS B10"
 msgstr ""
 
-#: ppdc/sample.c:37
-msgid "JB0"
+#: ppdc/sample.c:53
+msgid "JIS B2"
 msgstr ""
 
-#: ppdc/sample.c:39
-msgid "JB1"
+#: ppdc/sample.c:54
+msgid "JIS B3"
 msgstr ""
 
-#: ppdc/sample.c:38
-msgid "JB10"
+#: ppdc/sample.c:55
+msgid "JIS B4"
 msgstr ""
 
-#: ppdc/sample.c:40
-msgid "JB2"
+#: ppdc/sample.c:56
+msgid "JIS B4 Long Edge"
 msgstr ""
 
-#: ppdc/sample.c:41
-msgid "JB3"
+#: ppdc/sample.c:57
+msgid "JIS B5"
 msgstr ""
 
-#: ppdc/sample.c:42
-msgid "JB4"
+#: ppdc/sample.c:58
+msgid "JIS B5 Long Edge"
 msgstr ""
 
-#: ppdc/sample.c:44
-msgid "JB6"
+#: ppdc/sample.c:59
+msgid "JIS B6"
 msgstr ""
 
-#: ppdc/sample.c:45
-msgid "JB7"
+#: ppdc/sample.c:60
+msgid "JIS B6 Long Edge"
 msgstr ""
 
-#: ppdc/sample.c:46
-msgid "JB8"
+#: ppdc/sample.c:61
+msgid "JIS B7"
 msgstr ""
 
-#: ppdc/sample.c:47
-msgid "JB9"
+#: ppdc/sample.c:62
+msgid "JIS B8"
 msgstr ""
 
-#: cups/ppd.c:1387
-msgid "JCL"
+#: ppdc/sample.c:63
+msgid "JIS B9"
 msgstr ""
 
-#: scheduler/ipp.c:10215
+#: scheduler/ipp.c:10208
 #, c-format
 msgid "Job #%d cannot be restarted - no files."
 msgstr ""
 
-#: scheduler/ipp.c:4082 scheduler/ipp.c:4313 scheduler/ipp.c:4368
-#: scheduler/ipp.c:4545 scheduler/ipp.c:4988 scheduler/ipp.c:6889
-#: scheduler/ipp.c:7267 scheduler/ipp.c:7414 scheduler/ipp.c:7714
-#: scheduler/ipp.c:8663 scheduler/ipp.c:8685 scheduler/ipp.c:8857
-#: scheduler/ipp.c:9066 scheduler/ipp.c:9109 scheduler/ipp.c:9958
-#: scheduler/ipp.c:10183 scheduler/ipp.c:10537 scheduler/ipp.c:11125
+#: scheduler/ipp.c:4075 scheduler/ipp.c:4306 scheduler/ipp.c:4361
+#: scheduler/ipp.c:4538 scheduler/ipp.c:4981 scheduler/ipp.c:6882
+#: scheduler/ipp.c:7260 scheduler/ipp.c:7407 scheduler/ipp.c:7707
+#: scheduler/ipp.c:8656 scheduler/ipp.c:8678 scheduler/ipp.c:8850
+#: scheduler/ipp.c:9059 scheduler/ipp.c:9102 scheduler/ipp.c:9951
+#: scheduler/ipp.c:10176 scheduler/ipp.c:10493 scheduler/ipp.c:11081
 #, c-format
 msgid "Job #%d does not exist."
 msgstr ""
 
-#: scheduler/ipp.c:4577
+#: scheduler/ipp.c:4570
 #, c-format
 msgid "Job #%d is already aborted - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:4571
+#: scheduler/ipp.c:4564
 #, c-format
 msgid "Job #%d is already canceled - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:4583
+#: scheduler/ipp.c:4576
 #, c-format
 msgid "Job #%d is already completed - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:9151 scheduler/ipp.c:11140
+#: scheduler/ipp.c:9144 scheduler/ipp.c:11096
 #, c-format
 msgid "Job #%d is finished and cannot be altered."
 msgstr ""
 
-#: scheduler/ipp.c:10197
+#: scheduler/ipp.c:10190
 #, c-format
 msgid "Job #%d is not complete."
 msgstr ""
 
-#: scheduler/ipp.c:4097
+#: scheduler/ipp.c:4090
 #, c-format
 msgid "Job #%d is not held for authentication."
 msgstr ""
 
-#: scheduler/ipp.c:9972
+#: scheduler/ipp.c:9965
 #, c-format
 msgid "Job #%d is not held."
 msgstr ""
@@ -3712,7 +3884,7 @@ msgstr ""
 msgid "Job UUID: "
 msgstr ""
 
-#: scheduler/ipp.c:11223
+#: scheduler/ipp.c:11179
 msgid "Job is completed and cannot be changed."
 msgstr ""
 
@@ -3720,11 +3892,11 @@ msgstr ""
 msgid "Job operation failed:"
 msgstr ""
 
-#: scheduler/ipp.c:11259 scheduler/ipp.c:11278 scheduler/ipp.c:11289
+#: scheduler/ipp.c:11215 scheduler/ipp.c:11234 scheduler/ipp.c:11245
 msgid "Job state cannot be changed."
 msgstr ""
 
-#: scheduler/ipp.c:10063
+#: scheduler/ipp.c:10056
 msgid "Job subscriptions cannot be renewed."
 msgstr ""
 
@@ -3736,36 +3908,40 @@ msgstr ""
 msgid "LPD/LPR Host or Printer"
 msgstr ""
 
-#: ppdc/sample.c:201
+#: ppdc/sample.c:236
 msgid "Label Printer"
 msgstr ""
 
-#: ppdc/sample.c:417
+#: ppdc/sample.c:452
 msgid "Label Top"
 msgstr ""
 
-#: scheduler/ipp.c:2219 scheduler/ipp.c:6812
+#: scheduler/ipp.c:2215 scheduler/ipp.c:6805
 #, c-format
 msgid "Language \"%s\" not supported."
 msgstr ""
 
-#: ppdc/sample.c:126
+#: ppdc/sample.c:161
 msgid "Large Address"
 msgstr ""
 
-#: ppdc/sample.c:135
+#: ppdc/sample.c:170
 msgid "Large Address - 1 4/10 x 3 1/2\""
 msgstr ""
 
-#: ppdc/sample.c:262
+#: ppdc/sample.c:297
 msgid "LaserJet Series PCL 4/5"
 msgstr ""
 
-#: ppdc/sample.c:32
+#: ppdc/sample.c:40
 msgid "Letter Oversize"
 msgstr ""
 
-#: ppdc/sample.c:207
+#: ppdc/sample.c:41
+msgid "Letter Oversize Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:242
 msgid "Light"
 msgstr ""
 
@@ -3785,11 +3961,11 @@ msgstr ""
 msgid "Location: "
 msgstr ""
 
-#: ppdc/sample.c:243
+#: ppdc/sample.c:278
 msgid "Long-Edge (Portrait)"
 msgstr ""
 
-#: cups/http-support.c:1464
+#: cups/http-support.c:1517
 msgid "Looking for printer."
 msgstr ""
 
@@ -3797,7 +3973,7 @@ msgstr ""
 msgid "Make and Model: "
 msgstr ""
 
-#: ppdc/sample.c:239
+#: ppdc/sample.c:274
 msgid "Manual Feed"
 msgstr ""
 
@@ -3817,19 +3993,19 @@ msgstr ""
 msgid "Media Size"
 msgstr ""
 
-#: cups/ppd.c:759 cups/ppd.c:1328 ppdc/sample.c:233
+#: cups/ppd.c:759 cups/ppd.c:1328 ppdc/sample.c:268
 msgid "Media Source"
 msgstr ""
 
-#: ppdc/sample.c:335
+#: ppdc/sample.c:370
 msgid "Media Tracking"
 msgstr ""
 
-#: cups/ppd.c:757 cups/ppd.c:1326 ppdc/sample.c:256
+#: cups/ppd.c:757 cups/ppd.c:1326 ppdc/sample.c:291
 msgid "Media Type"
 msgstr ""
 
-#: ppdc/sample.c:208
+#: ppdc/sample.c:243
 msgid "Medium"
 msgstr ""
 
@@ -3849,7 +4025,7 @@ msgstr ""
 msgid "Missing asterisk in column 1"
 msgstr ""
 
-#: scheduler/ipp.c:7290
+#: scheduler/ipp.c:7283
 msgid "Missing document-number attribute."
 msgstr ""
 
@@ -3872,7 +4048,7 @@ msgstr ""
 msgid "Missing media-size in media-col."
 msgstr ""
 
-#: scheduler/ipp.c:7844
+#: scheduler/ipp.c:7837
 msgid "Missing notify-subscription-ids attribute."
 msgstr ""
 
@@ -3880,11 +4056,11 @@ msgstr ""
 msgid "Missing option keyword"
 msgstr ""
 
-#: scheduler/ipp.c:4224 scheduler/ipp.c:4249
+#: scheduler/ipp.c:4217 scheduler/ipp.c:4242
 msgid "Missing requesting-user-name attribute."
 msgstr ""
 
-#: scheduler/ipp.c:492
+#: scheduler/ipp.c:488
 msgid "Missing required attributes."
 msgstr ""
 
@@ -3927,10 +4103,6 @@ msgstr ""
 msgid "Modify Printer"
 msgstr ""
 
-#: ppdc/sample.c:111
-msgid "Monarch"
-msgstr ""
-
 #: cgi-bin/ipp-var.c:425 cgi-bin/ipp-var.c:516
 msgid "Move All Jobs"
 msgstr ""
@@ -3939,7 +4111,7 @@ msgstr ""
 msgid "Move Job"
 msgstr ""
 
-#: cups/http-support.c:1208
+#: cups/http-support.c:1259
 msgid "Moved Permanently"
 msgstr ""
 
@@ -3947,48 +4119,23 @@ msgstr ""
 msgid "NULL PPD file pointer"
 msgstr ""
 
-#: cups/snmp.c:1058
+#: cups/snmp.c:1053
 msgid "Name OID uses indefinite length"
 msgstr ""
 
-#: scheduler/ipp.c:1226
+#: scheduler/ipp.c:1222
 msgid "Nested classes are not allowed."
 msgstr ""
 
-#: backend/ipp.c:762
-#, c-format
-msgid "Network host \"%s\" is busy; will retry in %d seconds."
-msgstr ""
-
-#: backend/ipp.c:637 backend/lpd.c:833 backend/socket.c:369
-#, c-format
-msgid "Network printer \"%s\" is busy."
-msgstr ""
-
-#: backend/ipp.c:649 backend/lpd.c:854 backend/socket.c:382
-#, c-format
-msgid "Network printer \"%s\" is not responding."
-msgstr ""
-
-#: backend/ipp.c:630 backend/lpd.c:826 backend/socket.c:362
-#, c-format
-msgid "Network printer \"%s\" is unreachable at this time."
-msgstr ""
-
-#: backend/ipp.c:623 backend/lpd.c:819 backend/socket.c:355
-#, c-format
-msgid "Network printer \"%s\" may not exist or is unavailable at this time."
-msgstr ""
-
-#: ppdc/sample.c:401
+#: ppdc/sample.c:436
 msgid "Never"
 msgstr ""
 
-#: ppdc/sample.c:227
+#: ppdc/sample.c:262
 msgid "New Stylus Color Series"
 msgstr ""
 
-#: ppdc/sample.c:229
+#: ppdc/sample.c:264
 msgid "New Stylus Photo Series"
 msgstr ""
 
@@ -3996,7 +4143,7 @@ msgstr ""
 msgid "No"
 msgstr ""
 
-#: cups/http-support.c:1205
+#: cups/http-support.c:1256
 msgid "No Content"
 msgstr ""
 
@@ -4004,7 +4151,7 @@ msgstr ""
 msgid "No PPD name"
 msgstr ""
 
-#: cups/snmp.c:1052
+#: cups/snmp.c:1047
 msgid "No VarBind SEQUENCE"
 msgstr ""
 
@@ -4012,32 +4159,32 @@ msgstr ""
 msgid "No Windows printer drivers are installed."
 msgstr ""
 
-#: cups/request.c:577 cups/request.c:863
+#: cups/request.c:577 cups/request.c:871
 msgid "No active connection"
 msgstr ""
 
-#: scheduler/ipp.c:4494
+#: scheduler/ipp.c:4487
 #, c-format
 msgid "No active jobs on %s."
 msgstr ""
 
-#: scheduler/ipp.c:333
+#: scheduler/ipp.c:329
 msgid "No attributes in request."
 msgstr ""
 
-#: scheduler/ipp.c:4125
+#: scheduler/ipp.c:4118
 msgid "No authentication information provided."
 msgstr ""
 
-#: cups/snmp.c:1009
+#: cups/snmp.c:1004
 msgid "No community name"
 msgstr ""
 
-#: scheduler/ipp.c:7090
+#: scheduler/ipp.c:7083
 msgid "No default printer."
 msgstr ""
 
-#: cgi-bin/ipp-var.c:436 scheduler/ipp.c:8420
+#: cgi-bin/ipp-var.c:436 scheduler/ipp.c:8413
 msgid "No destinations added."
 msgstr ""
 
@@ -4045,15 +4192,15 @@ msgstr ""
 msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
 msgstr ""
 
-#: cups/snmp.c:1039
+#: cups/snmp.c:1034
 msgid "No error-index"
 msgstr ""
 
-#: cups/snmp.c:1031
+#: cups/snmp.c:1026
 msgid "No error-status"
 msgstr ""
 
-#: scheduler/ipp.c:9355 scheduler/ipp.c:10600
+#: scheduler/ipp.c:9348 scheduler/ipp.c:10556
 msgid "No file in print request."
 msgstr ""
 
@@ -4065,7 +4212,7 @@ msgstr ""
 msgid "No modification time"
 msgstr ""
 
-#: cups/snmp.c:1056
+#: cups/snmp.c:1051
 msgid "No name OID"
 msgstr ""
 
@@ -4087,67 +4234,67 @@ msgstr ""
 msgid "No printer-uri found for class"
 msgstr ""
 
-#: scheduler/ipp.c:7493
+#: scheduler/ipp.c:7486
 msgid "No printer-uri in request."
 msgstr ""
 
-#: cups/snmp.c:1023
+#: cups/snmp.c:1018
 msgid "No request-id"
 msgstr ""
 
-#: scheduler/ipp.c:6697
+#: scheduler/ipp.c:6690
 msgid "No subscription attributes in request."
 msgstr ""
 
-#: scheduler/ipp.c:8756
+#: scheduler/ipp.c:8749
 msgid "No subscriptions found."
 msgstr ""
 
-#: cups/snmp.c:1047
+#: cups/snmp.c:1042
 msgid "No variable-bindings SEQUENCE"
 msgstr ""
 
-#: cups/snmp.c:1002
+#: cups/snmp.c:997
 msgid "No version number"
 msgstr ""
 
-#: ppdc/sample.c:338
+#: ppdc/sample.c:373
 msgid "Non-continuous (Mark sensing)"
 msgstr ""
 
-#: ppdc/sample.c:337
+#: ppdc/sample.c:372
 msgid "Non-continuous (Web sensing)"
 msgstr ""
 
-#: ppdc/sample.c:209
+#: ppdc/sample.c:244
 msgid "Normal"
 msgstr ""
 
-#: cups/http-support.c:1227
+#: cups/http-support.c:1278
 msgid "Not Found"
 msgstr ""
 
-#: cups/http-support.c:1239
+#: cups/http-support.c:1290
 msgid "Not Implemented"
 msgstr ""
 
-#: ppdc/sample.c:247
+#: ppdc/sample.c:282
 msgid "Not Installed"
 msgstr ""
 
-#: cups/http-support.c:1214
+#: cups/http-support.c:1265
 msgid "Not Modified"
 msgstr ""
 
-#: cups/http-support.c:1242
+#: cups/http-support.c:1293
 msgid "Not Supported"
 msgstr ""
 
-#: scheduler/ipp.c:1602 scheduler/ipp.c:11821
+#: scheduler/ipp.c:1598 scheduler/ipp.c:11777
 msgid "Not allowed to print."
 msgstr ""
 
-#: ppdc/sample.c:112
+#: ppdc/sample.c:143
 msgid "Note"
 msgstr ""
 
@@ -4155,15 +4302,15 @@ msgstr ""
 msgid "Note: this program only validates the DSC comments, not the PostScript itself."
 msgstr ""
 
-#: cups/http-support.c:1196 cups/ppd.c:338
+#: cups/http-support.c:1247 cups/ppd.c:338
 msgid "OK"
 msgstr ""
 
-#: ppdc/sample.c:242
+#: ppdc/sample.c:277
 msgid "Off (1-Sided)"
 msgstr ""
 
-#: ppdc/sample.c:332
+#: ppdc/sample.c:367
 msgid "Oki"
 msgstr ""
 
@@ -4198,8 +4345,8 @@ msgid "Options Installed"
 msgstr ""
 
 #: scheduler/cupsfilter.c:1356 scheduler/cupsfilter.c:1383
-#: scheduler/main.c:2247 systemv/cupsaddsmb.c:284 systemv/cupsctl.c:209
-#: systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3490 test/ipptool.c:3827
+#: scheduler/main.c:2187 systemv/cupsaddsmb.c:284 systemv/cupsctl.c:209
+#: systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3616 test/ipptool.c:3827
 #: ppdc/ppdc.cxx:437 ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130
 #: ppdc/ppdmerge.cxx:369 ppdc/ppdpo.cxx:254
 msgid "Options:"
@@ -4209,7 +4356,11 @@ msgstr ""
 msgid "Options: "
 msgstr ""
 
-#: cups/ppd-cache.c:1304
+#: cups/ppd-cache.c:152
+msgid "Out of date PPD cache file."
+msgstr ""
+
+#: cups/ppd-cache.c:1313
 msgid "Out of memory."
 msgstr ""
 
@@ -4241,35 +4392,47 @@ msgstr ""
 msgid "PASS"
 msgstr ""
 
-#: ppdc/sample.c:231
+#: ppdc/sample.c:266
 msgid "PCL Laser Printer"
 msgstr ""
 
-#: ppdc/sample.c:114
+#: ppdc/sample.c:146
 msgid "PRC16K"
 msgstr ""
 
-#: ppdc/sample.c:115
+#: ppdc/sample.c:147
+msgid "PRC16K Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:148
 msgid "PRC32K"
 msgstr ""
 
-#: ppdc/sample.c:116
+#: ppdc/sample.c:151
+msgid "PRC32K Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:149
 msgid "PRC32K Oversize"
 msgstr ""
 
-#: cups/snmp.c:1019
+#: ppdc/sample.c:150
+msgid "PRC32K Oversize Long Edge"
+msgstr ""
+
+#: cups/snmp.c:1014
 msgid "Packet does not contain a Get-Response-PDU"
 msgstr ""
 
-#: cups/snmp.c:998
+#: cups/snmp.c:993
 msgid "Packet does not start with SEQUENCE"
 msgstr ""
 
-#: ppdc/sample.c:331
+#: ppdc/sample.c:366
 msgid "ParamCustominCutInterval"
 msgstr ""
 
-#: ppdc/sample.c:329
+#: ppdc/sample.c:364
 msgid "ParamCustominTearInterval"
 msgstr ""
 
@@ -4291,19 +4454,19 @@ msgstr ""
 msgid "Pause Printer"
 msgstr ""
 
-#: ppdc/sample.c:419
+#: ppdc/sample.c:454
 msgid "Peel-Off"
 msgstr ""
 
-#: ppdc/sample.c:122
+#: ppdc/sample.c:157
 msgid "Photo"
 msgstr ""
 
-#: ppdc/sample.c:123
+#: ppdc/sample.c:158
 msgid "Photo Labels"
 msgstr ""
 
-#: ppdc/sample.c:257
+#: ppdc/sample.c:292
 msgid "Plain Paper"
 msgstr ""
 
@@ -4315,23 +4478,27 @@ msgstr ""
 msgid "Port Monitor"
 msgstr ""
 
-#: ppdc/sample.c:249
+#: ppdc/sample.c:284
 msgid "PostScript Printer"
 msgstr ""
 
-#: ppdc/sample.c:113
+#: ppdc/sample.c:144
 msgid "Postcard"
 msgstr ""
 
-#: ppdc/sample.c:53
-msgid "Postcard Double"
+#: ppdc/sample.c:68
+msgid "Postcard Double "
 msgstr ""
 
-#: ppdc/sample.c:52
-msgid "Postcard Double "
+#: ppdc/sample.c:69
+msgid "Postcard Double Long Edge"
 msgstr ""
 
-#: ppdc/sample.c:266
+#: ppdc/sample.c:145
+msgid "Postcard Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:301
 msgid "Print Density"
 msgstr ""
 
@@ -4339,11 +4506,11 @@ msgstr ""
 msgid "Print Job:"
 msgstr ""
 
-#: ppdc/sample.c:311
+#: ppdc/sample.c:346
 msgid "Print Mode"
 msgstr ""
 
-#: ppdc/sample.c:354
+#: ppdc/sample.c:389
 msgid "Print Rate"
 msgstr ""
 
@@ -4351,7 +4518,7 @@ msgstr ""
 msgid "Print Self-Test Page"
 msgstr ""
 
-#: ppdc/sample.c:298
+#: ppdc/sample.c:333
 msgid "Print Speed"
 msgstr ""
 
@@ -4359,30 +4526,29 @@ msgstr ""
 msgid "Print Test Page"
 msgstr ""
 
-#: ppdc/sample.c:327
+#: ppdc/sample.c:362
 msgid "Print and Cut"
 msgstr ""
 
-#: ppdc/sample.c:315
+#: ppdc/sample.c:350
 msgid "Print and Tear"
 msgstr ""
 
-#: backend/ipp.c:1256
+#: backend/ipp.c:1320
 #, c-format
 msgid "Print file accepted - job ID %d."
 msgstr ""
 
-#: backend/ipp.c:1249
+#: backend/ipp.c:1313
 msgid "Print file accepted - job ID unknown."
 msgstr ""
 
-#: backend/parallel.c:286 backend/socket.c:426 backend/usb-unix.c:195
+#: backend/parallel.c:286 backend/socket.c:415 backend/usb-unix.c:195
 msgid "Print file sent."
 msgstr ""
 
-#: backend/ipp.c:1224
-#, c-format
-msgid "Print file was not accepted: %s"
+#: backend/ipp.c:1277
+msgid "Print file was not accepted."
 msgstr ""
 
 #: filter/bannertops.c:648
@@ -4401,7 +4567,7 @@ msgstr ""
 msgid "Printer Added"
 msgstr ""
 
-#: ppdc/sample.c:234
+#: ppdc/sample.c:269
 msgid "Printer Default"
 msgstr ""
 
@@ -4421,7 +4587,7 @@ msgstr ""
 msgid "Printer Paused"
 msgstr ""
 
-#: ppdc/sample.c:265
+#: ppdc/sample.c:300
 msgid "Printer Settings"
 msgstr ""
 
@@ -4429,20 +4595,16 @@ msgstr ""
 msgid "Printer busy, will retry in 10 seconds."
 msgstr ""
 
-#: backend/ipp.c:1090 backend/ipp.c:1214
-msgid "Printer busy; will retry in 10 seconds."
-msgstr ""
-
 #: backend/parallel.c:234 backend/serial.c:256
 msgid "Printer busy; will retry in 30 seconds."
 msgstr ""
 
-#: backend/lpd.c:607 backend/lpd.c:1006 backend/lpd.c:1093 backend/lpd.c:1148
+#: backend/lpd.c:607 backend/lpd.c:995 backend/lpd.c:1082 backend/lpd.c:1137
 #, c-format
 msgid "Printer did not respond after %d seconds."
 msgstr ""
 
-#: backend/ipp.c:781 backend/ipp.c:788
+#: backend/ipp.c:791 backend/ipp.c:798
 #, c-format
 msgid "Printer does not support IPP/%d.%d, trying IPP/%s."
 msgstr ""
@@ -4499,11 +4661,11 @@ msgstr ""
 msgid "Purge Jobs"
 msgstr ""
 
-#: ppdc/sample.c:117
+#: ppdc/sample.c:152
 msgid "Quarto"
 msgstr ""
 
-#: scheduler/ipp.c:1597 scheduler/ipp.c:11816
+#: scheduler/ipp.c:1593 scheduler/ipp.c:11772
 msgid "Quota limit reached."
 msgstr ""
 
@@ -4515,7 +4677,7 @@ msgstr ""
 msgid "Rank   Owner      Pri  Job        Files                       Total Size"
 msgstr ""
 
-#: backend/ipp.c:1544 backend/socket.c:477 driver/rastertoescpx.c:1923
+#: backend/ipp.c:1632 backend/socket.c:466 driver/rastertoescpx.c:1923
 #: driver/rastertopclx.c:1948 filter/rastertoepson.c:1152
 #: filter/rastertohp.c:881 filter/rastertolabel.c:1307
 msgid "Ready to print."
@@ -4525,25 +4687,25 @@ msgstr ""
 msgid "Reject Jobs"
 msgstr ""
 
-#: backend/lpd.c:1016 backend/lpd.c:1158
+#: backend/lpd.c:1005 backend/lpd.c:1147
 #, c-format
 msgid "Remote host did not accept control file (%d)."
 msgstr ""
 
-#: backend/lpd.c:1106
+#: backend/lpd.c:1095
 #, c-format
 msgid "Remote host did not accept data file (%d)."
 msgstr ""
 
-#: ppdc/sample.c:399
+#: ppdc/sample.c:434
 msgid "Reprint After Error"
 msgstr ""
 
-#: cups/http-support.c:1230
+#: cups/http-support.c:1281
 msgid "Request Entity Too Large"
 msgstr ""
 
-#: cups/ppd.c:763 cups/ppd.c:1332 ppdc/sample.c:202
+#: cups/ppd.c:763 cups/ppd.c:1332 ppdc/sample.c:237
 msgid "Resolution"
 msgstr ""
 
@@ -4555,15 +4717,15 @@ msgstr ""
 msgid "Resume Printer"
 msgstr ""
 
-#: ppdc/sample.c:127
+#: ppdc/sample.c:162
 msgid "Return Address"
 msgstr ""
 
-#: ppdc/sample.c:136
+#: ppdc/sample.c:171
 msgid "Return Address - 3/4 x 2\""
 msgstr ""
 
-#: ppdc/sample.c:420
+#: ppdc/sample.c:455
 msgid "Rewind"
 msgstr ""
 
@@ -4572,15 +4734,15 @@ msgstr ""
 msgid "Running command: %s %s -N -A %s -c '%s'"
 msgstr ""
 
-#: cups/snmp.c:1000
+#: cups/snmp.c:995
 msgid "SEQUENCE uses indefinite length"
 msgstr ""
 
-#: cups/http-support.c:1254
+#: cups/http-support.c:1305
 msgid "SSL/TLS Negotiation Error"
 msgstr ""
 
-#: cups/http-support.c:1211
+#: cups/http-support.c:1262
 msgid "See Other"
 msgstr ""
 
@@ -4610,7 +4772,7 @@ msgstr ""
 msgid "Server Stopped"
 msgstr ""
 
-#: cups/http-support.c:1248
+#: cups/http-support.c:1299
 msgid "Service Unavailable"
 msgstr ""
 
@@ -4635,28 +4797,28 @@ msgstr ""
 msgid "Set Publishing"
 msgstr ""
 
-#: ppdc/sample.c:128
+#: ppdc/sample.c:163
 msgid "Shipping Address"
 msgstr ""
 
-#: ppdc/sample.c:137
+#: ppdc/sample.c:172
 msgid "Shipping Address - 2 5/16 x 4\""
 msgstr ""
 
-#: ppdc/sample.c:244
+#: ppdc/sample.c:279
 msgid "Short-Edge (Landscape)"
 msgstr ""
 
-#: ppdc/sample.c:259
+#: ppdc/sample.c:294
 msgid "Special Paper"
 msgstr ""
 
-#: backend/lpd.c:1057
+#: backend/lpd.c:1046
 #, c-format
 msgid "Spooling job, %.0f%% complete."
 msgstr ""
 
-#: ppdc/sample.c:312
+#: ppdc/sample.c:347
 msgid "Standard"
 msgstr ""
 
@@ -4671,72 +4833,76 @@ msgstr ""
 msgid "Starting page %d."
 msgstr ""
 
-#: ppdc/sample.c:118
+#: ppdc/sample.c:153
 msgid "Statement"
 msgstr ""
 
-#: ppdc/sample.c:222
+#: ppdc/sample.c:257
 msgid "Stylus Color Series"
 msgstr ""
 
-#: ppdc/sample.c:228
+#: ppdc/sample.c:263
 msgid "Stylus Photo Series"
 msgstr ""
 
-#: scheduler/ipp.c:4640 scheduler/ipp.c:7860 scheduler/ipp.c:8569
-#: scheduler/ipp.c:10051
+#: scheduler/ipp.c:4633 scheduler/ipp.c:7853 scheduler/ipp.c:8562
+#: scheduler/ipp.c:10044
 #, c-format
 msgid "Subscription #%d does not exist."
 msgstr ""
 
-#: ppdc/sample.c:119
+#: ppdc/sample.c:154
 msgid "Super A"
 msgstr ""
 
-#: ppdc/sample.c:120
+#: ppdc/sample.c:155
 msgid "Super B"
 msgstr ""
 
-#: ppdc/sample.c:124
+#: ppdc/sample.c:159
 msgid "Super B/A3"
 msgstr ""
 
-#: cups/http-support.c:1193
+#: cups/http-support.c:1244
 msgid "Switching Protocols"
 msgstr ""
 
-#: ppdc/sample.c:121
+#: ppdc/sample.c:156
 msgid "Tabloid"
 msgstr ""
 
-#: ppdc/sample.c:33
+#: ppdc/sample.c:42
 msgid "Tabloid Oversize"
 msgstr ""
 
-#: ppdc/sample.c:313
+#: ppdc/sample.c:43
+msgid "Tabloid Oversize Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:348
 msgid "Tear"
 msgstr ""
 
-#: ppdc/sample.c:418
+#: ppdc/sample.c:453
 msgid "Tear-Off"
 msgstr ""
 
-#: ppdc/sample.c:359
+#: ppdc/sample.c:394
 msgid "Tear-Off Adjust Position"
 msgstr ""
 
-#: scheduler/ipp.c:7564 scheduler/ipp.c:7642 scheduler/ipp.c:7658
-#: scheduler/ipp.c:7676
+#: scheduler/ipp.c:7557 scheduler/ipp.c:7635 scheduler/ipp.c:7651
+#: scheduler/ipp.c:7669
 #, c-format
 msgid "The %s attribute cannot be provided with job-ids."
 msgstr ""
 
-#: scheduler/ipp.c:8091
+#: scheduler/ipp.c:8084
 #, c-format
 msgid "The PPD file \"%s\" could not be found."
 msgstr ""
 
-#: scheduler/ipp.c:8078
+#: scheduler/ipp.c:8071
 #, c-format
 msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr ""
@@ -4767,11 +4933,11 @@ msgstr ""
 msgid "The fuser's temperature is low."
 msgstr ""
 
-#: scheduler/ipp.c:2246
+#: scheduler/ipp.c:2242
 msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
 msgstr ""
 
-#: scheduler/ipp.c:2229 scheduler/ipp.c:6822
+#: scheduler/ipp.c:2225 scheduler/ipp.c:6815
 #, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)."
 msgstr ""
@@ -4820,7 +4986,7 @@ msgstr ""
 msgid "The print file could not be opened."
 msgstr ""
 
-#: backend/ipp.c:798
+#: backend/ipp.c:808
 msgid "The printer URI is incorrect or no longer exists."
 msgstr ""
 
@@ -4828,6 +4994,11 @@ msgstr ""
 msgid "The printer is almost out of ink."
 msgstr ""
 
+#: backend/ipp.c:656 backend/ipp.c:773 backend/ipp.c:851 backend/ipp.c:1129
+#: backend/ipp.c:1257 backend/lpd.c:832 backend/socket.c:368
+msgid "The printer is busy."
+msgstr ""
+
 #: cups/localize.c:313
 msgid "The printer is low on toner."
 msgstr ""
@@ -4836,7 +5007,8 @@ msgstr ""
 msgid "The printer is not connected."
 msgstr ""
 
-#: backend/ipp.c:614 backend/ipp.c:757 backend/lpd.c:811 backend/socket.c:347
+#: backend/ipp.c:634 backend/ipp.c:667 backend/ipp.c:769 backend/lpd.c:811
+#: backend/lpd.c:852 backend/socket.c:347 backend/socket.c:380
 msgid "The printer is not responding."
 msgstr ""
 
@@ -4848,22 +5020,30 @@ msgstr ""
 msgid "The printer is out of toner."
 msgstr ""
 
+#: backend/ipp.c:649 backend/lpd.c:825 backend/socket.c:361
+msgid "The printer is unreachable at this time."
+msgstr ""
+
+#: backend/ipp.c:643 backend/lpd.c:819 backend/socket.c:355
+msgid "The printer may not exist or is unavailable at this time."
+msgstr ""
+
 #: cgi-bin/admin.c:932
 msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
 msgstr ""
 
-#: scheduler/ipp.c:908 scheduler/ipp.c:1220 scheduler/ipp.c:4289
-#: scheduler/ipp.c:4460 scheduler/ipp.c:6353 scheduler/ipp.c:6656
-#: scheduler/ipp.c:6970 scheduler/ipp.c:7530 scheduler/ipp.c:8296
-#: scheduler/ipp.c:8352 scheduler/ipp.c:8675 scheduler/ipp.c:8925
-#: scheduler/ipp.c:9014 scheduler/ipp.c:9047 scheduler/ipp.c:9370
-#: scheduler/ipp.c:9763 scheduler/ipp.c:9844 scheduler/ipp.c:10994
-#: scheduler/ipp.c:11449 scheduler/ipp.c:11779 scheduler/ipp.c:11861
-#: scheduler/ipp.c:12153
+#: scheduler/ipp.c:904 scheduler/ipp.c:1216 scheduler/ipp.c:4282
+#: scheduler/ipp.c:4453 scheduler/ipp.c:6346 scheduler/ipp.c:6649
+#: scheduler/ipp.c:6963 scheduler/ipp.c:7523 scheduler/ipp.c:8289
+#: scheduler/ipp.c:8345 scheduler/ipp.c:8668 scheduler/ipp.c:8918
+#: scheduler/ipp.c:9007 scheduler/ipp.c:9040 scheduler/ipp.c:9363
+#: scheduler/ipp.c:9756 scheduler/ipp.c:9837 scheduler/ipp.c:10950
+#: scheduler/ipp.c:11405 scheduler/ipp.c:11735 scheduler/ipp.c:11817
+#: scheduler/ipp.c:12109
 msgid "The printer or class does not exist."
 msgstr ""
 
-#: scheduler/ipp.c:1388
+#: scheduler/ipp.c:1384
 msgid "The printer or class is not shared."
 msgstr ""
 
@@ -4887,20 +5067,20 @@ msgstr ""
 msgid "The printer's waste bin is full."
 msgstr ""
 
-#: scheduler/ipp.c:1015 scheduler/ipp.c:2411
+#: scheduler/ipp.c:1011 scheduler/ipp.c:2408
 #, c-format
 msgid "The printer-uri \"%s\" contains invalid characters."
 msgstr ""
 
-#: scheduler/ipp.c:4266
+#: scheduler/ipp.c:4259
 msgid "The printer-uri attribute is required."
 msgstr ""
 
-#: scheduler/ipp.c:999
+#: scheduler/ipp.c:995
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
 msgstr ""
 
-#: scheduler/ipp.c:2395
+#: scheduler/ipp.c:2392
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
 msgstr ""
 
@@ -4908,16 +5088,16 @@ msgstr ""
 msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
 msgstr ""
 
-#: scheduler/client.c:2493
+#: scheduler/client.c:2462
 msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
 msgstr ""
 
-#: scheduler/ipp.c:7625
+#: scheduler/ipp.c:7618
 #, c-format
 msgid "The which-jobs value \"%s\" is not supported."
 msgstr ""
 
-#: scheduler/ipp.c:6900
+#: scheduler/ipp.c:6893
 msgid "There are too many subscriptions."
 msgstr ""
 
@@ -4930,15 +5110,15 @@ msgstr ""
 msgid "There was an unrecoverable USB error."
 msgstr ""
 
-#: ppdc/sample.c:406
+#: ppdc/sample.c:441
 msgid "Thermal Transfer Media"
 msgstr ""
 
-#: backend/ipp.c:884 backend/ipp.c:893
+#: backend/ipp.c:925 backend/ipp.c:934 backend/ipp.c:1157
 msgid "This printer does not conform to the IPP standard and may not work."
 msgstr ""
 
-#: backend/ipp.c:738
+#: backend/ipp.c:747 backend/ipp.c:866
 msgid "This printer does not conform to the IPP standard. Please contact the manufacturer of your printer for assistance."
 msgstr ""
 
@@ -4946,69 +5126,77 @@ msgstr ""
 msgid "Title: "
 msgstr ""
 
-#: scheduler/ipp.c:1591
+#: scheduler/ipp.c:1587
 msgid "Too many active jobs."
 msgstr ""
 
-#: scheduler/ipp.c:1485
+#: scheduler/ipp.c:1481
 #, c-format
 msgid "Too many job-sheets values (%d > 2)."
 msgstr ""
 
-#: scheduler/ipp.c:2723
+#: scheduler/ipp.c:2729
 #, c-format
 msgid "Too many printer-state-reasons values (%d > %d)."
 msgstr ""
 
-#: ppdc/sample.c:260
+#: ppdc/sample.c:295
 msgid "Transparency"
 msgstr ""
 
-#: ppdc/sample.c:255
+#: ppdc/sample.c:290
 msgid "Tray"
 msgstr ""
 
-#: ppdc/sample.c:235
+#: ppdc/sample.c:270
 msgid "Tray 1"
 msgstr ""
 
-#: ppdc/sample.c:236
+#: ppdc/sample.c:271
 msgid "Tray 2"
 msgstr ""
 
-#: ppdc/sample.c:237
+#: ppdc/sample.c:272
 msgid "Tray 3"
 msgstr ""
 
-#: ppdc/sample.c:238
+#: ppdc/sample.c:273
 msgid "Tray 4"
 msgstr ""
 
-#: cups/http-support.c:1233
+#: cups/http-support.c:1284
 msgid "URI Too Long"
 msgstr ""
 
-#: ppdc/sample.c:105
+#: ppdc/sample.c:135
 msgid "US Ledger"
 msgstr ""
 
-#: ppdc/sample.c:106
+#: ppdc/sample.c:136
 msgid "US Legal"
 msgstr ""
 
-#: ppdc/sample.c:107
+#: ppdc/sample.c:137
 msgid "US Legal Oversize"
 msgstr ""
 
-#: ppdc/sample.c:108
+#: ppdc/sample.c:138
 msgid "US Letter"
 msgstr ""
 
-#: ppdc/sample.c:109
+#: ppdc/sample.c:139
+msgid "US Letter Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:140
 msgid "US Letter Oversize"
 msgstr ""
 
-#: ppdc/sample.c:110
+#: ppdc/sample.c:141
+msgid "US Letter Oversize Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:142
 msgid "US Letter Small"
 msgstr ""
 
@@ -5029,12 +5217,11 @@ msgstr ""
 msgid "Unable to add class:"
 msgstr ""
 
-#: backend/ipp.c:1328
-#, c-format
-msgid "Unable to add file to job: %s"
+#: backend/ipp.c:1395
+msgid "Unable to add document to print job."
 msgstr ""
 
-#: scheduler/ipp.c:1632
+#: scheduler/ipp.c:1628
 #, c-format
 msgid "Unable to add job for destination \"%s\"."
 msgstr ""
@@ -5043,7 +5230,7 @@ msgstr ""
 msgid "Unable to add printer:"
 msgstr ""
 
-#: scheduler/ipp.c:1330
+#: scheduler/ipp.c:1326
 msgid "Unable to allocate memory for file types."
 msgstr ""
 
@@ -5059,9 +5246,8 @@ msgstr ""
 msgid "Unable to cancel RSS subscription:"
 msgstr ""
 
-#: backend/ipp.c:1586
-#, c-format
-msgid "Unable to cancel job: %s"
+#: backend/ipp.c:1674
+msgid "Unable to cancel print job."
 msgstr ""
 
 #: cgi-bin/admin.c:4021
@@ -5076,7 +5262,7 @@ msgstr ""
 msgid "Unable to change server settings:"
 msgstr ""
 
-#: cups/adminutil.c:911 cups/request.c:964
+#: cups/adminutil.c:911 cups/request.c:972
 msgid "Unable to connect to host."
 msgstr ""
 
@@ -5084,7 +5270,7 @@ msgstr ""
 msgid "Unable to connect to server"
 msgstr ""
 
-#: backend/ipp.c:592 backend/ipp.c:933 backend/lpd.c:791
+#: backend/ipp.c:612 backend/ipp.c:974 backend/lpd.c:791
 #: backend/parallel.c:219 backend/serial.c:241 backend/socket.c:327
 #: backend/usb-unix.c:117
 msgid "Unable to contact printer, queuing on next printer in class."
@@ -5105,12 +5291,12 @@ msgstr ""
 msgid "Unable to copy CUPS printer driver files (%d)."
 msgstr ""
 
-#: scheduler/ipp.c:2843
+#: scheduler/ipp.c:2849
 #, c-format
 msgid "Unable to copy PPD file - %s"
 msgstr ""
 
-#: scheduler/ipp.c:2898
+#: scheduler/ipp.c:2904
 msgid "Unable to copy PPD file."
 msgstr ""
 
@@ -5124,7 +5310,7 @@ msgstr ""
 msgid "Unable to copy Windows 9x printer driver files (%d)."
 msgstr ""
 
-#: scheduler/ipp.c:2820
+#: scheduler/ipp.c:2826
 #, c-format
 msgid "Unable to copy interface script - %s"
 msgstr ""
@@ -5133,7 +5319,7 @@ msgstr ""
 msgid "Unable to copy print file"
 msgstr ""
 
-#: backend/ipp.c:1674
+#: backend/ipp.c:1764
 msgid "Unable to create compressed print file"
 msgstr ""
 
@@ -5169,35 +5355,35 @@ msgstr ""
 msgid "Unable to edit cupsd.conf files larger than 1MB"
 msgstr ""
 
-#: cups/http.c:4079
+#: cups/http.c:4086
 msgid "Unable to establish a secure connection to host (certificate chain invalid)."
 msgstr ""
 
-#: cups/http.c:4069
+#: cups/http.c:4076
 msgid "Unable to establish a secure connection to host (certificate not yet valid)."
 msgstr ""
 
-#: cups/http.c:4064
+#: cups/http.c:4071
 msgid "Unable to establish a secure connection to host (expired certificate)."
 msgstr ""
 
-#: cups/http.c:4074
+#: cups/http.c:4081
 msgid "Unable to establish a secure connection to host (host name mismatch)."
 msgstr ""
 
-#: cups/http.c:4084
+#: cups/http.c:4091
 msgid "Unable to establish a secure connection to host (peer dropped connection before responding)."
 msgstr ""
 
-#: cups/http.c:4059
+#: cups/http.c:4066
 msgid "Unable to establish a secure connection to host (self-signed certificate)."
 msgstr ""
 
-#: cups/http.c:4054
+#: cups/http.c:4061
 msgid "Unable to establish a secure connection to host (untrusted certificate)."
 msgstr ""
 
-#: cups/http.c:4111
+#: cups/http.c:4118
 msgid "Unable to establish a secure connection to host."
 msgstr ""
 
@@ -5205,7 +5391,7 @@ msgstr ""
 msgid "Unable to find destination for job"
 msgstr ""
 
-#: cups/http-support.c:1568
+#: cups/http-support.c:1627
 msgid "Unable to find printer."
 msgstr ""
 
@@ -5213,7 +5399,7 @@ msgstr ""
 msgid "Unable to fork filter"
 msgstr ""
 
-#: backend/ipp.c:1696
+#: backend/ipp.c:1786
 msgid "Unable to generate compressed print file"
 msgstr ""
 
@@ -5225,15 +5411,14 @@ msgstr ""
 msgid "Unable to get class status:"
 msgstr ""
 
-#: backend/ipp.c:1413
-#, c-format
-msgid "Unable to get job attributes: %s"
-msgstr ""
-
 #: cgi-bin/admin.c:1321
 msgid "Unable to get list of printer drivers:"
 msgstr ""
 
+#: backend/ipp.c:1482
+msgid "Unable to get print job status."
+msgstr ""
+
 #: cgi-bin/admin.c:2959
 msgid "Unable to get printer attributes:"
 msgstr ""
@@ -5242,13 +5427,12 @@ msgstr ""
 msgid "Unable to get printer list:"
 msgstr ""
 
-#: cgi-bin/printers.c:569
-msgid "Unable to get printer status:"
+#: backend/ipp.c:827
+msgid "Unable to get printer status."
 msgstr ""
 
-#: backend/ipp.c:818
-#, c-format
-msgid "Unable to get printer status: %s"
+#: cgi-bin/printers.c:569
+msgid "Unable to get printer status:"
 msgstr ""
 
 #: cups/adminutil.c:565 cups/adminutil.c:769
@@ -5261,12 +5445,12 @@ msgstr ""
 msgid "Unable to install Windows 9x printer driver files (%d)."
 msgstr ""
 
-#: backend/ipp.c:529 backend/lpd.c:417 backend/socket.c:273
+#: backend/ipp.c:549 backend/lpd.c:417 backend/socket.c:273
 #, c-format
 msgid "Unable to locate printer \"%s\"."
 msgstr ""
 
-#: backend/dnssd.c:497 backend/ipp.c:284 backend/lpd.c:200
+#: backend/dnssd.c:497 backend/ipp.c:294 backend/lpd.c:200
 #: backend/socket.c:169
 msgid "Unable to locate printer."
 msgstr ""
@@ -5299,7 +5483,7 @@ msgstr ""
 msgid "Unable to open charset file"
 msgstr ""
 
-#: backend/ipp.c:1680
+#: backend/ipp.c:1770
 msgid "Unable to open compressed print file"
 msgstr ""
 
@@ -5311,12 +5495,12 @@ msgstr ""
 msgid "Unable to open device file"
 msgstr ""
 
-#: scheduler/ipp.c:7311
+#: scheduler/ipp.c:7304
 #, c-format
 msgid "Unable to open document #%d in job #%d."
 msgstr ""
 
-#: backend/ipp.c:1686 backend/lpd.c:476 backend/parallel.c:150
+#: backend/ipp.c:1776 backend/lpd.c:476 backend/parallel.c:150
 #: backend/serial.c:190 backend/socket.c:156 backend/usb.c:237
 #: filter/bannertops.c:183 filter/gziptoany.c:71 filter/pstext.c:89
 #: filter/pstext.c:249 filter/pstext.c:266 filter/pstops.c:299
@@ -5394,7 +5578,7 @@ msgstr ""
 msgid "Unable to upload cupsd.conf file:"
 msgstr ""
 
-#: backend/usb-darwin.c:2022 backend/usb-darwin.c:2046
+#: backend/usb-darwin.c:2000 backend/usb-darwin.c:2024
 msgid "Unable to use legacy USB class driver."
 msgstr ""
 
@@ -5407,7 +5591,7 @@ msgstr ""
 msgid "Unable to write uncompressed print data: %s"
 msgstr ""
 
-#: cups/http-support.c:1221
+#: cups/http-support.c:1272
 msgid "Unauthorized"
 msgstr ""
 
@@ -5415,7 +5599,7 @@ msgstr ""
 msgid "Units"
 msgstr ""
 
-#: cups/http-support.c:1261 cups/ppd.c:366
+#: cups/http-support.c:1312 cups/ppd.c:366
 msgid "Unknown"
 msgstr ""
 
@@ -5424,7 +5608,7 @@ msgstr ""
 msgid "Unknown choice \"%s\" for option \"%s\"."
 msgstr ""
 
-#: backend/ipp.c:398
+#: backend/ipp.c:408
 #, c-format
 msgid "Unknown encryption option value: \"%s\"."
 msgstr ""
@@ -5439,7 +5623,7 @@ msgstr ""
 msgid "Unknown format character: \"%c\"."
 msgstr ""
 
-#: backend/ipp.c:445
+#: backend/ipp.c:455
 #, c-format
 msgid "Unknown option \"%s\" with value \"%s\"."
 msgstr ""
@@ -5454,17 +5638,17 @@ msgstr ""
 msgid "Unknown print mode: \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:11651
+#: scheduler/ipp.c:11607
 #, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:11634
+#: scheduler/ipp.c:11590
 #, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr ""
 
-#: backend/ipp.c:417
+#: backend/ipp.c:427
 #, c-format
 msgid "Unknown version option value: \"%s\"."
 msgstr ""
@@ -5479,27 +5663,27 @@ msgstr ""
 msgid "Unsupported brightness value %s, using brightness=100."
 msgstr ""
 
-#: scheduler/ipp.c:433
+#: scheduler/ipp.c:429
 #, c-format
 msgid "Unsupported character set \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9336 scheduler/ipp.c:10570 scheduler/ipp.c:12105
+#: scheduler/ipp.c:9329 scheduler/ipp.c:10526 scheduler/ipp.c:12061
 #, c-format
 msgid "Unsupported compression \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9470 scheduler/ipp.c:10715 scheduler/ipp.c:12134
+#: scheduler/ipp.c:9463 scheduler/ipp.c:10671 scheduler/ipp.c:12090
 #, c-format
 msgid "Unsupported document-format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10698
+#: scheduler/ipp.c:10654
 #, c-format
 msgid "Unsupported document-format \"%s/%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1451
+#: scheduler/ipp.c:1447
 #, c-format
 msgid "Unsupported format \"%s\"."
 msgstr ""
@@ -5509,7 +5693,7 @@ msgstr ""
 msgid "Unsupported gamma value %s, using gamma=1000."
 msgstr ""
 
-#: scheduler/ipp.c:1549
+#: scheduler/ipp.c:1545
 msgid "Unsupported margins."
 msgstr ""
 
@@ -5532,11 +5716,15 @@ msgstr ""
 msgid "Unsupported page-border value %s, using page-border=none."
 msgstr ""
 
-#: cups/snmp.c:1117
+#: filter/rastertopwg.c:130 filter/rastertopwg.c:138 filter/rastertopwg.c:147
+msgid "Unsupported raster data."
+msgstr ""
+
+#: cups/snmp.c:1112
 msgid "Unsupported value type"
 msgstr ""
 
-#: cups/http-support.c:1236
+#: cups/http-support.c:1287
 msgid "Upgrade Required"
 msgstr ""
 
@@ -5557,7 +5745,7 @@ msgstr ""
 msgid "Usage: %s job user title copies options [filename]"
 msgstr ""
 
-#: backend/dnssd.c:171 backend/ipp.c:258 backend/lpd.c:189
+#: backend/dnssd.c:171 backend/ipp.c:268 backend/lpd.c:189
 #: backend/parallel.c:127 backend/serial.c:167 backend/socket.c:133
 #: backend/usb.c:183 driver/commandtoescpx.c:57 driver/commandtopclx.c:57
 #: filter/textcommon.c:518 monitor/bcp.c:62 monitor/tbcp.c:61
@@ -5583,7 +5771,7 @@ msgstr ""
 msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
 msgstr ""
 
-#: scheduler/main.c:2246
+#: scheduler/main.c:2186
 msgid "Usage: cupsd [options]"
 msgstr ""
 
@@ -5595,7 +5783,7 @@ msgstr ""
 msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]"
 msgstr ""
 
-#: systemv/cupstestppd.c:3486
+#: systemv/cupstestppd.c:3612
 msgid "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
 msgstr ""
 
@@ -5650,23 +5838,23 @@ msgstr ""
 msgid "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
 msgstr ""
 
-#: backend/snmp.c:217
+#: backend/snmp.c:218
 msgid "Usage: snmp [host-or-ip-address]"
 msgstr ""
 
-#: cups/snmp.c:1069
+#: cups/snmp.c:1064
 msgid "Value uses indefinite length"
 msgstr ""
 
-#: cups/snmp.c:1054
+#: cups/snmp.c:1049
 msgid "VarBind uses indefinite length"
 msgstr ""
 
-#: cups/snmp.c:1004
+#: cups/snmp.c:999
 msgid "Version uses indefinite length"
 msgstr ""
 
-#: backend/ipp.c:1353
+#: backend/ipp.c:1419
 msgid "Waiting for job to complete."
 msgstr ""
 
@@ -5674,7 +5862,7 @@ msgstr ""
 msgid "Waiting for printer to become available."
 msgstr ""
 
-#: backend/socket.c:446
+#: backend/socket.c:435
 msgid "Waiting for printer to finish."
 msgstr ""
 
@@ -5682,7 +5870,7 @@ msgstr ""
 msgid "Warning, no Windows 2000 printer drivers are installed."
 msgstr ""
 
-#: cups/http-support.c:1257
+#: cups/http-support.c:1308
 msgid "Web Interface is Disabled"
 msgstr ""
 
@@ -5690,7 +5878,7 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
-#: scheduler/client.c:2480
+#: scheduler/client.c:2449
 #, c-format
 msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
 msgstr ""
@@ -5699,11 +5887,11 @@ msgstr ""
 msgid "Your password must be at least 6 characters long, cannot contain your username, and must contain at least one letter and number."
 msgstr ""
 
-#: ppdc/sample.c:410
+#: ppdc/sample.c:445
 msgid "ZPL Label Printer"
 msgstr ""
 
-#: ppdc/sample.c:333
+#: ppdc/sample.c:368
 msgid "Zebra"
 msgstr ""
 
@@ -5723,11 +5911,11 @@ msgstr ""
 msgid "convert: Use the -f option to specify a file to convert."
 msgstr ""
 
-#: scheduler/ipp.c:7183
+#: scheduler/ipp.c:7176
 msgid "cups-deviced failed to execute."
 msgstr ""
 
-#: scheduler/ipp.c:8013 scheduler/ipp.c:8263
+#: scheduler/ipp.c:8006 scheduler/ipp.c:8256
 msgid "cups-driverd failed to execute."
 msgstr ""
 
@@ -5755,25 +5943,25 @@ msgstr ""
 msgid "cupsctl: Unknown option \"-%c\""
 msgstr ""
 
-#: scheduler/main.c:198
+#: scheduler/main.c:197
 msgid "cupsd: Expected config filename after \"-c\" option."
 msgstr ""
 
-#: scheduler/main.c:230 scheduler/main.c:237
+#: scheduler/main.c:229 scheduler/main.c:236
 msgid "cupsd: Unable to get current directory."
 msgstr ""
 
-#: scheduler/main.c:304
+#: scheduler/main.c:303
 #, c-format
 msgid "cupsd: Unknown argument \"%s\" - aborting."
 msgstr ""
 
-#: scheduler/main.c:297
+#: scheduler/main.c:296
 #, c-format
 msgid "cupsd: Unknown option \"%c\" - aborting."
 msgstr ""
 
-#: scheduler/main.c:264
+#: scheduler/main.c:263
 msgid "cupsd: launchd(8) support not compiled in, running in normal mode."
 msgstr ""
 
@@ -5814,11 +6002,11 @@ msgstr ""
 msgid "device for %s: %s"
 msgstr ""
 
-#: cups/snmp.c:1041
+#: cups/snmp.c:1036
 msgid "error-index uses indefinite length"
 msgstr ""
 
-#: cups/snmp.c:1033
+#: cups/snmp.c:1028
 msgid "error-status uses indefinite length"
 msgstr ""
 
@@ -5897,7 +6085,7 @@ msgstr ""
 msgid "ipptool: Unknown option \"-%c\"."
 msgstr ""
 
-#: scheduler/ipp.c:9003
+#: scheduler/ipp.c:8996
 msgid "job-printer-uri attribute missing."
 msgstr ""
 
@@ -6192,16 +6380,16 @@ msgstr ""
 msgid "no system default destination"
 msgstr ""
 
-#: scheduler/ipp.c:6871
+#: scheduler/ipp.c:6864
 msgid "notify-events not specified."
 msgstr ""
 
-#: scheduler/ipp.c:2183 scheduler/ipp.c:6776
+#: scheduler/ipp.c:2179 scheduler/ipp.c:6769
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" is already used."
 msgstr ""
 
-#: scheduler/ipp.c:2173 scheduler/ipp.c:6766
+#: scheduler/ipp.c:2169 scheduler/ipp.c:6759
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
 msgstr ""
@@ -6722,7 +6910,7 @@ msgstr ""
 msgid "request id is %s-%d (%d file(s))"
 msgstr ""
 
-#: cups/snmp.c:1025
+#: cups/snmp.c:1020
 msgid "request-id uses indefinite length"
 msgstr ""
 
@@ -6765,7 +6953,7 @@ msgstr ""
 msgid "untitled"
 msgstr ""
 
-#: cups/snmp.c:1050
+#: cups/snmp.c:1045
 msgid "variable-bindings uses indefinite length"
 msgstr ""
 
index bab43a7a0a8f8647699236b0e0a18ced0f6b4e4b..8f920c59c0768cb9d01b6434d7c3f91e40145bb3 100644 (file)
 "        PASS    PageSize" = "        PASS    PageSize";
 "        PASS    Product" = "        PASS    Product";
 "        PASS    ShortNickName" = "        PASS    ShortNickName";
-"        WARN    \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\")." = "        WARN    \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\").";
 "        WARN    %s has no corresponding options." = "        WARN    %s has no corresponding options.";
 "        WARN    %s shares a common prefix with %s\n                REF: Page 15, section 3.2." = "        WARN    %s shares a common prefix with %s\n                REF: Page 15, section 3.2.";
-"        WARN    Default choices conflicting." = "        WARN    Default choices conflicting.";
 "        WARN    Duplex option keyword %s may not work as expected and should be named Duplex.\n                REF: Page 122, section 5.17" = "        WARN    Duplex option keyword %s may not work as expected and should be named Duplex.\n                REF: Page 122, section 5.17";
 "        WARN    File contains a mix of CR, LF, and CR LF line endings." = "        WARN    File contains a mix of CR, LF, and CR LF line endings.";
 "        WARN    LanguageEncoding required by PPD 4.3 spec.\n                REF: Pages 56-57, section 5.3." = "        WARN    LanguageEncoding required by PPD 4.3 spec.\n                REF: Pages 56-57, section 5.3.";
@@ -83,6 +81,7 @@
 "       cupsaddsmb [options] -a" = "       cupsaddsmb [options] -a";
 "       cupstestdsc [options] -" = "       cupstestdsc [options] -";
 "       program | cupstestppd [options] -" = "       program | cupstestppd [options] -";
+"      %s  \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\")." = "      %s  \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\").";
 "      %s  %s %s does not exist." = "      %s  %s %s does not exist.";
 "      %s  %s file \"%s\" has the wrong capitalization." = "      %s  %s file \"%s\" has the wrong capitalization.";
 "      %s  Bad %s choice %s.\n                REF: Page 122, section 5.17" = "      %s  Bad %s choice %s.\n                REF: Page 122, section 5.17";
@@ -96,6 +95,7 @@
 "      %s  Bad permissions on %s file \"%s\"." = "      %s  Bad permissions on %s file \"%s\".";
 "      %s  Bad spelling of %s - should be %s." = "      %s  Bad spelling of %s - should be %s.";
 "      %s  Cannot provide both APScanAppPath and APScanAppBundleID." = "      %s  Cannot provide both APScanAppPath and APScanAppBundleID.";
+"      %s  Default choices conflicting." = "      %s  Default choices conflicting.";
 "      %s  Empty cupsUIConstraints %s" = "      %s  Empty cupsUIConstraints %s";
 "      %s  Missing \"%s\" translation string for option %s, choice %s." = "      %s  Missing \"%s\" translation string for option %s, choice %s.";
 "      %s  Missing \"%s\" translation string for option %s." = "      %s  Missing \"%s\" translation string for option %s.";
 "      %s  REQUIRED %s does not define choice None.\n                REF: Page 122, section 5.17" = "      %s  REQUIRED %s does not define choice None.\n                REF: Page 122, section 5.17";
 "      %s  Size \"%s\" defined for %s but not for %s." = "      %s  Size \"%s\" defined for %s but not for %s.";
 "      %s  Size \"%s\" has unexpected dimensions (%gx%g)." = "      %s  Size \"%s\" has unexpected dimensions (%gx%g).";
+"      %s  Size \"%s\" should be \"%s\"." = "      %s  Size \"%s\" should be \"%s\".";
+"      %s  Size \"%s\" should be the Adobe standard name \"%s\"." = "      %s  Size \"%s\" should be the Adobe standard name \"%s\".";
 "      %s  cupsICCProfile %s hash value collides with %s." = "      %s  cupsICCProfile %s hash value collides with %s.";
 "      %s  cupsUIResolver %s causes a loop." = "      %s  cupsUIResolver %s causes a loop.";
 "      %s  cupsUIResolver %s does not list at least two different options." = "      %s  cupsUIResolver %s does not list at least two different options.";
 "A class named \"%s\" already exists." = "A class named \"%s\" already exists.";
 "A printer named \"%s\" already exists." = "A printer named \"%s\" already exists.";
 "A0" = "A0";
+"A0 Long Edge" = "A0 Long Edge";
 "A1" = "A1";
+"A1 Long Edge" = "A1 Long Edge";
 "A10" = "A10";
 "A2" = "A2";
+"A2 Long Edge" = "A2 Long Edge";
 "A3" = "A3";
+"A3 Long Edge" = "A3 Long Edge";
 "A3 Oversize" = "A3 Oversize";
+"A3 Oversize Long Edge" = "A3 Oversize Long Edge";
 "A4" = "A4";
+"A4 Long Edge" = "A4 Long Edge";
 "A4 Oversize" = "A4 Oversize";
 "A4 Small" = "A4 Small";
 "A5" = "A5";
+"A5 Long Edge" = "A5 Long Edge";
 "A5 Oversize" = "A5 Oversize";
 "A6" = "A6";
+"A6 Long Edge" = "A6 Long Edge";
 "A7" = "A7";
 "A8" = "A8";
 "A9" = "A9";
 "ANSI D" = "ANSI D";
 "ANSI E" = "ANSI E";
 "ARCH C" = "ARCH C";
+"ARCH C Long Edge" = "ARCH C Long Edge";
 "ARCH D" = "ARCH D";
+"ARCH D Long Edge" = "ARCH D Long Edge";
 "ARCH E" = "ARCH E";
+"ARCH E Long Edge" = "ARCH E Long Edge";
 "Accept Jobs" = "Accept Jobs";
 "Accepted" = "Accepted";
 "Add Class" = "Add Class";
 "B3" = "B3";
 "B4" = "B4";
 "B5" = "B5";
-"B5 JIS" = "B5 JIS";
 "B5 Oversize" = "B5 Oversize";
 "B6" = "B6";
 "B7" = "B7";
 "CPCL Label Printer" = "CPCL Label Printer";
 "Cancel RSS Subscription" = "Cancel RSS Subscription";
 "Canceling print job." = "Canceling print job.";
+"Cannot share a remote Kerberized printer." = "Cannot share a remote Kerberized printer.";
 "Cassette" = "Cassette";
 "Change Settings" = "Change Settings";
 "Character set \"%s\" not supported." = "Character set \"%s\" not supported.";
 "Destination \"%s\" is not accepting jobs." = "Destination \"%s\" is not accepting jobs.";
 "Device: uri = %s\n        class = %s\n        info = %s\n        make-and-model = %s\n        device-id = %s\n        location = %s" = "Device: uri = %s\n        class = %s\n        info = %s\n        make-and-model = %s\n        device-id = %s\n        location = %s";
 "Direct Thermal Media" = "Direct Thermal Media";
+"Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d).";
+"Directory \"%s\" is a file." = "Directory \"%s\" is a file.";
+"Directory \"%s\" not available: %s" = "Directory \"%s\" not available: %s";
+"Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d).";
 "Disabled" = "Disabled";
 "Document #%d does not exist in job #%d." = "Document #%d does not exist in job #%d.";
 "Driver Name: " = "Driver Name: ";
 "Envelope C65" = "Envelope C65";
 "Envelope C7" = "Envelope C7";
 "Envelope Choukei 3" = "Envelope Choukei 3";
+"Envelope Choukei 3 Long Edge" = "Envelope Choukei 3 Long Edge";
 "Envelope Choukei 4" = "Envelope Choukei 4";
+"Envelope Choukei 4 Long Edge" = "Envelope Choukei 4 Long Edge";
 "Envelope DL" = "Envelope DL";
 "Envelope Feed" = "Envelope Feed";
 "Envelope Invite" = "Envelope Invite";
 "Envelope Italian" = "Envelope Italian";
 "Envelope Kaku2" = "Envelope Kaku2";
+"Envelope Kaku2 Long Edge" = "Envelope Kaku2 Long Edge";
 "Envelope Kaku3" = "Envelope Kaku3";
+"Envelope Kaku3 Long Edge" = "Envelope Kaku3 Long Edge";
 "Envelope Monarch" = "Envelope Monarch";
 "Envelope PRC1 " = "Envelope PRC1 ";
+"Envelope PRC1 Long Edge" = "Envelope PRC1 Long Edge";
 "Envelope PRC10" = "Envelope PRC10";
+"Envelope PRC10 Long Edge" = "Envelope PRC10 Long Edge";
 "Envelope PRC2" = "Envelope PRC2";
+"Envelope PRC2 Long Edge" = "Envelope PRC2 Long Edge";
 "Envelope PRC3" = "Envelope PRC3";
+"Envelope PRC3 Long Edge" = "Envelope PRC3 Long Edge";
 "Envelope PRC4" = "Envelope PRC4";
-"Envelope PRC5" = "Envelope PRC5";
+"Envelope PRC4 Long Edge" = "Envelope PRC4 Long Edge";
+"Envelope PRC5 Long Edge" = "Envelope PRC5 Long Edge";
 "Envelope PRC5PRC5" = "Envelope PRC5PRC5";
 "Envelope PRC6" = "Envelope PRC6";
+"Envelope PRC6 Long Edge" = "Envelope PRC6 Long Edge";
 "Envelope PRC7" = "Envelope PRC7";
+"Envelope PRC7 Long Edge" = "Envelope PRC7 Long Edge";
 "Envelope PRC8" = "Envelope PRC8";
+"Envelope PRC8 Long Edge" = "Envelope PRC8 Long Edge";
 "Envelope PRC9" = "Envelope PRC9";
+"Envelope PRC9 Long Edge" = "Envelope PRC9 Long Edge";
 "Envelope Personal" = "Envelope Personal";
 "Envelope You4" = "Envelope You4";
+"Envelope You4 Long Edge" = "Envelope You4 Long Edge";
 "Epson" = "Epson";
 "Error Policy" = "Error Policy";
+"Error sending raster data." = "Error sending raster data.";
 "Error: need hostname after \"-h\" option." = "Error: need hostname after \"-h\" option.";
 "Every 10 Labels" = "Every 10 Labels";
 "Every 2 Labels" = "Every 2 Labels";
 "FanFold German" = "FanFold German";
 "FanFold Legal German" = "FanFold Legal German";
 "Fanfold US" = "Fanfold US";
+"File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d).";
+"File \"%s\" is a directory." = "File \"%s\" is a directory.";
+"File \"%s\" not available: %s" = "File \"%s\" not available: %s";
+"File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "File \"%s\" permissions OK (0%o/uid=%d/gid=%d).";
 "File Folder" = "File Folder";
 "File Folder - 9/16 x 3 7/16\"" = "File Folder - 9/16 x 3 7/16\"";
 "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cupsd.conf\"." = "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cupsd.conf\".";
 "Internet Postage 3-Part" = "Internet Postage 3-Part";
 "Internet Postage 3-Part - 2 1/4 x 7\"" = "Internet Postage 3-Part - 2 1/4 x 7\"";
 "Internet Printing Protocol" = "Internet Printing Protocol";
-"JB0" = "JB0";
-"JB1" = "JB1";
-"JB10" = "JB10";
-"JB2" = "JB2";
-"JB3" = "JB3";
-"JB4" = "JB4";
-"JB6" = "JB6";
-"JB7" = "JB7";
-"JB8" = "JB8";
-"JB9" = "JB9";
 "JCL" = "JCL";
+"JIS B0" = "JIS B0";
+"JIS B1" = "JIS B1";
+"JIS B10" = "JIS B10";
+"JIS B2" = "JIS B2";
+"JIS B3" = "JIS B3";
+"JIS B4" = "JIS B4";
+"JIS B4 Long Edge" = "JIS B4 Long Edge";
+"JIS B5" = "JIS B5";
+"JIS B5 Long Edge" = "JIS B5 Long Edge";
+"JIS B6" = "JIS B6";
+"JIS B6 Long Edge" = "JIS B6 Long Edge";
+"JIS B7" = "JIS B7";
+"JIS B8" = "JIS B8";
+"JIS B9" = "JIS B9";
 "Job #%d cannot be restarted - no files." = "Job #%d cannot be restarted - no files.";
 "Job #%d does not exist." = "Job #%d does not exist.";
 "Job #%d is already aborted - can't cancel." = "Job #%d is already aborted - can't cancel.";
 "Large Address - 1 4/10 x 3 1/2\"" = "Large Address - 1 4/10 x 3 1/2\"";
 "LaserJet Series PCL 4/5" = "LaserJet Series PCL 4/5";
 "Letter Oversize" = "Letter Oversize";
+"Letter Oversize Long Edge" = "Letter Oversize Long Edge";
 "Light" = "Light";
 "Line longer than the maximum allowed (255 characters)" = "Line longer than the maximum allowed (255 characters)";
 "List Available Printers" = "List Available Printers";
 "Model:  name = %s\n        natural_language = %s\n        make-and-model = %s\n        device-id = %s" = "Model:  name = %s\n        natural_language = %s\n        make-and-model = %s\n        device-id = %s";
 "Modify Class" = "Modify Class";
 "Modify Printer" = "Modify Printer";
-"Monarch" = "Monarch";
 "Move All Jobs" = "Move All Jobs";
 "Move Job" = "Move Job";
 "Moved Permanently" = "Moved Permanently";
 "NULL PPD file pointer" = "NULL PPD file pointer";
 "Name OID uses indefinite length" = "Name OID uses indefinite length";
 "Nested classes are not allowed." = "Nested classes are not allowed.";
-"Network host \"%s\" is busy; will retry in %d seconds." = "Network host \"%s\" is busy; will retry in %d seconds.";
-"Network printer \"%s\" is busy." = "Network printer \"%s\" is busy.";
-"Network printer \"%s\" is not responding." = "Network printer \"%s\" is not responding.";
-"Network printer \"%s\" is unreachable at this time." = "Network printer \"%s\" is unreachable at this time.";
-"Network printer \"%s\" may not exist or is unavailable at this time." = "Network printer \"%s\" may not exist or is unavailable at this time.";
 "Never" = "Never";
 "New Stylus Color Series" = "New Stylus Color Series";
 "New Stylus Photo Series" = "New Stylus Photo Series";
 "Options Installed" = "Options Installed";
 "Options:" = "Options:";
 "Options: " = "Options: ";
+"Out of date PPD cache file." = "Out of date PPD cache file.";
 "Out of memory." = "Out of memory.";
 "Output Mode" = "Output Mode";
 "Output for printer %s is sent to %s" = "Output for printer %s is sent to %s";
 "PASS" = "PASS";
 "PCL Laser Printer" = "PCL Laser Printer";
 "PRC16K" = "PRC16K";
+"PRC16K Long Edge" = "PRC16K Long Edge";
 "PRC32K" = "PRC32K";
+"PRC32K Long Edge" = "PRC32K Long Edge";
 "PRC32K Oversize" = "PRC32K Oversize";
+"PRC32K Oversize Long Edge" = "PRC32K Oversize Long Edge";
 "Packet does not contain a Get-Response-PDU" = "Packet does not contain a Get-Response-PDU";
 "Packet does not start with SEQUENCE" = "Packet does not start with SEQUENCE";
 "ParamCustominCutInterval" = "ParamCustominCutInterval";
 "Port Monitor" = "Port Monitor";
 "PostScript Printer" = "PostScript Printer";
 "Postcard" = "Postcard";
-"Postcard Double" = "Postcard Double";
 "Postcard Double " = "Postcard Double ";
+"Postcard Double Long Edge" = "Postcard Double Long Edge";
+"Postcard Long Edge" = "Postcard Long Edge";
 "Print Density" = "Print Density";
 "Print Job:" = "Print Job:";
 "Print Mode" = "Print Mode";
 "Print file accepted - job ID %d." = "Print file accepted - job ID %d.";
 "Print file accepted - job ID unknown." = "Print file accepted - job ID unknown.";
 "Print file sent." = "Print file sent.";
-"Print file was not accepted: %s" = "Print file was not accepted: %s";
+"Print file was not accepted." = "Print file was not accepted.";
 "Printed For: " = "Printed For: ";
 "Printed From: " = "Printed From: ";
 "Printed On: " = "Printed On: ";
 "Printer Paused" = "Printer Paused";
 "Printer Settings" = "Printer Settings";
 "Printer busy, will retry in 10 seconds." = "Printer busy, will retry in 10 seconds.";
-"Printer busy; will retry in 10 seconds." = "Printer busy; will retry in 10 seconds.";
 "Printer busy; will retry in 30 seconds." = "Printer busy; will retry in 30 seconds.";
 "Printer did not respond after %d seconds." = "Printer did not respond after %d seconds.";
 "Printer does not support IPP/%d.%d, trying IPP/%s." = "Printer does not support IPP/%d.%d, trying IPP/%s.";
 "Switching Protocols" = "Switching Protocols";
 "Tabloid" = "Tabloid";
 "Tabloid Oversize" = "Tabloid Oversize";
+"Tabloid Oversize Long Edge" = "Tabloid Oversize Long Edge";
 "Tear" = "Tear";
 "Tear-Off" = "Tear-Off";
 "Tear-Off Adjust Position" = "Tear-Off Adjust Position";
 "The print file could not be opened." = "The print file could not be opened.";
 "The printer URI is incorrect or no longer exists." = "The printer URI is incorrect or no longer exists.";
 "The printer is almost out of ink." = "The printer is almost out of ink.";
+"The printer is busy." = "The printer is busy.";
 "The printer is low on toner." = "The printer is low on toner.";
 "The printer is not connected." = "The printer is not connected.";
 "The printer is not responding." = "The printer is not responding.";
 "The printer is out of ink." = "The printer is out of ink.";
 "The printer is out of toner." = "The printer is out of toner.";
+"The printer is unreachable at this time." = "The printer is unreachable at this time.";
+"The printer may not exist or is unavailable at this time." = "The printer may not exist or is unavailable at this time.";
 "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." = "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#).";
 "The printer or class does not exist." = "The printer or class does not exist.";
 "The printer or class is not shared." = "The printer or class is not shared.";
 "US Legal" = "US Legal";
 "US Legal Oversize" = "US Legal Oversize";
 "US Letter" = "US Letter";
+"US Letter Long Edge" = "US Letter Long Edge";
 "US Letter Oversize" = "US Letter Oversize";
+"US Letter Oversize Long Edge" = "US Letter Oversize Long Edge";
 "US Letter Small" = "US Letter Small";
 "USB Serial Port #%d" = "USB Serial Port #%d";
 "Unable to access cupsd.conf file:" = "Unable to access cupsd.conf file:";
 "Unable to add RSS subscription:" = "Unable to add RSS subscription:";
 "Unable to add class:" = "Unable to add class:";
-"Unable to add file to job: %s" = "Unable to add file to job: %s";
+"Unable to add document to print job." = "Unable to add document to print job.";
 "Unable to add job for destination \"%s\"." = "Unable to add job for destination \"%s\".";
 "Unable to add printer:" = "Unable to add printer:";
 "Unable to allocate memory for file types." = "Unable to allocate memory for file types.";
 "Unable to allocate memory for page info" = "Unable to allocate memory for page info";
 "Unable to allocate memory for pages array" = "Unable to allocate memory for pages array";
 "Unable to cancel RSS subscription:" = "Unable to cancel RSS subscription:";
-"Unable to cancel job: %s" = "Unable to cancel job: %s";
+"Unable to cancel print job." = "Unable to cancel print job.";
 "Unable to change printer-is-shared attribute:" = "Unable to change printer-is-shared attribute:";
 "Unable to change printer:" = "Unable to change printer:";
 "Unable to change server settings:" = "Unable to change server settings:";
 "Unable to generate compressed print file" = "Unable to generate compressed print file";
 "Unable to get class list:" = "Unable to get class list:";
 "Unable to get class status:" = "Unable to get class status:";
-"Unable to get job attributes: %s" = "Unable to get job attributes: %s";
 "Unable to get list of printer drivers:" = "Unable to get list of printer drivers:";
+"Unable to get print job status." = "Unable to get print job status.";
 "Unable to get printer attributes:" = "Unable to get printer attributes:";
 "Unable to get printer list:" = "Unable to get printer list:";
+"Unable to get printer status." = "Unable to get printer status.";
 "Unable to get printer status:" = "Unable to get printer status:";
-"Unable to get printer status: %s" = "Unable to get printer status: %s";
 "Unable to install Windows 2000 printer driver files (%d)." = "Unable to install Windows 2000 printer driver files (%d).";
 "Unable to install Windows 9x printer driver files (%d)." = "Unable to install Windows 9x printer driver files (%d).";
 "Unable to locate printer \"%s\"." = "Unable to locate printer \"%s\".";
 "Unsupported number-up value %d, using number-up=1." = "Unsupported number-up value %d, using number-up=1.";
 "Unsupported number-up-layout value %s, using number-up-layout=lrtb." = "Unsupported number-up-layout value %s, using number-up-layout=lrtb.";
 "Unsupported page-border value %s, using page-border=none." = "Unsupported page-border value %s, using page-border=none.";
+"Unsupported raster data." = "Unsupported raster data.";
 "Unsupported value type" = "Unsupported value type";
 "Upgrade Required" = "Upgrade Required";
 "Usage:\n\n    lpadmin [-h server] -d destination\n    lpadmin [-h server] -x destination\n    lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n                       [-r remove-class] [-v device] [-D description]\n                       [-P ppd-file] [-o name=value]\n                       [-u allow:user,user] [-u deny:user,user]" = "Usage:\n\n    lpadmin [-h server] -d destination\n    lpadmin [-h server] -x destination\n    lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n                       [-r remove-class] [-v device] [-D description]\n                       [-P ppd-file] [-o name=value]\n                       [-u allow:user,user] [-u deny:user,user]";
index e62f94e22ff6863188bed8acf98037c06dd4a743..f2624954993bd50033eeff03cc565d38cbf166ca 100644 (file)
@@ -1,9 +1,9 @@
 .\"
 .\" "$Id: backend.man 7810 2008-07-29 01:11:15Z mike $"
 .\"
-.\"   Backend man page for the Common UNIX Printing System (CUPS).
+.\"   Backend man page for CUPS.
 .\"
-.\"   Copyright 2007-2009 by Apple Inc.
+.\"   Copyright 2007-2011 by Apple Inc.
 .\"   Copyright 1997-2006 by Easy Software Products.
 .\"
 .\"   These coded instructions, statements, and computer programs are the
@@ -12,7 +12,7 @@
 .\"   which should have been included with this file.  If this file is
 .\"   file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH backend 7 "CUPS" "12 May 2009" "Apple Inc."
+.TH backend 7 "CUPS" "15 April 2011" "Apple Inc."
 
 .SH NAME
 backend \- cups backend transmission interfaces
@@ -168,6 +168,19 @@ The print file was not successfully transmitted because one or
 more attributes are not supported. The scheduler will respond to
 this by canceling the job.
 
+.TP 5
+6 (CUPS_BACKEND_RETRY)
+.br
+The print file was not successfully transmitted because of a temporary issue.
+The scheduler will retry the job at a future time - other jobs may print before
+this one.
+
+.TP 5
+7 (CUPS_BACKEND_RETRY_CURRENT)
+.br
+The print file was not successfully transmitted because of a temporary issue.
+The scheduler will retry the job immediately without allowing intervening jobs.
+
 .PP
 All other exit code values are reserved.
 
@@ -177,7 +190,7 @@ All other exit code values are reserved.
 http://localhost:631/help
 
 .SH COPYRIGHT
-Copyright 2007-2009 by Apple Inc.
+Copyright 2007-2011 by Apple Inc.
 .\"
 .\" End of "$Id: backend.man 7810 2008-07-29 01:11:15Z mike $".
 .\"
index 0915fde6e73248ede290f338525087f290bc32fe..5f48964f62c2f081ead5e9d1a5b68c20247aff61 100644 (file)
@@ -3,13 +3,22 @@
 dbus.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.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/array.h ../cups/language.h
-mailto.o: ../cups/language-private.h ../cups/transcode.h
-mailto.o: ../cups/string-private.h ../config.h
+mailto.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
+mailto.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h
+mailto.o: ../cups/language.h ../cups/string-private.h ../config.h
+mailto.o: ../cups/debug-private.h ../cups/ppd-private.h ../cups/ppd.h
+mailto.o: ../cups/cups.h ../cups/pwg-private.h ../cups/http-private.h
+mailto.o: ../cups/http.h ../cups/md5-private.h ../cups/ipp-private.h
+mailto.o: ../cups/ipp.h ../cups/language-private.h ../cups/transcode.h
+mailto.o: ../cups/thread-private.h
 rss.o: ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.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/array.h ../cups/language.h
-testnotify.o: ../cups/language.h ../cups/string-private.h ../config.h
+testnotify.o: ../cups/cups-private.h ../cups/cups.h ../cups/file.h
+testnotify.o: ../cups/versioning.h ../cups/ipp.h ../cups/http.h
+testnotify.o: ../cups/array.h ../cups/language.h ../cups/string-private.h
+testnotify.o: ../config.h ../cups/debug-private.h ../cups/ppd-private.h
+testnotify.o: ../cups/ppd.h ../cups/cups.h ../cups/pwg-private.h
+testnotify.o: ../cups/http-private.h ../cups/http.h ../cups/md5-private.h
+testnotify.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/language-private.h
+testnotify.o: ../cups/transcode.h ../cups/thread-private.h
index 5db08bd39c6d206c8a6be33443601d88a9230829..2d8e171ae11c430e6ce4fbfd149533089e539c33 100644 (file)
@@ -179,29 +179,24 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
     return;
   }
 
-#ifdef AF_INET6
-  if (lis->address.addr.sa_family == AF_INET6)
-  {
-   /*
-    * Save the connected port number...
-    */
+ /*
+  * Save the connected port number...
+  */
 
-    con->http.hostaddr->ipv6.sin6_port = lis->address.ipv6.sin6_port;
+  _httpAddrSetPort(con->http.hostaddr, _httpAddrPort(&(lis->address)));
 
-   /*
-    * Convert IPv4 over IPv6 addresses (::ffff:n.n.n.n) to IPv4 forms we
-    * can more easily use...
-    */
+#ifdef AF_INET6
+ /*
+  * Convert IPv4 over IPv6 addresses (::ffff:n.n.n.n) to IPv4 forms we
+  * can more easily use...
+  */
 
-    if (con->http.hostaddr->ipv6.sin6_addr.s6_addr32[0] == 0 &&
-        con->http.hostaddr->ipv6.sin6_addr.s6_addr32[1] == 0 &&
-        ntohl(con->http.hostaddr->ipv6.sin6_addr.s6_addr32[2]) == 0xffff)
-      con->http.hostaddr->ipv6.sin6_addr.s6_addr32[2] = 0;
-  }
-  else
+  if (lis->address.addr.sa_family == AF_INET6 &&
+      con->http.hostaddr->ipv6.sin6_addr.s6_addr32[0] == 0 &&
+      con->http.hostaddr->ipv6.sin6_addr.s6_addr32[1] == 0 &&
+      ntohl(con->http.hostaddr->ipv6.sin6_addr.s6_addr32[2]) == 0xffff)
+    con->http.hostaddr->ipv6.sin6_addr.s6_addr32[2] = 0;
 #endif /* AF_INET6 */
-  if (lis->address.addr.sa_family == AF_INET)
-    con->http.hostaddr->ipv4.sin_port = lis->address.ipv4.sin_port;
 
  /*
   * Check the number of clients on the same address...
@@ -357,22 +352,16 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
   }
 #endif /* HAVE_TCPD_H */
 
-#ifdef AF_INET6
-  if (con->http.hostaddr->addr.sa_family == AF_INET6)
-    cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAcceptClient: %d from %s:%d (IPv6)",
-                    con->http.fd, con->http.hostname,
-                   ntohs(con->http.hostaddr->ipv6.sin6_port));
-  else
-#endif /* AF_INET6 */
 #ifdef AF_LOCAL
   if (con->http.hostaddr->addr.sa_family == AF_LOCAL)
     cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAcceptClient: %d from %s (Domain)",
                     con->http.fd, con->http.hostname);
   else
 #endif /* AF_LOCAL */
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAcceptClient: %d from %s:%d (IPv4)",
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAcceptClient: %d from %s:%d (IPv%d)",
                   con->http.fd, con->http.hostname,
-                 ntohs(con->http.hostaddr->ipv4.sin_port));
+                 _httpAddrPort(con->http.hostaddr),
+                 _httpAddrFamily(con->http.hostaddr) == AF_INET ? 4 : 6);
 
  /*
   * Get the local address the client connected to...
@@ -387,38 +376,23 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
     strcpy(con->servername, "localhost");
     con->serverport = LocalPort;
   }
+#ifdef AF_LOCAL
+  else if (_httpAddrFamily(&temp) == AF_LOCAL)
+  {
+    strcpy(con->servername, "localhost");
+    con->serverport = LocalPort;
+  }
+#endif /* AF_LOCAL */
   else
   {
-#ifdef AF_INET6
-    if (temp.addr.sa_family == AF_INET6)
-    {
-      if (httpAddrLocalhost(&temp))
-        strlcpy(con->servername, "localhost", sizeof(con->servername));
-      else if (HostNameLookups || RemotePort)
-        httpAddrLookup(&temp, con->servername, sizeof(con->servername));
-      else
-        httpAddrString(&temp, con->servername, sizeof(con->servername));
-
-      con->serverport = ntohs(lis->address.ipv6.sin6_port);
-    }
+    if (httpAddrLocalhost(&temp))
+      strlcpy(con->servername, "localhost", sizeof(con->servername));
+    else if (HostNameLookups || RemotePort)
+      httpAddrLookup(&temp, con->servername, sizeof(con->servername));
     else
-#endif /* AF_INET6 */
-    if (temp.addr.sa_family == AF_INET)
-    {
-      if (httpAddrLocalhost(&temp))
-        strlcpy(con->servername, "localhost", sizeof(con->servername));
-      else if (HostNameLookups || RemotePort)
-        httpAddrLookup(&temp, con->servername, sizeof(con->servername));
-      else
-        httpAddrString(&temp, con->servername, sizeof(con->servername));
+      httpAddrString(&temp, con->servername, sizeof(con->servername));
 
-      con->serverport = ntohs(lis->address.ipv4.sin_port);
-    }
-    else
-    {
-      strcpy(con->servername, "localhost");
-      con->serverport = LocalPort;
-    }
+    con->serverport = _httpAddrPort(&(lis->address));
   }
 
   cupsArrayAdd(Clients, con);
@@ -3406,6 +3380,7 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
   {
     cupsdLogMessage(CUPSD_LOG_DEBUG, "Received %d peer certificates!",
                    (int)CFArrayGetCount(peerCerts));
+    CFRelease(peerCerts);
   }
   else
     cupsdLogMessage(CUPSD_LOG_DEBUG, "Received NO peer certificates!");
@@ -3505,7 +3480,7 @@ get_cdsa_certificate(
 
     servername = CFStringCreateWithCString(kCFAllocatorDefault, localname,
                                           kCFStringEncodingUTF8);
-  
+
     CFRelease(policy);
 
     policy = SecPolicyCreateSSL(1, servername);
@@ -4591,7 +4566,7 @@ make_certificate(cupsd_client_t *con)     /* I - Client connection */
   }
   else
     servername = con->servername;
-       
+
  /*
   * Run the "certtool" command to generate a self-signed certificate...
   */
index 8c0bd310b78dfafff00a507c04895203a2b7c786..fceede104322f1d0151cb6c8a203ac7b1edd30d8 100644 (file)
@@ -843,6 +843,19 @@ cupsdReadConfiguration(void)
     openlog("cupsd", LOG_PID | LOG_NOWAIT | LOG_NDELAY, LOG_LPR);
 #endif /* HAVE_VSYSLOG */
 
+ /*
+  * Make sure each of the log files exists and gets rotated as necessary...
+  */
+
+  if (!strcmp(AccessLog, "syslog"))
+    cupsdCheckLogFile(&AccessFile, AccessLog);
+
+  if (!strcmp(ErrorLog, "syslog"))
+    cupsdCheckLogFile(&ErrorFile, ErrorLog);
+
+  if (!strcmp(PageLog, "syslog"))
+    cupsdCheckLogFile(&PageFile, PageLog);
+
  /*
   * Log the configuration file that was used...
   */
@@ -2618,29 +2631,17 @@ read_configuration(cups_file_t *fp)     /* I - File to read from */
 
        httpAddrString(&lis->address, temp, sizeof(temp));
 
-#ifdef AF_INET6
-        if (lis->address.addr.sa_family == AF_INET6)
-          cupsdLogMessage(CUPSD_LOG_INFO, "Listening to %s:%d (IPv6)", temp,
-                          ntohs(lis->address.ipv6.sin6_port));
-       else
-#endif /* AF_INET6 */
 #ifdef AF_LOCAL
         if (lis->address.addr.sa_family == AF_LOCAL)
           cupsdLogMessage(CUPSD_LOG_INFO, "Listening to %s (Domain)", temp);
        else
 #endif /* AF_LOCAL */
-       cupsdLogMessage(CUPSD_LOG_INFO, "Listening to %s:%d (IPv4)", temp,
-                        ntohs(lis->address.ipv4.sin_port));
+       cupsdLogMessage(CUPSD_LOG_INFO, "Listening to %s:%d (IPv%d)", temp,
+                        _httpAddrPort(&(lis->address)),
+                       _httpAddrFamily(&(lis->address)) == AF_INET ? 4 : 6);
 
         if (!httpAddrLocalhost(&(lis->address)))
-       {
-#ifdef AF_INET6
-         if (lis->address.addr.sa_family == AF_INET6)
-           RemotePort = ntohs(lis->address.ipv6.sin6_port);
-         else
-#endif /* AF_INET6 */
-         RemotePort = ntohs(lis->address.ipv4.sin_port);
-       }
+         RemotePort = _httpAddrPort(&(lis->address));
       }
 
      /*
@@ -2706,7 +2707,7 @@ read_configuration(cups_file_t *fp)       /* I - File to read from */
         */
 
        for (addr = addrlist; addr; addr = addr->next)
-         if (addr->addr.addr.sa_family == AF_INET)
+         if (_httpAddrFamily(&(addr->addr)) == AF_INET)
            break;
 
        if (addr)
@@ -2716,7 +2717,7 @@ read_configuration(cups_file_t *fp)       /* I - File to read from */
 
          cupsdLogMessage(CUPSD_LOG_INFO,
                          "Sending browsing info to %s:%d (IPv4)",
-                         temp, ntohs(dira->to.ipv4.sin_port));
+                         temp, _httpAddrPort(&(dira->to)));
 
          NumBrowsers ++;
        }
@@ -3048,7 +3049,7 @@ read_configuration(cups_file_t *fp)       /* I - File to read from */
          httpAddrString(&(relay->to), temp, sizeof(temp));
 
          cupsdLogMessage(CUPSD_LOG_INFO, "Relaying from %s to %s:%d (IPv4)",
-                         value, temp, ntohs(relay->to.ipv4.sin_port));
+                         value, temp, _httpAddrPort(&(relay->to)));
 
          NumRelays ++;
        }
index 052725cce11b2b03361c42a64bf7a1d610b08e6d..4d669027a67158b22f000c790062a3cf3430bafc 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Configuration file definitions for the CUPS scheduler.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -263,12 +263,16 @@ VAR char          *SystemGroupAuthKey     VALUE(NULL);
  */
 
 extern void    cupsdAddAlias(cups_array_t *aliases, const char *name);
+extern int     cupsdCheckLogFile(cups_file_t **lf, const char *logname);
 extern int     cupsdCheckPermissions(const char *filename,
                                      const char *suffix, int mode,
                                      int user, int group, int is_dir,
                                      int create_dir);
+extern int     cupsdCheckProgram(const char *filename, cupsd_printer_t *p);
 extern void    cupsdFreeAliases(cups_array_t *aliases);
 extern char    *cupsdGetDateTime(struct timeval *t, cupsd_time_t format);
+extern void    cupsdLogFCMessage(void *context, _cups_fc_result_t result,
+                                 const char *message);
 #ifdef HAVE_GSSAPI
 extern int     cupsdLogGSSMessage(int level, int major_status,
                                   int minor_status,
index a7195985d26f653e2c759185eb902893720cb262..4e3df703a1e5059340f4bc6bc7b1542a71cc5fe1 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Device scanning mini-daemon for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2006 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -767,6 +767,10 @@ start_backend(const char *name,            /* I - Backend to run */
 
   snprintf(program, sizeof(program), "%s/backend/%s", server_bin, name);
 
+  if (_cupsFileCheck(program, _CUPS_FILE_CHECK_PROGRAM, !geteuid(),
+                     _cupsFileCheckFilter, NULL))
+    return (-1);
+
   backend = backends + num_backends;
 
   argv[0] = (char *)name;
index 8f78df3b865f066a8e0653c3ffead2f82d103925..2bbc50a219e1c5f81b7f2863a9b9366d0d1b5a57 100644 (file)
@@ -543,7 +543,10 @@ cat_static(const char *name,               /* I - PPD name */
   const char   *datadir;               /* CUPS_DATADIR env var */
   char         line[1024],             /* Line/filename */
                message[2048];          /* status-message */
-
+#ifdef __APPLE__
+  const char   *printerDriver,         /* Pointer to .printerDriver extension */
+               *slash;                 /* Pointer to next slash */
+#endif /* __APPLE__ */
 
   if (name[0] == '/' || strstr(name, "../") || strstr(name, "/.."))
   {
@@ -575,7 +578,19 @@ cat_static(const char *name,               /* I - PPD name */
 
 #ifdef __APPLE__
   if (!strncmp(name, "System/Library/Printers/PPDs/Contents/Resources/", 48) ||
-      !strncmp(name, "Library/Printers/PPDs/Contents/Resources/", 41))
+      !strncmp(name, "Library/Printers/PPDs/Contents/Resources/", 41) ||
+      (!strncmp(name, "System/Library/Printers/", 24) &&
+       (printerDriver =
+           strstr(name + 24,
+                  ".printerDriver/Contents/Resources/PPDs")) != NULL &&
+       (slash = strchr(name + 24, '/')) != NULL &&
+       slash > printerDriver) ||
+      (!strncmp(name, "Library/Printers/", 17) &&
+       (printerDriver =
+           strstr(name + 17,
+                  ".printerDriver/Contents/Resources/PPDs")) != NULL &&
+       (slash = strchr(name + 17, '/')) != NULL &&
+       slash > printerDriver))
   {
    /*
     * Map ppd-name to Mac OS X standard locations...
@@ -583,7 +598,6 @@ cat_static(const char *name,                /* I - PPD name */
 
     snprintf(line, sizeof(line), "/%s", name);
   }
-  else
 
 #elif defined(__linux)
   if (!strncmp(name, "lsb/usr/", 8))
@@ -872,10 +886,14 @@ list_ppds(int        request_id,  /* I - Request ID */
   * Load PPDs from standard Mac OS X locations...
   */
 
+  load_ppds("/Library/Printers",
+            "Library/Printers", 0);
   load_ppds("/Library/Printers/PPDs/Contents/Resources",
             "Library/Printers/PPDs/Contents/Resources", 0);
   load_ppds("/Library/Printers/PPDs/Contents/Resources/en.lproj",
             "Library/Printers/PPDs/Contents/Resources/en.lproj", 0);
+  load_ppds("/System/Library/Printers",
+            "System/Library/Printers", 0);
   load_ppds("/System/Library/Printers/PPDs/Contents/Resources",
             "System/Library/Printers/PPDs/Contents/Resources", 0);
   load_ppds("/System/Library/Printers/PPDs/Contents/Resources/en.lproj",
@@ -1606,9 +1624,14 @@ load_drivers(cups_array_t *include,      /* I - Drivers to include */
     * Run the driver with no arguments and collect the output...
     */
 
-    argv[0] = dent->filename;
     snprintf(filename, sizeof(filename), "%s/%s", drivers, dent->filename);
 
+    if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_PROGRAM, !geteuid(),
+                       _cupsFileCheckFilter, NULL))
+      continue;
+
+    argv[0] = dent->filename;
+
     if ((fp = cupsdPipeCommand(&pid, filename, argv, 0)) != NULL)
     {
       while (cupsFileGets(fp, line, sizeof(line)))
@@ -1807,6 +1830,14 @@ load_ppds(const char *d,         /* I - Actual directory */
   memcpy(dinfoptr, &dinfo, sizeof(struct stat));
   cupsArrayAdd(Inodes, dinfoptr);
 
+ /*
+  * Check permissions...
+  */
+
+  if (_cupsFileCheck(d, _CUPS_FILE_CHECK_DIRECTORY, !geteuid(),
+                    _cupsFileCheckFilter, NULL))
+    return (0);
+
   if ((dir = cupsDirOpen(d)) == NULL)
   {
     if (errno != ENOENT)
@@ -1846,11 +1877,29 @@ load_ppds(const char *d,                /* I - Actual directory */
       */
 
       if (descend)
+      {
        if (!load_ppds(filename, name, 1))
        {
          cupsDirClose(dir);
          return (1);
        }
+      }
+      else if ((ptr = filename + strlen(filename) - 14) > filename &&
+              !strcmp(ptr, ".printerDriver"))
+      {
+       /*
+        * Load PPDs in a printer driver bundle.
+       */
+
+       if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_DIRECTORY, !geteuid(),
+                          _cupsFileCheckFilter, NULL))
+         continue;
+
+       strlcat(filename, "/Contents/Resources/PPDs", sizeof(filename));
+       strlcat(name, "/Contents/Resources/PPDs", sizeof(name));
+
+       load_ppds(filename, name, 0);
+      }
 
       continue;
     }
@@ -1863,6 +1912,9 @@ load_ppds(const char *d,          /* I - Actual directory */
 
       continue;
     }
+    else if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_FILE_ONLY, !geteuid(),
+                           _cupsFileCheckFilter, NULL))
+      continue;
 
    /*
     * See if this file has been scanned before...
index 22bdd87a64a50e8426dd0c7ab4c1b3c978cdabb7..0081fb4c2849352fd34d74de51f08a88a7a97547 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Sandbox helper for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *
  *   These coded instructions, statements, and computer programs are the
  *   property of Apple Inc. and are protected by Federal copyright
@@ -40,6 +40,7 @@ int                                   /* O - Exit status */
 main(int  argc,                                /* I - Number of command-line args */
      char *argv[])                     /* I - Command-line arguments */
 {
+  int  i;                              /* Looping var */
 #ifdef HAVE_SANDBOX_H
   char *sandbox_error = NULL;          /* Sandbox error, if any */
 #endif /* HAVE_SANDBOX_H */
@@ -61,7 +62,8 @@ main(int  argc,                               /* I - Number of command-line args */
   * Run in a separate security profile...
   */
 
-  if (sandbox_init(argv[1], SANDBOX_NAMED_EXTERNAL, &sandbox_error))
+  if (strcmp(argv[1], "none") &&
+      sandbox_init(argv[1], SANDBOX_NAMED_EXTERNAL, &sandbox_error))
   {
     fprintf(stderr, "DEBUG: sandbox_init failed: %s (%s)\n", sandbox_error,
            strerror(errno));
@@ -70,6 +72,20 @@ main(int  argc,                              /* I - Number of command-line args */
   }
 #endif /* HAVE_SANDBOX_H */
 
+ /*
+  * Close file descriptors we don't need (insurance):
+  *
+  * 0   = stdin
+  * 1   = stdout
+  * 2   = stderr
+  * 3   = back-channel
+  * 4   = side-channel
+  * 5-N = unused
+  */
+
+  for (i = 5; i < 1024; i ++)
+    close(i);
+
  /*
   * Execute the program...
   */
index cc4cbbbf07d26ea35dfd3df577473d7342b673fe..d3ea64ef8fa517c1db38704f06ecce872d683121 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Polling daemon for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
index a443496e9e0988460e6d11d5feead34c0b5899fa..48fb32e8b18bda394d1989c044a9d701570c5311 100644 (file)
@@ -19,6 +19,7 @@
  */
 
 #include <cups/cups-private.h>
+#include <cups/file-private.h>
 
 #include <limits.h>
 #include <time.h>
index ad05fe4c3818266b42af443623e9c3afd9daf6d7..ca3c9cd8f31705e4392f1f2902456924e0f5e54c 100644 (file)
@@ -1594,16 +1594,8 @@ cupsdStartBrowsing(void)
        if (httpAddrLocalhost(&(lis->address)))
          continue;
 
-       if (lis->address.addr.sa_family == AF_INET)
-       {
-         DNSSDPort = ntohs(lis->address.ipv4.sin_port);
-         break;
-       }
-       else if (lis->address.addr.sa_family == AF_INET6)
-       {
-         DNSSDPort = ntohs(lis->address.ipv6.sin6_port);
-         break;
-       }
+        DNSSDPort = _httpAddrPort(&(lis->address));
+       break;
       }
 
      /*
index 9f734da56dd38229442499da9a2888dacf8c85bf..b708fa368cfff1e19657ad84e7e96f2372685120 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   File type conversion routines for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
  *
  * Contents:
  *
- *   mimeAddFilter()    - Add a filter to the current MIME database.
- *   mimeFilter()       - Find the fastest way to convert from one type to
- *                        another.
- *   mimeFilter2()      - Find the fastest way to convert from one type to
- *                        another, including the file size.
- *   mimeFilterLookup() - Lookup a filter.
- *   compare_filters()  - Compare two filters.
- *   find_filters()     - Find the filters to convert from one type to another.
+ *   mimeAddFilter()        - Add a filter to the current MIME database.
+ *   mimeFilter()           - Find the fastest way to convert from one type to
+ *                            another.
+ *   mimeFilter2()          - Find the fastest way to convert from one type to
+ *                            another, including the file size.
+ *   mimeFilterLookup()     - Lookup a filter.
+ *   mime_compare_filters() - Compare two filters.
+ *   mime_compare_srcs()    - Compare two filter source types.
+ *   mime_find_filters()    - Find the filters to convert from one type to
+ *                            another.
  */
 
 /*
@@ -48,9 +50,9 @@ typedef struct _mime_typelist_s               /**** List of source types ****/
  * Local functions...
  */
 
-static int             compare_filters(mime_filter_t *, mime_filter_t *);
-static int             compare_srcs(mime_filter_t *, mime_filter_t *);
-static cups_array_t    *find_filters(mime_t *mime, mime_type_t *src,
+static int             mime_compare_filters(mime_filter_t *, mime_filter_t *);
+static int             mime_compare_srcs(mime_filter_t *, mime_filter_t *);
+static cups_array_t    *mime_find_filters(mime_t *mime, mime_type_t *src,
                                      size_t srcsize, mime_type_t *dst,
                                      int *cost, _mime_typelist_t *visited);
 
@@ -69,12 +71,21 @@ mimeAddFilter(mime_t      *mime,    /* I - MIME database */
   mime_filter_t        *temp;                  /* New filter */
 
 
+  DEBUG_printf(("mimeAddFilter(mime=%p, src=%p(%s/%s), dst=%p(%s/%s), cost=%d, "
+                "filter=\"%s\")", mime,
+               src, src ? src->super : "???", src ? src->type : "???",
+               dst, dst ? dst->super : "???", dst ? dst->type : "???",
+               cost, filter));
+               
  /*
   * Range-check the input...
   */
 
   if (!mime || !src || !dst || !filter)
+  {
+    DEBUG_puts("1mimeAddFilter: Returning NULL.");
     return (NULL);
+  }
 
  /*
   * See if we already have an existing filter for the given source and
@@ -90,6 +101,8 @@ mimeAddFilter(mime_t      *mime,     /* I - MIME database */
 
     if (temp->cost > cost)
     {
+      DEBUG_printf(("1mimeAddFilter: Replacing filter \"%s\", cost %d.",
+                    temp->filter, temp->cost));
       temp->cost = cost;
       strlcpy(temp->filter, filter, sizeof(temp->filter));
     }
@@ -101,7 +114,7 @@ mimeAddFilter(mime_t      *mime,    /* I - MIME database */
     */
 
     if (!mime->filters)
-      mime->filters = cupsArrayNew((cups_array_func_t)compare_filters, NULL);
+      mime->filters = cupsArrayNew((cups_array_func_t)mime_compare_filters, NULL);
 
     if (!mime->filters)
       return (NULL);
@@ -118,13 +131,17 @@ mimeAddFilter(mime_t      *mime,  /* I - MIME database */
     temp->cost = cost;
     strlcpy(temp->filter, filter, sizeof(temp->filter));
 
+    DEBUG_puts("1mimeAddFilter: Adding new filter.");
     cupsArrayAdd(mime->filters, temp);
+    cupsArrayAdd(mime->srcs, temp);
   }
 
  /*
   * Return the new/updated filter...
   */
 
+  DEBUG_printf(("1mimeAddFilter: Returning %p.", temp));
+
   return (temp);
 }
 
@@ -140,9 +157,9 @@ mimeFilter(mime_t      *mime,               /* I - MIME database */
           int         *cost)           /* O - Cost of filters */
 {
   DEBUG_printf(("mimeFilter(mime=%p, src=%p(%s/%s), dst=%p(%s/%s), "
-                "cost=%p(%d))",
-               mime, src, src ? src->super : "?", src ? src->type : "?",
-               dst, dst ? dst->super : "?", dst ? dst->type : "?",
+                "cost=%p(%d))", mime,
+               src, src ? src->super : "???", src ? src->type : "???",
+               dst, dst ? dst->super : "???", dst ? dst->type : "???",
                cost, cost ? *cost : 0));
 
   return (mimeFilter2(mime, src, 0, dst, cost));
@@ -161,15 +178,19 @@ mimeFilter2(mime_t      *mime,            /* I - MIME database */
            mime_type_t *dst,           /* I - Destination file type */
            int         *cost)          /* O - Cost of filters */
 {
+  cups_array_t *filters;               /* Array of filters to run */
+
+
  /*
   * Range-check the input...
   */
 
   DEBUG_printf(("mimeFilter2(mime=%p, src=%p(%s/%s), srcsize=" CUPS_LLFMT
-                ", dst=%p(%s/%s), cost=%p(%d))",
-               mime, src, src ? src->super : "?", src ? src->type : "?",
-               CUPS_LLCAST srcsize, dst, dst ? dst->super : "?",
-               dst ? dst->type : "?", cost, cost ? *cost : 0));
+                ", dst=%p(%s/%s), cost=%p(%d))", mime,
+               src, src ? src->super : "???", src ? src->type : "???",
+               CUPS_LLCAST srcsize,
+               dst, dst ? dst->super : "???", dst ? dst->type : "???",
+               cost, cost ? *cost : 0));
 
   if (cost)
     *cost = 0;
@@ -185,7 +206,7 @@ mimeFilter2(mime_t      *mime,              /* I - MIME database */
   {
     mime_filter_t      *current;       /* Current filter */
 
-    mime->srcs = cupsArrayNew((cups_array_func_t)compare_srcs, NULL);
+    mime->srcs = cupsArrayNew((cups_array_func_t)mime_compare_srcs, NULL);
 
     for (current = mimeFirstFilter(mime);
          current;
@@ -197,7 +218,24 @@ mimeFilter2(mime_t      *mime,             /* I - MIME database */
   * Find the filters...
   */
 
-  return (find_filters(mime, src, srcsize, dst, cost, NULL));
+  filters = mime_find_filters(mime, src, srcsize, dst, cost, NULL);
+
+  DEBUG_printf(("1mimeFilter2: Returning %d filter(s), cost %d:",
+                cupsArrayCount(filters), cost ? *cost : -1));
+#ifdef DEBUG
+  {
+    mime_filter_t      *filter;        /* Current filter */
+
+    for (filter = (mime_filter_t *)cupsArrayFirst(filters);
+         filter;
+        filter = (mime_filter_t *)cupsArrayNext(filters))
+      DEBUG_printf(("1mimeFilter2: %s/%s %s/%s %d %s", filter->src->super,
+                    filter->src->type, filter->dst->super, filter->dst->type,
+                   filter->cost, filter->filter));
+  }
+#endif /* DEBUG */
+
+  return (filters);
 }
 
 
@@ -210,23 +248,31 @@ mimeFilterLookup(mime_t      *mime,       /* I - MIME database */
                  mime_type_t *src,     /* I - Source type */
                  mime_type_t *dst)     /* I - Destination type */
 {
-  mime_filter_t        key;                    /* Key record for filter search */
+  mime_filter_t        key,                    /* Key record for filter search */
+               *filter;                /* Matching filter */
+
 
+  DEBUG_printf(("2mimeFilterLookup(mime=%p, src=%p(%s/%s), dst=%p(%s/%s))", mime,
+                src, src ? src->super : "???", src ? src->type : "???",
+               dst, dst ? dst->super : "???", dst ? dst->type : "???"));
 
   key.src = src;
   key.dst = dst;
 
-  return ((mime_filter_t *)cupsArrayFind(mime->filters, &key));
+  filter = (mime_filter_t *)cupsArrayFind(mime->filters, &key);
+  DEBUG_printf(("3mimeFilterLookup: Returning %p(%s).", filter,
+                filter ? filter->filter : "???"));
+  return (filter);
 }
 
 
 /*
- * 'compare_filters()' - Compare two filters.
+ * 'mime_compare_filters()' - Compare two filters.
  */
 
 static int                             /* O - Comparison result */
-compare_filters(mime_filter_t *f0,     /* I - First filter */
-                mime_filter_t *f1)     /* I - Second filter */
+mime_compare_filters(mime_filter_t *f0,        /* I - First filter */
+                     mime_filter_t *f1)        /* I - Second filter */
 {
   int  i;                              /* Result of comparison */
 
@@ -241,12 +287,12 @@ compare_filters(mime_filter_t *f0,        /* I - First filter */
 
 
 /*
- * 'compare_srcs()' - Compare two srcs...
+ * 'mime_compare_srcs()' - Compare two filter source types.
  */
 
 static int                             /* O - Comparison result */
-compare_srcs(mime_filter_t *f0,                /* I - First filter */
-             mime_filter_t *f1)                /* I - Second filter */
+mime_compare_srcs(mime_filter_t *f0,   /* I - First filter */
+                  mime_filter_t *f1)   /* I - Second filter */
 {
   int  i;                              /* Result of comparison */
 
@@ -259,16 +305,17 @@ compare_srcs(mime_filter_t *f0,           /* I - First filter */
 
 
 /*
- * 'find_filters()' - Find the filters to convert from one type to another.
+ * 'mime_find_filters()' - Find the filters to convert from one type to another.
  */
 
 static cups_array_t *                  /* O - Array of filters to run */
-find_filters(mime_t           *mime,   /* I - MIME database */
-             mime_type_t      *src,    /* I - Source file type */
-            size_t           srcsize,  /* I - Size of source file */
-            mime_type_t      *dst,     /* I - Destination file type */
-            int              *cost,    /* O - Cost of filters */
-            _mime_typelist_t *list)    /* I - Source types we've used */
+mime_find_filters(
+    mime_t           *mime,            /* I - MIME database */
+    mime_type_t      *src,             /* I - Source file type */
+    size_t           srcsize,          /* I - Size of source file */
+    mime_type_t      *dst,             /* I - Destination file type */
+    int              *cost,            /* O - Cost of filters */
+    _mime_typelist_t *list)            /* I - Source types we've used */
 {
   int                  tempcost,       /* Temporary cost */
                        mincost;        /* Current minimum */
@@ -280,7 +327,7 @@ find_filters(mime_t           *mime,        /* I - MIME database */
                        *listptr;       /* Pointer in list */
 
 
-  DEBUG_printf(("2find_filters(mime=%p, src=%p(%s/%s), srcsize=" CUPS_LLFMT
+  DEBUG_printf(("2mime_find_filters(mime=%p, src=%p(%s/%s), srcsize=" CUPS_LLFMT
                 ", dst=%p(%s/%s), cost=%p, list=%p)", mime, src, src->super,
                src->type, CUPS_LLCAST srcsize, dst, dst->super, dst->type,
                cost, list));
@@ -296,20 +343,28 @@ find_filters(mime_t           *mime,      /* I - MIME database */
     * Got a direct filter!
     */
 
-    DEBUG_puts("2find_filters: Direct filter found!");
+    DEBUG_puts("3mime_find_filters: Direct filter found.");
 
     if ((mintemp = cupsArrayNew(NULL, NULL)) == NULL)
+    {
+      DEBUG_puts("3mime_find_filters: Returning NULL (out of memory).");
       return (NULL);
+    }
 
     cupsArrayAdd(mintemp, current);
 
     mincost = current->cost;
 
     if (!cost)
+    {
+      DEBUG_printf(("3mime_find_filters: Returning 1 filter, cost %d:",
+                    mincost));
+      DEBUG_printf(("3mime_find_filters: %s/%s %s/%s %d %s",
+                    current->src->super, current->src->type,
+                    current->dst->super, current->dst->type,
+                   current->cost, current->filter));
       return (mintemp);
-
-    DEBUG_puts("2find_filters: Found direct filter:");
-    DEBUG_printf(("2find_filters: %s (cost=%d)", current->filter, mincost));
+    }
   }
   else
   {
@@ -364,14 +419,30 @@ find_filters(mime_t           *mime,      /* I - MIME database */
     listnode.src = current->src;
 
     cupsArraySave(mime->srcs);
-    temp = find_filters(mime, current->dst, srcsize, dst, &tempcost, &listnode);
+    temp = mime_find_filters(mime, current->dst, srcsize, dst, &tempcost,
+                             &listnode);
     cupsArrayRestore(mime->srcs);
 
     if (!temp)
       continue;
 
     if (!cost)
+    {
+      DEBUG_printf(("3mime_find_filters: Returning %d filter(s), cost %d:",
+                   cupsArrayCount(temp), tempcost));
+
+#ifdef DEBUG
+      for (current = (mime_filter_t *)cupsArrayFirst(temp);
+          current;
+          current = (mime_filter_t *)cupsArrayNext(temp))
+       DEBUG_printf(("3mime_find_filters: %s/%s %s/%s %d %s",
+                     current->src->super, current->src->type,
+                     current->dst->super, current->dst->type,
+                     current->cost, current->filter));
+#endif /* DEBUG */
+
       return (temp);
+    }
 
    /*
     * Found a match; see if this one is less costly than the last (if
@@ -403,14 +474,17 @@ find_filters(mime_t           *mime,      /* I - MIME database */
     * Hey, we got a match!
     */
 
-#ifdef DEBUG
-    DEBUG_printf(("find_filters: Returning %d filters:\n",
-                  cupsArrayCount(mintemp)));
+    DEBUG_printf(("3mime_find_filters: Returning %d filter(s), cost %d:",
+                  cupsArrayCount(mintemp), mincost));
 
+#ifdef DEBUG
     for (current = (mime_filter_t *)cupsArrayFirst(mintemp);
          current;
         current = (mime_filter_t *)cupsArrayNext(mintemp))
-      DEBUG_printf(("find_filters: %s\n", current->filter));
+      DEBUG_printf(("3mime_find_filters: %s/%s %s/%s %d %s",
+                    current->src->super, current->src->type,
+                    current->dst->super, current->dst->type,
+                   current->cost, current->filter));
 #endif /* DEBUG */
 
     if (cost)
@@ -419,7 +493,7 @@ find_filters(mime_t           *mime,        /* I - MIME database */
     return (mintemp);
   }
 
-  DEBUG_puts("find_filters: Returning zippo...");
+  DEBUG_puts("3mime_find_filters: Returning NULL (no matches).");
 
   return (NULL);
 }
index d0011c03a7fd199f47aa5e3a59a04fd07dde56e3..0d5e1eacea616ee04be0910443c8ac1b0af62185 100644 (file)
@@ -3106,6 +3106,12 @@ apple_init_profile(
   dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
                                   &kCFTypeDictionaryKeyCallBacks,
                                   &kCFTypeDictionaryValueCallBacks);
+  if (!dict)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to initialize profile \"%s\".",
+                    iccfile);
+    return;
+  }
 
   cftext = CFStringCreateWithCString(kCFAllocatorDefault, text,
                                     kCFStringEncodingUTF8);
@@ -3286,7 +3292,12 @@ apple_register_profiles(
        strlcpy(iccfile, attr->value, sizeof(iccfile));
 
       if (access(iccfile, 0))
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR,
+                        "%s: ICC Profile \"%s\" does not exist.", p->name,
+                        iccfile);
        continue;
+      }
 
       num_profiles ++;
     }
@@ -3416,7 +3427,8 @@ apple_register_profiles(
         else
          strlcpy(iccfile, attr->value, sizeof(iccfile));
 
-        if (access(iccfile, 0))
+        if (_cupsFileCheck(iccfile, _CUPS_FILE_CHECK_FILE, !RunUser,
+                          cupsdLogFCMessage, p))
          continue;
 
         if (profile_key[0] == 'c')
index 3d9c9e4e4e0ff63c31588380238f8382a0e448d7..14b71231fdd93dd02b647c5362cfb636d4978b85 100644 (file)
@@ -479,7 +479,7 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
                                        /* Job title string */
                        copies[255],    /* # copies string */
                        *options,       /* Options string */
-                       *envp[MAX_ENV + 19],
+                       *envp[MAX_ENV + 20],
                                        /* Environment variables */
                        charset[255],   /* CHARSET env variable */
                        class_name[255],/* CLASS env variable */
@@ -496,6 +496,8 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
                        apple_language[255],
                                        /* APPLE_LANGUAGE env variable */
 #endif /* __APPLE__ */
+                       auth_info_required[255],
+                                       /* AUTH_INFO_REQUIRED env variable */
                        ppd[1024],      /* PPD env variable */
                        printer_info[255],
                                        /* PRINTER_INFO env variable */
@@ -878,6 +880,32 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
   snprintf(printer_name, sizeof(printer_name), "PRINTER=%s", job->printer->name);
   snprintf(rip_max_cache, sizeof(rip_max_cache), "RIP_MAX_CACHE=%s", RIPCache);
 
+  if (job->printer->num_auth_info_required == 1)
+    snprintf(auth_info_required, sizeof(auth_info_required),
+             "AUTH_INFO_REQUIRED=%s",
+            job->printer->auth_info_required[0]);
+  else if (job->printer->num_auth_info_required == 2)
+    snprintf(auth_info_required, sizeof(auth_info_required),
+             "AUTH_INFO_REQUIRED=%s,%s",
+            job->printer->auth_info_required[0],
+            job->printer->auth_info_required[1]);
+  else if (job->printer->num_auth_info_required == 3)
+    snprintf(auth_info_required, sizeof(auth_info_required),
+             "AUTH_INFO_REQUIRED=%s,%s,%s",
+            job->printer->auth_info_required[0],
+            job->printer->auth_info_required[1],
+            job->printer->auth_info_required[2]);
+  else if (job->printer->num_auth_info_required == 4)
+    snprintf(auth_info_required, sizeof(auth_info_required),
+             "AUTH_INFO_REQUIRED=%s,%s,%s,%s",
+            job->printer->auth_info_required[0],
+            job->printer->auth_info_required[1],
+            job->printer->auth_info_required[2],
+            job->printer->auth_info_required[3]);
+  else
+    strlcpy(auth_info_required, "AUTH_INFO_REQUIRED=none",
+           sizeof(auth_info_required));
+
   envc = cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
 
   envp[envc ++] = charset;
@@ -938,6 +966,7 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
     envp[envc ++] = class_name;
   }
 
+  envp[envc ++] = auth_info_required;
   if (job->auth_username)
     envp[envc ++] = job->auth_username;
   if (job->auth_domain)
@@ -1233,6 +1262,9 @@ void
 cupsdDeleteJob(cupsd_job_t       *job, /* I - Job */
                cupsd_jobaction_t action)/* I - Action */
 {
+  char filename[1024];                 /* Job filename */
+
+
   if (job->printer)
     finalize_job(job, 1);
 
@@ -1242,8 +1274,6 @@ cupsdDeleteJob(cupsd_job_t       *job,    /* I - Job */
     * Remove the job info file...
     */
 
-    char       filename[1024];         /* Job filename */
-
     snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot,
             job->id);
     unlink(filename);
@@ -1261,7 +1291,14 @@ cupsdDeleteJob(cupsd_job_t       *job,   /* I - Job */
     free(job->compressions);
     free(job->filetypes);
 
-    job->num_files = 0;
+    while (job->num_files > 0)
+    {
+      snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
+              job->id, job->num_files);
+      unlink(filename);
+
+      job->num_files --;
+    }
   }
 
   if (job->history)
@@ -2946,6 +2983,57 @@ finalize_job(cupsd_job_t *job,           /* I - Job */
            message   = "Job held for authentication.";
           }
           break;
+
+      case CUPS_BACKEND_RETRY :
+         if (job_state == IPP_JOB_COMPLETED)
+         {
+          /*
+           * Hold the job if the number of retries is less than the
+           * JobRetryLimit, otherwise abort the job.
+           */
+
+           job->tries ++;
+
+           if (job->tries > JobRetryLimit && JobRetryLimit > 0)
+           {
+            /*
+             * Too many tries...
+             */
+
+             snprintf(buffer, sizeof(buffer),
+                      "Job aborted after %d unsuccessful attempts.",
+                      JobRetryLimit);
+             job_state = IPP_JOB_ABORTED;
+             message   = buffer;
+           }
+           else
+           {
+            /*
+             * Try again in N seconds...
+             */
+
+             snprintf(buffer, sizeof(buffer),
+                      "Job held for %d seconds since it could not be sent.",
+                      JobRetryInterval);
+
+             job->hold_until = time(NULL) + JobRetryInterval;
+             job_state       = IPP_JOB_HELD;
+             message         = buffer;
+           }
+         }
+          break;
+
+      case CUPS_BACKEND_RETRY_CURRENT :
+        /*
+         * Mark the job as pending and retry on the same printer...
+         */
+
+         if (job_state == IPP_JOB_COMPLETED)
+         {
+           job_state = IPP_JOB_PENDING;
+           message   = "Retrying job on same printer.";
+         }
+          break;
     }
   }
   else if (job->status > 0)
index 15af46f06d8c83d9f352ea257eecf7b3e1c4965a..16528b9dd339ed4bcbd2cf8f86741c8f552a5487 100644 (file)
@@ -151,18 +151,7 @@ cupsdStartListening(void)
        lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
   {
     httpAddrString(&(lis->address), s, sizeof(s));
-
-#ifdef AF_INET6
-    if (lis->address.addr.sa_family == AF_INET6)
-      p = ntohs(lis->address.ipv6.sin6_port);
-    else
-#endif /* AF_INET6 */
-#ifdef AF_LOCAL
-    if (lis->address.addr.sa_family == AF_LOCAL)
-      p = 0;
-    else
-#endif /* AF_LOCAL */
-    p = ntohs(lis->address.ipv4.sin_port);
+    p = _httpAddrPort(&(lis->address));
 
    /*
     * If needed, create a socket for listening...
index 4de1dc30cec6444a427bd303127b748c7746c08a..aaea97ee93332cbe9709f3af0e5b34817d608273 100644 (file)
@@ -14,6 +14,7 @@
  *
  * Contents:
  *
+ *   cupsdCheckLogFile()     - Open/rotate a log file if it needs it.
  *   cupsdGetDateTime()   - Returns a pointer to a date/time string.
  *   cupsdLogGSSMessage() - Log a GSSAPI error...
  *   cupsdLogJob()        - Log a job message.
@@ -21,7 +22,6 @@
  *   cupsdLogPage()       - Log a page to the page log file.
  *   cupsdLogRequest()    - Log an HTTP request in Common Log Format.
  *   cupsdWriteErrorLog() - Write a line to the ErrorLog.
- *   check_log_file()     - Open/rotate a log file if it needs it.
  *   format_log_line()    - Format a line for a log file.
  */
 
@@ -46,10 +46,187 @@ static char        *log_line = NULL;       /* Line for output file */
  * Local functions...
  */
 
-static int     check_log_file(cups_file_t **lf, const char *logname);
 static int     format_log_line(const char *message, va_list ap);
 
 
+/*
+ * 'cupsdCheckLogFile()' - Open/rotate a log file if it needs it.
+ */
+
+int                                    /* O  - 1 if log file open */
+cupsdCheckLogFile(cups_file_t **lf,    /* IO - Log file */
+                 const char  *logname) /* I  - Log filename */
+{
+  char         backname[1024],         /* Backup log filename */
+               filename[1024],         /* Formatted log filename */
+               *ptr;                   /* Pointer into filename */
+  const char   *logptr;                /* Pointer into log filename */
+
+
+ /*
+  * See if we have a log file to check...
+  */
+
+  if (!lf || !logname || !logname[0])
+    return (1);
+
+ /*
+  * Format the filename as needed...
+  */
+
+  if (!*lf ||
+      (strncmp(logname, "/dev/", 5) && cupsFileTell(*lf) > MaxLogSize &&
+       MaxLogSize > 0))
+  {
+   /*
+    * Handle format strings...
+    */
+
+    filename[sizeof(filename) - 1] = '\0';
+
+    if (logname[0] != '/')
+    {
+      strlcpy(filename, ServerRoot, sizeof(filename));
+      strlcat(filename, "/", sizeof(filename));
+    }
+    else
+      filename[0] = '\0';
+
+    for (logptr = logname, ptr = filename + strlen(filename);
+         *logptr && ptr < (filename + sizeof(filename) - 1);
+        logptr ++)
+      if (*logptr == '%')
+      {
+       /*
+        * Format spec...
+       */
+
+        logptr ++;
+       if (*logptr == 's')
+       {
+        /*
+         * Insert the server name...
+         */
+
+         strlcpy(ptr, ServerName, sizeof(filename) - (ptr - filename));
+         ptr += strlen(ptr);
+       }
+        else
+       {
+        /*
+         * Otherwise just insert the character...
+         */
+
+         *ptr++ = *logptr;
+       }
+      }
+      else
+       *ptr++ = *logptr;
+
+    *ptr = '\0';
+  }
+
+ /*
+  * See if the log file is open...
+  */
+
+  if (!*lf)
+  {
+   /*
+    * Nope, open the log file...
+    */
+
+    if ((*lf = cupsFileOpen(filename, "a")) == NULL)
+    {
+     /*
+      * If the file is in CUPS_LOGDIR then try to create a missing directory...
+      */
+
+      if (!strncmp(filename, CUPS_LOGDIR, strlen(CUPS_LOGDIR)))
+      {
+       /*
+        * Try updating the permissions of the containing log directory, using
+       * the log file permissions as a basis...
+       */
+
+        int log_dir_perm = 0300 | LogFilePerm;
+                                       /* LogFilePerm + owner write/search */
+       if (log_dir_perm & 0040)
+         log_dir_perm |= 0010;         /* Add group search */
+       if (log_dir_perm & 0004)
+         log_dir_perm |= 0001;         /* Add other search */
+
+        cupsdCheckPermissions(CUPS_LOGDIR, NULL, log_dir_perm, RunUser, Group,
+                             1, -1);
+
+        *lf = cupsFileOpen(filename, "a");
+      }
+
+      if (*lf == NULL)
+      {
+       syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
+              strerror(errno));
+
+        if (FatalErrors & CUPSD_FATAL_LOG)
+         cupsdEndProcess(getpid(), 0);
+
+       return (0);
+      }
+    }
+
+    if (strncmp(filename, "/dev/", 5))
+    {
+     /*
+      * Change ownership and permissions of non-device logs...
+      */
+
+      fchown(cupsFileNumber(*lf), RunUser, Group);
+      fchmod(cupsFileNumber(*lf), LogFilePerm);
+    }
+  }
+
+ /*
+  * Do we need to rotate the log?
+  */
+
+  if (strncmp(logname, "/dev/", 5) && cupsFileTell(*lf) > MaxLogSize &&
+      MaxLogSize > 0)
+  {
+   /*
+    * Rotate log file...
+    */
+
+    cupsFileClose(*lf);
+
+    strcpy(backname, filename);
+    strlcat(backname, ".O", sizeof(backname));
+
+    unlink(backname);
+    rename(filename, backname);
+
+    if ((*lf = cupsFileOpen(filename, "a")) == NULL)
+    {
+      syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
+             strerror(errno));
+
+      if (FatalErrors & CUPSD_FATAL_LOG)
+       cupsdEndProcess(getpid(), 0);
+
+      return (0);
+    }
+
+   /*
+    * Change ownership and permissions of non-device logs...
+    */
+
+    fchown(cupsFileNumber(*lf), RunUser, Group);
+    fchmod(cupsFileNumber(*lf), LogFilePerm);
+  }
+
+  return (1);
+}
+
+
 /*
  * 'cupsdGetDateTime()' - Returns a pointer to a date/time string.
  */
@@ -135,6 +312,51 @@ cupsdGetDateTime(struct timeval *t,        /* I - Time value or NULL for current */
 }
 
 
+/*
+ * 'cupsdLogFCMessage()' - Log a file checking message.
+ */
+
+void
+cupsdLogFCMessage(
+    void              *context,                /* I - Printer (if any) */
+    _cups_fc_result_t result,          /* I - Check result */
+    const char        *message)                /* I - Message to log */
+{
+  cupsd_printer_t      *p = (cupsd_printer_t *)context;
+                                       /* Printer */
+  cupsd_loglevel_t     level;          /* Log level */
+
+
+  if (result == _CUPS_FILE_CHECK_OK)
+    level = CUPSD_LOG_DEBUG2;
+  else
+    level = CUPSD_LOG_ERROR;
+
+  if (p)
+  {
+    cupsdLogMessage(level, "%s: %s", p->name, message);
+
+    if (result == _CUPS_FILE_CHECK_MISSING ||
+        result == _CUPS_FILE_CHECK_WRONG_TYPE)
+    {
+      strlcpy(p->state_message, message, sizeof(p->state_message));
+
+      if (cupsdSetPrinterReasons(p, "+cups-missing-filter-warning"))
+        cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, p, NULL, "%s", message);
+    }
+    else if (result == _CUPS_FILE_CHECK_PERMISSIONS)
+    {
+      strlcpy(p->state_message, message, sizeof(p->state_message));
+
+      if (cupsdSetPrinterReasons(p, "+cups-insecure-filter-warning"))
+        cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, p, NULL, "%s", message);
+    }
+  }
+  else
+    cupsdLogMessage(level, "%s", message);
+}
+
+
 #ifdef HAVE_GSSAPI
 /*
  * 'cupsdLogGSSMessage()' - Log a GSSAPI error...
@@ -508,7 +730,7 @@ cupsdLogPage(cupsd_job_t *job,              /* I - Job being printed */
   * Not using syslog; check the log file...
   */
 
-  if (!check_log_file(&PageFile, PageLog))
+  if (!cupsdCheckLogFile(&PageFile, PageLog))
     return (0);
 
  /*
@@ -687,7 +909,7 @@ cupsdLogRequest(cupsd_client_t *con,        /* I - Request to log */
   * Not using syslog; check the log file...
   */
 
-  if (!check_log_file(&AccessFile, AccessLog))
+  if (!cupsdCheckLogFile(&AccessFile, AccessLog))
     return (0);
 
  /*
@@ -769,7 +991,7 @@ cupsdWriteErrorLog(int        level,        /* I - Log level */
   * Not using syslog; check the log file...
   */
 
-  if (!check_log_file(&ErrorFile, ErrorLog))
+  if (!cupsdCheckLogFile(&ErrorFile, ErrorLog))
     return (0);
 
  /*
@@ -784,184 +1006,6 @@ cupsdWriteErrorLog(int        level,     /* I - Log level */
 }
 
 
-/*
- * 'check_log_file()' - Open/rotate a log file if it needs it.
- */
-
-static int                             /* O  - 1 if log file open */
-check_log_file(cups_file_t **lf,       /* IO - Log file */
-              const char  *logname)    /* I  - Log filename */
-{
-  char         backname[1024],         /* Backup log filename */
-               filename[1024],         /* Formatted log filename */
-               *ptr;                   /* Pointer into filename */
-  const char   *logptr;                /* Pointer into log filename */
-
-
- /*
-  * See if we have a log file to check...
-  */
-
-  if (!lf || !logname || !logname[0])
-    return (1);
-
- /*
-  * Format the filename as needed...
-  */
-
-  if (!*lf ||
-      (strncmp(logname, "/dev/", 5) && cupsFileTell(*lf) > MaxLogSize &&
-       MaxLogSize > 0))
-  {
-   /*
-    * Handle format strings...
-    */
-
-    filename[sizeof(filename) - 1] = '\0';
-
-    if (logname[0] != '/')
-    {
-      strlcpy(filename, ServerRoot, sizeof(filename));
-      strlcat(filename, "/", sizeof(filename));
-    }
-    else
-      filename[0] = '\0';
-
-    for (logptr = logname, ptr = filename + strlen(filename);
-         *logptr && ptr < (filename + sizeof(filename) - 1);
-        logptr ++)
-      if (*logptr == '%')
-      {
-       /*
-        * Format spec...
-       */
-
-        logptr ++;
-       if (*logptr == 's')
-       {
-        /*
-         * Insert the server name...
-         */
-
-         strlcpy(ptr, ServerName, sizeof(filename) - (ptr - filename));
-         ptr += strlen(ptr);
-       }
-        else
-       {
-        /*
-         * Otherwise just insert the character...
-         */
-
-         *ptr++ = *logptr;
-       }
-      }
-      else
-       *ptr++ = *logptr;
-
-    *ptr = '\0';
-  }
-
- /*
-  * See if the log file is open...
-  */
-
-  if (!*lf)
-  {
-   /*
-    * Nope, open the log file...
-    */
-
-    if ((*lf = cupsFileOpen(filename, "a")) == NULL)
-    {
-     /*
-      * If the file is in CUPS_LOGDIR then try to create a missing directory...
-      */
-
-      if (!strncmp(filename, CUPS_LOGDIR, strlen(CUPS_LOGDIR)))
-      {
-       /*
-        * Try updating the permissions of the containing log directory, using
-       * the log file permissions as a basis...
-       */
-
-        int log_dir_perm = 0300 | LogFilePerm;
-                                       /* LogFilePerm + owner write/search */
-       if (log_dir_perm & 0040)
-         log_dir_perm |= 0010;         /* Add group search */
-       if (log_dir_perm & 0004)
-         log_dir_perm |= 0001;         /* Add other search */
-
-        cupsdCheckPermissions(CUPS_LOGDIR, NULL, log_dir_perm, RunUser, Group,
-                             1, -1);
-
-        *lf = cupsFileOpen(filename, "a");
-      }
-
-      if (*lf == NULL)
-      {
-       syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
-              strerror(errno));
-
-        if (FatalErrors & CUPSD_FATAL_LOG)
-         cupsdEndProcess(getpid(), 0);
-
-       return (0);
-      }
-    }
-
-    if (strncmp(filename, "/dev/", 5))
-    {
-     /*
-      * Change ownership and permissions of non-device logs...
-      */
-
-      fchown(cupsFileNumber(*lf), RunUser, Group);
-      fchmod(cupsFileNumber(*lf), LogFilePerm);
-    }
-  }
-
- /*
-  * Do we need to rotate the log?
-  */
-
-  if (strncmp(logname, "/dev/", 5) && cupsFileTell(*lf) > MaxLogSize &&
-      MaxLogSize > 0)
-  {
-   /*
-    * Rotate log file...
-    */
-
-    cupsFileClose(*lf);
-
-    strcpy(backname, filename);
-    strlcat(backname, ".O", sizeof(backname));
-
-    unlink(backname);
-    rename(filename, backname);
-
-    if ((*lf = cupsFileOpen(filename, "a")) == NULL)
-    {
-      syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
-             strerror(errno));
-
-      if (FatalErrors & CUPSD_FATAL_LOG)
-       cupsdEndProcess(getpid(), 0);
-
-      return (0);
-    }
-
-   /*
-    * Change ownership and permissions of non-device logs...
-    */
-
-    fchown(cupsFileNumber(*lf), RunUser, Group);
-    fchmod(cupsFileNumber(*lf), LogFilePerm);
-  }
-
-  return (1);
-}
-
-
 /*
  * 'format_log_line()' - Format a line for a log file.
  *
index 411c6521084a4bfccd92fa6a492745950e366ffe..4f4eef8bb801ff5cd0a7e5e23105e80e9eaf2185 100644 (file)
@@ -1492,9 +1492,6 @@ launchd_checkin(void)
 {
   size_t               i,              /* Looping var */
                        count;          /* Number of listeners */
-#  ifdef HAVE_SSL
-  int                  portnum;        /* Port number */
-#  endif /* HAVE_SSL */
   launch_data_t                ld_msg,         /* Launch data message */
                        ld_resp,        /* Launch data response */
                        ld_array,       /* Launch data array */
@@ -1626,17 +1623,7 @@ launchd_checkin(void)
        lis->fd = fd;
 
 #  ifdef HAVE_SSL
-       portnum = 0;
-
-#    ifdef AF_INET6
-       if (lis->address.addr.sa_family == AF_INET6)
-         portnum = ntohs(lis->address.ipv6.sin6_port);
-       else
-#    endif /* AF_INET6 */
-       if (lis->address.addr.sa_family == AF_INET)
-         portnum = ntohs(lis->address.ipv4.sin_port);
-
-       if (portnum == 443)
+       if (_httpAddrPort(&(lis->address)) == 443)
          lis->encryption = HTTP_ENCRYPT_ALWAYS;
 #  endif /* HAVE_SSL */
       }
index 5e3377a34dd7145c78070309a74625c1a8a8fe5e..d1a905aa85faec3ac778046eec41849e71f46f86 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   MIME database file routines for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
  *
  * Contents:
  *
- *   mimeDelete()       - Delete (free) a MIME database.
- *   mimeDeleteFilter() - Delete a filter from the MIME database.
- *   mimeDeleteType()   - Delete a type from the MIME database.
- *   mimeFirstFilter()  - Get the first filter in the MIME database.
- *   mimeFirstType()    - Get the first type in the MIME database.
- *   mimeLoad()         - Create a new MIME database from disk.
- *   mimeMerge()        - Merge a MIME database from disk with the current one.
- *   mimeNew()          - Create a new, empty MIME database.
- *   mimeNextFilter()   - Get the next filter in the MIME database.
- *   mimeNextType()     - Get the next type in the MIME database.
- *   mimeNumFilters()   - Get the number of filters in a MIME database.
- *   mimeNumTypes()     - Get the number of types in a MIME database.
- *   add_fcache()       - Add a filter to the filter cache.
- *   compare_fcache()   - Compare two filter cache entries.
- *   delete_fcache()    - Free all memory used by the filter cache.
- *   delete_rules()     - Free all memory for the given rule tree.
- *   load_convs()       - Load a xyz.convs file...
- *   load_types()       - Load a xyz.types file...
+ *   mimeDelete()          - Delete (free) a MIME database.
+ *   mimeDeleteFilter()    - Delete a filter from the MIME database.
+ *   mimeDeleteType()      - Delete a type from the MIME database.
+ *   mimeFirstFilter()     - Get the first filter in the MIME database.
+ *   mimeFirstType()       - Get the first type in the MIME database.
+ *   mimeLoad()            - Create a new MIME database from disk.
+ *   mimeMerge()           - Merge a MIME database from disk with the current one.
+ *   mimeNew()             - Create a new, empty MIME database.
+ *   mimeNextFilter()      - Get the next filter in the MIME database.
+ *   mimeNextType()        - Get the next type in the MIME database.
+ *   mimeNumFilters()      - Get the number of filters in a MIME database.
+ *   mimeNumTypes()        - Get the number of types in a MIME database.
+ *   mime_add_fcache()     - Add a filter to the filter cache.
+ *   mime_compare_fcache() - Compare two filter cache entries.
+ *   mime_delete_fcache()  - Free all memory used by the filter cache.
+ *   mime_delete_rules()   - Free all memory for the given rule tree.
+ *   mime_load_convs()     - Load a xyz.convs file...
+ *   mime_load_types()     - Load a xyz.types file...
  */
 
 /*
@@ -59,15 +59,15 @@ typedef struct _mime_fcache_s               /**** Filter cache structure ****/
  * Local functions...
  */
 
-static const char *add_fcache(cups_array_t *filtercache, const char *name,
-                             const char *filterpath);
-static int     compare_fcache(_mime_fcache_t *a, _mime_fcache_t *b);
-static void    delete_fcache(cups_array_t *filtercache);
-static void    delete_rules(mime_magic_t *rules);
-static void    load_convs(mime_t *mime, const char *filename,
-                          const char *filterpath,
-                          cups_array_t *filtercache);
-static void    load_types(mime_t *mime, const char *filename);
+static const char *mime_add_fcache(cups_array_t *filtercache, const char *name,
+                                  const char *filterpath);
+static int     mime_compare_fcache(_mime_fcache_t *a, _mime_fcache_t *b);
+static void    mime_delete_fcache(cups_array_t *filtercache);
+static void    mime_delete_rules(mime_magic_t *rules);
+static void    mime_load_convs(mime_t *mime, const char *filename,
+                               const char *filterpath,
+                               cups_array_t *filtercache);
+static void    mime_load_types(mime_t *mime, const char *filename);
 static mime_t  *mime_new(void);
 
 
@@ -82,6 +82,8 @@ mimeDelete(mime_t *mime)              /* I - MIME database */
   mime_filter_t        *filter;                /* Current filter */
 
 
+  DEBUG_printf(("mimeDelete(mime=%p)", mime));
+
   if (!mime)
     return;
 
@@ -122,9 +124,23 @@ void
 mimeDeleteFilter(mime_t        *mime,  /* I - MIME database */
                 mime_filter_t *filter) /* I - Filter */
 {
+  DEBUG_printf(("mimeDeleteFilter(mime=%p, filter=%p(%s/%s->%s/%s, cost=%d, "
+                "maxsize=" CUPS_LLFMT "))", mime, filter,
+               filter ? filter->src->super : "???",
+               filter ? filter->src->type : "???",
+               filter ? filter->dst->super : "???",
+               filter ? filter->dst->super : "???",
+               filter ? filter->cost : -1,
+               filter ? CUPS_LLCAST filter->maxsize : CUPS_LLCAST -1));
+               
   if (!mime || !filter)
     return;
 
+#ifdef DEBUG
+  if (!cupsArrayFind(mime->filters, filter))
+    DEBUG_puts("1mimeDeleteFilter: Filter not in MIME database.");
+#endif /* DEBUG */
+
   cupsArrayRemove(mime->filters, filter);
   free(filter);
 
@@ -135,6 +151,7 @@ mimeDeleteFilter(mime_t        *mime,       /* I - MIME database */
 
   if (mime->srcs)
   {
+    DEBUG_puts("1mimeDeleteFilter: Deleting source lookup cache.");
     cupsArrayDelete(mime->srcs);
     mime->srcs = NULL;
   }
@@ -149,12 +166,20 @@ void
 mimeDeleteType(mime_t      *mime,      /* I - MIME database */
               mime_type_t *mt)         /* I - Type */
 {
+  DEBUG_printf(("mimeDeleteType(mime=%p, mt=%p(%s/%s))", mime, mt,
+                mt ? mt->super : "???", mt ? mt->type : "???"));
+
   if (!mime || !mt)
     return;
 
+#ifdef DEBUG
+  if (!cupsArrayFind(mime->types, mt))
+    DEBUG_puts("1mimeDeleteFilter: Type not in MIME database.");
+#endif /* DEBUG */
+
   cupsArrayRemove(mime->types, mt);
 
-  delete_rules(mt->rules);
+  mime_delete_rules(mt->rules);
   free(mt);
 }
 
@@ -166,10 +191,21 @@ mimeDeleteType(mime_t      *mime, /* I - MIME database */
 mime_filter_t *                                /* O - Filter or NULL */
 mimeFirstFilter(mime_t *mime)          /* I - MIME database */
 {
+  DEBUG_printf(("6mimeFirstFilter(mime=%p)", mime));
+
   if (!mime)
+  {
+    DEBUG_puts("7mimeFirstFilter: Returning NULL.");
     return (NULL);
+  }
   else
-    return ((mime_filter_t *)cupsArrayFirst(mime->filters));
+  {
+    mime_filter_t *first = (mime_filter_t *)cupsArrayFirst(mime->filters);
+                                       /* First filter */
+
+    DEBUG_printf(("7mimeFirstFilter: Returning %p.", first));
+    return (first);
+  }
 }
 
 
@@ -180,10 +216,21 @@ mimeFirstFilter(mime_t *mime)             /* I - MIME database */
 mime_type_t *                          /* O - Type or NULL */
 mimeFirstType(mime_t *mime)            /* I - MIME database */
 {
+  DEBUG_printf(("6mimeFirstType(mime=%p)", mime));
+
   if (!mime)
+  {
+    DEBUG_puts("7mimeFirstType: Returning NULL.");
     return (NULL);
+  }
   else
-    return ((mime_type_t *)cupsArrayFirst(mime->types));
+  {
+    mime_type_t *first = (mime_type_t *)cupsArrayFirst(mime->types);
+                                       /* First type */
+
+    DEBUG_printf(("7mimeFirstType: Returning %p.", first));
+    return (first);
+  }
 }
 
 
@@ -198,7 +245,15 @@ mime_t *                           /* O - New MIME database */
 mimeLoad(const char *pathname,         /* I - Directory to load */
          const char *filterpath)       /* I - Directory to load */
 {
-  return (mimeLoadFilters(mimeLoadTypes(NULL, pathname), pathname, filterpath));
+  mime_t *mime;                                /* New MIME database */
+
+  DEBUG_printf(("mimeLoad(pathname=\"%s\", filterpath=\"%s\")", pathname,
+                filterpath));
+
+  mime = mimeLoadFilters(mimeLoadTypes(NULL, pathname), pathname, filterpath);
+  DEBUG_printf(("1mimeLoad: Returning %p.", mime));
+
+  return (mime);
 }
 
 
@@ -220,25 +275,35 @@ mimeLoadFilters(mime_t     *mime, /* I - MIME database */
   cups_array_t *filtercache;           /* Filter cache */
 
 
+  DEBUG_printf(("mimeLoadFilters(mime=%p, pathname=\"%s\", filterpath=\"%s\")",
+               mime, pathname, filterpath));
+
  /*
   * Range check input...
   */
 
   if (!mime || !pathname || !filterpath)
+  {
+    DEBUG_puts("1mimeLoadFilters: Bad arguments.");
     return (mime);
+  }
 
  /*
   * Then open the directory specified by pathname...
   */
 
   if ((dir = cupsDirOpen(pathname)) == NULL)
+  {
+    DEBUG_printf(("1mimeLoadFilters: Unable to open \"%s\": %s", pathname,
+                  strerror(errno)));
     return (mime);
+  }
 
  /*
   * Read all the .convs files...
   */
 
-  filtercache = cupsArrayNew((cups_array_func_t)compare_fcache, NULL);
+  filtercache = cupsArrayNew((cups_array_func_t)mime_compare_fcache, NULL);
 
   while ((dent = cupsDirRead(dir)) != NULL)
   {
@@ -250,11 +315,12 @@ mimeLoadFilters(mime_t     *mime, /* I - MIME database */
       */
 
       snprintf(filename, sizeof(filename), "%s/%s", pathname, dent->filename);
-      load_convs(mime, filename, filterpath, filtercache);
+      DEBUG_printf(("1mimeLoadFilters: Loading \"%s\".", filename));
+      mime_load_convs(mime, filename, filterpath, filtercache);
     }
   }
 
-  delete_fcache(filtercache);
+  mime_delete_fcache(filtercache);
 
   cupsDirClose(dir);
 
@@ -278,12 +344,19 @@ mimeLoadTypes(mime_t     *mime,           /* I - MIME database or @code NULL@ to create a
   char         filename[1024];         /* Full filename of .types file */
 
 
+  DEBUG_printf(("mimeLoadTypes(mime=%p, pathname=\"%s\")", mime, pathname));
+
  /*
   * First open the directory specified by pathname...
   */
 
   if ((dir = cupsDirOpen(pathname)) == NULL)
+  {
+    DEBUG_printf(("1mimeLoadTypes: Unable to open \"%s\": %s", pathname,
+                  strerror(errno)));
+    DEBUG_printf(("1mimeLoadTypes: Returning %p.", mime));
     return (mime);
+  }
 
  /*
   * If "mime" is NULL, make a new, empty database...
@@ -295,6 +368,7 @@ mimeLoadTypes(mime_t     *mime,             /* I - MIME database or @code NULL@ to create a
   if (!mime)
   {
     cupsDirClose(dir);
+    DEBUG_puts("1mimeLoadTypes: Returning NULL.");
     return (NULL);
   }
 
@@ -312,12 +386,15 @@ mimeLoadTypes(mime_t     *mime,           /* I - MIME database or @code NULL@ to create a
       */
 
       snprintf(filename, sizeof(filename), "%s/%s", pathname, dent->filename);
-      load_types(mime, filename);
+      DEBUG_printf(("1mimeLoadTypes: Loading \"%s\".", filename));
+      mime_load_types(mime, filename);
     }
   }
 
   cupsDirClose(dir);
 
+  DEBUG_printf(("1mimeLoadTypes: Returning %p.", mime));
+
   return (mime);
 }
 
@@ -329,10 +406,21 @@ mimeLoadTypes(mime_t     *mime,           /* I - MIME database or @code NULL@ to create a
 mime_filter_t *                                /* O - Filter or NULL */
 mimeNextFilter(mime_t *mime)           /* I - MIME database */
 {
+  DEBUG_printf(("6mimeNextFilter(mime=%p)", mime));
+
   if (!mime)
+  {
+    DEBUG_puts("7mimeNextFilter: Returning NULL.");
     return (NULL);
+  }
   else
-    return ((mime_filter_t *)cupsArrayNext(mime->filters));
+  {
+    mime_filter_t *next = (mime_filter_t *)cupsArrayNext(mime->filters);
+                                       /* Next filter */
+
+    DEBUG_printf(("7mimeNextFilter: Returning %p.", next));
+    return (next);
+  }
 }
 
 
@@ -343,10 +431,21 @@ mimeNextFilter(mime_t *mime)              /* I - MIME database */
 mime_type_t *                          /* O - Type or NULL */
 mimeNextType(mime_t *mime)             /* I - MIME database */
 {
+  DEBUG_printf(("6mimeNextType(mime=%p)", mime));
+
   if (!mime)
+  {
+    DEBUG_puts("7mimeNextType: Returning NULL.");
     return (NULL);
+  }
   else
-    return ((mime_type_t *)cupsArrayNext(mime->types));
+  {
+    mime_type_t *next = (mime_type_t *)cupsArrayNext(mime->types);
+                                       /* Next type */
+
+    DEBUG_printf(("7mimeNextType: Returning %p.", next));
+    return (next);
+  }
 }
 
 
@@ -357,10 +456,19 @@ mimeNextType(mime_t *mime)                /* I - MIME database */
 int
 mimeNumFilters(mime_t *mime)           /* I - MIME database */
 {
+  DEBUG_printf(("mimeNumFilters(mime=%p)", mime));
+
   if (!mime)
+  {
+    DEBUG_puts("1mimeNumFilters: Returning 0.");
     return (0);
+  }
   else
+  {
+    DEBUG_printf(("1mimeNumFilters: Returning %d.",
+                  cupsArrayCount(mime->filters)));
     return (cupsArrayCount(mime->filters));
+  }
 }
 
 
@@ -371,33 +479,52 @@ mimeNumFilters(mime_t *mime)              /* I - MIME database */
 int
 mimeNumTypes(mime_t *mime)             /* I - MIME database */
 {
+  DEBUG_printf(("mimeNumTypes(mime=%p)", mime));
+
   if (!mime)
+  {
+    DEBUG_puts("1mimeNumTypes: Returning 0.");
     return (0);
+  }
   else
+  {
+    DEBUG_printf(("1mimeNumTypes: Returning %d.",
+                  cupsArrayCount(mime->types)));
     return (cupsArrayCount(mime->types));
+  }
 }
 
 
 /*
- * 'add_fcache()' - Add a filter to the filter cache.
+ * 'mime_add_fcache()' - Add a filter to the filter cache.
  */
 
 static const char *                    /* O - Full path to filter or NULL */
-add_fcache(cups_array_t *filtercache,  /* I - Filter cache */
-           const char   *name,         /* I - Filter name */
-          const char   *filterpath)    /* I - Filter path */
+mime_add_fcache(
+    cups_array_t *filtercache,         /* I - Filter cache */
+    const char   *name,                        /* I - Filter name */
+    const char   *filterpath)          /* I - Filter path */
 {
   _mime_fcache_t       key,            /* Search key */
                        *temp;          /* New filter cache */
   char                 path[1024];     /* Full path to filter */
 
 
+  DEBUG_printf(("2mime_add_fcache(filtercache=%p, name=\"%s\", "
+                "filterpath=\"%s\")", filtercache, name, filterpath));
+
   key.name = (char *)name;
   if ((temp = (_mime_fcache_t *)cupsArrayFind(filtercache, &key)) != NULL)
+  {
+    DEBUG_printf(("3mime_add_fcache: Returning \"%s\".", temp->path));
     return (temp->path);
+  }
 
   if ((temp = calloc(1, sizeof(_mime_fcache_t))) == NULL)
+  {
+    DEBUG_puts("3mime_add_fcache: Returning NULL.");
     return (NULL);
+  }
 
   temp->name = strdup(name);
 
@@ -406,16 +533,17 @@ add_fcache(cups_array_t *filtercache,     /* I - Filter cache */
 
   cupsArrayAdd(filtercache, temp);
 
+  DEBUG_printf(("3mime_add_fcache: Returning \"%s\".", temp->path));
   return (temp->path);
 }
 
 
 /*
- * 'compare_fcache()' - Compare two filter cache entries.
+ * 'mime_compare_fcache()' - Compare two filter cache entries.
  */
 
 static int                             /* O - Result of comparison */
-compare_fcache(_mime_fcache_t *a,      /* I - First entry */
+mime_compare_fcache(_mime_fcache_t *a, /* I - First entry */
                _mime_fcache_t *b)      /* I - Second entry */
 {
   return (strcmp(a->name, b->name));
@@ -423,15 +551,18 @@ compare_fcache(_mime_fcache_t *a, /* I - First entry */
 
 
 /*
- * 'delete_fcache()' - Free all memory used by the filter cache.
+ * 'mime_delete_fcache()' - Free all memory used by the filter cache.
  */
 
 static void
-delete_fcache(cups_array_t *filtercache)/* I - Filter cache */
+mime_delete_fcache(
+    cups_array_t *filtercache)         /* I - Filter cache */
 {
   _mime_fcache_t       *current;       /* Current cache entry */
 
 
+  DEBUG_printf(("2mime_delete_fcache(filtercache=%p)", filtercache));
+
   for (current = (_mime_fcache_t *)cupsArrayFirst(filtercache);
        current;
        current = (_mime_fcache_t *)cupsArrayNext(filtercache))
@@ -449,15 +580,17 @@ delete_fcache(cups_array_t *filtercache)/* I - Filter cache */
 
 
 /*
- * 'delete_rules()' - Free all memory for the given rule tree.
+ * 'mime_delete_rules()' - Free all memory for the given rule tree.
  */
 
 static void
-delete_rules(mime_magic_t *rules)      /* I - Rules to free */
+mime_delete_rules(mime_magic_t *rules) /* I - Rules to free */
 {
   mime_magic_t *next;                  /* Next rule to free */
 
 
+  DEBUG_printf(("2mime_delete_rules(rules=%p)", rules));
+
  /*
   * Free the rules list, descending recursively to free any child rules.
   */
@@ -467,7 +600,7 @@ delete_rules(mime_magic_t *rules)   /* I - Rules to free */
     next = rules->next;
 
     if (rules->child != NULL)
-      delete_rules(rules->child);
+      mime_delete_rules(rules->child);
 
     free(rules);
     rules = next;
@@ -476,14 +609,15 @@ delete_rules(mime_magic_t *rules) /* I - Rules to free */
 
 
 /*
- * 'load_convs()' - Load a xyz.convs file...
+ * 'mime_load_convs()' - Load a xyz.convs file...
  */
 
 static void
-load_convs(mime_t       *mime,         /* I - MIME database */
-           const char   *filename,     /* I - Convs file to load */
-           const char   *filterpath,   /* I - Path for filters */
-          cups_array_t *filtercache)   /* I - Filter program cache */
+mime_load_convs(
+    mime_t       *mime,                        /* I - MIME database */
+    const char   *filename,            /* I - Convs file to load */
+    const char   *filterpath,          /* I - Path for filters */
+    cups_array_t *filtercache)         /* I - Filter program cache */
 {
   cups_file_t  *fp;                    /* Convs file */
   char         line[1024],             /* Input line from file */
@@ -497,16 +631,19 @@ load_convs(mime_t       *mime,            /* I - MIME database */
   int          cost;                   /* Cost of filter */
 
 
-  DEBUG_printf(("load_convs(mime=%p, filename=\"%s\", filterpath=\"%s\", "
-                "filtercache=%p)\n", mime, filename, filterpath, filtercache));
-
+  DEBUG_printf(("2mime_load_convs(mime=%p, filename=\"%s\", filterpath=\"%s\", "
+                "filtercache=%p)", mime, filename, filterpath, filtercache));
 
  /*
   * First try to open the file...
   */
 
   if ((fp = cupsFileOpen(filename, "r")) == NULL)
+  {
+    DEBUG_printf(("3mime_load_convs: Unable to open \"%s\": %s", filename,
+                  strerror(errno)));
     return;
+  }
 
  /*
   * Then read each line from the file, skipping any comments in the file...
@@ -567,7 +704,7 @@ load_convs(mime_t       *mime,              /* I - MIME database */
 
     if ((dsttype = mimeType(mime, super, type)) == NULL)
     {
-      DEBUG_printf(("load_convs: Destination type %s/%s not found!\n",
+      DEBUG_printf(("3mime_load_convs: Destination type %s/%s not found.",
                     super, type));
       continue;
     }
@@ -600,9 +737,9 @@ load_convs(mime_t       *mime,              /* I - MIME database */
       * Verify that the filter exists and is executable...
       */
 
-      if (!add_fcache(filtercache, filter, filterpath))
+      if (!mime_add_fcache(filtercache, filter, filterpath))
       {
-        DEBUG_printf(("load_convs: Filter %s not found in %s!\n", filter,
+        DEBUG_printf(("mime_load_convs: Filter %s not found in %s.", filter,
                      filterpath)); 
         continue;
       }
@@ -661,12 +798,12 @@ load_convs(mime_t       *mime,            /* I - MIME database */
 
 
 /*
- * 'load_types()' - Load a xyz.types file...
+ * 'mime_load_types()' - Load a xyz.types file...
  */
 
 static void
-load_types(mime_t     *mime,           /* I - MIME database */
-           const char *filename)       /* I - Types file to load */
+mime_load_types(mime_t     *mime,      /* I - MIME database */
+                const char *filename)  /* I - Types file to load */
 {
   cups_file_t  *fp;                    /* Types file */
   int          linelen;                /* Length of line */
@@ -678,14 +815,18 @@ load_types(mime_t     *mime,              /* I - MIME database */
   mime_type_t  *typeptr;               /* New MIME type */
 
 
-  DEBUG_printf(("load_types(mime=%p, filename=\"%s\")\n", mime, filename));
+  DEBUG_printf(("2mime_load_types(mime=%p, filename=\"%s\")", mime, filename));
 
  /*
   * First try to open the file...
   */
 
   if ((fp = cupsFileOpen(filename, "r")) == NULL)
+  {
+    DEBUG_printf(("3mime_load_types: Unable to open \"%s\": %s", filename,
+                  strerror(errno)));
     return;
+  }
 
  /*
   * Then read each line from the file, skipping any comments in the file...
index 7f30b1e256195718be446082b512487881c86c1c..9048ad599fb4806e187f7d997d280f9d31a8f313 100644 (file)
@@ -264,12 +264,7 @@ cupsdNetIFUpdate(void)
 
       if (match)
       {
-        if (lis->address.addr.sa_family == AF_INET)
-          temp->port = ntohs(lis->address.ipv4.sin_port);
-#ifdef AF_INET6
-        else if (lis->address.addr.sa_family == AF_INET6)
-          temp->port = ntohs(lis->address.ipv6.sin6_port);
-#endif /* AF_INET6 */
+        temp->port = _httpAddrPort(&(lis->address));
        break;
       }
     }
index 97c4208e1daa04b8db28e0f3767683d6c1720d39..ccc861d8f2899bfe291b79dc43ef36cfa4e60486 100644 (file)
                <string>/usr/sbin/cupsd</string>
                <string>-l</string>
        </array>
+       <!-- These environment variables are only used when CUPS is compiled
+            with --enable-debug-printfs -->
+       <key>EnvironmentVariables</key>
+       <dict>
+               <key>CUPS_DEBUG_LOG</key>
+               <string>/var/log/cups/debug_log</string>
+               <key>CUPS_DEBUG_LEVEL</key>
+               <string>3</string>
+               <key>CUPS_DEBUG_FILTER</key>
+               <string>^(http|_http|ipp|_ipp|mime).*</string>
+       </dict>
        <key>ServiceIPC</key>
        <true/>
        <key>Sockets</key>
index de4b637dec87f887b6d3bced366e2e910d5992a1..e3c7ad39477f8bde9b57b0086af0fd344eb2cbd2 100644 (file)
@@ -1409,8 +1409,11 @@ cupsdRenamePrinter(
   mimeDeleteType(MimeDatabase, p->filetype);
   p->filetype = mimeAddType(MimeDatabase, "printer", name);
 
-  mimeDeleteType(MimeDatabase, p->prefiltertype);
-  p->prefiltertype = mimeAddType(MimeDatabase, "prefilter", name);
+  if (p->prefiltertype)
+  {
+    mimeDeleteType(MimeDatabase, p->prefiltertype);
+    p->prefiltertype = mimeAddType(MimeDatabase, "prefilter", name);
+  }
 
  /*
   * Rename the printer...
@@ -2447,7 +2450,8 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
 
       if (p->pc && p->pc->prefilters)
       {
-        p->prefiltertype = mimeAddType(MimeDatabase, "prefilter", p->name);
+        if (!p->prefiltertype)
+          p->prefiltertype = mimeAddType(MimeDatabase, "prefilter", p->name);
 
         for (filter = (char *)cupsArrayFirst(p->pc->prefilters);
             filter;
@@ -3563,9 +3567,8 @@ add_printer_filter(
   size_t       maxsize = 0;            /* Maximum supported file size */
   mime_type_t  *temptype,              /* MIME type looping var */
                *desttype;              /* Destination MIME type */
-  char         filename[1024],         /* Full filter filename */
-               *dirsep;                /* Pointer to directory separator */
-  struct stat  fileinfo;               /* File information */
+  mime_filter_t        *filterptr;             /* MIME filter */
+  char         filename[1024];         /* Full filter filename */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
@@ -3633,85 +3636,24 @@ add_printer_filter(
   }
 
  /*
-  * See if the filter program exists; if not, stop the printer and flag
-  * the error!
+  * Check permissions on the filter and its containing directory...
   */
 
   if (strcmp(program, "-"))
   {
+    _cups_fc_result_t  result;         /* Result of file check */
+
     if (program[0] == '/')
       strlcpy(filename, program, sizeof(filename));
     else
       snprintf(filename, sizeof(filename), "%s/filter/%s", ServerBin, program);
 
-    if (stat(filename, &fileinfo))
-    {
-      memset(&fileinfo, 0, sizeof(fileinfo));
+    result = _cupsFileCheck(filename, _CUPS_FILE_CHECK_PROGRAM, !RunUser,
+                            cupsdLogFCMessage, p);
 
-      snprintf(p->state_message, sizeof(p->state_message),
-               "Printer driver \"%s\" not available: %s", filename,
-              strerror(errno));
-      cupsdSetPrinterReasons(p, "+cups-missing-filter-warning");
-
-      cupsdLogMessage(CUPSD_LOG_ERROR, "%s: %s", p->name, p->state_message);
-    }
-
-   /*
-    * When running as root, do additional security checks...
-    */
-
-    else if (!RunUser)
-    {
-     /*
-      * Only use filters that are owned by root and do not have world write
-      * permissions.
-      */
-
-      if (fileinfo.st_uid ||
-          (fileinfo.st_gid && (fileinfo.st_mode & S_IWGRP)) ||
-          (fileinfo.st_mode & (S_ISUID | S_IWOTH)) != 0)
-      {
-       snprintf(p->state_message, sizeof(p->state_message),
-                "Printer driver \"%s\" has insecure permissions "
-                "(0%o/uid=%d/gid=%d).", filename, fileinfo.st_mode,
-                (int)fileinfo.st_uid, (int)fileinfo.st_gid);
-
-#ifdef __APPLE__ /* Don't flag filters with group write for "admin" */
-        if (fileinfo.st_uid ||
-           (fileinfo.st_gid && fileinfo.st_gid != 80 &&
-            (fileinfo.st_mode & S_IWGRP)) ||
-           (fileinfo.st_mode & (S_ISUID | S_IWOTH)))
-#endif /* __APPLE__ */
-       cupsdSetPrinterReasons(p, "+cups-insecure-filter-warning");
-
-       cupsdLogMessage(CUPSD_LOG_WARN, "%s: %s", p->name, p->state_message);
-      }
-      else if (fileinfo.st_mode)
-      {
-       /*
-       * Similarly, check that the parent directory is also owned by root and
-       * does not have world write permissions.
-       */
-
-       if ((dirsep = strrchr(filename, '/')) != NULL)
-         *dirsep = '\0';
-
-       if (!stat(filename, &fileinfo) &&
-           (fileinfo.st_uid ||
-            (fileinfo.st_gid && (fileinfo.st_mode & S_IWGRP)) ||
-            (fileinfo.st_mode & (S_ISUID | S_IWOTH)) != 0))
-       {
-         snprintf(p->state_message, sizeof(p->state_message),
-                  "Printer driver directory \"%s\" has insecure permissions "
-                  "(0%o/uid=%d/gid=%d).", filename, fileinfo.st_mode,
-                  (int)fileinfo.st_uid, (int)fileinfo.st_gid);
-
-         cupsdSetPrinterReasons(p, "+cups-insecure-filter-warning");
-
-         cupsdLogMessage(CUPSD_LOG_WARN, "%s: %s", p->name, p->state_message);
-       }
-      }
-    }
+    if (result == _CUPS_FILE_CHECK_MISSING ||
+        result == _CUPS_FILE_CHECK_WRONG_TYPE)
+      return;
   }
 
  /*
@@ -3732,7 +3674,8 @@ add_printer_filter(
                        "%s", p->name, temptype->super, temptype->type,
                        desttype->super, desttype->type,
                        cost, program);
-        mimeAddFilter(MimeDatabase, temptype, desttype, cost, program);
+        filterptr = mimeAddFilter(MimeDatabase, temptype, desttype, cost,
+                                 program);
 
         if (!mimeFilterLookup(MimeDatabase, desttype, filtertype))
         {
@@ -3750,8 +3693,12 @@ add_printer_filter(
                        "%s", p->name, temptype->super, temptype->type,
                        filtertype->super, filtertype->type,
                        cost, program);
-        mimeAddFilter(MimeDatabase, temptype, filtertype, cost, program);
+        filterptr = mimeAddFilter(MimeDatabase, temptype, filtertype, cost,
+                                 program);
       }
+
+      if (filterptr)
+       filterptr->maxsize = maxsize;
     }
 }
 
@@ -4060,7 +4007,7 @@ load_ppd(cupsd_printer_t *p)              /* I - Printer */
     ppd_info.st_mtime = 1;
 
   ippDelete(p->ppd_attrs);
-  p->ppd_attrs = ippNew();
+  p->ppd_attrs = NULL;
 
   _ppdCacheDestroy(p->pc);
   p->pc = NULL;
@@ -4094,6 +4041,8 @@ load_ppd(cupsd_printer_t *p)              /* I - Printer */
   finishings[0]  = IPP_FINISHINGS_NONE;
   num_finishings = 1;
 
+  p->ppd_attrs = ippNew();
+
   if ((ppd = ppdOpenFile(ppd_name)) != NULL)
   {
    /*
@@ -4899,7 +4848,9 @@ load_ppd(cupsd_printer_t *p)              /* I - Printer */
     */
 
     if ((ppd_attr = ppdFindAttr(ppd, "APPrinterIconPath", NULL)) != NULL &&
-        ppd_attr->value)
+        ppd_attr->value &&
+       !_cupsFileCheck(ppd_attr->value, _CUPS_FILE_CHECK_FILE, !RunUser,
+                       cupsdLogFCMessage, p))
     {
       CGImageRef       imageRef = NULL;/* Current icon image */
       CGImageRef       biggestIconRef = NULL;
index 80c3fcb5995b5825491979f91137d73c6ae94224..8b3e3f23b07e97266a37e89d15ab89b357cdff79 100644 (file)
@@ -317,7 +317,6 @@ cupsdStartProcess(
   char         *real_argv[103],        /* Real command-line arguments */
                cups_exec[1024];        /* Path to "cups-exec" program */
   int          user;                   /* Command UID */
-  struct stat  commandinfo;            /* Command file information */
   cupsd_proc_t *proc;                  /* New process record */
 #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
   struct sigaction action;             /* POSIX signal handler */
@@ -329,6 +328,8 @@ cupsdStartProcess(
 #endif /* __APPLE__ */
 
 
+  *pid = 0;
+
  /*
   * Figure out the UID for the child process...
   */
@@ -344,110 +345,9 @@ cupsdStartProcess(
   * Check the permissions of the command we are running...
   */
 
-  if (stat(command, &commandinfo))
-  {
-    *pid = 0;
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                   "cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, "
-                   "infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, "
-                   "profile=%p, job=%p(%d), pid=%p) = %d",
-                   command, argv, envp, infd, outfd, errfd, backfd, sidefd,
-                   root, profile, job, job ? job->id : 0, pid, *pid);
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "%s%s \"%s\" not available: %s",
-                   job && job->printer ? job->printer->name : "",
-                   job && job->printer ? ": Printer driver" : "Program",
-                   command, strerror(errno));
-
-    if (job && job->printer)
-    {
-      if (cupsdSetPrinterReasons(job->printer, "+cups-missing-filter-warning"))
-       cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL,
-                     "Printer driver \"%s\" not available.", command);
-    }
-
-    return (0);
-  }
-  else if (!RunUser &&
-           ((commandinfo.st_mode & (S_ISUID | S_IWOTH)) ||
-            commandinfo.st_uid))
-  {
-    *pid = 0;
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                   "cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, "
-                   "infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, "
-                   "profile=%p, job=%p(%d), pid=%p) = %d",
-                   command, argv, envp, infd, outfd, errfd, backfd, sidefd,
-                   root, profile, job, job ? job->id : 0, pid, *pid);
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "%s%s \"%s\" has insecure permissions "
-                   "(0%o/uid=%d/gid=%d).",
-                   job && job->printer ? job->printer->name : "",
-                   job && job->printer ? ": Printer driver" : "Program",
-                   command, commandinfo.st_mode,
-                   (int)commandinfo.st_uid, (int)commandinfo.st_gid);
-
-    if (job && job->printer)
-    {
-      if (cupsdSetPrinterReasons(job->printer, "+cups-insecure-filter-warning"))
-       cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL,
-                     "Printer driver \"%s\" has insecure permissions "
-                     "(0%o/uid=%d/gid=%d).", command, commandinfo.st_mode,
-                     (int)commandinfo.st_uid, (int)commandinfo.st_gid);
-    }
-
-    errno = EPERM;
-
-    return (0);
-  }
-  else if ((commandinfo.st_uid != user || !(commandinfo.st_mode & S_IXUSR)) &&
-           (commandinfo.st_gid != Group || !(commandinfo.st_mode & S_IXGRP)) &&
-           !(commandinfo.st_mode & S_IXOTH))
-  {
-    *pid = 0;
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                   "cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, "
-                   "infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, "
-                   "profile=%p, job=%p(%d), pid=%p) = %d",
-                   command, argv, envp, infd, outfd, errfd, backfd, sidefd,
-                   root, profile, job, job ? job->id : 0, pid, *pid);
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "%s%s \"%s\" does not have execute permissions "
-                   "(0%o/uid=%d/gid=%d).",
-                   job && job->printer ? job->printer->name : "",
-                   job && job->printer ? ": Printer driver" : "Program",
-                   command, commandinfo.st_mode, (int)commandinfo.st_uid,
-                   (int)commandinfo.st_gid);
-
-    errno = EPERM;
+  if (_cupsFileCheck(command, _CUPS_FILE_CHECK_PROGRAM, !RunUser,
+                     cupsdLogFCMessage, job ? job->printer : NULL))
     return (0);
-  }
-  else if (!RunUser && commandinfo.st_gid && (commandinfo.st_mode & S_IWGRP))
-  {
-    cupsdLogMessage(CUPSD_LOG_WARN,
-                    "%s%s \"%s\" has insecure permissions "
-                   "(0%o/uid=%d/gid=%d).",
-                   job && job->printer ? job->printer->name : "",
-                   job && job->printer ? ": Printer driver" : "Program",
-                   command, commandinfo.st_mode,
-                   (int)commandinfo.st_uid, (int)commandinfo.st_gid);
-
-#ifdef __APPLE__ /* Don't flag filters with group write for "admin" */
-    if (commandinfo.st_gid != 80 && job && job->printer)
-#else
-    if (job && job->printer)
-#endif /* __APPLE__ */
-    {
-      if (cupsdSetPrinterReasons(job->printer, "+cups-insecure-filter-warning"))
-       cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL,
-                     "Printer driver \"%s\" has insecure permissions "
-                     "(0%o/uid=%d/gid=%d).", command, commandinfo.st_mode,
-                     (int)commandinfo.st_uid, (int)commandinfo.st_gid);
-    }
-  }
 
 #if defined(__APPLE__)
   if (envp)
index cf607e20b93d7c9728890559d9323abbd9a753da..bf3030428f089440c493cc126594de24dc4e3fe4 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Browsing test program for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -297,7 +297,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
     * Sleep for any remaining time...
     */
 
-    if (seconds > 0) 
+    if (seconds > 0)
       sleep(seconds);
   }
 
index 1a8713801bd7dfa088fdb796a165584e38b2295b..1561e81b7ff0b3ecd5c9656ee6d60495324d03b0 100644 (file)
  *
  * Contents:
  *
- *   main()        - Main entry for the test program.
- *   print_rules() - Print the rules for a file type...
- *   type_dir()    - Show the MIME types for a given directory.
+ *   main()            - Main entry for the test program.
+ *   add_ppd_filter()  - Add a printer filter from a PPD.
+ *   add_ppd_filters() - Add all filters from a PPD.
+ *   print_rules()     - Print the rules for a file type...
+ *   type_dir()        - Show the MIME types for a given directory.
  */
 
 /*
@@ -25,6 +27,8 @@
 
 #include <cups/string-private.h>
 #include <cups/dir.h>
+#include <cups/debug-private.h>
+#include <cups/ppd-private.h>
 #include "mime.h"
 
 
@@ -32,6 +36,9 @@
  * Local functions...
  */
 
+static void    add_ppd_filter(mime_t *mime, mime_type_t *filtertype,
+                              const char *filter);
+static void    add_ppd_filters(mime_t *mime, ppd_file_t *ppd);
 static void    print_rules(mime_magic_t *rules);
 static void    type_dir(mime_t *mime, const char *dirname);
 
@@ -53,6 +60,8 @@ main(int  argc,                               /* I - Number of command-line args */
   mime_t       *mime;                  /* MIME database */
   mime_type_t  *src,                   /* Source type */
                *dst;                   /* Destination type */
+  struct stat  srcinfo;                /* Source information */
+  ppd_file_t   *ppd;                   /* PPD file */
   cups_array_t *filters;               /* Filters for the file */
   mime_filter_t        *filter;                /* Current filter */
 
@@ -60,7 +69,10 @@ main(int  argc,                              /* I - Number of command-line args */
   mime        = NULL;
   src         = NULL;
   dst         = NULL;
-  filter_path = "../filter:../pdftops:" CUPS_SERVERBIN "/filter";
+  ppd         = NULL;
+  filter_path = "../filter:" CUPS_SERVERBIN "/filter";
+
+  srcinfo.st_size = 0;
 
   for (i = 1; i < argc; i ++)
     if (!strcmp(argv[i], "-d"))
@@ -68,7 +80,12 @@ main(int  argc,                              /* I - Number of command-line args */
       i ++;
 
       if (i < argc)
+      {
         mime = mimeLoad(argv[i], filter_path);
+
+       if (ppd)
+         add_ppd_filters(mime, ppd);
+      }
     }
     else if (!strcmp(argv[i], "-f"))
     {
@@ -77,12 +94,28 @@ main(int  argc,                             /* I - Number of command-line args */
       if (i < argc)
         filter_path = argv[i];
     }
+    else if (!strcmp(argv[i], "-p"))
+    {
+      i ++;
+
+      if (i < argc)
+      {
+        ppd = ppdOpenFile(argv[i]);
+
+       if (mime)
+         add_ppd_filters(mime, ppd);
+      }
+    }
     else if (!src)
     {
       if (!mime)
        mime = mimeLoad("../conf", filter_path);
 
+      if (ppd)
+        add_ppd_filters(mime, ppd);
+
       src = mimeFileType(mime, argv[i], NULL, &compression);
+      stat(argv[i], &srcinfo);
 
       if (src)
        printf("%s: %s/%s%s\n", argv[i], src->super, src->type,
@@ -102,7 +135,7 @@ main(int  argc,                             /* I - Number of command-line args */
       sscanf(argv[i], "%15[^/]/%31s", super, type);
       dst = mimeType(mime, super, type);
 
-      filters = mimeFilter(mime, src, dst, &cost);
+      filters = mimeFilter2(mime, src, srcinfo.st_size, dst, &cost);
 
       if (!filters)
       {
@@ -111,15 +144,25 @@ main(int  argc,                           /* I - Number of command-line args */
       }
       else
       {
-        printf("Filter cost = %d\n", cost);
+        int first = 1;                 /* First filter shown? */
 
-        filter = (mime_filter_t *)cupsArrayFirst(filters);
-       fputs(filter->filter, stdout);
+        printf("Filter cost = %d\n", cost);
 
-       for (filter = (mime_filter_t *)cupsArrayNext(filters);
+        for (filter = (mime_filter_t *)cupsArrayFirst(filters);
             filter;
             filter = (mime_filter_t *)cupsArrayNext(filters))
-         printf(" | %s", filter->filter);
+       {
+         if (!strcmp(filter->filter, "-"))
+           continue;
+
+          if (first)
+         {
+           first = 0;
+           fputs(filter->filter, stdout);
+         }
+         else
+           printf(" | %s", filter->filter);
+       }
 
         putchar('\n');
 
@@ -128,7 +171,11 @@ main(int  argc,                            /* I - Number of command-line args */
     }
 
   if (!mime)
+  {
     mime = mimeLoad("../conf", filter_path);
+    if (ppd)
+      add_ppd_filters(mime, ppd);
+  }
 
   if (!src)
   {
@@ -150,13 +197,173 @@ main(int  argc,                          /* I - Number of command-line args */
             filter->filter, filter->cost);
 
     type_dir(mime, "../doc");
-    type_dir(mime, "../man");
   }
 
   return (0);
 }
 
 
+/*
+ * 'add_printer_filter()' - Add a printer filter from a PPD.
+ */
+
+static void
+add_ppd_filter(mime_t      *mime,      /* I - MIME database */
+               mime_type_t *filtertype,        /* I - Filter or prefilter MIME type */
+              const char  *filter)     /* I - Filter to add */
+{
+  char         super[MIME_MAX_SUPER],  /* Super-type for filter */
+               type[MIME_MAX_TYPE],    /* Type for filter */
+               dsuper[MIME_MAX_SUPER], /* Destination super-type for filter */
+               dtype[MIME_MAX_TYPE],   /* Destination type for filter */
+               dest[MIME_MAX_SUPER + MIME_MAX_TYPE + 2],
+                                       /* Destination super/type */
+               program[1024];          /* Program/filter name */
+  int          cost;                   /* Cost of filter */
+  size_t       maxsize = 0;            /* Maximum supported file size */
+  mime_type_t  *temptype,              /* MIME type looping var */
+               *desttype;              /* Destination MIME type */
+  mime_filter_t        *filterptr;             /* MIME filter */
+
+
+  DEBUG_printf(("add_ppd_filter(mime=%p, filtertype=%p(%s/%s), filter=\"%s\")",
+                mime, filtertype, filtertype->super, filtertype->type, filter));
+
+ /*
+  * Parse the filter string; it should be in one of the following formats:
+  *
+  *     source/type cost program
+  *     source/type cost maxsize(nnnn) program
+  *     source/type dest/type cost program
+  *     source/type dest/type cost maxsize(nnnn) program
+  */
+
+  if (sscanf(filter, "%15[^/]/%255s%*[ \t]%15[^/]/%255s%d%*[ \t]%1023[^\n]",
+             super, type, dsuper, dtype, &cost, program) == 6)
+  {
+    snprintf(dest, sizeof(dest), "test/%s/%s", dsuper, dtype);
+
+    if ((desttype = mimeType(mime, "printer", dest)) == NULL)
+      desttype = mimeAddType(mime, "printer", dest);
+  }
+  else
+  {
+    if (sscanf(filter, "%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, &cost,
+               program) == 4)
+    {
+      desttype = filtertype;
+    }
+    else
+    {
+      printf("testmime: Invalid filter string \"%s\".\n", filter);
+      return;
+    }
+  }
+
+  if (!strncmp(program, "maxsize(", 8))
+  {
+    char       *ptr;                   /* Pointer into maxsize(nnnn) program */
+
+    maxsize = strtoll(program + 8, &ptr, 10);
+
+    if (*ptr != ')')
+    {
+      printf("testmime: Invalid filter string \"%s\".\n", filter);
+      return;
+    }
+
+    ptr ++;
+    while (_cups_isspace(*ptr))
+      ptr ++;
+
+    _cups_strcpy(program, ptr);
+  }
+
+ /*
+  * Add the filter to the MIME database, supporting wildcards as needed...
+  */
+
+  for (temptype = mimeFirstType(mime);
+       temptype;
+       temptype = mimeNextType(mime))
+    if (((super[0] == '*' && strcasecmp(temptype->super, "printer")) ||
+         !strcasecmp(temptype->super, super)) &&
+        (type[0] == '*' || !strcasecmp(temptype->type, type)))
+    {
+      if (desttype != filtertype)
+      {
+        DEBUG_printf(("add_ppd_filter: Adding filter %s/%s %s/%s %d %s",
+                     temptype->super, temptype->type, desttype->super,
+                     desttype->type, cost, program));
+        filterptr = mimeAddFilter(mime, temptype, desttype, cost, program);
+
+        if (!mimeFilterLookup(mime, desttype, filtertype))
+        {
+          DEBUG_printf(("add_printer_filter: Adding filter %s/%s %s/%s 0 -",
+                       desttype->super, desttype->type, filtertype->super,
+                       filtertype->type));
+          mimeAddFilter(mime, desttype, filtertype, cost, "-");
+        }
+      }
+      else
+      {
+        DEBUG_printf(("add_printer_filter: Adding filter %s/%s %s/%s %d %s",
+                     temptype->super, temptype->type, filtertype->super,
+                     filtertype->type, cost, program));
+        filterptr = mimeAddFilter(mime, temptype, filtertype, cost, program);
+      }
+
+      if (filterptr)
+       filterptr->maxsize = maxsize;
+    }
+}
+
+
+/*
+ * 'add_ppd_filters()' - Add all filters from a PPD.
+ */
+
+static void
+add_ppd_filters(mime_t     *mime,      /* I - MIME database */
+                ppd_file_t *ppd)       /* I - PPD file */
+{
+  _ppd_cache_t *pc;                    /* Cache data for PPD */
+  const char   *value;                 /* Filter definition value */
+  mime_type_t  *filter,                /* Filter type */
+               *prefilter;             /* Pre-filter type */
+
+
+  pc = _ppdCacheCreateWithPPD(ppd);
+  if (!pc)
+    return;
+
+  filter = mimeAddType(mime, "printer", "test");
+
+  if (pc->filters)
+  {
+    for (value = (const char *)cupsArrayFirst(pc->filters);
+         value;
+         value = (const char *)cupsArrayNext(pc->filters))
+      add_ppd_filter(mime, filter, value);
+  }
+  else
+  {
+    add_ppd_filter(mime, filter, "application/vnd.cups-raw 0 -");
+    add_ppd_filter(mime, filter, "application/vnd.cups-postscript 0 -");
+  }
+
+  if (pc->prefilters)
+  {
+    prefilter = mimeAddType(mime, "prefilter", "test");
+
+    for (value = (const char *)cupsArrayFirst(pc->prefilters);
+         value;
+         value = (const char *)cupsArrayNext(pc->prefilters))
+      add_ppd_filter(mime, prefilter, value);
+  }
+}
+
+
 /*
  * 'print_rules()' - Print the rules for a file type...
  */
index 6f4706e20900051958a4f9121f7adfa7fe652693..78652b529fc39ace68b66ad24a9faf1af79014c2 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   MIME typing routines for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
  *
  * Contents:
  *
- *   mimeAddType()      - Add a MIME type to a database.
- *   mimeAddTypeRule()  - Add a detection rule for a file type.
- *   mimeFileType()     - Determine the type of a file.
- *   mimeType()         - Lookup a file type.
- *   compare_types()    - Compare two MIME super/type names.
- *   checkrules()       - Check each rule in a list.
- *   patmatch()         - Pattern matching...
+ *   mimeAddType()        - Add a MIME type to a database.
+ *   mimeAddTypeRule()    - Add a detection rule for a file type.
+ *   mimeFileType()       - Determine the type of a file.
+ *   mimeType()           - Lookup a file type.
+ *   mime_compare_types() - Compare two MIME super/type names.
+ *   mime_check_rules()   - Check each rule in a list.
+ *   mime_patmatch()      - Pattern matching.
  */
 
 /*
@@ -50,10 +50,10 @@ typedef struct _mime_filebuf_s              /**** File buffer for MIME typing ****/
  * Local functions...
  */
 
-static int     compare_types(mime_type_t *t0, mime_type_t *t1);
-static int     checkrules(const char *filename, _mime_filebuf_t *fb,
-                          mime_magic_t *rules);
-static int     patmatch(const char *s, const char *pat);
+static int     mime_compare_types(mime_type_t *t0, mime_type_t *t1);
+static int     mime_check_rules(const char *filename, _mime_filebuf_t *fb,
+                                mime_magic_t *rules);
+static int     mime_patmatch(const char *s, const char *pat);
 
 
 /*
@@ -90,42 +90,60 @@ mimeAddType(mime_t     *mime,               /* I - MIME database */
            const char *type)           /* I - Type name */
 {
   mime_type_t  *temp;                  /* New MIME type */
+  size_t       typelen;                /* Length of type name */
 
 
+  DEBUG_printf(("mimeAddType(mime=%p, super=\"%s\", type=\"%s\")", mime, super,
+                type));
+
  /*
   * Range check input...
   */
 
   if (!mime || !super || !type)
+  {
+    DEBUG_puts("1mimeAddType: Returning NULL (bad arguments).");
     return (NULL);
+  }
 
  /*
   * See if the type already exists; if so, return the existing type...
   */
 
   if ((temp = mimeType(mime, super, type)) != NULL)
+  {
+    DEBUG_printf(("1mimeAddType: Returning %p (existing).", temp));
     return (temp);
+  }
 
  /*
   * The type doesn't exist; add it...
   */
 
   if (!mime->types)
-    mime->types = cupsArrayNew((cups_array_func_t)compare_types, NULL);
+    mime->types = cupsArrayNew((cups_array_func_t)mime_compare_types, NULL);
 
   if (!mime->types)
+  {
+    DEBUG_puts("1mimeAddType: Returning NULL (no types).");
     return (NULL);
+  }
+
+  typelen = strlen(type) + 1;
 
-  if ((temp = calloc(1, sizeof(mime_type_t) - MIME_MAX_TYPE +
-                        strlen(type) + 1)) == NULL)
+  if ((temp = calloc(1, sizeof(mime_type_t) - MIME_MAX_TYPE + typelen)) == NULL)
+  {
+    DEBUG_puts("1mimeAddType: Returning NULL (out of memory).");
     return (NULL);
+  }
 
   strlcpy(temp->super, super, sizeof(temp->super));
-  strcpy(temp->type, type);            /* Safe: temp->type is allocated */
+  memcpy(temp->type, type, typelen);
   temp->priority = 100;
 
   cupsArrayAdd(mime->types, temp);
 
+  DEBUG_printf(("1mimeAddType: Returning %p (new).", temp));
   return (temp);
 }
 
@@ -151,6 +169,9 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
                *current;               /* Current rule */
 
 
+  DEBUG_printf(("mimeAddTypeRule(mt=%p(%s/%s), rule=\"%s\")", mt,
+                mt ? mt->super : "???", mt ? mt->type : "???", rule));
+
  /*
   * Range check input...
   */
@@ -177,8 +198,6 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
   logic  = MIME_MAGIC_NOP;
   invert = 0;
 
-  DEBUG_printf(("mimeAddTypeRule: %s/%s: %s", mt->super, mt->type, rule));
-
   while (*rule != '\0')
   {
     while (isspace(*rule & 255))
@@ -186,13 +205,13 @@ mimeAddTypeRule(mime_type_t *mt,  /* I - Type to add to */
 
     if (*rule == '(')
     {
-      DEBUG_puts("mimeAddTypeRule: New parenthesis group");
+      DEBUG_puts("1mimeAddTypeRule: New parenthesis group");
       logic = MIME_MAGIC_NOP;
       rule ++;
     }
     else if (*rule == ')')
     {
-      DEBUG_puts("mimeAddTypeRule: Close paren...");
+      DEBUG_puts("1mimeAddTypeRule: Close paren...");
       if (current == NULL || current->parent == NULL)
         return (-1);
 
@@ -227,11 +246,11 @@ mimeAddTypeRule(mime_type_t *mt,  /* I - Type to add to */
         current->prev   = NULL;
        current->parent = temp;
 
-        DEBUG_printf(("mimeAddTypeRule: Creating new AND group %p...", temp));
+        DEBUG_printf(("1mimeAddTypeRule: Creating new AND group %p.", temp));
       }
       else if (current->parent)
       {
-        DEBUG_printf(("mimeAddTypeRule: Setting group %p op to AND...",
+        DEBUG_printf(("1mimeAddTypeRule: Setting group %p op to AND.",
                      current->parent));
         current->parent->op = MIME_MAGIC_AND;
       }
@@ -258,8 +277,8 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
          if ((temp = calloc(1, sizeof(mime_magic_t))) == NULL)
            return (-1);
 
-          DEBUG_printf(("mimeAddTypeRule: Creating new AND group %p inside OR "
-                       "group", temp));
+          DEBUG_printf(("1mimeAddTypeRule: Creating new AND group %p inside OR "
+                       "group.", temp));
 
           while (current->prev != NULL)
          {
@@ -279,7 +298,7 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
          * This isn't the top rule, so go up one level...
          */
 
-          DEBUG_puts("mimeAddTypeRule: Going up one level");
+          DEBUG_puts("1mimeAddTypeRule: Going up one level.");
          current = current->parent;
        }
       }
@@ -289,7 +308,7 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
     }
     else if (*rule == '!')
     {
-      DEBUG_puts("mimeAddTypeRule: NOT");
+      DEBUG_puts("1mimeAddTypeRule: NOT");
       invert = 1;
       rule ++;
     }
@@ -463,8 +482,8 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
         * Add parenthetical grouping...
        */
 
-        DEBUG_printf(("mimeAddTypeRule: Making new OR group %p for "
-                     "parenthesis...", temp));
+        DEBUG_printf(("1mimeAddTypeRule: Making new OR group %p for "
+                     "parenthesis.", temp));
 
         temp->op = MIME_MAGIC_OR;
 
@@ -479,9 +498,9 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
         logic = MIME_MAGIC_OR;
       }
 
-      DEBUG_printf(("mimeAddTypeRule: adding %p: %s, op=MIME_MAGIC_%s(%d), "
-                   "logic=MIME_MAGIC_%s, invert=%d", temp, name, debug_ops[op],
-                   op, debug_ops[logic], invert));
+      DEBUG_printf(("1mimeAddTypeRule: Adding %p: %s, op=MIME_MAGIC_%s(%d), "
+                   "logic=MIME_MAGIC_%s, invert=%d.", temp, name,
+                   debug_ops[op], op, debug_ops[logic], invert));
 
      /*
       * Fill in data for the rule...
@@ -579,14 +598,22 @@ mimeFileType(mime_t     *mime,            /* I - MIME database */
   */
 
   if (!mime || !pathname)
+  {
+    DEBUG_puts("1mimeFileType: Returning NULL.");
     return (NULL);
+  }
 
  /*
   * Try to open the file...
   */
 
   if ((fb.fp = cupsFileOpen(pathname, "r")) == NULL)
+  {
+    DEBUG_printf(("1mimeFileType: Unable to open \"%s\": %s", pathname,
+                  strerror(errno)));
+    DEBUG_puts("1mimeFileType: Returning NULL.");
     return (NULL);
+  }
 
   fb.offset = -1;
   fb.length = 0;
@@ -614,7 +641,7 @@ mimeFileType(mime_t     *mime,              /* I - MIME database */
   for (type = (mime_type_t *)cupsArrayFirst(mime->types), best = NULL;
        type;
        type = (mime_type_t *)cupsArrayNext(mime->types))
-    if (checkrules(base, &fb, type->rules))
+    if (mime_check_rules(base, &fb, type->rules))
     {
       if (!best || type->priority > best->priority)
         best = type;
@@ -625,10 +652,15 @@ mimeFileType(mime_t     *mime,            /* I - MIME database */
   */
 
   if (compression)
+  {
     *compression = cupsFileCompression(fb.fp);
+    DEBUG_printf(("1mimeFileType: *compression=%d", *compression));
+  }
 
   cupsFileClose(fb.fp);
 
+  DEBUG_printf(("1mimeFileType: Returning %p(%s/%s).", best,
+                best ? best->super : "???", best ? best->type : "???"));
   return (best);
 }
 
@@ -642,15 +674,22 @@ mimeType(mime_t     *mime,                /* I - MIME database */
          const char *super,            /* I - Super-type name */
         const char *type)              /* I - Type name */
 {
-  mime_type_t  key;                    /* MIME type search key*/
+  mime_type_t  key,                    /* MIME type search key */
+               *mt;                    /* Matching type */
+
 
+  DEBUG_printf(("mimeType(mime=%p, super=\"%s\", type=\"%s\")", mime, super,
+                type));
 
  /*
   * Range check input...
   */
 
   if (!mime || !super || !type)
+  {
+    DEBUG_puts("1mimeType: Returning NULL.");
     return (NULL);
+  }
 
  /*
   * Lookup the type in the array...
@@ -659,17 +698,19 @@ mimeType(mime_t     *mime,                /* I - MIME database */
   strlcpy(key.super, super, sizeof(key.super));
   strlcpy(key.type, type, sizeof(key.type));
 
-  return ((mime_type_t *)cupsArrayFind(mime->types, &key));
+  mt = (mime_type_t *)cupsArrayFind(mime->types, &key);
+  DEBUG_printf(("1mimeType: Returning %p.", mt));
+  return (mt);
 }
 
 
 /*
- * 'compare_types()' - Compare two MIME super/type names.
+ * 'mime_compare_types()' - Compare two MIME super/type names.
  */
 
 static int                             /* O - Result of comparison */
-compare_types(mime_type_t *t0,         /* I - First type */
-              mime_type_t *t1)         /* I - Second type */
+mime_compare_types(mime_type_t *t0,    /* I - First type */
+                   mime_type_t *t1)    /* I - Second type */
 {
   int  i;                              /* Result of comparison */
 
@@ -682,13 +723,14 @@ compare_types(mime_type_t *t0,            /* I - First type */
 
 
 /*
- * 'checkrules()' - Check each rule in a list.
+ * 'mime_check_rules()' - Check each rule in a list.
  */
 
 static int                             /* O - 1 if match, 0 if no match */
-checkrules(const char      *filename,  /* I - Filename */
-           _mime_filebuf_t *fb,                /* I - File to check */
-           mime_magic_t    *rules)     /* I - Rules to check */
+mime_check_rules(
+    const char      *filename,         /* I - Filename */
+    _mime_filebuf_t *fb,               /* I - File to check */
+    mime_magic_t    *rules)            /* I - Rules to check */
 {
   int          n;                      /* Looping var */
   int          region;                 /* Region to look at */
@@ -699,7 +741,7 @@ checkrules(const char      *filename,       /* I - Filename */
   unsigned char        *bufptr;                /* Pointer into buffer */
 
 
-  DEBUG_printf(("checkrules(filename=\"%s\", fb=%p, rules=%p)", filename,
+  DEBUG_printf(("4mime_check_rules(filename=\"%s\", fb=%p, rules=%p)", filename,
                 fb, rules));
 
   if (rules == NULL)
@@ -721,7 +763,7 @@ checkrules(const char      *filename,       /* I - Filename */
     switch (rules->op)
     {
       case MIME_MAGIC_MATCH :
-          result = patmatch(filename, rules->value.matchv);
+          result = mime_patmatch(filename, rules->value.matchv);
          break;
 
       case MIME_MAGIC_ASCII :
@@ -811,7 +853,7 @@ checkrules(const char      *filename,       /* I - Filename */
          break;
 
       case MIME_MAGIC_STRING :
-          DEBUG_printf(("checkrules: string(%d, \"%s\")", rules->offset,
+          DEBUG_printf(("5mime_check_rules: string(%d, \"%s\")", rules->offset,
                        rules->value.stringv));
 
          /*
@@ -830,8 +872,8 @@ checkrules(const char      *filename,       /* I - Filename */
                                      sizeof(fb->buffer));
            fb->offset = rules->offset;
 
-            DEBUG_printf(("checkrules: loaded %d byte fb->buffer at %d, starts "
-                         "with \"%c%c%c%c\"...",
+            DEBUG_printf(("5mime_check_rules: loaded %d byte fb->buffer at %d, starts "
+                         "with \"%c%c%c%c\".",
                          fb->length, fb->offset, fb->buffer[0], fb->buffer[1],
                          fb->buffer[2], fb->buffer[3]));
          }
@@ -846,7 +888,7 @@ checkrules(const char      *filename,       /* I - Filename */
          else
             result = (memcmp(fb->buffer + rules->offset - fb->offset,
                             rules->value.stringv, rules->length) == 0);
-          DEBUG_printf(("checkrules: result=%d", result));
+          DEBUG_printf(("5mime_check_rules: result=%d", result));
          break;
 
       case MIME_MAGIC_ISTRING :
@@ -1028,7 +1070,7 @@ checkrules(const char      *filename,     /* I - Filename */
 
       default :
           if (rules->child != NULL)
-           result = checkrules(filename, fb, rules->child);
+           result = mime_check_rules(filename, fb, rules->child);
          else
            result = 0;
          break;
@@ -1047,7 +1089,7 @@ checkrules(const char      *filename,     /* I - Filename */
     * the the rule set is false...
     */
 
-    DEBUG_printf(("checkrules: result of test %p (MIME_MAGIC_%s) is %d",
+    DEBUG_printf(("5mime_check_rules: result of test %p (MIME_MAGIC_%s) is %d",
                   rules, debug_ops[rules->op], result));
 
     if ((result && logic == MIME_MAGIC_OR) ||
@@ -1066,12 +1108,12 @@ checkrules(const char      *filename,   /* I - Filename */
 
 
 /*
- * 'patmatch()' - Pattern matching...
+ * 'mime_patmatch()' - Pattern matching.
  */
 
-static int                     /* O - 1 if match, 0 if no match */
-patmatch(const char *s,                /* I - String to match against */
-         const char *pat)      /* I - Pattern to match against */
+static int                             /* O - 1 if match, 0 if no match */
+mime_patmatch(const char *s,           /* I - String to match against */
+              const char *pat)         /* I - Pattern to match against */
 {
  /*
   * Range check the input...
@@ -1103,7 +1145,7 @@ patmatch(const char *s,           /* I - String to match against */
 
       while (*s != '\0')
       {
-        if (patmatch(s, pat))
+        if (mime_patmatch(s, pat))
          return (1);
 
        s ++;
index b170f805275267d8c5c8f14571aae5b0818c84a1..e686b6f8b38ef498ea0194087c60ee012418e3fe 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Mini-daemon utility functions for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2005 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
index ecf7645a4a8a222c971c52d35f97ef3fe306e192..b98476555fb767a5b46d6b3edbabab8819e46fd5 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Mini-daemon utility definitions for CUPS.
  *
- *   Copyright 2007-2010 by Apple Inc.
+ *   Copyright 2007-2011 by Apple Inc.
  *   Copyright 1997-2005 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
index 55ebb0f40fb144343db1439321fbe9483c427e7b..b841b975b3f36c160a9d97a0ec00265f93b714e5 100644 (file)
@@ -32,7 +32,7 @@
  *   check_translations() - Check translations in the PPD file.
  *   show_conflicts()     - Show option conflicts in a PPD file.
  *   test_raster()        - Test PostScript commands for raster printers.
- *   usage()              - Show program usage...
+ *   usage()              - Show program usage.
  *   valid_path()         - Check whether a path has the correct capitalization.
  *   valid_utf8()         - Check whether a string contains valid UTF-8 text.
  */
@@ -127,7 +127,7 @@ static int  check_profiles(ppd_file_t *ppd, const char *root, int errors,
 static int     check_sizes(ppd_file_t *ppd, int errors, int verbose, int warn);
 static int     check_translations(ppd_file_t *ppd, int errors, int verbose,
                                   int warn);
-static void    show_conflicts(ppd_file_t *ppd);
+static void    show_conflicts(ppd_file_t *ppd, const char *prefix);
 static int     test_raster(ppd_file_t *ppd, int verbose);
 static void    usage(void);
 static int     valid_path(const char *keyword, const char *path, int errors,
@@ -1340,15 +1340,6 @@ main(int  argc,                          /* I - Number of command-line args */
                            attr->name);
        }
 
-        ppdMarkDefaults(ppd);
-       if (ppdConflicts(ppd))
-       {
-         _cupsLangPuts(stdout,
-                       _("        WARN    Default choices conflicting."));
-
-          show_conflicts(ppd);
-        }
-
         if (ppdversion < 43)
        {
           _cupsLangPrintf(stdout,
@@ -2167,6 +2158,22 @@ check_defaults(ppd_file_t *ppd,          /* I - PPD file */
 
   prefix = warn ? "  WARN  " : "**FAIL**";
 
+  ppdMarkDefaults(ppd);
+  if (ppdConflicts(ppd))
+  {
+    if (!warn && !errors && !verbose)
+      _cupsLangPuts(stdout, _(" FAIL"));
+
+    if (verbose >= 0)
+      _cupsLangPrintf(stdout,
+                     _("      %s  Default choices conflicting."), prefix);
+
+    show_conflicts(ppd, prefix);
+
+    if (!warn)
+      errors ++;
+  }
+
   for (j = 0; j < ppd->num_attrs; j ++)
   {
     attr = ppd->attrs[j];
@@ -2916,13 +2923,25 @@ check_sizes(ppd_file_t *ppd,            /* I - PPD file */
            int        verbose,         /* I - Verbosity level */
            int        warn)            /* I - Warnings only? */
 {
-  int          i;                      /* Looping vars */
+  int          i;                      /* Looping var */
   ppd_size_t   *size;                  /* Current size */
   int          width,                  /* Custom width */
                length;                 /* Custom length */
   const char   *prefix;                /* WARN/FAIL prefix */
   ppd_option_t *page_size,             /* PageSize option */
                *page_region;           /* PageRegion option */
+  _pwg_media_t  *pwg_media;             /* PWG media */
+  char          buf[1024];              /* PapeSize name that is supposed to be */
+  const char   *ptr;                   /* Pointer into string */
+  int          width_2540ths,          /* PageSize width in 2540ths */
+               length_2540ths;         /* PageSize length in 2540ths */
+  int          is_ok;                  /* Flag for PageSize name verification */
+  double       width_tmp,              /* Width after rounded up */
+               length_tmp,             /* Length after rounded up */
+               width_inch,             /* Width in inches */
+               length_inch,            /* Length in inches */
+               width_mm,               /* Width in millimeters */
+               length_mm;              /* Length in millimeters */
 
 
   prefix = warn ? "  WARN  " : "**FAIL**";
@@ -3028,6 +3047,112 @@ check_sizes(ppd_file_t *ppd,            /* I - PPD file */
       if (!warn)
        errors ++;
     }
+
+   /*
+    * Verify that the size name is Adobe standard name if it's a standard size
+    * and the dementional name if it's not a standard size.  Suffix should be
+    * .Fullbleed, etc., or numeric, e.g., Letter, Letter.Fullbleed,
+    * Letter.Transverse, Letter1, Letter2, 4x8, 55x91mm, 55x91mm.Fullbleed, etc.
+    */
+
+    if (warn != 0)
+    {
+      is_ok          = 1;
+      width_2540ths  = (size->length > size->width) ?
+                           _PWG_FROMPTS(size->width) :
+                          _PWG_FROMPTS(size->length);
+      length_2540ths = (size->length > size->width) ?
+                           _PWG_FROMPTS(size->length) :
+                          _PWG_FROMPTS(size->width);
+      pwg_media      = _pwgMediaForSize(width_2540ths, length_2540ths);
+
+      if (pwg_media && pwg_media->ppd)
+      {
+        strlcpy(buf, pwg_media->ppd, sizeof(buf));
+
+        if (size->left == 0 && size->bottom == 0 &&
+           size->right == size->width && size->top == size->length)
+        {
+          snprintf(buf, sizeof(buf), "%s.Fullbleed", pwg_media->ppd);
+         if (strcmp(size->name, buf))
+           is_ok = 0;                                  
+        }
+        else if (size->width > size->length)
+        {
+         if ((ptr = pwg_media->ppd + strlen(pwg_media->ppd) - 7)
+                 >= pwg_media->ppd && !strcmp(ptr, "Rotated"))
+         {
+           if (strcmp(size->name, buf))
+             is_ok = 0;
+         }
+         else
+         {
+           snprintf(buf, sizeof(buf), "%sRotated", pwg_media->ppd);
+           if (strcmp(size->name, buf))
+           {
+             snprintf(buf, sizeof(buf), "%s.Transverse", pwg_media->ppd);
+             if (strcmp(size->name, buf))
+               is_ok = 0;                                      
+           }
+         }
+        }
+       else
+        {
+         if ((!strncmp(size->name, pwg_media->ppd, strlen(pwg_media->ppd))))
+          {
+            for (ptr = size->name + strlen(pwg_media->ppd); *ptr; ptr ++)
+            {
+              if (!isdigit(*ptr & 255))
+             {
+                is_ok = 0;
+               break;
+             }
+            }
+          }
+          else
+            is_ok = 0;
+        }
+        
+        if (!is_ok)
+          _cupsLangPrintf(stdout,
+                          _("      %s  Size \"%s\" should be the Adobe "
+                           "standard name \"%s\"."),
+                          prefix, size->name, buf);
+      }
+      else
+      {
+        width_tmp  = (fabs(size->width - ceil(size->width)) < 0.1) ?
+                        ceil(size->width) : size->width;
+        length_tmp = (fabs(size->length - ceil(size->length)) < 0.1) ?
+                        ceil(size->length) : size->length;
+
+        if (fmod(width_tmp, 18.0) == 0.0 && fmod(length_tmp, 18.0) == 0.0)
+        {
+          width_inch  = width_tmp / 72.0;
+          length_inch = length_tmp / 72.0;
+
+          snprintf(buf, sizeof(buf), "%gx%g", width_inch, length_inch);
+        }
+        else
+        {
+          width_mm  = size->width / 72.0 * 25.4;
+          length_mm = size->length / 72.0 * 25.4;
+
+          snprintf(buf, sizeof(buf), "%.0fx%.0fmm", width_mm, length_mm);
+        }
+
+        if (size->left == 0 && size->bottom == 0 &&
+           size->right == size->width && size->top == size->length)
+          strlcat(buf, ".Fullbleed", sizeof(buf));
+        else if (size->width > size->length)
+          strlcat(buf, ".Transverse", sizeof(buf));
+
+        if (strcmp(size->name, buf))
+          _cupsLangPrintf(stdout,
+                          _("      %s  Size \"%s\" should be \"%s\"."),
+                          prefix, size->name, buf);
+      }
+    }
   }
 
   return (errors);
@@ -3330,7 +3455,8 @@ check_translations(ppd_file_t *ppd,       /* I - PPD file */
  */
 
 static void
-show_conflicts(ppd_file_t *ppd)                /* I - PPD to check */
+show_conflicts(ppd_file_t *ppd,                /* I - PPD to check */
+               const char *prefix)     /* I - Prefix string */
 {
   int          i, j;                   /* Looping variables */
   ppd_const_t  *c;                     /* Current constraint */
@@ -3417,9 +3543,9 @@ show_conflicts(ppd_file_t *ppd)           /* I - PPD to check */
 
     if (c1 != NULL && c1->marked && c2 != NULL && c2->marked)
       _cupsLangPrintf(stdout,
-                      _("        WARN    \"%s %s\" conflicts with \"%s %s\"\n"
+                      _("      %s  \"%s %s\" conflicts with \"%s %s\"\n"
                         "                (constraint=\"%s %s %s %s\")."),
-                     o1->keyword, c1->choice, o2->keyword, c2->choice,
+                     prefix, o1->keyword, c1->choice, o2->keyword, c2->choice,
                      c->option1, c->choice1, c->option2, c->choice2);
   }
 }
@@ -3477,7 +3603,7 @@ test_raster(ppd_file_t *ppd,              /* I - PPD file */
 
 
 /*
- * 'usage()' - Show program usage...
+ * 'usage()' - Show program usage.
  */
 
 static void
index 8ad6c5b9f3d51d1663f4b471452aa11f6fa8b466..4da5f6a7a7b6ce9384724bdce994bcadba470893 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id$"
+# "$Id: get-jobs.test 9702 2011-04-20 21:16:08Z mike $"
 #
 #   Get list of not-completed jobs.
 #
@@ -49,5 +49,5 @@
 
 
 #
-# End of "$Id$".
+# End of "$Id: get-jobs.test 9702 2011-04-20 21:16:08Z mike $".
 #
index 484ada29ddfe59a27b3bbddb9a82110a6bb50c3a..5d1ce17e9f4cecafb75299e9d1761b0a7f626164 100644 (file)
@@ -202,7 +202,7 @@ typedef struct _ipp_printer_s               /**** Printer data ****/
   size_t               urilen;         /* Length of printer URI */
   ipp_t                        *attrs;         /* Static attributes */
   ipp_pstate_t         state;          /* printer-state value */
-  _ipp_preasons_t      state_reasons;  /* printer-state-reasons values */  
+  _ipp_preasons_t      state_reasons;  /* printer-state-reasons values */
   cups_array_t         *jobs;          /* Jobs */
   _ipp_job_t           *active_job;    /* Current active/pending job */
   int                  next_job_id;    /* Next job-id value */
@@ -1084,16 +1084,8 @@ create_listener(int family,              /* I  - Address family */
   }
 
   memset(&address, 0, sizeof(address));
-  if (family == AF_INET)
-  {
-    address.ipv4.sin_family = family;
-    address.ipv4.sin_port   = htons(*port);
-  }
-  else
-  {
-    address.ipv6.sin6_family = family;
-    address.ipv6.sin6_port   = htons(*port);
-  }
+  address.addr.sa_family = family;
+  _httpAddrSetPort(&address, *port);
 
   if (bind(sock, (struct sockaddr *)&address, httpAddrLength(&address)))
   {
@@ -1305,7 +1297,7 @@ create_printer(const char *servername,    /* I - Server hostname (NULL for default)
   printer->ipv4          = -1;
   printer->ipv6          = -1;
   printer->name          = _cupsStrAlloc(name);
-#ifdef HAVE_DNSSD */
+#ifdef HAVE_DNSSD
   printer->dnssd_name    = _cupsStrRetain(printer->name);
 #endif /* HAVE_DNSSD */
   printer->directory     = _cupsStrAlloc(directory);
@@ -2898,13 +2890,13 @@ ipp_print_job(_ipp_client_t *client)    /* I - Client */
     snprintf(filename, sizeof(filename), "%s/%d.png",
              client->printer->directory, job->id);
   else if (!strcasecmp(job->format, "application/pdf"))
-    snprintf(filename, sizeof(filename), "%s/%d.pdf", 
+    snprintf(filename, sizeof(filename), "%s/%d.pdf",
              client->printer->directory, job->id);
   else if (!strcasecmp(job->format, "application/postscript"))
-    snprintf(filename, sizeof(filename), "%s/%d.ps", 
+    snprintf(filename, sizeof(filename), "%s/%d.ps",
              client->printer->directory, job->id);
   else
-    snprintf(filename, sizeof(filename), "%s/%d.prn", 
+    snprintf(filename, sizeof(filename), "%s/%d.prn",
              client->printer->directory, job->id);
 
   if ((job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0)
index 07f865b421d1c0db54273cef653170ef0569d010..90ed268d71ad1b0d3bf98b8554f8114cdf42a0e2 100644 (file)
@@ -13,6 +13,8 @@
                        buildPhases = (
                        );
                        dependencies = (
+                               726AD704135E8AA1002C930D /* PBXTargetDependency */,
+                               270CCDB2135E3CDE00007BE2 /* PBXTargetDependency */,
                                273BF6DE1333B6370022CAAB /* PBXTargetDependency */,
                        );
                        name = Tests;
@@ -48,6 +50,7 @@
                                276683DD1337B24A000D33D0 /* PBXTargetDependency */,
                                276683DF1337B24A000D33D0 /* PBXTargetDependency */,
                                7258EAEF13459ADA009286F1 /* PBXTargetDependency */,
+                               720DD6D11358FDBE0064AA82 /* PBXTargetDependency */,
                                7243793F1333FD23009631B9 /* PBXTargetDependency */,
                                724379C31333FF7D009631B9 /* PBXTargetDependency */,
                        );
@@ -57,6 +60,9 @@
 /* End PBXAggregateTarget section */
 
 /* Begin PBXBuildFile section */
+               270CCDB9135E3D0900007BE2 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A4C1336F31B004BB496 /* libcups_static.a */; };
+               270CCDBA135E3D0900007BE2 /* libcupsmime.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220FAC13330B2200FCA411 /* libcupsmime.dylib */; };
+               270CCDBC135E3D3E00007BE2 /* testmime.c in Sources */ = {isa = PBXBuildFile; fileRef = 270CCDBB135E3D3E00007BE2 /* testmime.c */; };
                273BF6C71333B5370022CAAB /* testcups.c in Sources */ = {isa = PBXBuildFile; fileRef = 273BF6C61333B5370022CAAB /* testcups.c */; };
                273BF6CE1333B5950022CAAB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273BF6CB1333B5950022CAAB /* CoreFoundation.framework */; };
                273BF6CF1333B5950022CAAB /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 273BF6CC1333B5950022CAAB /* libiconv.dylib */; };
                276683FD1337F7B8000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
                2766840F1337FA38000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
                276684111337FA7C000D33D0 /* cupsaddsmb.c in Sources */ = {isa = PBXBuildFile; fileRef = 276684101337FA7C000D33D0 /* cupsaddsmb.c */; };
+               720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
+               720DD6D31358FDDE0064AA82 /* snmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 720DD6D21358FDDE0064AA82 /* snmp.c */; };
+               720DD6D413590AB90064AA82 /* ieee1284.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379CA1334000E009631B9 /* ieee1284.c */; };
                72220EB61333052D00FCA411 /* adminutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB51333052D00FCA411 /* adminutil.c */; };
                72220EC41333056300FCA411 /* adminutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EB71333056300FCA411 /* adminutil.h */; settings = {ATTRIBUTES = (Public, ); }; };
                72220EC51333056300FCA411 /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB81333056300FCA411 /* array.c */; };
                7263EE3613330E4E00BA4D44 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7263EE3513330E4E00BA4D44 /* CoreFoundation.framework */; };
                7263EE3813330E7500BA4D44 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7263EE3713330E7500BA4D44 /* libz.dylib */; };
                7263EE3A13330EC500BA4D44 /* libldap.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7263EE3913330EC500BA4D44 /* libldap.dylib */; };
+               726AD702135E8A90002C930D /* ippserver.c in Sources */ = {isa = PBXBuildFile; fileRef = 726AD701135E8A90002C930D /* ippserver.c */; };
+               726AD707135E8B11002C930D /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A4C1336F31B004BB496 /* libcups_static.a */; };
+               726AD708135E8B11002C930D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F49133306BB00FCA411 /* CoreFoundation.framework */; };
+               726AD709135E8B11002C930D /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F55133308EA00FCA411 /* Kerberos.framework */; };
+               726AD70A135E8B11002C930D /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F53133308CB00FCA411 /* libresolv.dylib */; };
+               726AD70B135E8B11002C930D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F4A133306BB00FCA411 /* libz.dylib */; };
+               726AD70C135E8B11002C930D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F4B133306BB00FCA411 /* Security.framework */; };
+               726AD70D135E8B11002C930D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F4C133306BB00FCA411 /* SystemConfiguration.framework */; };
+               726AD70E135E8B5E002C930D /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F51133308C100FCA411 /* libiconv.dylib */; };
                72F75A5C1336F988004BB496 /* cupstestppd.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A5B1336F988004BB496 /* cupstestppd.c */; };
                72F75A671336FA38004BB496 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
                72F75A6C1336FA8A004BB496 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A691336FA8A004BB496 /* error.c */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+               270CCDB1135E3CDE00007BE2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 270CCDA6135E3C9E00007BE2;
+                       remoteInfo = testmime;
+               };
+               270CCDB5135E3CF700007BE2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 72220FAB13330B2200FCA411;
+                       remoteInfo = libcupsmime;
+               };
+               270CCDB7135E3CFD00007BE2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274FF6891333B1C400317ECB;
+                       remoteInfo = libcups_static;
+               };
                273BF6C81333B5410022CAAB /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
                        remoteGlobalIDString = 276684031337FA1D000D33D0;
                        remoteInfo = cupsaddsmb;
                };
+               720DD6CE1358FD790064AA82 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 72220EAD1333047D00FCA411;
+                       remoteInfo = libcups;
+               };
+               720DD6D01358FDBE0064AA82 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 720DD6C11358FD5F0064AA82;
+                       remoteInfo = snmp;
+               };
                72220F6413330A6500FCA411 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
                        remoteGlobalIDString = 72F75A601336F9A3004BB496;
                        remoteInfo = libcupsimage;
                };
+               726AD703135E8AA1002C930D /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 726AD6F6135E88F0002C930D;
+                       remoteInfo = ippserver;
+               };
+               726AD705135E8AC5002C930D /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274FF6891333B1C400317ECB;
+                       remoteInfo = libcups_static;
+               };
                72F75A651336FA30004BB496 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
+               270CCDA5135E3C9E00007BE2 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
                273BF6BB1333B5000022CAAB /* CopyFiles */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 1;
                };
+               720DD6C01358FD5F0064AA82 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
                72220F5913330A5A00FCA411 /* CopyFiles */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 1;
                };
+               726AD6F5135E88F0002C930D /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
                72F75A501336F950004BB496 /* CopyFiles */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 2147483647;
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+               270CCDA7135E3C9E00007BE2 /* testmime */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testmime; sourceTree = BUILT_PRODUCTS_DIR; };
+               270CCDBB135E3D3E00007BE2 /* testmime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testmime.c; path = ../scheduler/testmime.c; sourceTree = "<group>"; };
                273BF6BD1333B5000022CAAB /* testcups */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcups; sourceTree = BUILT_PRODUCTS_DIR; };
                273BF6C61333B5370022CAAB /* testcups.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcups.c; path = ../cups/testcups.c; sourceTree = "<group>"; };
                273BF6CB1333B5950022CAAB /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = SDKs/MacOSX10.6.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };
                276684101337FA7C000D33D0 /* cupsaddsmb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupsaddsmb.c; path = ../systemv/cupsaddsmb.c; sourceTree = "<group>"; };
                27D3037C134148CB00F022B1 /* libcups_s.exp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.exports; name = libcups_s.exp; path = ../cups/libcups_s.exp; sourceTree = "<group>"; };
                27D3037D134148CB00F022B1 /* libcups2.def */ = {isa = PBXFileReference; lastKnownFileType = text; name = libcups2.def; path = ../cups/libcups2.def; sourceTree = "<group>"; };
+               720DD6C21358FD5F0064AA82 /* snmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = snmp; sourceTree = BUILT_PRODUCTS_DIR; };
+               720DD6D21358FDDE0064AA82 /* snmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snmp.c; path = ../backend/snmp.c; sourceTree = "<group>"; };
                72220EAE1333047D00FCA411 /* libcups.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
                72220EB51333052D00FCA411 /* adminutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = adminutil.c; path = ../cups/adminutil.c; sourceTree = "<group>"; };
                72220EB71333056300FCA411 /* adminutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = adminutil.h; path = ../cups/adminutil.h; sourceTree = "<group>"; };
                7263EE3513330E4E00BA4D44 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = SDKs/MacOSX10.6.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };
                7263EE3713330E7500BA4D44 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = SDKs/MacOSX10.6.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
                7263EE3913330EC500BA4D44 /* libldap.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libldap.dylib; path = SDKs/MacOSX10.6.sdk/usr/lib/libldap.dylib; sourceTree = DEVELOPER_DIR; };
-               72F75A4C1336F31B004BB496 /* libcups_static.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups_static.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+               726AD6F7135E88F0002C930D /* ippserver */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ippserver; sourceTree = BUILT_PRODUCTS_DIR; };
+               726AD701135E8A90002C930D /* ippserver.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ippserver.c; path = ../test/ippserver.c; sourceTree = "<group>"; };
+               72F75A4C1336F31B004BB496 /* libcups_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups_static.a; sourceTree = BUILT_PRODUCTS_DIR; };
                72F75A521336F950004BB496 /* cupstestppd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupstestppd; sourceTree = BUILT_PRODUCTS_DIR; };
                72F75A5B1336F988004BB496 /* cupstestppd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupstestppd.c; path = ../systemv/cupstestppd.c; sourceTree = "<group>"; };
                72F75A611336F9A3004BB496 /* libcupsimage.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsimage.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+               270CCDA4135E3C9E00007BE2 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               270CCDB9135E3D0900007BE2 /* libcups_static.a in Frameworks */,
+                               270CCDBA135E3D0900007BE2 /* libcupsmime.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                273BF6BA1333B5000022CAAB /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               726AD72B135EAE1E002C930D /* libcups_static.dylib in Frameworks */,
                                273BF6CE1333B5950022CAAB /* CoreFoundation.framework in Frameworks */,
                                273BF6D31333B5C30022CAAB /* Kerberos.framework in Frameworks */,
                                273BF6D41333B5C30022CAAB /* Security.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               720DD6BF1358FD5F0064AA82 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                72220EAB1333047D00FCA411 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               726AD6F4135E88F0002C930D /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               726AD70E135E8B5E002C930D /* libiconv.dylib in Frameworks */,
+                               726AD707135E8B11002C930D /* libcups_static.a in Frameworks */,
+                               726AD708135E8B11002C930D /* CoreFoundation.framework in Frameworks */,
+                               726AD709135E8B11002C930D /* Kerberos.framework in Frameworks */,
+                               726AD70A135E8B11002C930D /* libresolv.dylib in Frameworks */,
+                               726AD70B135E8B11002C930D /* libz.dylib in Frameworks */,
+                               726AD70C135E8B11002C930D /* Security.framework in Frameworks */,
+                               726AD70D135E8B11002C930D /* SystemConfiguration.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                72F75A4F1336F950004BB496 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                273BF6B81333B4A90022CAAB /* tests */ = {
                        isa = PBXGroup;
                        children = (
+                               270CCDBB135E3D3E00007BE2 /* testmime.c */,
                                273BF6C61333B5370022CAAB /* testcups.c */,
                        );
                        name = tests;
                        children = (
                                276684101337FA7C000D33D0 /* cupsaddsmb.c */,
                                276683681337AA00000D33D0 /* cupsctl.c */,
-                               72F75A5B1336F988004BB496 /* cupstestppd.c */,
                                274FF68713333B6E00317ECB /* cupsfilter.c */,
+                               72F75A5B1336F988004BB496 /* cupstestppd.c */,
+                               726AD701135E8A90002C930D /* ippserver.c */,
                                276683F91337F7A9000D33D0 /* ipptool.c */,
                        );
                        name = commands;
                                724379301333FB85009631B9 /* socket */,
                                724379471333FEA9009631B9 /* dnssd */,
                                7243795B1333FF1D009631B9 /* usb */,
-                               72F75A4C1336F31B004BB496 /* libcups_static.dylib */,
                                72F75A521336F950004BB496 /* cupstestppd */,
                                2766835C1337A9B6000D33D0 /* cupsctl */,
                                276683701337AC79000D33D0 /* ppdc */,
                                276683F01337F78E000D33D0 /* ipptool */,
                                276684041337FA1D000D33D0 /* cupsaddsmb */,
                                7258EAE2134594C4009286F1 /* rastertopwg */,
+                               720DD6C21358FD5F0064AA82 /* snmp */,
+                               270CCDA7135E3C9E00007BE2 /* testmime */,
+                               726AD6F7135E88F0002C930D /* ippserver */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                72220FB113330B4A00FCA411 /* Frameworks */ = {
                        isa = PBXGroup;
                        children = (
+                               72F75A4C1336F31B004BB496 /* libcups_static.a */,
                                72220FAC13330B2200FCA411 /* libcupsmime.dylib */,
+                               72220EAE1333047D00FCA411 /* libcups.dylib */,
+                               72F75A611336F9A3004BB496 /* libcupsimage.dylib */,
+                               274FF5EE133330C800317ECB /* libcupsppdc.dylib */,
+                               724379C81333FFF3009631B9 /* CoreFoundation.framework */,
+                               724379671333FF3B009631B9 /* IOKit.framework */,
+                               273BF6D51333B5F60022CAAB /* libresolv.dylib */,
+                               273BF6D61333B5F60022CAAB /* SystemConfiguration.framework */,
+                               273BF6D11333B5C30022CAAB /* Kerberos.framework */,
+                               273BF6D21333B5C30022CAAB /* Security.framework */,
+                               273BF6CB1333B5950022CAAB /* CoreFoundation.framework */,
+                               273BF6CC1333B5950022CAAB /* libiconv.dylib */,
+                               273BF6CD1333B5950022CAAB /* libz.dylib */,
                                7263EE3913330EC500BA4D44 /* libldap.dylib */,
                                7263EE3713330E7500BA4D44 /* libz.dylib */,
                                7263EE3513330E4E00BA4D44 /* CoreFoundation.framework */,
                                724379281333E952009631B9 /* lpd.c */,
                                7243790B1333E4E3009631B9 /* network.c */,
                                724379121333E516009631B9 /* runloop.c */,
+                               720DD6D21358FDDE0064AA82 /* snmp.c */,
                                7243790C1333E4E3009631B9 /* snmp-supplies.c */,
                                7243793C1333FD19009631B9 /* socket.c */,
                                724379C51333FFC7009631B9 /* usb.c */,
                72BF96351333042100B1EAD7 = {
                        isa = PBXGroup;
                        children = (
-                               72220EAE1333047D00FCA411 /* libcups.dylib */,
-                               72F75A611336F9A3004BB496 /* libcupsimage.dylib */,
-                               274FF5EE133330C800317ECB /* libcupsppdc.dylib */,
-                               724379C81333FFF3009631B9 /* CoreFoundation.framework */,
-                               724379671333FF3B009631B9 /* IOKit.framework */,
-                               273BF6D51333B5F60022CAAB /* libresolv.dylib */,
-                               273BF6D61333B5F60022CAAB /* SystemConfiguration.framework */,
-                               273BF6D11333B5C30022CAAB /* Kerberos.framework */,
-                               273BF6D21333B5C30022CAAB /* Security.framework */,
-                               273BF6CB1333B5950022CAAB /* CoreFoundation.framework */,
-                               273BF6CC1333B5950022CAAB /* libiconv.dylib */,
-                               273BF6CD1333B5950022CAAB /* libz.dylib */,
                                72220FB113330B4A00FCA411 /* Frameworks */,
                                72220F45133305D000FCA411 /* Public Headers */,
                                72220F461333060C00FCA411 /* Private Headers */,
 /* End PBXHeadersBuildPhase section */
 
 /* Begin PBXNativeTarget section */
+               270CCDA6135E3C9E00007BE2 /* testmime */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 270CCDAF135E3C9E00007BE2 /* Build configuration list for PBXNativeTarget "testmime" */;
+                       buildPhases = (
+                               270CCDA3135E3C9E00007BE2 /* Sources */,
+                               270CCDA4135E3C9E00007BE2 /* Frameworks */,
+                               270CCDA5135E3C9E00007BE2 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               270CCDB8135E3CFD00007BE2 /* PBXTargetDependency */,
+                               270CCDB6135E3CF700007BE2 /* PBXTargetDependency */,
+                       );
+                       name = testmime;
+                       productName = testmime;
+                       productReference = 270CCDA7135E3C9E00007BE2 /* testmime */;
+                       productType = "com.apple.product-type.tool";
+               };
                273BF6BC1333B5000022CAAB /* testcups */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 273BF6C31333B5000022CAAB /* Build configuration list for PBXNativeTarget "testcups" */;
                        );
                        name = libcups_static;
                        productName = libcups;
-                       productReference = 72F75A4C1336F31B004BB496 /* libcups_static.dylib */;
+                       productReference = 72F75A4C1336F31B004BB496 /* libcups_static.a */;
                        productType = "com.apple.product-type.library.dynamic";
                };
                2766835B1337A9B6000D33D0 /* cupsctl */ = {
                        productReference = 276684041337FA1D000D33D0 /* cupsaddsmb */;
                        productType = "com.apple.product-type.tool";
                };
+               720DD6C11358FD5F0064AA82 /* snmp */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */;
+                       buildPhases = (
+                               720DD6BE1358FD5F0064AA82 /* Sources */,
+                               720DD6BF1358FD5F0064AA82 /* Frameworks */,
+                               720DD6C01358FD5F0064AA82 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               720DD6CF1358FD790064AA82 /* PBXTargetDependency */,
+                       );
+                       name = snmp;
+                       productName = snmp;
+                       productReference = 720DD6C21358FD5F0064AA82 /* snmp */;
+                       productType = "com.apple.product-type.tool";
+               };
                72220EAD1333047D00FCA411 /* libcups */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 72220EB21333047D00FCA411 /* Build configuration list for PBXNativeTarget "libcups" */;
                        productReference = 7258EAE2134594C4009286F1 /* rastertopwg */;
                        productType = "com.apple.product-type.tool";
                };
+               726AD6F6135E88F0002C930D /* ippserver */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 726AD6FE135E88F1002C930D /* Build configuration list for PBXNativeTarget "ippserver" */;
+                       buildPhases = (
+                               726AD6F3135E88F0002C930D /* Sources */,
+                               726AD6F4135E88F0002C930D /* Frameworks */,
+                               726AD6F5135E88F0002C930D /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               726AD706135E8AC5002C930D /* PBXTargetDependency */,
+                       );
+                       name = ippserver;
+                       productName = ippserver;
+                       productReference = 726AD6F7135E88F0002C930D /* ippserver */;
+                       productType = "com.apple.product-type.tool";
+               };
                72F75A511336F950004BB496 /* cupstestppd */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 72F75A581336F951004BB496 /* Build configuration list for PBXNativeTarget "cupstestppd" */;
                                72F75A511336F950004BB496 /* cupstestppd */,
                                724379461333FEA9009631B9 /* dnssd */,
                                724378FC1333E43E009631B9 /* ipp */,
+                               726AD6F6135E88F0002C930D /* ippserver */,
                                276683EF1337F78E000D33D0 /* ipptool */,
                                724379171333E532009631B9 /* lpd */,
                                2766836F1337AC79000D33D0 /* ppdc */,
                                276683961337ACA2000D33D0 /* ppdmerge */,
                                276683A31337ACAB000D33D0 /* ppdpo */,
                                7258EAE1134594C4009286F1 /* rastertopwg */,
+                               720DD6C11358FD5F0064AA82 /* snmp */,
                                7243792F1333FB85009631B9 /* socket */,
                                273BF6BC1333B5000022CAAB /* testcups */,
+                               270CCDA6135E3C9E00007BE2 /* testmime */,
                                7243795A1333FF1D009631B9 /* usb */,
                        );
                };
 /* End PBXProject section */
 
 /* Begin PBXSourcesBuildPhase section */
+               270CCDA3135E3C9E00007BE2 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               270CCDBC135E3D3E00007BE2 /* testmime.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                273BF6B91333B5000022CAAB /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               720DD6BE1358FD5F0064AA82 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               720DD6D413590AB90064AA82 /* ieee1284.c in Sources */,
+                               720DD6D31358FDDE0064AA82 /* snmp.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                72220EAA1333047D00FCA411 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               726AD6F3135E88F0002C930D /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               726AD702135E8A90002C930D /* ippserver.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                72F75A4E1336F950004BB496 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+               270CCDB2135E3CDE00007BE2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 270CCDA6135E3C9E00007BE2 /* testmime */;
+                       targetProxy = 270CCDB1135E3CDE00007BE2 /* PBXContainerItemProxy */;
+               };
+               270CCDB6135E3CF700007BE2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 72220FAB13330B2200FCA411 /* libcupsmime */;
+                       targetProxy = 270CCDB5135E3CF700007BE2 /* PBXContainerItemProxy */;
+               };
+               270CCDB8135E3CFD00007BE2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274FF6891333B1C400317ECB /* libcups_static */;
+                       targetProxy = 270CCDB7135E3CFD00007BE2 /* PBXContainerItemProxy */;
+               };
                273BF6C91333B5410022CAAB /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 274FF6891333B1C400317ECB /* libcups_static */;
                        target = 276684031337FA1D000D33D0 /* cupsaddsmb */;
                        targetProxy = 276684121337FA8D000D33D0 /* PBXContainerItemProxy */;
                };
+               720DD6CF1358FD790064AA82 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 72220EAD1333047D00FCA411 /* libcups */;
+                       targetProxy = 720DD6CE1358FD790064AA82 /* PBXContainerItemProxy */;
+               };
+               720DD6D11358FDBE0064AA82 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 720DD6C11358FD5F0064AA82 /* snmp */;
+                       targetProxy = 720DD6D01358FDBE0064AA82 /* PBXContainerItemProxy */;
+               };
                72220F6513330A6500FCA411 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 72220EAD1333047D00FCA411 /* libcups */;
                        target = 72F75A601336F9A3004BB496 /* libcupsimage */;
                        targetProxy = 7258EAF213459B67009286F1 /* PBXContainerItemProxy */;
                };
+               726AD704135E8AA1002C930D /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 726AD6F6135E88F0002C930D /* ippserver */;
+                       targetProxy = 726AD703135E8AA1002C930D /* PBXContainerItemProxy */;
+               };
+               726AD706135E8AC5002C930D /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274FF6891333B1C400317ECB /* libcups_static */;
+                       targetProxy = 726AD705135E8AC5002C930D /* PBXContainerItemProxy */;
+               };
                72F75A661336FA30004BB496 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 72220EAD1333047D00FCA411 /* libcups */;
 /* End PBXTargetDependency section */
 
 /* Begin XCBuildConfiguration section */
+               270CCDAD135E3C9E00007BE2 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+                               COPY_PHASE_STRIP = NO;
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               ONLY_ACTIVE_ARCH = YES;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SKIP_INSTALL = NO;
+                       };
+                       name = Debug;
+               };
+               270CCDAE135E3C9E00007BE2 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               COPY_PHASE_STRIP = YES;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SKIP_INSTALL = NO;
+                       };
+                       name = Release;
+               };
                273BF6C41333B5000022CAAB /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                EXECUTABLE_PREFIX = "";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                ALWAYS_SEARCH_USER_PATHS = NO;
                                ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
                                COPY_PHASE_STRIP = NO;
+                               EXECUTABLE_EXTENSION = a;
                                EXECUTABLE_PREFIX = "";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_DYNAMIC_NO_PIC = NO;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                PRODUCT_NAME = libcups_static;
                                PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups;
                                SKIP_INSTALL = NO;
+                               STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;
                        };
                        name = Debug;
                };
                                ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
                                COPY_PHASE_STRIP = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               EXECUTABLE_EXTENSION = a;
                                EXECUTABLE_PREFIX = "";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                PRODUCT_NAME = libcups_static;
                                PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups;
                                SKIP_INSTALL = NO;
+                               STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;
                        };
                        name = Release;
                };
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                        };
                        name = Release;
                };
+               720DD6C91358FD5F0064AA82 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+                               COPY_PHASE_STRIP = NO;
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               INSTALL_PATH = /usr/libexec/cups/backend;
+                               ONLY_ACTIVE_ARCH = YES;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                       };
+                       name = Debug;
+               };
+               720DD6CA1358FD5F0064AA82 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               COPY_PHASE_STRIP = YES;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               INSTALL_PATH = /usr/libexec/cups/backend;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                       };
+                       name = Release;
+               };
                72220EB01333047D00FCA411 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                EXECUTABLE_PREFIX = "";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                EXECUTABLE_PREFIX = "";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                        };
                        name = Release;
                };
+               726AD6FF135E88F1002C930D /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+                               COPY_PHASE_STRIP = NO;
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               ONLY_ACTIVE_ARCH = YES;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                       };
+                       name = Debug;
+               };
+               726AD700135E88F1002C930D /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               COPY_PHASE_STRIP = YES;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                       };
+                       name = Release;
+               };
                72BF963C1333042100B1EAD7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                EXECUTABLE_PREFIX = "";
                                GCC_C_LANGUAGE_STANDARD = gnu99;
                                GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
+               270CCDAF135E3C9E00007BE2 /* Build configuration list for PBXNativeTarget "testmime" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               270CCDAD135E3C9E00007BE2 /* Debug */,
+                               270CCDAE135E3C9E00007BE2 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                273BF6C31333B5000022CAAB /* Build configuration list for PBXNativeTarget "testcups" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               720DD6C91358FD5F0064AA82 /* Debug */,
+                               720DD6CA1358FD5F0064AA82 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                72220EB21333047D00FCA411 /* Build configuration list for PBXNativeTarget "libcups" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               726AD6FE135E88F1002C930D /* Build configuration list for PBXNativeTarget "ippserver" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               726AD6FF135E88F1002C930D /* Debug */,
+                               726AD700135E88F1002C930D /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                72BF963A1333042100B1EAD7 /* Build configuration list for PBXProject "CUPS" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (