diff options
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"> CUPS 1.2/Mac OS X 10.5 </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> <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> + <a href="#mime_t">mime_t</a> *mime,<br> + <a href="#mime_type_t">mime_type_t</a> *src,<br> + size_t srcsize,<br> + <a href="#mime_type_t">mime_type_t</a> *dst,<br> + 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> <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> <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 = ( |