summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES-1.4.txt6
-rw-r--r--Makedefs.in2
-rw-r--r--backend/ipp.c210
-rw-r--r--backend/lpd.c36
-rw-r--r--backend/snmp.c79
-rw-r--r--backend/socket.c29
-rw-r--r--backend/usb-darwin.c44
-rw-r--r--config-scripts/cups-compiler.m416
-rw-r--r--cups/Dependencies45
-rw-r--r--cups/api-filter.shtml15
-rw-r--r--cups/auth.c2
-rw-r--r--cups/backend.h4
-rw-r--r--cups/file-private.h43
-rw-r--r--cups/file.c326
-rw-r--r--cups/http-addr.c22
-rw-r--r--cups/http-addrlist.c2
-rw-r--r--cups/http-private.h2
-rw-r--r--cups/http.c11
-rw-r--r--cups/libcups2.def1
-rw-r--r--cups/libcups_s.exp1
-rw-r--r--cups/ppd-cache.c17
-rw-r--r--cups/request.c10
-rw-r--r--cups/snmp.c7
-rw-r--r--cups/transcode.c11
-rw-r--r--data/media.defs110
-rw-r--r--doc/help/accounting.html6
-rw-r--r--doc/help/api-cups.html9
-rw-r--r--doc/help/api-filedir.html4
-rw-r--r--doc/help/api-filter.html21
-rw-r--r--doc/help/api-mime.html36
-rw-r--r--doc/help/spec-ppd.html8
-rw-r--r--filter/Dependencies15
-rw-r--r--filter/spec-ppd.header2
-rw-r--r--filter/spec-ppd.shtml6
-rw-r--r--locale/cups.pot1852
-rw-r--r--locale/cups.strings100
-rw-r--r--man/backend.man21
-rw-r--r--notifier/Dependencies23
-rw-r--r--scheduler/client.c91
-rw-r--r--scheduler/conf.c39
-rw-r--r--scheduler/conf.h6
-rw-r--r--scheduler/cups-deviced.c6
-rw-r--r--scheduler/cups-driverd.cxx60
-rw-r--r--scheduler/cups-exec.c20
-rw-r--r--scheduler/cups-polld.c2
-rw-r--r--scheduler/cupsd.h1
-rw-r--r--scheduler/dirsvc.c12
-rw-r--r--scheduler/filter.c170
-rw-r--r--scheduler/ipp.c14
-rw-r--r--scheduler/job.c96
-rw-r--r--scheduler/listen.c13
-rw-r--r--scheduler/log.c410
-rw-r--r--scheduler/main.c15
-rw-r--r--scheduler/mime.c269
-rw-r--r--scheduler/network.c7
-rw-r--r--scheduler/org.cups.cupsd.plist11
-rw-r--r--scheduler/printers.c109
-rw-r--r--scheduler/process.c108
-rw-r--r--scheduler/testdirsvc.c4
-rw-r--r--scheduler/testmime.c229
-rw-r--r--scheduler/type.c150
-rw-r--r--scheduler/util.c2
-rw-r--r--scheduler/util.h2
-rw-r--r--systemv/cupstestppd.c158
-rw-r--r--test/get-jobs.test4
-rw-r--r--test/ippserver.c22
-rw-r--r--xcode/CUPS.xcodeproj/project.pbxproj485
67 files changed, 3663 insertions, 2006 deletions
diff --git a/CHANGES-1.4.txt b/CHANGES-1.4.txt
index f9191242e..1cf3a8f22 100644
--- a/CHANGES-1.4.txt
+++ b/CHANGES-1.4.txt
@@ -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)
diff --git a/Makedefs.in b/Makedefs.in
index 61f12bb59..10fb71da8 100644
--- a/Makedefs.in
+++ b/Makedefs.in
@@ -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
diff --git a/backend/ipp.c b/backend/ipp.c
index d54bd3def..7fac198ed 100644
--- a/backend/ipp.c
+++ b/backend/ipp.c
@@ -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,18 +824,50 @@ 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;
diff --git a/backend/lpd.c b/backend/lpd.c
index af690adb0..d17493af3 100644
--- a/backend/lpd.c
+++ b/backend/lpd.c
@@ -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...
diff --git a/backend/snmp.c b/backend/snmp.c
index aa66c16ce..34494d0e7 100644
--- a/backend/snmp.c
+++ b/backend/snmp.c
@@ -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);
diff --git a/backend/socket.c b/backend/socket.c
index 414955948..d993dbabc 100644
--- a/backend/socket.c
+++ b/backend/socket.c
@@ -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...
diff --git a/backend/usb-darwin.c b/backend/usb-darwin.c
index 0733891b1..63061fc13 100644
--- a/backend/usb-darwin.c
+++ b/backend/usb-darwin.c
@@ -89,10 +89,10 @@
#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...
diff --git a/config-scripts/cups-compiler.m4 b/config-scripts/cups-compiler.m4
index a733269a1..34050c7ef 100644
--- a/config-scripts/cups-compiler.m4
+++ b/config-scripts/cups-compiler.m4
@@ -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
diff --git a/cups/Dependencies b/cups/Dependencies
index 5ce028e00..5b374f882 100644
--- a/cups/Dependencies
+++ b/cups/Dependencies
@@ -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
diff --git a/cups/api-filter.shtml b/cups/api-filter.shtml
index 0af098f3f..e44c7063a 100644
--- a/cups/api-filter.shtml
+++ b/cups/api-filter.shtml
@@ -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
diff --git a/cups/auth.c b/cups/auth.c
index abc22eb90..5d66ddd4a 100644
--- a/cups/auth.c
+++ b/cups/auth.c
@@ -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)
{
diff --git a/cups/backend.h b/cups/backend.h
index 569baa59b..ccfb7c49a 100644
--- a/cups/backend.h
+++ b/cups/backend.h
@@ -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 ****/
diff --git a/cups/file-private.h b/cups/file-private.h
index 0cfd9a549..42e4bfab7 100644
--- a/cups/file-private.h
+++ b/cups/file-private.h
@@ -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
@@ -59,10 +59,34 @@
# 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_ */
/*
diff --git a/cups/file.c b/cups/file.c
index 78f05c8fd..4a08f6eea 100644
--- a/cups/file.c
+++ b/cups/file.c
@@ -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
@@ -19,39 +19,41 @@
*
* 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.
*/
/*
@@ -77,6 +79,256 @@ 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.
*
* @since CUPS 1.2/Mac OS X 10.5@
@@ -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 */
diff --git a/cups/http-addr.c b/cups/http-addr.c
index 22d3a77f0..78f1f8191 100644
--- a/cups/http-addr.c
+++ b/cups/http-addr.c
@@ -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.
@@ -318,6 +319,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.
*
* @since CUPS 1.2/Mac OS X 10.5@
diff --git a/cups/http-addrlist.c b/cups/http-addrlist.c
index ac47a79af..8af8dd45b 100644
--- a/cups/http-addrlist.c
+++ b/cups/http-addrlist.c
@@ -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)
{
/*
diff --git a/cups/http-private.h b/cups/http-private.h
index 79ff84d6e..05379a613 100644
--- a/cups/http-private.h
+++ b/cups/http-private.h
@@ -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);
diff --git a/cups/http.c b/cups/http.c
index 5bcf7facd..9cd7b9002 100644
--- a/cups/http.c
+++ b/cups/http.c
@@ -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);
}
diff --git a/cups/libcups2.def b/cups/libcups2.def
index 13009f340..6d589d2ec 100644
--- a/cups/libcups2.def
+++ b/cups/libcups2.def
@@ -29,6 +29,7 @@ _cups_strcpy
_cups_strlcat
_cups_strlcpy
_httpAddrPort
+_httpAddrSetPort
_httpAssembleUUID
_httpCreate
_httpEncodeURI
diff --git a/cups/libcups_s.exp b/cups/libcups_s.exp
index c36b87810..4d095537a 100644
--- a/cups/libcups_s.exp
+++ b/cups/libcups_s.exp
@@ -41,6 +41,7 @@ _cups_strcpy
_cups_strlcat
_cups_strlcpy
_httpAddrPort
+_httpAddrSetPort
_httpAssembleUUID
_httpBIOMethods
_httpCreate
diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c
index 395bce381..77a56622c 100644
--- a/cups/ppd-cache.c
+++ b/cups/ppd-cache.c
@@ -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);
}
diff --git a/cups/request.c b/cups/request.c
index 641a51ce0..0b61327d1 100644
--- a/cups/request.c
+++ b/cups/request.c
@@ -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...
*/
diff --git a/cups/snmp.c b/cups/snmp.c
index a2aeafbba..d5f6126f2 100644
--- a/cups/snmp.c
+++ b/cups/snmp.c
@@ -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);
diff --git a/cups/transcode.c b/cups/transcode.c
index 0e33744ad..f9736029a 100644
--- a/cups/transcode.c
+++ b/cups/transcode.c
@@ -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++ = '?';
diff --git a/data/media.defs b/data/media.defs
index 98148729e..799e542d2 100644
--- a/data/media.defs
+++ b/data/media.defs
@@ -23,28 +23,28 @@
#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
@@ -55,37 +55,37 @@
#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
@@ -101,9 +101,9 @@
#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
@@ -111,33 +111,33 @@
#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
@@ -159,22 +159,22 @@
#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
diff --git a/doc/help/accounting.html b/doc/help/accounting.html
index fe995956f..66c34ec1f 100644
--- a/doc/help/accounting.html
+++ b/doc/help/accounting.html
@@ -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>
diff --git a/doc/help/api-cups.html b/doc/help/api-cups.html
index 7967e082a..19760cd85 100644
--- a/doc/help/api-cups.html
+++ b/doc/help/api-cups.html
@@ -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>
diff --git a/doc/help/api-filedir.html b/doc/help/api-filedir.html
index a4cde044e..45f5e33fc 100644
--- a/doc/help/api-filedir.html
+++ b/doc/help/api-filedir.html
@@ -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>
diff --git a/doc/help/api-filter.html b/doc/help/api-filter.html
index d6e4dc8be..904926fe2 100644
--- a/doc/help/api-filter.html
+++ b/doc/help/api-filter.html
@@ -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>
diff --git a/doc/help/api-mime.html b/doc/help/api-mime.html
index 58cbf1a26..7631e6a7d 100644
--- a/doc/help/api-mime.html
+++ b/doc/help/api-mime.html
@@ -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>
diff --git a/doc/help/spec-ppd.html b/doc/help/spec-ppd.html
index c66d6f5bb..872fb72b6 100644
--- a/doc/help/spec-ppd.html
+++ b/doc/help/spec-ppd.html
@@ -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'>
diff --git a/filter/Dependencies b/filter/Dependencies
index 648d0b164..f4a4c5b89 100644
--- a/filter/Dependencies
+++ b/filter/Dependencies
@@ -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
diff --git a/filter/spec-ppd.header b/filter/spec-ppd.header
index 8292be8a7..40433aa55 100644
--- a/filter/spec-ppd.header
+++ b/filter/spec-ppd.header
@@ -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
diff --git a/filter/spec-ppd.shtml b/filter/spec-ppd.shtml
index 1bc623ec5..a0cf1e895 100644
--- a/filter/spec-ppd.shtml
+++ b/filter/spec-ppd.shtml
@@ -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'>
diff --git a/locale/cups.pot b/locale/cups.pot
index 2f2cdb30f..80871068d 100644
--- a/locale/cups.pot
+++ b/locale/cups.pot
@@ -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
+#: ppdc/sample.c:165
msgid "Internet Postage 3-Part"
msgstr ""
-#: ppdc/sample.c:139
+#: ppdc/sample.c:174
msgid "Internet Postage 3-Part - 2 1/4 x 7\""
msgstr ""
-#: backend/ipp.c:252
+#: backend/ipp.c:262
msgid "Internet Printing Protocol"
msgstr ""
-#: ppdc/sample.c:37
-msgid "JB0"
+#: cups/ppd.c:1387
+msgid "JCL"
msgstr ""
-#: ppdc/sample.c:39
-msgid "JB1"
+#: ppdc/sample.c:50
+msgid "JIS B0"
msgstr ""
-#: ppdc/sample.c:38
-msgid "JB10"
+#: ppdc/sample.c:52
+msgid "JIS B1"
msgstr ""
-#: ppdc/sample.c:40
-msgid "JB2"
+#: ppdc/sample.c:51
+msgid "JIS B10"
msgstr ""
-#: ppdc/sample.c:41
-msgid "JB3"
+#: ppdc/sample.c:53
+msgid "JIS B2"
msgstr ""
-#: ppdc/sample.c:42
-msgid "JB4"
+#: ppdc/sample.c:54
+msgid "JIS B3"
msgstr ""
-#: ppdc/sample.c:44
-msgid "JB6"
+#: ppdc/sample.c:55
+msgid "JIS B4"
msgstr ""
-#: ppdc/sample.c:45
-msgid "JB7"
+#: ppdc/sample.c:56
+msgid "JIS B4 Long Edge"
msgstr ""
-#: ppdc/sample.c:46
-msgid "JB8"
+#: ppdc/sample.c:57
+msgid "JIS B5"
msgstr ""
-#: ppdc/sample.c:47
-msgid "JB9"
+#: ppdc/sample.c:58
+msgid "JIS B5 Long Edge"
msgstr ""
-#: cups/ppd.c:1387
-msgid "JCL"
+#: ppdc/sample.c:59
+msgid "JIS B6"
+msgstr ""
+
+#: ppdc/sample.c:60
+msgid "JIS B6 Long Edge"
+msgstr ""
+
+#: ppdc/sample.c:61
+msgid "JIS B7"
msgstr ""
-#: scheduler/ipp.c:10215
+#: ppdc/sample.c:62
+msgid "JIS B8"
+msgstr ""
+
+#: ppdc/sample.c:63
+msgid "JIS B9"
+msgstr ""
+
+#: 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 ""
diff --git a/locale/cups.strings b/locale/cups.strings
index bab43a7a0..8f920c59c 100644
--- a/locale/cups.strings
+++ b/locale/cups.strings
@@ -64,10 +64,8 @@
" 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.";
@@ -111,6 +111,8 @@
" %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.";
@@ -540,17 +542,25 @@
"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";
@@ -560,8 +570,11 @@
"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";
@@ -582,7 +595,6 @@
"B3" = "B3";
"B4" = "B4";
"B5" = "B5";
-"B5 JIS" = "B5 JIS";
"B5 Oversize" = "B5 Oversize";
"B6" = "B6";
"B7" = "B7";
@@ -639,6 +651,7 @@
"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.";
@@ -672,6 +685,10 @@
"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: ";
@@ -706,29 +723,44 @@
"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";
@@ -747,6 +779,10 @@
"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\".";
@@ -780,17 +816,21 @@
"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.";
@@ -819,6 +859,7 @@
"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";
@@ -857,18 +898,12 @@
"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";
@@ -924,6 +959,7 @@
"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";
@@ -933,8 +969,11 @@
"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";
@@ -951,8 +990,9 @@
"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";
@@ -965,7 +1005,7 @@
"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: ";
@@ -977,7 +1017,6 @@
"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.";
@@ -1043,6 +1082,7 @@
"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";
@@ -1070,11 +1110,14 @@
"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.";
@@ -1111,20 +1154,22 @@
"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:";
@@ -1163,12 +1208,12 @@
"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\".";
@@ -1230,6 +1275,7 @@
"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]";
diff --git a/man/backend.man b/man/backend.man
index e62f94e22..f26249549 100644
--- a/man/backend.man
+++ b/man/backend.man
@@ -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 $".
.\"
diff --git a/notifier/Dependencies b/notifier/Dependencies
index 0915fde6e..5f48964f6 100644
--- a/notifier/Dependencies
+++ b/notifier/Dependencies
@@ -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
diff --git a/scheduler/client.c b/scheduler/client.c
index 5db08bd39..2d8e171ae 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -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...
*/
diff --git a/scheduler/conf.c b/scheduler/conf.c
index 8c0bd310b..fceede104 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -844,6 +844,19 @@ cupsdReadConfiguration(void)
#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 ++;
}
diff --git a/scheduler/conf.h b/scheduler/conf.h
index 052725cce..4d669027a 100644
--- a/scheduler/conf.h
+++ b/scheduler/conf.h
@@ -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,
diff --git a/scheduler/cups-deviced.c b/scheduler/cups-deviced.c
index a7195985d..4e3df703a 100644
--- a/scheduler/cups-deviced.c
+++ b/scheduler/cups-deviced.c
@@ -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;
diff --git a/scheduler/cups-driverd.cxx b/scheduler/cups-driverd.cxx
index 8f78df3b8..2bbc50a21 100644
--- a/scheduler/cups-driverd.cxx
+++ b/scheduler/cups-driverd.cxx
@@ -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...
diff --git a/scheduler/cups-exec.c b/scheduler/cups-exec.c
index 22bdd87a6..0081fb4c2 100644
--- a/scheduler/cups-exec.c
+++ b/scheduler/cups-exec.c
@@ -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));
@@ -71,6 +73,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...
*/
diff --git a/scheduler/cups-polld.c b/scheduler/cups-polld.c
index cc4cbbbf0..d3ea64ef8 100644
--- a/scheduler/cups-polld.c
+++ b/scheduler/cups-polld.c
@@ -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
diff --git a/scheduler/cupsd.h b/scheduler/cupsd.h
index a443496e9..48fb32e8b 100644
--- a/scheduler/cupsd.h
+++ b/scheduler/cupsd.h
@@ -19,6 +19,7 @@
*/
#include <cups/cups-private.h>
+#include <cups/file-private.h>
#include <limits.h>
#include <time.h>
diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c
index ad05fe4c3..ca3c9cd8f 100644
--- a/scheduler/dirsvc.c
+++ b/scheduler/dirsvc.c
@@ -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;
}
/*
diff --git a/scheduler/filter.c b/scheduler/filter.c
index 9f734da56..b708fa368 100644
--- a/scheduler/filter.c
+++ b/scheduler/filter.c
@@ -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
@@ -14,14 +14,16 @@
*
* 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);
}
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index d0011c03a..0d5e1eace 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -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')
diff --git a/scheduler/job.c b/scheduler/job.c
index 3d9c9e4e4..14b71231f 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -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)
diff --git a/scheduler/listen.c b/scheduler/listen.c
index 15af46f06..16528b9dd 100644
--- a/scheduler/listen.c
+++ b/scheduler/listen.c
@@ -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...
diff --git a/scheduler/log.c b/scheduler/log.c
index 4de1dc30c..aaea97ee9 100644
--- a/scheduler/log.c
+++ b/scheduler/log.c
@@ -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,11 +46,188 @@ 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);
/*
@@ -785,184 +1007,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.
*
* This function resizes a global string buffer as needed. Each call returns
diff --git a/scheduler/main.c b/scheduler/main.c
index 411c65210..4f4eef8bb 100644
--- a/scheduler/main.c
+++ b/scheduler/main.c
@@ -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 */
}
diff --git a/scheduler/mime.c b/scheduler/mime.c
index 5e3377a34..d1a905aa8 100644
--- a/scheduler/mime.c
+++ b/scheduler/mime.c
@@ -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
@@ -14,24 +14,24 @@
*
* 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...
diff --git a/scheduler/network.c b/scheduler/network.c
index 7f30b1e25..9048ad599 100644
--- a/scheduler/network.c
+++ b/scheduler/network.c
@@ -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;
}
}
diff --git a/scheduler/org.cups.cupsd.plist b/scheduler/org.cups.cupsd.plist
index 97c4208e1..ccc861d8f 100644
--- a/scheduler/org.cups.cupsd.plist
+++ b/scheduler/org.cups.cupsd.plist
@@ -21,6 +21,17 @@
<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>
diff --git a/scheduler/printers.c b/scheduler/printers.c
index de4b637de..e3c7ad394 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
@@ -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;
diff --git a/scheduler/process.c b/scheduler/process.c
index 80c3fcb59..8b3e3f23b 100644
--- a/scheduler/process.c
+++ b/scheduler/process.c
@@ -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)
diff --git a/scheduler/testdirsvc.c b/scheduler/testdirsvc.c
index cf607e20b..bf3030428 100644
--- a/scheduler/testdirsvc.c
+++ b/scheduler/testdirsvc.c
@@ -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);
}
diff --git a/scheduler/testmime.c b/scheduler/testmime.c
index 1a8713801..1561e81b7 100644
--- a/scheduler/testmime.c
+++ b/scheduler/testmime.c
@@ -14,9 +14,11 @@
*
* 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,7 +197,6 @@ main(int argc, /* I - Number of command-line args */
filter->filter, filter->cost);
type_dir(mime, "../doc");
- type_dir(mime, "../man");
}
return (0);
@@ -158,6 +204,167 @@ main(int argc, /* I - Number of command-line args */
/*
+ * '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...
*/
diff --git a/scheduler/type.c b/scheduler/type.c
index 6f4706e20..78652b529 100644
--- a/scheduler/type.c
+++ b/scheduler/type.c
@@ -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
@@ -14,13 +14,13 @@
*
* 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 ++;
diff --git a/scheduler/util.c b/scheduler/util.c
index b170f8052..e686b6f8b 100644
--- a/scheduler/util.c
+++ b/scheduler/util.c
@@ -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
diff --git a/scheduler/util.h b/scheduler/util.h
index ecf7645a4..b98476555 100644
--- a/scheduler/util.h
+++ b/scheduler/util.h
@@ -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
diff --git a/systemv/cupstestppd.c b/systemv/cupstestppd.c
index 55ebb0f40..b841b975b 100644
--- a/systemv/cupstestppd.c
+++ b/systemv/cupstestppd.c
@@ -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
diff --git a/test/get-jobs.test b/test/get-jobs.test
index 8ad6c5b9f..4da5f6a7a 100644
--- a/test/get-jobs.test
+++ b/test/get-jobs.test
@@ -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 $".
#
diff --git a/test/ippserver.c b/test/ippserver.c
index 484ada29d..5d1ce17e9 100644
--- a/test/ippserver.c
+++ b/test/ippserver.c
@@ -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)
diff --git a/xcode/CUPS.xcodeproj/project.pbxproj b/xcode/CUPS.xcodeproj/project.pbxproj
index 07f865b42..90ed268d7 100644
--- a/xcode/CUPS.xcodeproj/project.pbxproj
+++ b/xcode/CUPS.xcodeproj/project.pbxproj
@@ -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 */; };
@@ -204,6 +210,9 @@
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 */; };
@@ -350,6 +359,15 @@
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 */; };
@@ -359,6 +377,27 @@
/* 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 */;
@@ -660,6 +699,20 @@
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 */;
@@ -772,6 +825,20 @@
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 */;
@@ -796,6 +863,15 @@
/* 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;
@@ -931,6 +1007,15 @@
);
runOnlyForDeploymentPostprocessing = 1;
};
+ 720DD6C01358FD5F0064AA82 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
72220F5913330A5A00FCA411 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -994,6 +1079,15 @@
);
runOnlyForDeploymentPostprocessing = 1;
};
+ 726AD6F5135E88F0002C930D /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
72F75A501336F950004BB496 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -1006,6 +1100,8 @@
/* 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; };
@@ -1070,6 +1166,8 @@
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>"; };
@@ -1227,7 +1325,9 @@
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; };
@@ -1237,10 +1337,20 @@
/* 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 */,
@@ -1391,6 +1501,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 720DD6BF1358FD5F0064AA82 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
72220EAB1333047D00FCA411 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -1484,6 +1602,21 @@
);
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;
@@ -1507,6 +1640,7 @@
273BF6B81333B4A90022CAAB /* tests */ = {
isa = PBXGroup;
children = (
+ 270CCDBB135E3D3E00007BE2 /* testmime.c */,
273BF6C61333B5370022CAAB /* testcups.c */,
);
name = tests;
@@ -1558,8 +1692,9 @@
children = (
276684101337FA7C000D33D0 /* cupsaddsmb.c */,
276683681337AA00000D33D0 /* cupsctl.c */,
- 72F75A5B1336F988004BB496 /* cupstestppd.c */,
274FF68713333B6E00317ECB /* cupsfilter.c */,
+ 72F75A5B1336F988004BB496 /* cupstestppd.c */,
+ 726AD701135E8A90002C930D /* ippserver.c */,
276683F91337F7A9000D33D0 /* ipptool.c */,
);
name = commands;
@@ -1593,7 +1728,6 @@
724379301333FB85009631B9 /* socket */,
724379471333FEA9009631B9 /* dnssd */,
7243795B1333FF1D009631B9 /* usb */,
- 72F75A4C1336F31B004BB496 /* libcups_static.dylib */,
72F75A521336F950004BB496 /* cupstestppd */,
2766835C1337A9B6000D33D0 /* cupsctl */,
276683701337AC79000D33D0 /* ppdc */,
@@ -1604,6 +1738,9 @@
276683F01337F78E000D33D0 /* ipptool */,
276684041337FA1D000D33D0 /* cupsaddsmb */,
7258EAE2134594C4009286F1 /* rastertopwg */,
+ 720DD6C21358FD5F0064AA82 /* snmp */,
+ 270CCDA7135E3C9E00007BE2 /* testmime */,
+ 726AD6F7135E88F0002C930D /* ippserver */,
);
name = Products;
sourceTree = "<group>";
@@ -1767,7 +1904,20 @@
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 */,
@@ -1800,6 +1950,7 @@
724379281333E952009631B9 /* lpd.c */,
7243790B1333E4E3009631B9 /* network.c */,
724379121333E516009631B9 /* runloop.c */,
+ 720DD6D21358FDDE0064AA82 /* snmp.c */,
7243790C1333E4E3009631B9 /* snmp-supplies.c */,
7243793C1333FD19009631B9 /* socket.c */,
724379C51333FFC7009631B9 /* usb.c */,
@@ -1819,18 +1970,6 @@
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 */,
@@ -1956,6 +2095,25 @@
/* 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" */;
@@ -2115,7 +2273,7 @@
);
name = libcups_static;
productName = libcups;
- productReference = 72F75A4C1336F31B004BB496 /* libcups_static.dylib */;
+ productReference = 72F75A4C1336F31B004BB496 /* libcups_static.a */;
productType = "com.apple.product-type.library.dynamic";
};
2766835B1337A9B6000D33D0 /* cupsctl */ = {
@@ -2267,6 +2425,24 @@
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" */;
@@ -2430,6 +2606,24 @@
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" */;
@@ -2506,6 +2700,7 @@
72F75A511336F950004BB496 /* cupstestppd */,
724379461333FEA9009631B9 /* dnssd */,
724378FC1333E43E009631B9 /* ipp */,
+ 726AD6F6135E88F0002C930D /* ippserver */,
276683EF1337F78E000D33D0 /* ipptool */,
724379171333E532009631B9 /* lpd */,
2766836F1337AC79000D33D0 /* ppdc */,
@@ -2514,14 +2709,24 @@
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;
@@ -2723,6 +2928,15 @@
);
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;
@@ -2875,6 +3089,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 726AD6F3135E88F0002C930D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 726AD702135E8A90002C930D /* ippserver.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
72F75A4E1336F950004BB496 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -2896,6 +3118,21 @@
/* 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 */;
@@ -3111,6 +3348,16 @@
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 */;
@@ -3191,6 +3438,16 @@
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 */;
@@ -3209,6 +3466,43 @@
/* 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 = {
@@ -3221,7 +3515,6 @@
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;
@@ -3238,7 +3531,6 @@
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;
@@ -3272,7 +3564,6 @@
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;
@@ -3291,7 +3582,6 @@
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;
@@ -3327,7 +3617,6 @@
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;
@@ -3348,7 +3637,6 @@
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;
@@ -3371,7 +3659,6 @@
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;
@@ -3389,7 +3676,6 @@
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;
@@ -3410,7 +3696,6 @@
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;
@@ -3428,7 +3713,6 @@
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;
@@ -3449,7 +3733,6 @@
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;
@@ -3467,7 +3750,6 @@
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;
@@ -3488,7 +3770,6 @@
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;
@@ -3506,7 +3787,6 @@
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;
@@ -3527,7 +3807,6 @@
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;
@@ -3545,7 +3824,6 @@
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;
@@ -3560,6 +3838,7 @@
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;
@@ -3567,7 +3846,6 @@
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;
@@ -3578,6 +3856,7 @@
PRODUCT_NAME = libcups_static;
PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups;
SKIP_INSTALL = NO;
+ STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;
};
name = Debug;
};
@@ -3588,10 +3867,10 @@
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;
@@ -3601,6 +3880,7 @@
PRODUCT_NAME = libcups_static;
PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups;
SKIP_INSTALL = NO;
+ STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;
};
name = Release;
};
@@ -3616,7 +3896,6 @@
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;
@@ -3634,7 +3913,6 @@
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;
@@ -3655,7 +3933,6 @@
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;
@@ -3673,7 +3950,6 @@
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;
@@ -3694,7 +3970,6 @@
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;
@@ -3712,7 +3987,6 @@
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;
@@ -3733,7 +4007,6 @@
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;
@@ -3751,7 +4024,6 @@
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;
@@ -3772,7 +4044,6 @@
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;
@@ -3790,7 +4061,6 @@
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;
@@ -3811,7 +4081,6 @@
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;
@@ -3829,7 +4098,6 @@
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;
@@ -3850,7 +4118,6 @@
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;
@@ -3868,7 +4135,6 @@
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;
@@ -3889,7 +4155,6 @@
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;
@@ -3907,7 +4172,6 @@
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;
@@ -3916,6 +4180,43 @@
};
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 = {
@@ -3929,7 +4230,6 @@
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;
@@ -3951,7 +4251,6 @@
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;
@@ -3974,7 +4273,6 @@
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;
@@ -3993,7 +4291,6 @@
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;
@@ -4015,7 +4312,6 @@
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;
@@ -4035,7 +4331,6 @@
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;
@@ -4056,7 +4351,6 @@
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;
@@ -4075,7 +4369,6 @@
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;
@@ -4097,7 +4390,6 @@
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;
@@ -4115,7 +4407,6 @@
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;
@@ -4136,7 +4427,6 @@
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;
@@ -4154,7 +4444,6 @@
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;
@@ -4175,7 +4464,6 @@
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;
@@ -4193,7 +4481,6 @@
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;
@@ -4214,7 +4501,6 @@
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;
@@ -4236,7 +4522,6 @@
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;
@@ -4261,7 +4546,6 @@
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;
@@ -4279,7 +4563,6 @@
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;
@@ -4288,6 +4571,41 @@
};
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 = {
@@ -4334,7 +4652,6 @@
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;
@@ -4352,7 +4669,6 @@
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;
@@ -4374,7 +4690,6 @@
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;
@@ -4393,7 +4708,6 @@
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;
@@ -4405,6 +4719,15 @@
/* 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 = (
@@ -4576,6 +4899,15 @@
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 = (
@@ -4657,6 +4989,15 @@
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 = (