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)
#
# 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
{
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;
}
else
{
_cupsLangPrintFilter(stderr, "ERROR",
- _("Network printer \"%s\" is not responding."),
- hostname);
+ _("The printer is not responding."));
sleep(30);
}
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
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",
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);
_("The printer URI is incorrect or no longer "
"exists."));
- if (supported)
- ippDelete(supported);
+ ippDelete(supported);
return (CUPS_BACKEND_STOP);
}
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...
*/
* 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,
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;
}
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;
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
{
*/
_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)
{
"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",
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;
}
}
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 &&
ippDelete(response);
_cupsLangPrintFilter(stderr, "ERROR",
- _("Unable to get job attributes: %s"),
- cupsLastErrorString());
+ _("Unable to get print job status."));
break;
}
}
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."));
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."));
}
ippDelete(response);
}
+ fprintf(stderr, "DEBUG: Get-Printer-Attributes: %s (%s)\n",
+ ippErrorString(cupsLastError()), cupsLastErrorString());
+
/*
* Return the printer-state value...
*/
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;
{
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;
}
else
{
_cupsLangPrintFilter(stderr, "ERROR",
- _("Network printer \"%s\" is not responding."),
- hostname);
+ _("The printer is not responding."));
sleep(30);
}
}
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...
* 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...
/*
* "$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
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,
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 */
* 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...
*/
* 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);
#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))
*/
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() */
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);
{
char ifname[255]; /* Interface name */
-
strlcpy(ifname, address + 4, sizeof(ifname));
if (ifname[0])
ifname[strlen(ifname) - 1] = '\0';
addrs = get_interface_addresses(ifname);
}
else
- addrs = httpAddrGetList(address, AF_INET, NULL);
+ addrs = httpAddrGetList(address, AF_UNSPEC, NULL);
if (!addrs)
{
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);
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...
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);
{
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;
}
else
{
_cupsLangPrintFilter(stderr, "ERROR",
- _("Network printer \"%s\" is not responding."),
- hostname);
+ _("The printer is not responding."));
sleep(30);
}
}
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...
#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>
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 */
* 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...
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
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"
# 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
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
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
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
<!--
"$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
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
<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
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)
{
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 ****/
* our own file functions allows us to provide transparent support of
* gzip'd print files, PPD files, etc.
*
- * Copyright 2007-2010 by Apple Inc.
+ * Copyright 2007-2011 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
# endif /* !O_BINARY */
+# ifdef __cplusplus
+extern "C" {
+# endif /* __cplusplus */
+
+
/*
* Types and structures...
*/
+typedef enum /**** _cupsFileCheck return values ****/
+{
+ _CUPS_FILE_CHECK_OK = 0, /* Everything OK */
+ _CUPS_FILE_CHECK_MISSING = 1, /* File is missing */
+ _CUPS_FILE_CHECK_PERMISSIONS = 2, /* File (or parent dir) has bad perms */
+ _CUPS_FILE_CHECK_WRONG_TYPE = 3 /* File has wrong type */
+} _cups_fc_result_t;
+
+typedef enum /**** _cupsFileCheck file type values ****/
+{
+ _CUPS_FILE_CHECK_FILE = 0, /* Check the file and parent directory */
+ _CUPS_FILE_CHECK_PROGRAM = 1, /* Check the program and parent directory */
+ _CUPS_FILE_CHECK_FILE_ONLY = 2, /* Check the file only */
+ _CUPS_FILE_CHECK_DIRECTORY = 3 /* Check the directory */
+} _cups_fc_filetype_t;
+
+typedef void (*_cups_fc_func_t)(void *context, _cups_fc_result_t result,
+ const char *message);
+
struct _cups_file_s /**** CUPS file structure... ****/
{
};
+/*
+ * 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_ */
/*
* our own file functions allows us to provide transparent support of
* gzip'd print files, PPD files, etc.
*
- * Copyright 2007-2010 by Apple Inc.
+ * Copyright 2007-2011 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
*
* Contents:
*
- * cupsFileClose() - Close a CUPS file.
- * cupsFileCompression() - Return whether a file is compressed.
- * cupsFileEOF() - Return the end-of-file status.
- * cupsFileFind() - Find a file using the specified path.
- * cupsFileFlush() - Flush pending output.
- * cupsFileGetChar() - Get a single character from a file.
- * cupsFileGetConf() - Get a line from a configuration file...
- * cupsFileGetLine() - Get a CR and/or LF-terminated line that may contain
- * binary data.
- * cupsFileGets() - Get a CR and/or LF-terminated line.
- * cupsFileLock() - Temporarily lock access to a file.
- * cupsFileNumber() - Return the file descriptor associated with a CUPS
- * file.
- * cupsFileOpen() - Open a CUPS file.
- * cupsFileOpenFd() - Open a CUPS file using a file descriptor.
- * cupsFilePeekChar() - Peek at the next character from a file.
- * cupsFilePrintf() - Write a formatted string.
- * cupsFilePutChar() - Write a character.
- * cupsFilePuts() - Write a string.
- * cupsFileRead() - Read from a file.
- * cupsFileRewind() - Set the current file position to the beginning of
- * the file.
- * cupsFileSeek() - Seek in a file.
- * cupsFileStderr() - Return a CUPS file associated with stderr.
- * cupsFileStdin() - Return a CUPS file associated with stdin.
- * cupsFileStdout() - Return a CUPS file associated with stdout.
- * cupsFileTell() - Return the current file position.
- * cupsFileUnlock() - Unlock access to a file.
- * cupsFileWrite() - Write to a file.
- * cups_compress() - Compress a buffer of data...
- * cups_fill() - Fill the input buffer...
- * cups_read() - Read from a file descriptor.
- * cups_write() - Write to a file descriptor.
+ * _cupsFileCheck() - Check the permissions of the given filename.
+ * _cupsFileCheckFilter() - Report file check results as CUPS filter messages.
+ * cupsFileClose() - Close a CUPS file.
+ * cupsFileCompression() - Return whether a file is compressed.
+ * cupsFileEOF() - Return the end-of-file status.
+ * cupsFileFind() - Find a file using the specified path.
+ * cupsFileFlush() - Flush pending output.
+ * cupsFileGetChar() - Get a single character from a file.
+ * cupsFileGetConf() - Get a line from a configuration file.
+ * cupsFileGetLine() - Get a CR and/or LF-terminated line that may
+ * contain binary data.
+ * cupsFileGets() - Get a CR and/or LF-terminated line.
+ * cupsFileLock() - Temporarily lock access to a file.
+ * cupsFileNumber() - Return the file descriptor associated with a CUPS
+ * file.
+ * cupsFileOpen() - Open a CUPS file.
+ * cupsFileOpenFd() - Open a CUPS file using a file descriptor.
+ * cupsFilePeekChar() - Peek at the next character from a file.
+ * cupsFilePrintf() - Write a formatted string.
+ * cupsFilePutChar() - Write a character.
+ * cupsFilePuts() - Write a string.
+ * cupsFileRead() - Read from a file.
+ * cupsFileRewind() - Set the current file position to the beginning of
+ * the file.
+ * cupsFileSeek() - Seek in a file.
+ * cupsFileStderr() - Return a CUPS file associated with stderr.
+ * cupsFileStdin() - Return a CUPS file associated with stdin.
+ * cupsFileStdout() - Return a CUPS file associated with stdout.
+ * cupsFileTell() - Return the current file position.
+ * cupsFileUnlock() - Unlock access to a file.
+ * cupsFileWrite() - Write to a file.
+ * cups_compress() - Compress a buffer of data.
+ * cups_fill() - Fill the input buffer.
+ * cups_read() - Read from a file descriptor.
+ * cups_write() - Write to a file descriptor.
*/
/*
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.
*
/*
- * '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@
*/
#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 */
/*
- * 'cups_fill()' - Fill the input buffer...
+ * 'cups_fill()' - Fill the input buffer.
*/
static ssize_t /* O - Number of bytes or -1 */
* 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.
}
+/*
+ * '_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.
*
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)
{
/*
* 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);
http->wused = 0;
- DEBUG_printf(("1httpFlushWrite: Returning %d.", bytes));
+ DEBUG_printf(("1httpFlushWrite: Returning %d, errno=%d.", bytes, errno));
return (bytes);
}
* 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
* 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...
if (http->wused)
{
+ DEBUG_puts("3httpWait: Flushing write buffer.");
+
if (httpFlushWrite(http) < 0)
return (0);
}
_cups_strlcat\r
_cups_strlcpy\r
_httpAddrPort\r
+_httpAddrSetPort\r
_httpAssembleUUID\r
_httpCreate\r
_httpEncodeURI\r
_cups_strlcat
_cups_strlcpy
_httpAddrPort
+_httpAddrSetPort
_httpAssembleUUID
_httpBIOMethods
_httpCreate
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));
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...
*/
{
DEBUG_printf(("_ppdCacheCreateWithFile: Unknown %s on line %d.", line,
linenum));
- _cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
- goto create_error;
}
}
_ppdCacheDestroy(pc);
if (attrs)
+ {
ippDelete(*attrs);
+ *attrs = NULL;
+ }
return (NULL);
}
{
status = httpUpdate(http);
}
- while (http->state == HTTP_POST_RECV);
+ while (status != HTTP_ERROR && http->state == HTTP_POST_RECV);
DEBUG_printf(("2cupsGetResponse: status=%d", status));
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...
*/
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);
* 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);
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)
{
ch = ((ch & 0x1f) << 6) | (*src++ & 0x3f);
- if (ch < 256)
+ if (ch < maxch)
*destptr++ = ch;
else
*destptr++ = '?';
#media "9x11/9 x 11\"" 648 792
#media "9x12/9 x 12\"" 648 864
#media "A0/A0" 2384 3370
-#media "A0.Transverse/A0" 3370 2384
+#media "A0.Transverse/A0 Long Edge" 3370 2384
#media "A1/A1" 1684 2384
-#media "A1.Transverse/A1" 2384 1684
+#media "A1.Transverse/A1 Long Edge" 2384 1684
#media "A2/A2" 1191 1684
-#media "A2.Transverse/A2" 1684 1191
+#media "A2.Transverse/A2 Long Edge" 1684 1191
#media "A3/A3" 842 1191
-#media "A3.Transverse/A3" 1191 842
+#media "A3.Transverse/A3 Long Edge" 1191 842
#media "A3Extra/A3 Oversize" 913 1262
-#media "A3Extra.Transverse/A3 Oversize" 913 1262
-#media "A3Rotated/A3" 1191 842
+#media "A3Extra.Transverse/A3 Oversize Long Edge" 913 1262
+#media "A3Rotated/A3 Long Edge" 1191 842
#media "A4/A4" 595 842
#media "A4Extra/A4 Oversize" 667 914
#media "A4Plus/A4 Oversize" 595 936
-#media "A4Rotated/A4" 842 595
+#media "A4Rotated/A4 Long Edge" 842 595
#media "A4Small/A4 Small" 595 842
-#media "A4.Transverse/A4" 842 595
+#media "A4.Transverse/A4 Long Edge" 842 595
#media "A5/A5" 420 595
#media "A5Extra/A5 Oversize" 492 668
-#media "A5Rotated/A5" 595 420
-#media "A5.Transverse/A5" 595 420
+#media "A5Rotated/A5 Long Edge" 595 420
+#media "A5.Transverse/A5 Long Edge" 595 420
#media "A6/A6" 297 420
-#media "A6Rotated/A6" 420 297
+#media "A6Rotated/A6 Long Edge" 420 297
#media "A7/A7" 210 297
#media "A8/A8" 148 210
#media "A9/A9" 105 148
#media "AnsiD/ANSI D" 1584 2448
#media "AnsiE/ANSI E" 2448 3168
#media "ARCHA/Letter Oversize" 648 864
-#media "ARCHA.Transverse/Letter Oversize" 864 648
+#media "ARCHA.Transverse/Letter Oversize Long Edge" 864 648
#media "ARCHB/Tabloid Oversize" 864 1296
-#media "ARCHB.Transverse/Tabloid Oversize" 1296 864
+#media "ARCHB.Transverse/Tabloid Oversize Long Edge" 1296 864
#media "ARCHC/ARCH C" 1296 1728
-#media "ARCHC.Transverse/ARCH C" 1728 1296
+#media "ARCHC.Transverse/ARCH C Long Edge" 1728 1296
#media "ARCHD/ARCH D" 1728 2592
-#media "ARCHD.Transverse/ARCH D" 2592 1728
+#media "ARCHD.Transverse/ARCH D Long Edge" 2592 1728
#media "ARCHE/ARCH E" 2592 3456
-#media "ARCHE.Transverse/ARCH E" 3456 2592
-#media "B0/JB0" 2920 4127
-#media "B10/JB10" 91 127
-#media "B1/JB1" 2064 2918
-#media "B1/JB1" 2064 2920
-#media "B2/JB2" 1460 2064
-#media "B3/JB3" 1032 1460
-#media "B4/JB4" 729 1032
-#media "B4Rotated/JB4" 1032 729
-#media "B5/B5 JIS" 516 729
-#media "B5Rotated/B5 JIS" 729 516
-#media "B5.Transverse/B5 JIS" 516 729
-#media "B6/JB6" 363 516
-#media "B6Rotated/JB6" 516 363
-#media "B7/JB7" 258 363
-#media "B8/JB8" 181 258
-#media "B9/JB9" 127 181
+#media "ARCHE.Transverse/ARCH E Long Edge" 3456 2592
+#media "B0/JIS B0" 2920 4127
+#media "B10/JIS B10" 91 127
+#media "B1/JIS B1" 2064 2918
+#media "B1/JIS B1" 2064 2920
+#media "B2/JIS B2" 1460 2064
+#media "B3/JIS B3" 1032 1460
+#media "B4/JIS B4" 729 1032
+#media "B4Rotated/JIS B4 Long Edge" 1032 729
+#media "B5/JIS B5" 516 729
+#media "B5Rotated/JIS B5 Long Edge" 729 516
+#media "B5.Transverse/JIS B5 Long Edge" 516 729
+#media "B6/JIS B6" 363 516
+#media "B6Rotated/JIS B6 Long Edge" 516 363
+#media "B7/JIS B7" 258 363
+#media "B8/JIS B8" 181 258
+#media "B9/JIS B9" 127 181
#media "C4/Envelope C4" 649 918
#media "C5/Envelope C5" 459 649
#media "C6/Envelope C6" 323 459
#media "DL/Envelope DL" 312 624
#media "DoublePostcard/Postcard Double " 567 420
-#media "DoublePostcardRotated/Postcard Double" 420 567
+#media "DoublePostcardRotated/Postcard Double Long Edge" 420 567
#media "Env10/Envelope #10 " 297 684
#media "Env11/Envelope #11" 324 747
#media "Env12/Envelope #12" 342 792
#media "EnvC6/Envelope C6" 323 459
#media "EnvC7/Envelope C7" 230 323
#media "EnvChou3/Envelope Choukei 3" 340 666
-#media "EnvChou3Rotated/Envelope Choukei 3" 666 340
+#media "EnvChou3Rotated/Envelope Choukei 3 Long Edge" 666 340
#media "EnvChou4/Envelope Choukei 4" 255 581
-#media "EnvChou4Rotated/Envelope Choukei 4" 581 255
+#media "EnvChou4Rotated/Envelope Choukei 4 Long Edge" 581 255
#media "EnvDL/Envelope DL" 312 624
#media "EnvInvite/Envelope Invite" 624 624
#media "EnvISOB4/Envelope B4" 708 1001
#media "EnvISOB6/Envelope B6" 499 354
#media "EnvItalian/Envelope Italian" 312 652
#media "EnvKaku2/Envelope Kaku2" 680 941
-#media "EnvKaku2Rotated/Envelope Kaku2" 941 680
+#media "EnvKaku2Rotated/Envelope Kaku2 Long Edge" 941 680
#media "EnvKaku3/Envelope Kaku3" 612 785
-#media "EnvKaku3Rotated/Envelope Kaku3" 785 612
+#media "EnvKaku3Rotated/Envelope Kaku3 Long Edge" 785 612
#media "EnvMonarch/Envelope Monarch" 279 540
#media "EnvPersonal/Envelope Personal" 261 468
#media "EnvPRC1/Envelope PRC1 " 289 468
-#media "EnvPRC1Rotated/Envelope PRC1 " 468 289
+#media "EnvPRC1Rotated/Envelope PRC1 Long Edge" 468 289
#media "EnvPRC2/Envelope PRC2" 289 499
-#media "EnvPRC2Rotated/Envelope PRC2" 499 289
+#media "EnvPRC2Rotated/Envelope PRC2 Long Edge" 499 289
#media "EnvPRC3/Envelope PRC3" 354 499
-#media "EnvPRC3Rotated/Envelope PRC3" 499 354
+#media "EnvPRC3Rotated/Envelope PRC3 Long Edge" 499 354
#media "EnvPRC4/Envelope PRC4" 312 590
-#media "EnvPRC4Rotated/Envelope PRC4" 590 312
+#media "EnvPRC4Rotated/Envelope PRC4 Long Edge" 590 312
#media "EnvPRC5/Envelope PRC5PRC5" 312 624
-#media "EnvPRC5Rotated/Envelope PRC5" 624 312
+#media "EnvPRC5Rotated/Envelope PRC5 Long Edge" 624 312
#media "EnvPRC6/Envelope PRC6" 340 652
-#media "EnvPRC6Rotated/Envelope PRC6" 652 340
+#media "EnvPRC6Rotated/Envelope PRC6 Long Edge" 652 340
#media "EnvPRC7/Envelope PRC7" 454 652
-#media "EnvPRC7Rotated/Envelope PRC7" 652 454
+#media "EnvPRC7Rotated/Envelope PRC7 Long Edge" 652 454
#media "EnvPRC8/Envelope PRC8" 340 876
-#media "EnvPRC8Rotated/Envelope PRC8" 876 340
+#media "EnvPRC8Rotated/Envelope PRC8 Long Edge" 876 340
#media "EnvPRC9/Envelope PRC9" 649 918
-#media "EnvPRC9Rotated/Envelope PRC9" 918 649
+#media "EnvPRC9Rotated/Envelope PRC9 Long Edge" 918 649
#media "EnvPRC10/Envelope PRC10" 918 1298
-#media "EnvPRC10Rotated/Envelope PRC10" 1298 918
+#media "EnvPRC10Rotated/Envelope PRC10 Long Edge" 1298 918
#media "EnvYou4/Envelope You4" 298 666
-#media "EnvYou4Rotated/Envelope You4" 666 298
+#media "EnvYou4Rotated/Envelope You4 Long Edge" 666 298
#media "Executive/Executive" 522 756
#media "FanFoldGerman/FanFold German" 612 864
#media "FanFoldGermanLegal/FanFold Legal German" 612 936
#media "Legal/US Legal" 612 1008
#media "LegalExtra/US Legal Oversize" 684 1080
#media "Letter/US Letter" 612 792
-#media "Letter.Transverse/US Letter" 792 612
+#media "Letter.Transverse/US Letter Long Edge" 792 612
#media "LetterExtra/US Letter Oversize" 684 864
-#media "LetterExtra.Transverse/US Letter Oversize" 864 684
+#media "LetterExtra.Transverse/US Letter Oversize Long Edge" 864 684
#media "LetterPlus/US Letter Oversize" 612 914
-#media "LetterRotated/US Letter" 792 612
+#media "LetterRotated/US Letter Long Edge" 792 612
#media "LetterSmall/US Letter Small" 612 792
#media "Monarch/Envelope Monarch" 279 540
#media "Note/Note" 612 792
#media "Postcard/Postcard" 284 419
-#media "PostcardRotated/Postcard" 419 284
+#media "PostcardRotated/Postcard Long Edge" 419 284
#media "PRC16K/PRC16K" 414 610
-#media "PRC16KRotated/PRC16K" 610 414
+#media "PRC16KRotated/PRC16K Long Edge" 610 414
#media "PRC32K/PRC32K" 275 428
#media "PRC32KBig/PRC32K Oversize" 275 428
-#media "PRC32KBigRotated/PRC32K Oversize" 428 275
-#media "PRC32KRotated/PRC32K" 428 275
+#media "PRC32KBigRotated/PRC32K Oversize Long Edge" 428 275
+#media "PRC32KRotated/PRC32K Long Edge" 428 275
#media "Quarto/Quarto" 610 780
#media "Statement/Statement" 396 612
#media "SuperA/Super A" 643 1009
<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>
<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>
<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>
<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>
<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>
<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>
<!--
"$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
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
<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
<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>
<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>
<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>
</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>
<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>
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
<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'>
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
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
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
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
<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'>
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"
" 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 ""
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 ""
" 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."
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 ""
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 ""
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 ""
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 ""
" REF: Page 43, %%Pages:"
msgstr ""
-#: systemv/cupstestppd.c:1473
+#: systemv/cupstestppd.c:1464
msgid " NO ERRORS FOUND"
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 ""
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 ""
msgid " -P filename.ppd Set PPD file."
msgstr ""
-#: systemv/cupstestppd.c:3494
+#: systemv/cupstestppd.c:3620
msgid " -R root-directory Set alternate root."
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid " -t Test PPDs instead of generating them."
msgstr ""
-#: scheduler/main.c:2255
+#: scheduler/main.c:2195
msgid " -t Test the configuration file."
msgstr ""
msgid " -u Remove the PPD file when finished."
msgstr ""
-#: systemv/cupstestppd.c:3501
+#: systemv/cupstestppd.c:3627
msgid " -v Be slightly verbose."
msgstr ""
msgid " -v Show all attributes sent and received."
msgstr ""
-#: systemv/cupstestppd.c:3502
+#: systemv/cupstestppd.c:3628
msgid " -vv Be very verbose."
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 ""
msgid "%s accepting requests since %s"
msgstr ""
-#: scheduler/ipp.c:11199
+#: scheduler/ipp.c:11155
#, c-format
msgid "%s cannot be changed."
msgstr ""
msgid "%s not accepting requests since %s -"
msgstr ""
-#: scheduler/ipp.c:722
+#: scheduler/ipp.c:718
#, c-format
msgid "%s not supported."
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "Administration"
msgstr ""
-#: ppdc/sample.c:400
+#: ppdc/sample.c:435
msgid "Always"
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 ""
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 ""
msgid "Bad columns value %d."
msgstr ""
-#: scheduler/ipp.c:1464
+#: scheduler/ipp.c:1460
#, c-format
msgid "Bad copies value %d."
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
"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 ""
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 ""
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 ""
" 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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "Internal error"
msgstr ""
-#: ppdc/sample.c:129
+#: ppdc/sample.c:164
msgid "Internet Postage 2-Part"
msgstr ""
-#: ppdc/sample.c:138
+#: ppdc/sample.c:173
msgid "Internet Postage 2-Part - 2 1/4 x 7 1/2\""
msgstr ""
-#: ppdc/sample.c:130
-msgid "Internet Postage 3-Part"
+#: ppdc/sample.c:165
+msgid "Internet Postage 3-Part"
+msgstr ""
+
+#: ppdc/sample.c:174
+msgid "Internet Postage 3-Part - 2 1/4 x 7\""
+msgstr ""
+
+#: backend/ipp.c:262
+msgid "Internet Printing Protocol"
+msgstr ""
+
+#: cups/ppd.c:1387
+msgid "JCL"
+msgstr ""
+
+#: ppdc/sample.c:50
+msgid "JIS B0"
msgstr ""
-#: ppdc/sample.c:139
-msgid "Internet Postage 3-Part - 2 1/4 x 7\""
+#: ppdc/sample.c:52
+msgid "JIS B1"
msgstr ""
-#: backend/ipp.c:252
-msgid "Internet Printing Protocol"
+#: ppdc/sample.c:51
+msgid "JIS B10"
msgstr ""
-#: ppdc/sample.c:37
-msgid "JB0"
+#: ppdc/sample.c:53
+msgid "JIS B2"
msgstr ""
-#: ppdc/sample.c:39
-msgid "JB1"
+#: ppdc/sample.c:54
+msgid "JIS B3"
msgstr ""
-#: ppdc/sample.c:38
-msgid "JB10"
+#: ppdc/sample.c:55
+msgid "JIS B4"
msgstr ""
-#: ppdc/sample.c:40
-msgid "JB2"
+#: ppdc/sample.c:56
+msgid "JIS B4 Long Edge"
msgstr ""
-#: ppdc/sample.c:41
-msgid "JB3"
+#: ppdc/sample.c:57
+msgid "JIS B5"
msgstr ""
-#: ppdc/sample.c:42
-msgid "JB4"
+#: ppdc/sample.c:58
+msgid "JIS B5 Long Edge"
msgstr ""
-#: ppdc/sample.c:44
-msgid "JB6"
+#: ppdc/sample.c:59
+msgid "JIS B6"
msgstr ""
-#: ppdc/sample.c:45
-msgid "JB7"
+#: ppdc/sample.c:60
+msgid "JIS B6 Long Edge"
msgstr ""
-#: ppdc/sample.c:46
-msgid "JB8"
+#: ppdc/sample.c:61
+msgid "JIS B7"
msgstr ""
-#: ppdc/sample.c:47
-msgid "JB9"
+#: ppdc/sample.c:62
+msgid "JIS B8"
msgstr ""
-#: cups/ppd.c:1387
-msgid "JCL"
+#: ppdc/sample.c:63
+msgid "JIS B9"
msgstr ""
-#: scheduler/ipp.c:10215
+#: scheduler/ipp.c:10208
#, c-format
msgid "Job #%d cannot be restarted - no files."
msgstr ""
-#: scheduler/ipp.c:4082 scheduler/ipp.c:4313 scheduler/ipp.c:4368
-#: scheduler/ipp.c:4545 scheduler/ipp.c:4988 scheduler/ipp.c:6889
-#: scheduler/ipp.c:7267 scheduler/ipp.c:7414 scheduler/ipp.c:7714
-#: scheduler/ipp.c:8663 scheduler/ipp.c:8685 scheduler/ipp.c:8857
-#: scheduler/ipp.c:9066 scheduler/ipp.c:9109 scheduler/ipp.c:9958
-#: scheduler/ipp.c:10183 scheduler/ipp.c:10537 scheduler/ipp.c:11125
+#: scheduler/ipp.c:4075 scheduler/ipp.c:4306 scheduler/ipp.c:4361
+#: scheduler/ipp.c:4538 scheduler/ipp.c:4981 scheduler/ipp.c:6882
+#: scheduler/ipp.c:7260 scheduler/ipp.c:7407 scheduler/ipp.c:7707
+#: scheduler/ipp.c:8656 scheduler/ipp.c:8678 scheduler/ipp.c:8850
+#: scheduler/ipp.c:9059 scheduler/ipp.c:9102 scheduler/ipp.c:9951
+#: scheduler/ipp.c:10176 scheduler/ipp.c:10493 scheduler/ipp.c:11081
#, c-format
msgid "Job #%d does not exist."
msgstr ""
-#: scheduler/ipp.c:4577
+#: scheduler/ipp.c:4570
#, c-format
msgid "Job #%d is already aborted - can't cancel."
msgstr ""
-#: scheduler/ipp.c:4571
+#: scheduler/ipp.c:4564
#, c-format
msgid "Job #%d is already canceled - can't cancel."
msgstr ""
-#: scheduler/ipp.c:4583
+#: scheduler/ipp.c:4576
#, c-format
msgid "Job #%d is already completed - can't cancel."
msgstr ""
-#: scheduler/ipp.c:9151 scheduler/ipp.c:11140
+#: scheduler/ipp.c:9144 scheduler/ipp.c:11096
#, c-format
msgid "Job #%d is finished and cannot be altered."
msgstr ""
-#: scheduler/ipp.c:10197
+#: scheduler/ipp.c:10190
#, c-format
msgid "Job #%d is not complete."
msgstr ""
-#: scheduler/ipp.c:4097
+#: scheduler/ipp.c:4090
#, c-format
msgid "Job #%d is not held for authentication."
msgstr ""
-#: scheduler/ipp.c:9972
+#: scheduler/ipp.c:9965
#, c-format
msgid "Job #%d is not held."
msgstr ""
msgid "Job UUID: "
msgstr ""
-#: scheduler/ipp.c:11223
+#: scheduler/ipp.c:11179
msgid "Job is completed and cannot be changed."
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 ""
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 ""
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 ""
msgid "Make and Model: "
msgstr ""
-#: ppdc/sample.c:239
+#: ppdc/sample.c:274
msgid "Manual Feed"
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 ""
msgid "Missing asterisk in column 1"
msgstr ""
-#: scheduler/ipp.c:7290
+#: scheduler/ipp.c:7283
msgid "Missing document-number attribute."
msgstr ""
msgid "Missing media-size in media-col."
msgstr ""
-#: scheduler/ipp.c:7844
+#: scheduler/ipp.c:7837
msgid "Missing notify-subscription-ids attribute."
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 ""
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 ""
msgid "Move Job"
msgstr ""
-#: cups/http-support.c:1208
+#: cups/http-support.c:1259
msgid "Moved Permanently"
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 ""
msgid "No"
msgstr ""
-#: cups/http-support.c:1205
+#: cups/http-support.c:1256
msgid "No Content"
msgstr ""
msgid "No PPD name"
msgstr ""
-#: cups/snmp.c:1052
+#: cups/snmp.c:1047
msgid "No VarBind SEQUENCE"
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 ""
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 ""
msgid "No modification time"
msgstr ""
-#: cups/snmp.c:1056
+#: cups/snmp.c:1051
msgid "No name OID"
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 ""
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 ""
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:"
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "Print Self-Test Page"
msgstr ""
-#: ppdc/sample.c:298
+#: ppdc/sample.c:333
msgid "Print Speed"
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
msgid "Printer Added"
msgstr ""
-#: ppdc/sample.c:234
+#: ppdc/sample.c:269
msgid "Printer Default"
msgstr ""
msgid "Printer Paused"
msgstr ""
-#: ppdc/sample.c:265
+#: ppdc/sample.c:300
msgid "Printer Settings"
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 ""
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 ""
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."
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 ""
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 ""
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 ""
msgid "Server Stopped"
msgstr ""
-#: cups/http-support.c:1248
+#: cups/http-support.c:1299
msgid "Service Unavailable"
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "Unable to add printer:"
msgstr ""
-#: scheduler/ipp.c:1330
+#: scheduler/ipp.c:1326
msgid "Unable to allocate memory for file types."
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
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 ""
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."
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 ""
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 ""
msgid "Unable to copy print file"
msgstr ""
-#: backend/ipp.c:1674
+#: backend/ipp.c:1764
msgid "Unable to create compressed print file"
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 ""
msgid "Unable to find destination for job"
msgstr ""
-#: cups/http-support.c:1568
+#: cups/http-support.c:1627
msgid "Unable to find printer."
msgstr ""
msgid "Unable to fork filter"
msgstr ""
-#: backend/ipp.c:1696
+#: backend/ipp.c:1786
msgid "Unable to generate compressed print file"
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 ""
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
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 ""
msgid "Unable to open charset file"
msgstr ""
-#: backend/ipp.c:1680
+#: backend/ipp.c:1770
msgid "Unable to open compressed print file"
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
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 ""
msgid "Unable to write uncompressed print data: %s"
msgstr ""
-#: cups/http-support.c:1221
+#: cups/http-support.c:1272
msgid "Unauthorized"
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 ""
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 ""
msgid "Unknown format character: \"%c\"."
msgstr ""
-#: backend/ipp.c:445
+#: backend/ipp.c:455
#, c-format
msgid "Unknown option \"%s\" with value \"%s\"."
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 ""
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 ""
msgid "Unsupported gamma value %s, using gamma=1000."
msgstr ""
-#: scheduler/ipp.c:1549
+#: scheduler/ipp.c:1545
msgid "Unsupported margins."
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 ""
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
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
msgstr ""
-#: scheduler/main.c:2246
+#: scheduler/main.c:2186
msgid "Usage: cupsd [options]"
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 ""
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 ""
msgid "Waiting for printer to become available."
msgstr ""
-#: backend/socket.c:446
+#: backend/socket.c:435
msgid "Waiting for printer to finish."
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "ipptool: Unknown option \"-%c\"."
msgstr ""
-#: scheduler/ipp.c:9003
+#: scheduler/ipp.c:8996
msgid "job-printer-uri attribute missing."
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 ""
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 ""
msgid "untitled"
msgstr ""
-#: cups/snmp.c:1050
+#: cups/snmp.c:1045
msgid "variable-bindings uses indefinite length"
msgstr ""
" 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.";
" 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";
" %s Bad permissions on %s file \"%s\"." = " %s Bad permissions on %s file \"%s\".";
" %s Bad spelling of %s - should be %s." = " %s Bad spelling of %s - should be %s.";
" %s Cannot provide both APScanAppPath and APScanAppBundleID." = " %s Cannot provide both APScanAppPath and APScanAppBundleID.";
+" %s Default choices conflicting." = " %s Default choices conflicting.";
" %s Empty cupsUIConstraints %s" = " %s Empty cupsUIConstraints %s";
" %s Missing \"%s\" translation string for option %s, choice %s." = " %s Missing \"%s\" translation string for option %s, choice %s.";
" %s Missing \"%s\" translation string for option %s." = " %s Missing \"%s\" translation string for option %s.";
" %s REQUIRED %s does not define choice None.\n REF: Page 122, section 5.17" = " %s REQUIRED %s does not define choice None.\n REF: Page 122, section 5.17";
" %s Size \"%s\" defined for %s but not for %s." = " %s Size \"%s\" defined for %s but not for %s.";
" %s Size \"%s\" has unexpected dimensions (%gx%g)." = " %s Size \"%s\" has unexpected dimensions (%gx%g).";
+" %s Size \"%s\" should be \"%s\"." = " %s Size \"%s\" should be \"%s\".";
+" %s Size \"%s\" should be the Adobe standard name \"%s\"." = " %s Size \"%s\" should be the Adobe standard name \"%s\".";
" %s cupsICCProfile %s hash value collides with %s." = " %s cupsICCProfile %s hash value collides with %s.";
" %s cupsUIResolver %s causes a loop." = " %s cupsUIResolver %s causes a loop.";
" %s cupsUIResolver %s does not list at least two different options." = " %s cupsUIResolver %s does not list at least two different options.";
"A class named \"%s\" already exists." = "A class named \"%s\" already exists.";
"A printer named \"%s\" already exists." = "A printer named \"%s\" already exists.";
"A0" = "A0";
+"A0 Long Edge" = "A0 Long Edge";
"A1" = "A1";
+"A1 Long Edge" = "A1 Long Edge";
"A10" = "A10";
"A2" = "A2";
+"A2 Long Edge" = "A2 Long Edge";
"A3" = "A3";
+"A3 Long Edge" = "A3 Long Edge";
"A3 Oversize" = "A3 Oversize";
+"A3 Oversize Long Edge" = "A3 Oversize Long Edge";
"A4" = "A4";
+"A4 Long Edge" = "A4 Long Edge";
"A4 Oversize" = "A4 Oversize";
"A4 Small" = "A4 Small";
"A5" = "A5";
+"A5 Long Edge" = "A5 Long Edge";
"A5 Oversize" = "A5 Oversize";
"A6" = "A6";
+"A6 Long Edge" = "A6 Long Edge";
"A7" = "A7";
"A8" = "A8";
"A9" = "A9";
"ANSI D" = "ANSI D";
"ANSI E" = "ANSI E";
"ARCH C" = "ARCH C";
+"ARCH C Long Edge" = "ARCH C Long Edge";
"ARCH D" = "ARCH D";
+"ARCH D Long Edge" = "ARCH D Long Edge";
"ARCH E" = "ARCH E";
+"ARCH E Long Edge" = "ARCH E Long Edge";
"Accept Jobs" = "Accept Jobs";
"Accepted" = "Accepted";
"Add Class" = "Add Class";
"B3" = "B3";
"B4" = "B4";
"B5" = "B5";
-"B5 JIS" = "B5 JIS";
"B5 Oversize" = "B5 Oversize";
"B6" = "B6";
"B7" = "B7";
"CPCL Label Printer" = "CPCL Label Printer";
"Cancel RSS Subscription" = "Cancel RSS Subscription";
"Canceling print job." = "Canceling print job.";
+"Cannot share a remote Kerberized printer." = "Cannot share a remote Kerberized printer.";
"Cassette" = "Cassette";
"Change Settings" = "Change Settings";
"Character set \"%s\" not supported." = "Character set \"%s\" not supported.";
"Destination \"%s\" is not accepting jobs." = "Destination \"%s\" is not accepting jobs.";
"Device: uri = %s\n class = %s\n info = %s\n make-and-model = %s\n device-id = %s\n location = %s" = "Device: uri = %s\n class = %s\n info = %s\n make-and-model = %s\n device-id = %s\n location = %s";
"Direct Thermal Media" = "Direct Thermal Media";
+"Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d).";
+"Directory \"%s\" is a file." = "Directory \"%s\" is a file.";
+"Directory \"%s\" not available: %s" = "Directory \"%s\" not available: %s";
+"Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d).";
"Disabled" = "Disabled";
"Document #%d does not exist in job #%d." = "Document #%d does not exist in job #%d.";
"Driver Name: " = "Driver Name: ";
"Envelope C65" = "Envelope C65";
"Envelope C7" = "Envelope C7";
"Envelope Choukei 3" = "Envelope Choukei 3";
+"Envelope Choukei 3 Long Edge" = "Envelope Choukei 3 Long Edge";
"Envelope Choukei 4" = "Envelope Choukei 4";
+"Envelope Choukei 4 Long Edge" = "Envelope Choukei 4 Long Edge";
"Envelope DL" = "Envelope DL";
"Envelope Feed" = "Envelope Feed";
"Envelope Invite" = "Envelope Invite";
"Envelope Italian" = "Envelope Italian";
"Envelope Kaku2" = "Envelope Kaku2";
+"Envelope Kaku2 Long Edge" = "Envelope Kaku2 Long Edge";
"Envelope Kaku3" = "Envelope Kaku3";
+"Envelope Kaku3 Long Edge" = "Envelope Kaku3 Long Edge";
"Envelope Monarch" = "Envelope Monarch";
"Envelope PRC1 " = "Envelope PRC1 ";
+"Envelope PRC1 Long Edge" = "Envelope PRC1 Long Edge";
"Envelope PRC10" = "Envelope PRC10";
+"Envelope PRC10 Long Edge" = "Envelope PRC10 Long Edge";
"Envelope PRC2" = "Envelope PRC2";
+"Envelope PRC2 Long Edge" = "Envelope PRC2 Long Edge";
"Envelope PRC3" = "Envelope PRC3";
+"Envelope PRC3 Long Edge" = "Envelope PRC3 Long Edge";
"Envelope PRC4" = "Envelope PRC4";
-"Envelope PRC5" = "Envelope PRC5";
+"Envelope PRC4 Long Edge" = "Envelope PRC4 Long Edge";
+"Envelope PRC5 Long Edge" = "Envelope PRC5 Long Edge";
"Envelope PRC5PRC5" = "Envelope PRC5PRC5";
"Envelope PRC6" = "Envelope PRC6";
+"Envelope PRC6 Long Edge" = "Envelope PRC6 Long Edge";
"Envelope PRC7" = "Envelope PRC7";
+"Envelope PRC7 Long Edge" = "Envelope PRC7 Long Edge";
"Envelope PRC8" = "Envelope PRC8";
+"Envelope PRC8 Long Edge" = "Envelope PRC8 Long Edge";
"Envelope PRC9" = "Envelope PRC9";
+"Envelope PRC9 Long Edge" = "Envelope PRC9 Long Edge";
"Envelope Personal" = "Envelope Personal";
"Envelope You4" = "Envelope You4";
+"Envelope You4 Long Edge" = "Envelope You4 Long Edge";
"Epson" = "Epson";
"Error Policy" = "Error Policy";
+"Error sending raster data." = "Error sending raster data.";
"Error: need hostname after \"-h\" option." = "Error: need hostname after \"-h\" option.";
"Every 10 Labels" = "Every 10 Labels";
"Every 2 Labels" = "Every 2 Labels";
"FanFold German" = "FanFold German";
"FanFold Legal German" = "FanFold Legal German";
"Fanfold US" = "Fanfold US";
+"File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d).";
+"File \"%s\" is a directory." = "File \"%s\" is a directory.";
+"File \"%s\" not available: %s" = "File \"%s\" not available: %s";
+"File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "File \"%s\" permissions OK (0%o/uid=%d/gid=%d).";
"File Folder" = "File Folder";
"File Folder - 9/16 x 3 7/16\"" = "File Folder - 9/16 x 3 7/16\"";
"File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cupsd.conf\"." = "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cupsd.conf\".";
"Internet Postage 3-Part" = "Internet Postage 3-Part";
"Internet Postage 3-Part - 2 1/4 x 7\"" = "Internet Postage 3-Part - 2 1/4 x 7\"";
"Internet Printing Protocol" = "Internet Printing Protocol";
-"JB0" = "JB0";
-"JB1" = "JB1";
-"JB10" = "JB10";
-"JB2" = "JB2";
-"JB3" = "JB3";
-"JB4" = "JB4";
-"JB6" = "JB6";
-"JB7" = "JB7";
-"JB8" = "JB8";
-"JB9" = "JB9";
"JCL" = "JCL";
+"JIS B0" = "JIS B0";
+"JIS B1" = "JIS B1";
+"JIS B10" = "JIS B10";
+"JIS B2" = "JIS B2";
+"JIS B3" = "JIS B3";
+"JIS B4" = "JIS B4";
+"JIS B4 Long Edge" = "JIS B4 Long Edge";
+"JIS B5" = "JIS B5";
+"JIS B5 Long Edge" = "JIS B5 Long Edge";
+"JIS B6" = "JIS B6";
+"JIS B6 Long Edge" = "JIS B6 Long Edge";
+"JIS B7" = "JIS B7";
+"JIS B8" = "JIS B8";
+"JIS B9" = "JIS B9";
"Job #%d cannot be restarted - no files." = "Job #%d cannot be restarted - no files.";
"Job #%d does not exist." = "Job #%d does not exist.";
"Job #%d is already aborted - can't cancel." = "Job #%d is already aborted - can't cancel.";
"Large Address - 1 4/10 x 3 1/2\"" = "Large Address - 1 4/10 x 3 1/2\"";
"LaserJet Series PCL 4/5" = "LaserJet Series PCL 4/5";
"Letter Oversize" = "Letter Oversize";
+"Letter Oversize Long Edge" = "Letter Oversize Long Edge";
"Light" = "Light";
"Line longer than the maximum allowed (255 characters)" = "Line longer than the maximum allowed (255 characters)";
"List Available Printers" = "List Available Printers";
"Model: name = %s\n natural_language = %s\n make-and-model = %s\n device-id = %s" = "Model: name = %s\n natural_language = %s\n make-and-model = %s\n device-id = %s";
"Modify Class" = "Modify Class";
"Modify Printer" = "Modify Printer";
-"Monarch" = "Monarch";
"Move All Jobs" = "Move All Jobs";
"Move Job" = "Move Job";
"Moved Permanently" = "Moved Permanently";
"NULL PPD file pointer" = "NULL PPD file pointer";
"Name OID uses indefinite length" = "Name OID uses indefinite length";
"Nested classes are not allowed." = "Nested classes are not allowed.";
-"Network host \"%s\" is busy; will retry in %d seconds." = "Network host \"%s\" is busy; will retry in %d seconds.";
-"Network printer \"%s\" is busy." = "Network printer \"%s\" is busy.";
-"Network printer \"%s\" is not responding." = "Network printer \"%s\" is not responding.";
-"Network printer \"%s\" is unreachable at this time." = "Network printer \"%s\" is unreachable at this time.";
-"Network printer \"%s\" may not exist or is unavailable at this time." = "Network printer \"%s\" may not exist or is unavailable at this time.";
"Never" = "Never";
"New Stylus Color Series" = "New Stylus Color Series";
"New Stylus Photo Series" = "New Stylus Photo Series";
"Options Installed" = "Options Installed";
"Options:" = "Options:";
"Options: " = "Options: ";
+"Out of date PPD cache file." = "Out of date PPD cache file.";
"Out of memory." = "Out of memory.";
"Output Mode" = "Output Mode";
"Output for printer %s is sent to %s" = "Output for printer %s is sent to %s";
"PASS" = "PASS";
"PCL Laser Printer" = "PCL Laser Printer";
"PRC16K" = "PRC16K";
+"PRC16K Long Edge" = "PRC16K Long Edge";
"PRC32K" = "PRC32K";
+"PRC32K Long Edge" = "PRC32K Long Edge";
"PRC32K Oversize" = "PRC32K Oversize";
+"PRC32K Oversize Long Edge" = "PRC32K Oversize Long Edge";
"Packet does not contain a Get-Response-PDU" = "Packet does not contain a Get-Response-PDU";
"Packet does not start with SEQUENCE" = "Packet does not start with SEQUENCE";
"ParamCustominCutInterval" = "ParamCustominCutInterval";
"Port Monitor" = "Port Monitor";
"PostScript Printer" = "PostScript Printer";
"Postcard" = "Postcard";
-"Postcard Double" = "Postcard Double";
"Postcard Double " = "Postcard Double ";
+"Postcard Double Long Edge" = "Postcard Double Long Edge";
+"Postcard Long Edge" = "Postcard Long Edge";
"Print Density" = "Print Density";
"Print Job:" = "Print Job:";
"Print Mode" = "Print Mode";
"Print file accepted - job ID %d." = "Print file accepted - job ID %d.";
"Print file accepted - job ID unknown." = "Print file accepted - job ID unknown.";
"Print file sent." = "Print file sent.";
-"Print file was not accepted: %s" = "Print file was not accepted: %s";
+"Print file was not accepted." = "Print file was not accepted.";
"Printed For: " = "Printed For: ";
"Printed From: " = "Printed From: ";
"Printed On: " = "Printed On: ";
"Printer Paused" = "Printer Paused";
"Printer Settings" = "Printer Settings";
"Printer busy, will retry in 10 seconds." = "Printer busy, will retry in 10 seconds.";
-"Printer busy; will retry in 10 seconds." = "Printer busy; will retry in 10 seconds.";
"Printer busy; will retry in 30 seconds." = "Printer busy; will retry in 30 seconds.";
"Printer did not respond after %d seconds." = "Printer did not respond after %d seconds.";
"Printer does not support IPP/%d.%d, trying IPP/%s." = "Printer does not support IPP/%d.%d, trying IPP/%s.";
"Switching Protocols" = "Switching Protocols";
"Tabloid" = "Tabloid";
"Tabloid Oversize" = "Tabloid Oversize";
+"Tabloid Oversize Long Edge" = "Tabloid Oversize Long Edge";
"Tear" = "Tear";
"Tear-Off" = "Tear-Off";
"Tear-Off Adjust Position" = "Tear-Off Adjust Position";
"The print file could not be opened." = "The print file could not be opened.";
"The printer URI is incorrect or no longer exists." = "The printer URI is incorrect or no longer exists.";
"The printer is almost out of ink." = "The printer is almost out of ink.";
+"The printer is busy." = "The printer is busy.";
"The printer is low on toner." = "The printer is low on toner.";
"The printer is not connected." = "The printer is not connected.";
"The printer is not responding." = "The printer is not responding.";
"The printer is out of ink." = "The printer is out of ink.";
"The printer is out of toner." = "The printer is out of toner.";
+"The printer is unreachable at this time." = "The printer is unreachable at this time.";
+"The printer may not exist or is unavailable at this time." = "The printer may not exist or is unavailable at this time.";
"The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." = "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#).";
"The printer or class does not exist." = "The printer or class does not exist.";
"The printer or class is not shared." = "The printer or class is not shared.";
"US Legal" = "US Legal";
"US Legal Oversize" = "US Legal Oversize";
"US Letter" = "US Letter";
+"US Letter Long Edge" = "US Letter Long Edge";
"US Letter Oversize" = "US Letter Oversize";
+"US Letter Oversize Long Edge" = "US Letter Oversize Long Edge";
"US Letter Small" = "US Letter Small";
"USB Serial Port #%d" = "USB Serial Port #%d";
"Unable to access cupsd.conf file:" = "Unable to access cupsd.conf file:";
"Unable to add RSS subscription:" = "Unable to add RSS subscription:";
"Unable to add class:" = "Unable to add class:";
-"Unable to add file to job: %s" = "Unable to add file to job: %s";
+"Unable to add document to print job." = "Unable to add document to print job.";
"Unable to add job for destination \"%s\"." = "Unable to add job for destination \"%s\".";
"Unable to add printer:" = "Unable to add printer:";
"Unable to allocate memory for file types." = "Unable to allocate memory for file types.";
"Unable to allocate memory for page info" = "Unable to allocate memory for page info";
"Unable to allocate memory for pages array" = "Unable to allocate memory for pages array";
"Unable to cancel RSS subscription:" = "Unable to cancel RSS subscription:";
-"Unable to cancel job: %s" = "Unable to cancel job: %s";
+"Unable to cancel print job." = "Unable to cancel print job.";
"Unable to change printer-is-shared attribute:" = "Unable to change printer-is-shared attribute:";
"Unable to change printer:" = "Unable to change printer:";
"Unable to change server settings:" = "Unable to change server settings:";
"Unable to generate compressed print file" = "Unable to generate compressed print file";
"Unable to get class list:" = "Unable to get class list:";
"Unable to get class status:" = "Unable to get class status:";
-"Unable to get job attributes: %s" = "Unable to get job attributes: %s";
"Unable to get list of printer drivers:" = "Unable to get list of printer drivers:";
+"Unable to get print job status." = "Unable to get print job status.";
"Unable to get printer attributes:" = "Unable to get printer attributes:";
"Unable to get printer list:" = "Unable to get printer list:";
+"Unable to get printer status." = "Unable to get printer status.";
"Unable to get printer status:" = "Unable to get printer status:";
-"Unable to get printer status: %s" = "Unable to get printer status: %s";
"Unable to install Windows 2000 printer driver files (%d)." = "Unable to install Windows 2000 printer driver files (%d).";
"Unable to install Windows 9x printer driver files (%d)." = "Unable to install Windows 9x printer driver files (%d).";
"Unable to locate printer \"%s\"." = "Unable to locate printer \"%s\".";
"Unsupported number-up value %d, using number-up=1." = "Unsupported number-up value %d, using number-up=1.";
"Unsupported number-up-layout value %s, using number-up-layout=lrtb." = "Unsupported number-up-layout value %s, using number-up-layout=lrtb.";
"Unsupported page-border value %s, using page-border=none." = "Unsupported page-border value %s, using page-border=none.";
+"Unsupported raster data." = "Unsupported raster data.";
"Unsupported value type" = "Unsupported value type";
"Upgrade Required" = "Upgrade Required";
"Usage:\n\n lpadmin [-h server] -d destination\n lpadmin [-h server] -x destination\n lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n [-r remove-class] [-v device] [-D description]\n [-P ppd-file] [-o name=value]\n [-u allow:user,user] [-u deny:user,user]" = "Usage:\n\n lpadmin [-h server] -d destination\n lpadmin [-h server] -x destination\n lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n [-r remove-class] [-v device] [-D description]\n [-P ppd-file] [-o name=value]\n [-u allow:user,user] [-u deny:user,user]";
.\"
.\" "$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
.\" 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
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.
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 $".
.\"
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
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...
}
#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...
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);
{
cupsdLogMessage(CUPSD_LOG_DEBUG, "Received %d peer certificates!",
(int)CFArrayGetCount(peerCerts));
+ CFRelease(peerCerts);
}
else
cupsdLogMessage(CUPSD_LOG_DEBUG, "Received NO peer certificates!");
servername = CFStringCreateWithCString(kCFAllocatorDefault, localname,
kCFStringEncodingUTF8);
-
+
CFRelease(policy);
policy = SecPolicyCreateSSL(1, servername);
}
else
servername = con->servername;
-
+
/*
* Run the "certtool" command to generate a self-signed certificate...
*/
openlog("cupsd", LOG_PID | LOG_NOWAIT | LOG_NDELAY, LOG_LPR);
#endif /* HAVE_VSYSLOG */
+ /*
+ * Make sure each of the log files exists and gets rotated as necessary...
+ */
+
+ if (!strcmp(AccessLog, "syslog"))
+ cupsdCheckLogFile(&AccessFile, AccessLog);
+
+ if (!strcmp(ErrorLog, "syslog"))
+ cupsdCheckLogFile(&ErrorFile, ErrorLog);
+
+ if (!strcmp(PageLog, "syslog"))
+ cupsdCheckLogFile(&PageFile, PageLog);
+
/*
* Log the configuration file that was used...
*/
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));
}
/*
*/
for (addr = addrlist; addr; addr = addr->next)
- if (addr->addr.addr.sa_family == AF_INET)
+ if (_httpAddrFamily(&(addr->addr)) == AF_INET)
break;
if (addr)
cupsdLogMessage(CUPSD_LOG_INFO,
"Sending browsing info to %s:%d (IPv4)",
- temp, ntohs(dira->to.ipv4.sin_port));
+ temp, _httpAddrPort(&(dira->to)));
NumBrowsers ++;
}
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 ++;
}
*
* 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
*/
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,
*
* 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
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;
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, "/.."))
{
#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...
snprintf(line, sizeof(line), "/%s", name);
}
- else
#elif defined(__linux)
if (!strncmp(name, "lsb/usr/", 8))
* 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",
* 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)))
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)
*/
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;
}
continue;
}
+ else if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_FILE_ONLY, !geteuid(),
+ _cupsFileCheckFilter, NULL))
+ continue;
/*
* See if this file has been scanned before...
*
* 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
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 */
* 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));
}
#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...
*/
*
* 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
*/
#include <cups/cups-private.h>
+#include <cups/file-private.h>
#include <limits.h>
#include <time.h>
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;
}
/*
*
* File type conversion routines for CUPS.
*
- * Copyright 2007-2010 by Apple Inc.
+ * Copyright 2007-2011 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
*
* Contents:
*
- * mimeAddFilter() - Add a filter to the current MIME database.
- * mimeFilter() - Find the fastest way to convert from one type to
- * another.
- * mimeFilter2() - Find the fastest way to convert from one type to
- * another, including the file size.
- * mimeFilterLookup() - Lookup a filter.
- * compare_filters() - Compare two filters.
- * find_filters() - Find the filters to convert from one type to another.
+ * mimeAddFilter() - Add a filter to the current MIME database.
+ * mimeFilter() - Find the fastest way to convert from one type to
+ * another.
+ * mimeFilter2() - Find the fastest way to convert from one type to
+ * another, including the file size.
+ * mimeFilterLookup() - Lookup a filter.
+ * mime_compare_filters() - Compare two filters.
+ * mime_compare_srcs() - Compare two filter source types.
+ * mime_find_filters() - Find the filters to convert from one type to
+ * another.
*/
/*
* 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);
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
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));
}
*/
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);
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);
}
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));
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;
{
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;
* 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);
}
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 */
/*
- * '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 */
/*
- * '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 */
*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));
* 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
{
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
* 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)
return (mintemp);
}
- DEBUG_puts("find_filters: Returning zippo...");
+ DEBUG_puts("3mime_find_filters: Returning NULL (no matches).");
return (NULL);
}
dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
+ if (!dict)
+ {
+ cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to initialize profile \"%s\".",
+ iccfile);
+ return;
+ }
cftext = CFStringCreateWithCString(kCFAllocatorDefault, text,
kCFStringEncodingUTF8);
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 ++;
}
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')
/* 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 */
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 */
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;
envp[envc ++] = class_name;
}
+ envp[envc ++] = auth_info_required;
if (job->auth_username)
envp[envc ++] = job->auth_username;
if (job->auth_domain)
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);
* Remove the job info file...
*/
- char filename[1024]; /* Job filename */
-
snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot,
job->id);
unlink(filename);
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)
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)
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...
*
* 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.
* 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.
*/
* 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.
*/
}
+/*
+ * '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...
* Not using syslog; check the log file...
*/
- if (!check_log_file(&PageFile, PageLog))
+ if (!cupsdCheckLogFile(&PageFile, PageLog))
return (0);
/*
* Not using syslog; check the log file...
*/
- if (!check_log_file(&AccessFile, AccessLog))
+ if (!cupsdCheckLogFile(&AccessFile, AccessLog))
return (0);
/*
* Not using syslog; check the log file...
*/
- if (!check_log_file(&ErrorFile, ErrorLog))
+ if (!cupsdCheckLogFile(&ErrorFile, ErrorLog))
return (0);
/*
}
-/*
- * '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.
*
{
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 */
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 */
}
*
* MIME database file routines for CUPS.
*
- * Copyright 2007-2010 by Apple Inc.
+ * Copyright 2007-2011 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
*
* Contents:
*
- * mimeDelete() - Delete (free) a MIME database.
- * mimeDeleteFilter() - Delete a filter from the MIME database.
- * mimeDeleteType() - Delete a type from the MIME database.
- * mimeFirstFilter() - Get the first filter in the MIME database.
- * mimeFirstType() - Get the first type in the MIME database.
- * mimeLoad() - Create a new MIME database from disk.
- * mimeMerge() - Merge a MIME database from disk with the current one.
- * mimeNew() - Create a new, empty MIME database.
- * mimeNextFilter() - Get the next filter in the MIME database.
- * mimeNextType() - Get the next type in the MIME database.
- * mimeNumFilters() - Get the number of filters in a MIME database.
- * mimeNumTypes() - Get the number of types in a MIME database.
- * add_fcache() - Add a filter to the filter cache.
- * compare_fcache() - Compare two filter cache entries.
- * delete_fcache() - Free all memory used by the filter cache.
- * delete_rules() - Free all memory for the given rule tree.
- * load_convs() - Load a xyz.convs file...
- * load_types() - Load a xyz.types file...
+ * mimeDelete() - Delete (free) a MIME database.
+ * mimeDeleteFilter() - Delete a filter from the MIME database.
+ * mimeDeleteType() - Delete a type from the MIME database.
+ * mimeFirstFilter() - Get the first filter in the MIME database.
+ * mimeFirstType() - Get the first type in the MIME database.
+ * mimeLoad() - Create a new MIME database from disk.
+ * mimeMerge() - Merge a MIME database from disk with the current one.
+ * mimeNew() - Create a new, empty MIME database.
+ * mimeNextFilter() - Get the next filter in the MIME database.
+ * mimeNextType() - Get the next type in the MIME database.
+ * mimeNumFilters() - Get the number of filters in a MIME database.
+ * mimeNumTypes() - Get the number of types in a MIME database.
+ * mime_add_fcache() - Add a filter to the filter cache.
+ * mime_compare_fcache() - Compare two filter cache entries.
+ * mime_delete_fcache() - Free all memory used by the filter cache.
+ * mime_delete_rules() - Free all memory for the given rule tree.
+ * mime_load_convs() - Load a xyz.convs file...
+ * mime_load_types() - Load a xyz.types file...
*/
/*
* 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);
mime_filter_t *filter; /* Current filter */
+ DEBUG_printf(("mimeDelete(mime=%p)", mime));
+
if (!mime)
return;
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);
if (mime->srcs)
{
+ DEBUG_puts("1mimeDeleteFilter: Deleting source lookup cache.");
cupsArrayDelete(mime->srcs);
mime->srcs = NULL;
}
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);
}
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);
+ }
}
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);
+ }
}
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);
}
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)
{
*/
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);
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...
if (!mime)
{
cupsDirClose(dir);
+ DEBUG_puts("1mimeLoadTypes: Returning NULL.");
return (NULL);
}
*/
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);
}
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);
+ }
}
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);
+ }
}
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));
+ }
}
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);
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));
/*
- * '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))
/*
- * '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.
*/
next = rules->next;
if (rules->child != NULL)
- delete_rules(rules->child);
+ mime_delete_rules(rules->child);
free(rules);
rules = next;
/*
- * '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 */
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...
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;
}
* 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;
}
/*
- * '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 */
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...
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;
}
}
<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>
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...
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;
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,
}
/*
- * 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;
}
/*
"%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))
{
"%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;
}
}
ppd_info.st_mtime = 1;
ippDelete(p->ppd_attrs);
- p->ppd_attrs = ippNew();
+ p->ppd_attrs = NULL;
_ppdCacheDestroy(p->pc);
p->pc = NULL;
finishings[0] = IPP_FINISHINGS_NONE;
num_finishings = 1;
+ p->ppd_attrs = ippNew();
+
if ((ppd = ppdOpenFile(ppd_name)) != NULL)
{
/*
*/
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;
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 */
#endif /* __APPLE__ */
+ *pid = 0;
+
/*
* Figure out the UID for the child process...
*/
* 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)
*
* 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
* Sleep for any remaining time...
*/
- if (seconds > 0)
+ if (seconds > 0)
sleep(seconds);
}
*
* 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.
*/
/*
#include <cups/string-private.h>
#include <cups/dir.h>
+#include <cups/debug-private.h>
+#include <cups/ppd-private.h>
#include "mime.h"
* 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);
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 */
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"))
i ++;
if (i < argc)
+ {
mime = mimeLoad(argv[i], filter_path);
+
+ if (ppd)
+ add_ppd_filters(mime, ppd);
+ }
}
else if (!strcmp(argv[i], "-f"))
{
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,
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)
{
}
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');
}
if (!mime)
+ {
mime = mimeLoad("../conf", filter_path);
+ if (ppd)
+ add_ppd_filters(mime, ppd);
+ }
if (!src)
{
filter->filter, filter->cost);
type_dir(mime, "../doc");
- type_dir(mime, "../man");
}
return (0);
}
+/*
+ * 'add_printer_filter()' - Add a printer filter from a PPD.
+ */
+
+static void
+add_ppd_filter(mime_t *mime, /* I - MIME database */
+ mime_type_t *filtertype, /* I - Filter or prefilter MIME type */
+ const char *filter) /* I - Filter to add */
+{
+ char super[MIME_MAX_SUPER], /* Super-type for filter */
+ type[MIME_MAX_TYPE], /* Type for filter */
+ dsuper[MIME_MAX_SUPER], /* Destination super-type for filter */
+ dtype[MIME_MAX_TYPE], /* Destination type for filter */
+ dest[MIME_MAX_SUPER + MIME_MAX_TYPE + 2],
+ /* Destination super/type */
+ program[1024]; /* Program/filter name */
+ int cost; /* Cost of filter */
+ size_t maxsize = 0; /* Maximum supported file size */
+ mime_type_t *temptype, /* MIME type looping var */
+ *desttype; /* Destination MIME type */
+ mime_filter_t *filterptr; /* MIME filter */
+
+
+ DEBUG_printf(("add_ppd_filter(mime=%p, filtertype=%p(%s/%s), filter=\"%s\")",
+ mime, filtertype, filtertype->super, filtertype->type, filter));
+
+ /*
+ * Parse the filter string; it should be in one of the following formats:
+ *
+ * source/type cost program
+ * source/type cost maxsize(nnnn) program
+ * source/type dest/type cost program
+ * source/type dest/type cost maxsize(nnnn) program
+ */
+
+ if (sscanf(filter, "%15[^/]/%255s%*[ \t]%15[^/]/%255s%d%*[ \t]%1023[^\n]",
+ super, type, dsuper, dtype, &cost, program) == 6)
+ {
+ snprintf(dest, sizeof(dest), "test/%s/%s", dsuper, dtype);
+
+ if ((desttype = mimeType(mime, "printer", dest)) == NULL)
+ desttype = mimeAddType(mime, "printer", dest);
+ }
+ else
+ {
+ if (sscanf(filter, "%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, &cost,
+ program) == 4)
+ {
+ desttype = filtertype;
+ }
+ else
+ {
+ printf("testmime: Invalid filter string \"%s\".\n", filter);
+ return;
+ }
+ }
+
+ if (!strncmp(program, "maxsize(", 8))
+ {
+ char *ptr; /* Pointer into maxsize(nnnn) program */
+
+ maxsize = strtoll(program + 8, &ptr, 10);
+
+ if (*ptr != ')')
+ {
+ printf("testmime: Invalid filter string \"%s\".\n", filter);
+ return;
+ }
+
+ ptr ++;
+ while (_cups_isspace(*ptr))
+ ptr ++;
+
+ _cups_strcpy(program, ptr);
+ }
+
+ /*
+ * Add the filter to the MIME database, supporting wildcards as needed...
+ */
+
+ for (temptype = mimeFirstType(mime);
+ temptype;
+ temptype = mimeNextType(mime))
+ if (((super[0] == '*' && strcasecmp(temptype->super, "printer")) ||
+ !strcasecmp(temptype->super, super)) &&
+ (type[0] == '*' || !strcasecmp(temptype->type, type)))
+ {
+ if (desttype != filtertype)
+ {
+ DEBUG_printf(("add_ppd_filter: Adding filter %s/%s %s/%s %d %s",
+ temptype->super, temptype->type, desttype->super,
+ desttype->type, cost, program));
+ filterptr = mimeAddFilter(mime, temptype, desttype, cost, program);
+
+ if (!mimeFilterLookup(mime, desttype, filtertype))
+ {
+ DEBUG_printf(("add_printer_filter: Adding filter %s/%s %s/%s 0 -",
+ desttype->super, desttype->type, filtertype->super,
+ filtertype->type));
+ mimeAddFilter(mime, desttype, filtertype, cost, "-");
+ }
+ }
+ else
+ {
+ DEBUG_printf(("add_printer_filter: Adding filter %s/%s %s/%s %d %s",
+ temptype->super, temptype->type, filtertype->super,
+ filtertype->type, cost, program));
+ filterptr = mimeAddFilter(mime, temptype, filtertype, cost, program);
+ }
+
+ if (filterptr)
+ filterptr->maxsize = maxsize;
+ }
+}
+
+
+/*
+ * 'add_ppd_filters()' - Add all filters from a PPD.
+ */
+
+static void
+add_ppd_filters(mime_t *mime, /* I - MIME database */
+ ppd_file_t *ppd) /* I - PPD file */
+{
+ _ppd_cache_t *pc; /* Cache data for PPD */
+ const char *value; /* Filter definition value */
+ mime_type_t *filter, /* Filter type */
+ *prefilter; /* Pre-filter type */
+
+
+ pc = _ppdCacheCreateWithPPD(ppd);
+ if (!pc)
+ return;
+
+ filter = mimeAddType(mime, "printer", "test");
+
+ if (pc->filters)
+ {
+ for (value = (const char *)cupsArrayFirst(pc->filters);
+ value;
+ value = (const char *)cupsArrayNext(pc->filters))
+ add_ppd_filter(mime, filter, value);
+ }
+ else
+ {
+ add_ppd_filter(mime, filter, "application/vnd.cups-raw 0 -");
+ add_ppd_filter(mime, filter, "application/vnd.cups-postscript 0 -");
+ }
+
+ if (pc->prefilters)
+ {
+ prefilter = mimeAddType(mime, "prefilter", "test");
+
+ for (value = (const char *)cupsArrayFirst(pc->prefilters);
+ value;
+ value = (const char *)cupsArrayNext(pc->prefilters))
+ add_ppd_filter(mime, prefilter, value);
+ }
+}
+
+
/*
* 'print_rules()' - Print the rules for a file type...
*/
*
* MIME typing routines for CUPS.
*
- * Copyright 2007-2010 by Apple Inc.
+ * Copyright 2007-2011 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
*
* Contents:
*
- * mimeAddType() - Add a MIME type to a database.
- * mimeAddTypeRule() - Add a detection rule for a file type.
- * mimeFileType() - Determine the type of a file.
- * mimeType() - Lookup a file type.
- * compare_types() - Compare two MIME super/type names.
- * checkrules() - Check each rule in a list.
- * patmatch() - Pattern matching...
+ * mimeAddType() - Add a MIME type to a database.
+ * mimeAddTypeRule() - Add a detection rule for a file type.
+ * mimeFileType() - Determine the type of a file.
+ * mimeType() - Lookup a file type.
+ * mime_compare_types() - Compare two MIME super/type names.
+ * mime_check_rules() - Check each rule in a list.
+ * mime_patmatch() - Pattern matching.
*/
/*
* 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);
/*
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);
}
*current; /* Current rule */
+ DEBUG_printf(("mimeAddTypeRule(mt=%p(%s/%s), rule=\"%s\")", mt,
+ mt ? mt->super : "???", mt ? mt->type : "???", rule));
+
/*
* Range check input...
*/
logic = MIME_MAGIC_NOP;
invert = 0;
- DEBUG_printf(("mimeAddTypeRule: %s/%s: %s", mt->super, mt->type, rule));
-
while (*rule != '\0')
{
while (isspace(*rule & 255))
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);
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;
}
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)
{
* 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;
}
}
}
else if (*rule == '!')
{
- DEBUG_puts("mimeAddTypeRule: NOT");
+ DEBUG_puts("1mimeAddTypeRule: NOT");
invert = 1;
rule ++;
}
* 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;
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...
*/
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;
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;
*/
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);
}
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...
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 */
/*
- * '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 */
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)
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 :
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));
/*
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]));
}
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 :
default :
if (rules->child != NULL)
- result = checkrules(filename, fb, rules->child);
+ result = mime_check_rules(filename, fb, rules->child);
else
result = 0;
break;
* 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) ||
/*
- * '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...
while (*s != '\0')
{
- if (patmatch(s, pat))
+ if (mime_patmatch(s, pat))
return (1);
s ++;
*
* 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
*
* 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
* 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.
*/
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,
attr->name);
}
- ppdMarkDefaults(ppd);
- if (ppdConflicts(ppd))
- {
- _cupsLangPuts(stdout,
- _(" WARN Default choices conflicting."));
-
- show_conflicts(ppd);
- }
-
if (ppdversion < 43)
{
_cupsLangPrintf(stdout,
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];
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**";
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);
*/
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 */
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);
}
}
/*
- * 'usage()' - Show program usage...
+ * 'usage()' - Show program usage.
*/
static void
#
-# "$Id$"
+# "$Id: get-jobs.test 9702 2011-04-20 21:16:08Z mike $"
#
# Get list of not-completed jobs.
#
#
-# End of "$Id$".
+# End of "$Id: get-jobs.test 9702 2011-04-20 21:16:08Z mike $".
#
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 */
}
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)))
{
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);
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)
buildPhases = (
);
dependencies = (
+ 726AD704135E8AA1002C930D /* PBXTargetDependency */,
+ 270CCDB2135E3CDE00007BE2 /* PBXTargetDependency */,
273BF6DE1333B6370022CAAB /* PBXTargetDependency */,
);
name = Tests;
276683DD1337B24A000D33D0 /* PBXTargetDependency */,
276683DF1337B24A000D33D0 /* PBXTargetDependency */,
7258EAEF13459ADA009286F1 /* PBXTargetDependency */,
+ 720DD6D11358FDBE0064AA82 /* PBXTargetDependency */,
7243793F1333FD23009631B9 /* PBXTargetDependency */,
724379C31333FF7D009631B9 /* PBXTargetDependency */,
);
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
+ 270CCDB9135E3D0900007BE2 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A4C1336F31B004BB496 /* libcups_static.a */; };
+ 270CCDBA135E3D0900007BE2 /* libcupsmime.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220FAC13330B2200FCA411 /* libcupsmime.dylib */; };
+ 270CCDBC135E3D3E00007BE2 /* testmime.c in Sources */ = {isa = PBXBuildFile; fileRef = 270CCDBB135E3D3E00007BE2 /* testmime.c */; };
273BF6C71333B5370022CAAB /* testcups.c in Sources */ = {isa = PBXBuildFile; fileRef = 273BF6C61333B5370022CAAB /* testcups.c */; };
273BF6CE1333B5950022CAAB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273BF6CB1333B5950022CAAB /* CoreFoundation.framework */; };
273BF6CF1333B5950022CAAB /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 273BF6CC1333B5950022CAAB /* libiconv.dylib */; };
276683FD1337F7B8000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
2766840F1337FA38000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
276684111337FA7C000D33D0 /* cupsaddsmb.c in Sources */ = {isa = PBXBuildFile; fileRef = 276684101337FA7C000D33D0 /* cupsaddsmb.c */; };
+ 720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
+ 720DD6D31358FDDE0064AA82 /* snmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 720DD6D21358FDDE0064AA82 /* snmp.c */; };
+ 720DD6D413590AB90064AA82 /* ieee1284.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379CA1334000E009631B9 /* ieee1284.c */; };
72220EB61333052D00FCA411 /* adminutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB51333052D00FCA411 /* adminutil.c */; };
72220EC41333056300FCA411 /* adminutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EB71333056300FCA411 /* adminutil.h */; settings = {ATTRIBUTES = (Public, ); }; };
72220EC51333056300FCA411 /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB81333056300FCA411 /* array.c */; };
7263EE3613330E4E00BA4D44 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7263EE3513330E4E00BA4D44 /* CoreFoundation.framework */; };
7263EE3813330E7500BA4D44 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7263EE3713330E7500BA4D44 /* libz.dylib */; };
7263EE3A13330EC500BA4D44 /* libldap.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7263EE3913330EC500BA4D44 /* libldap.dylib */; };
+ 726AD702135E8A90002C930D /* ippserver.c in Sources */ = {isa = PBXBuildFile; fileRef = 726AD701135E8A90002C930D /* ippserver.c */; };
+ 726AD707135E8B11002C930D /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A4C1336F31B004BB496 /* libcups_static.a */; };
+ 726AD708135E8B11002C930D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F49133306BB00FCA411 /* CoreFoundation.framework */; };
+ 726AD709135E8B11002C930D /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F55133308EA00FCA411 /* Kerberos.framework */; };
+ 726AD70A135E8B11002C930D /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F53133308CB00FCA411 /* libresolv.dylib */; };
+ 726AD70B135E8B11002C930D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F4A133306BB00FCA411 /* libz.dylib */; };
+ 726AD70C135E8B11002C930D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F4B133306BB00FCA411 /* Security.framework */; };
+ 726AD70D135E8B11002C930D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F4C133306BB00FCA411 /* SystemConfiguration.framework */; };
+ 726AD70E135E8B5E002C930D /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220F51133308C100FCA411 /* libiconv.dylib */; };
72F75A5C1336F988004BB496 /* cupstestppd.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A5B1336F988004BB496 /* cupstestppd.c */; };
72F75A671336FA38004BB496 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
72F75A6C1336FA8A004BB496 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A691336FA8A004BB496 /* error.c */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
+ 270CCDB1135E3CDE00007BE2 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 270CCDA6135E3C9E00007BE2;
+ remoteInfo = testmime;
+ };
+ 270CCDB5135E3CF700007BE2 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 72220FAB13330B2200FCA411;
+ remoteInfo = libcupsmime;
+ };
+ 270CCDB7135E3CFD00007BE2 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274FF6891333B1C400317ECB;
+ remoteInfo = libcups_static;
+ };
273BF6C81333B5410022CAAB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
remoteGlobalIDString = 276684031337FA1D000D33D0;
remoteInfo = cupsaddsmb;
};
+ 720DD6CE1358FD790064AA82 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 72220EAD1333047D00FCA411;
+ remoteInfo = libcups;
+ };
+ 720DD6D01358FDBE0064AA82 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 720DD6C11358FD5F0064AA82;
+ remoteInfo = snmp;
+ };
72220F6413330A6500FCA411 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
remoteGlobalIDString = 72F75A601336F9A3004BB496;
remoteInfo = libcupsimage;
};
+ 726AD703135E8AA1002C930D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 726AD6F6135E88F0002C930D;
+ remoteInfo = ippserver;
+ };
+ 726AD705135E8AC5002C930D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274FF6891333B1C400317ECB;
+ remoteInfo = libcups_static;
+ };
72F75A651336FA30004BB496 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
+ 270CCDA5135E3C9E00007BE2 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
273BF6BB1333B5000022CAAB /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
);
runOnlyForDeploymentPostprocessing = 1;
};
+ 720DD6C01358FD5F0064AA82 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
72220F5913330A5A00FCA411 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
);
runOnlyForDeploymentPostprocessing = 1;
};
+ 726AD6F5135E88F0002C930D /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
72F75A501336F950004BB496 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 270CCDA7135E3C9E00007BE2 /* testmime */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testmime; sourceTree = BUILT_PRODUCTS_DIR; };
+ 270CCDBB135E3D3E00007BE2 /* testmime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testmime.c; path = ../scheduler/testmime.c; sourceTree = "<group>"; };
273BF6BD1333B5000022CAAB /* testcups */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcups; sourceTree = BUILT_PRODUCTS_DIR; };
273BF6C61333B5370022CAAB /* testcups.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcups.c; path = ../cups/testcups.c; sourceTree = "<group>"; };
273BF6CB1333B5950022CAAB /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = SDKs/MacOSX10.6.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };
276684101337FA7C000D33D0 /* cupsaddsmb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupsaddsmb.c; path = ../systemv/cupsaddsmb.c; sourceTree = "<group>"; };
27D3037C134148CB00F022B1 /* libcups_s.exp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.exports; name = libcups_s.exp; path = ../cups/libcups_s.exp; sourceTree = "<group>"; };
27D3037D134148CB00F022B1 /* libcups2.def */ = {isa = PBXFileReference; lastKnownFileType = text; name = libcups2.def; path = ../cups/libcups2.def; sourceTree = "<group>"; };
+ 720DD6C21358FD5F0064AA82 /* snmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = snmp; sourceTree = BUILT_PRODUCTS_DIR; };
+ 720DD6D21358FDDE0064AA82 /* snmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snmp.c; path = ../backend/snmp.c; sourceTree = "<group>"; };
72220EAE1333047D00FCA411 /* libcups.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
72220EB51333052D00FCA411 /* adminutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = adminutil.c; path = ../cups/adminutil.c; sourceTree = "<group>"; };
72220EB71333056300FCA411 /* adminutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = adminutil.h; path = ../cups/adminutil.h; sourceTree = "<group>"; };
7263EE3513330E4E00BA4D44 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = SDKs/MacOSX10.6.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };
7263EE3713330E7500BA4D44 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = SDKs/MacOSX10.6.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
7263EE3913330EC500BA4D44 /* libldap.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libldap.dylib; path = SDKs/MacOSX10.6.sdk/usr/lib/libldap.dylib; sourceTree = DEVELOPER_DIR; };
- 72F75A4C1336F31B004BB496 /* libcups_static.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups_static.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+ 726AD6F7135E88F0002C930D /* ippserver */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ippserver; sourceTree = BUILT_PRODUCTS_DIR; };
+ 726AD701135E8A90002C930D /* ippserver.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ippserver.c; path = ../test/ippserver.c; sourceTree = "<group>"; };
+ 72F75A4C1336F31B004BB496 /* libcups_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups_static.a; sourceTree = BUILT_PRODUCTS_DIR; };
72F75A521336F950004BB496 /* cupstestppd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupstestppd; sourceTree = BUILT_PRODUCTS_DIR; };
72F75A5B1336F988004BB496 /* cupstestppd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupstestppd.c; path = ../systemv/cupstestppd.c; sourceTree = "<group>"; };
72F75A611336F9A3004BB496 /* libcupsimage.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsimage.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 270CCDA4135E3C9E00007BE2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 270CCDB9135E3D0900007BE2 /* libcups_static.a in Frameworks */,
+ 270CCDBA135E3D0900007BE2 /* libcupsmime.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
273BF6BA1333B5000022CAAB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 726AD72B135EAE1E002C930D /* libcups_static.dylib in Frameworks */,
273BF6CE1333B5950022CAAB /* CoreFoundation.framework in Frameworks */,
273BF6D31333B5C30022CAAB /* Kerberos.framework in Frameworks */,
273BF6D41333B5C30022CAAB /* Security.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 720DD6BF1358FD5F0064AA82 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
72220EAB1333047D00FCA411 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 726AD6F4135E88F0002C930D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 726AD70E135E8B5E002C930D /* libiconv.dylib in Frameworks */,
+ 726AD707135E8B11002C930D /* libcups_static.a in Frameworks */,
+ 726AD708135E8B11002C930D /* CoreFoundation.framework in Frameworks */,
+ 726AD709135E8B11002C930D /* Kerberos.framework in Frameworks */,
+ 726AD70A135E8B11002C930D /* libresolv.dylib in Frameworks */,
+ 726AD70B135E8B11002C930D /* libz.dylib in Frameworks */,
+ 726AD70C135E8B11002C930D /* Security.framework in Frameworks */,
+ 726AD70D135E8B11002C930D /* SystemConfiguration.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
72F75A4F1336F950004BB496 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
273BF6B81333B4A90022CAAB /* tests */ = {
isa = PBXGroup;
children = (
+ 270CCDBB135E3D3E00007BE2 /* testmime.c */,
273BF6C61333B5370022CAAB /* testcups.c */,
);
name = tests;
children = (
276684101337FA7C000D33D0 /* cupsaddsmb.c */,
276683681337AA00000D33D0 /* cupsctl.c */,
- 72F75A5B1336F988004BB496 /* cupstestppd.c */,
274FF68713333B6E00317ECB /* cupsfilter.c */,
+ 72F75A5B1336F988004BB496 /* cupstestppd.c */,
+ 726AD701135E8A90002C930D /* ippserver.c */,
276683F91337F7A9000D33D0 /* ipptool.c */,
);
name = commands;
724379301333FB85009631B9 /* socket */,
724379471333FEA9009631B9 /* dnssd */,
7243795B1333FF1D009631B9 /* usb */,
- 72F75A4C1336F31B004BB496 /* libcups_static.dylib */,
72F75A521336F950004BB496 /* cupstestppd */,
2766835C1337A9B6000D33D0 /* cupsctl */,
276683701337AC79000D33D0 /* ppdc */,
276683F01337F78E000D33D0 /* ipptool */,
276684041337FA1D000D33D0 /* cupsaddsmb */,
7258EAE2134594C4009286F1 /* rastertopwg */,
+ 720DD6C21358FD5F0064AA82 /* snmp */,
+ 270CCDA7135E3C9E00007BE2 /* testmime */,
+ 726AD6F7135E88F0002C930D /* ippserver */,
);
name = Products;
sourceTree = "<group>";
72220FB113330B4A00FCA411 /* Frameworks */ = {
isa = PBXGroup;
children = (
+ 72F75A4C1336F31B004BB496 /* libcups_static.a */,
72220FAC13330B2200FCA411 /* libcupsmime.dylib */,
+ 72220EAE1333047D00FCA411 /* libcups.dylib */,
+ 72F75A611336F9A3004BB496 /* libcupsimage.dylib */,
+ 274FF5EE133330C800317ECB /* libcupsppdc.dylib */,
+ 724379C81333FFF3009631B9 /* CoreFoundation.framework */,
+ 724379671333FF3B009631B9 /* IOKit.framework */,
+ 273BF6D51333B5F60022CAAB /* libresolv.dylib */,
+ 273BF6D61333B5F60022CAAB /* SystemConfiguration.framework */,
+ 273BF6D11333B5C30022CAAB /* Kerberos.framework */,
+ 273BF6D21333B5C30022CAAB /* Security.framework */,
+ 273BF6CB1333B5950022CAAB /* CoreFoundation.framework */,
+ 273BF6CC1333B5950022CAAB /* libiconv.dylib */,
+ 273BF6CD1333B5950022CAAB /* libz.dylib */,
7263EE3913330EC500BA4D44 /* libldap.dylib */,
7263EE3713330E7500BA4D44 /* libz.dylib */,
7263EE3513330E4E00BA4D44 /* CoreFoundation.framework */,
724379281333E952009631B9 /* lpd.c */,
7243790B1333E4E3009631B9 /* network.c */,
724379121333E516009631B9 /* runloop.c */,
+ 720DD6D21358FDDE0064AA82 /* snmp.c */,
7243790C1333E4E3009631B9 /* snmp-supplies.c */,
7243793C1333FD19009631B9 /* socket.c */,
724379C51333FFC7009631B9 /* usb.c */,
72BF96351333042100B1EAD7 = {
isa = PBXGroup;
children = (
- 72220EAE1333047D00FCA411 /* libcups.dylib */,
- 72F75A611336F9A3004BB496 /* libcupsimage.dylib */,
- 274FF5EE133330C800317ECB /* libcupsppdc.dylib */,
- 724379C81333FFF3009631B9 /* CoreFoundation.framework */,
- 724379671333FF3B009631B9 /* IOKit.framework */,
- 273BF6D51333B5F60022CAAB /* libresolv.dylib */,
- 273BF6D61333B5F60022CAAB /* SystemConfiguration.framework */,
- 273BF6D11333B5C30022CAAB /* Kerberos.framework */,
- 273BF6D21333B5C30022CAAB /* Security.framework */,
- 273BF6CB1333B5950022CAAB /* CoreFoundation.framework */,
- 273BF6CC1333B5950022CAAB /* libiconv.dylib */,
- 273BF6CD1333B5950022CAAB /* libz.dylib */,
72220FB113330B4A00FCA411 /* Frameworks */,
72220F45133305D000FCA411 /* Public Headers */,
72220F461333060C00FCA411 /* Private Headers */,
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
+ 270CCDA6135E3C9E00007BE2 /* testmime */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 270CCDAF135E3C9E00007BE2 /* Build configuration list for PBXNativeTarget "testmime" */;
+ buildPhases = (
+ 270CCDA3135E3C9E00007BE2 /* Sources */,
+ 270CCDA4135E3C9E00007BE2 /* Frameworks */,
+ 270CCDA5135E3C9E00007BE2 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 270CCDB8135E3CFD00007BE2 /* PBXTargetDependency */,
+ 270CCDB6135E3CF700007BE2 /* PBXTargetDependency */,
+ );
+ name = testmime;
+ productName = testmime;
+ productReference = 270CCDA7135E3C9E00007BE2 /* testmime */;
+ productType = "com.apple.product-type.tool";
+ };
273BF6BC1333B5000022CAAB /* testcups */ = {
isa = PBXNativeTarget;
buildConfigurationList = 273BF6C31333B5000022CAAB /* Build configuration list for PBXNativeTarget "testcups" */;
);
name = libcups_static;
productName = libcups;
- productReference = 72F75A4C1336F31B004BB496 /* libcups_static.dylib */;
+ productReference = 72F75A4C1336F31B004BB496 /* libcups_static.a */;
productType = "com.apple.product-type.library.dynamic";
};
2766835B1337A9B6000D33D0 /* cupsctl */ = {
productReference = 276684041337FA1D000D33D0 /* cupsaddsmb */;
productType = "com.apple.product-type.tool";
};
+ 720DD6C11358FD5F0064AA82 /* snmp */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */;
+ buildPhases = (
+ 720DD6BE1358FD5F0064AA82 /* Sources */,
+ 720DD6BF1358FD5F0064AA82 /* Frameworks */,
+ 720DD6C01358FD5F0064AA82 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 720DD6CF1358FD790064AA82 /* PBXTargetDependency */,
+ );
+ name = snmp;
+ productName = snmp;
+ productReference = 720DD6C21358FD5F0064AA82 /* snmp */;
+ productType = "com.apple.product-type.tool";
+ };
72220EAD1333047D00FCA411 /* libcups */ = {
isa = PBXNativeTarget;
buildConfigurationList = 72220EB21333047D00FCA411 /* Build configuration list for PBXNativeTarget "libcups" */;
productReference = 7258EAE2134594C4009286F1 /* rastertopwg */;
productType = "com.apple.product-type.tool";
};
+ 726AD6F6135E88F0002C930D /* ippserver */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 726AD6FE135E88F1002C930D /* Build configuration list for PBXNativeTarget "ippserver" */;
+ buildPhases = (
+ 726AD6F3135E88F0002C930D /* Sources */,
+ 726AD6F4135E88F0002C930D /* Frameworks */,
+ 726AD6F5135E88F0002C930D /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 726AD706135E8AC5002C930D /* PBXTargetDependency */,
+ );
+ name = ippserver;
+ productName = ippserver;
+ productReference = 726AD6F7135E88F0002C930D /* ippserver */;
+ productType = "com.apple.product-type.tool";
+ };
72F75A511336F950004BB496 /* cupstestppd */ = {
isa = PBXNativeTarget;
buildConfigurationList = 72F75A581336F951004BB496 /* Build configuration list for PBXNativeTarget "cupstestppd" */;
72F75A511336F950004BB496 /* cupstestppd */,
724379461333FEA9009631B9 /* dnssd */,
724378FC1333E43E009631B9 /* ipp */,
+ 726AD6F6135E88F0002C930D /* ippserver */,
276683EF1337F78E000D33D0 /* ipptool */,
724379171333E532009631B9 /* lpd */,
2766836F1337AC79000D33D0 /* ppdc */,
276683961337ACA2000D33D0 /* ppdmerge */,
276683A31337ACAB000D33D0 /* ppdpo */,
7258EAE1134594C4009286F1 /* rastertopwg */,
+ 720DD6C11358FD5F0064AA82 /* snmp */,
7243792F1333FB85009631B9 /* socket */,
273BF6BC1333B5000022CAAB /* testcups */,
+ 270CCDA6135E3C9E00007BE2 /* testmime */,
7243795A1333FF1D009631B9 /* usb */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
+ 270CCDA3135E3C9E00007BE2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 270CCDBC135E3D3E00007BE2 /* testmime.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
273BF6B91333B5000022CAAB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 720DD6BE1358FD5F0064AA82 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 720DD6D413590AB90064AA82 /* ieee1284.c in Sources */,
+ 720DD6D31358FDDE0064AA82 /* snmp.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
72220EAA1333047D00FCA411 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 726AD6F3135E88F0002C930D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 726AD702135E8A90002C930D /* ippserver.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
72F75A4E1336F950004BB496 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
+ 270CCDB2135E3CDE00007BE2 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 270CCDA6135E3C9E00007BE2 /* testmime */;
+ targetProxy = 270CCDB1135E3CDE00007BE2 /* PBXContainerItemProxy */;
+ };
+ 270CCDB6135E3CF700007BE2 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 72220FAB13330B2200FCA411 /* libcupsmime */;
+ targetProxy = 270CCDB5135E3CF700007BE2 /* PBXContainerItemProxy */;
+ };
+ 270CCDB8135E3CFD00007BE2 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274FF6891333B1C400317ECB /* libcups_static */;
+ targetProxy = 270CCDB7135E3CFD00007BE2 /* PBXContainerItemProxy */;
+ };
273BF6C91333B5410022CAAB /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 274FF6891333B1C400317ECB /* libcups_static */;
target = 276684031337FA1D000D33D0 /* cupsaddsmb */;
targetProxy = 276684121337FA8D000D33D0 /* PBXContainerItemProxy */;
};
+ 720DD6CF1358FD790064AA82 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 72220EAD1333047D00FCA411 /* libcups */;
+ targetProxy = 720DD6CE1358FD790064AA82 /* PBXContainerItemProxy */;
+ };
+ 720DD6D11358FDBE0064AA82 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 720DD6C11358FD5F0064AA82 /* snmp */;
+ targetProxy = 720DD6D01358FDBE0064AA82 /* PBXContainerItemProxy */;
+ };
72220F6513330A6500FCA411 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 72220EAD1333047D00FCA411 /* libcups */;
target = 72F75A601336F9A3004BB496 /* libcupsimage */;
targetProxy = 7258EAF213459B67009286F1 /* PBXContainerItemProxy */;
};
+ 726AD704135E8AA1002C930D /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 726AD6F6135E88F0002C930D /* ippserver */;
+ targetProxy = 726AD703135E8AA1002C930D /* PBXContainerItemProxy */;
+ };
+ 726AD706135E8AC5002C930D /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274FF6891333B1C400317ECB /* libcups_static */;
+ targetProxy = 726AD705135E8AC5002C930D /* PBXContainerItemProxy */;
+ };
72F75A661336FA30004BB496 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 72220EAD1333047D00FCA411 /* libcups */;
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
+ 270CCDAD135E3C9E00007BE2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ COPY_PHASE_STRIP = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = NO;
+ };
+ name = Debug;
+ };
+ 270CCDAE135E3C9E00007BE2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = NO;
+ };
+ name = Release;
+ };
273BF6C41333B5000022CAAB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
EXECUTABLE_PREFIX = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
COPY_PHASE_STRIP = NO;
+ EXECUTABLE_EXTENSION = a;
EXECUTABLE_PREFIX = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PRODUCT_NAME = libcups_static;
PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups;
SKIP_INSTALL = NO;
+ STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;
};
name = Debug;
};
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ EXECUTABLE_EXTENSION = a;
EXECUTABLE_PREFIX = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PRODUCT_NAME = libcups_static;
PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups;
SKIP_INSTALL = NO;
+ STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;
};
name = Release;
};
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
};
name = Release;
};
+ 720DD6C91358FD5F0064AA82 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ COPY_PHASE_STRIP = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ INSTALL_PATH = /usr/libexec/cups/backend;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 720DD6CA1358FD5F0064AA82 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ INSTALL_PATH = /usr/libexec/cups/backend;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
72220EB01333047D00FCA411 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
EXECUTABLE_PREFIX = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
EXECUTABLE_PREFIX = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
};
name = Release;
};
+ 726AD6FF135E88F1002C930D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ COPY_PHASE_STRIP = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 726AD700135E88F1002C930D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
72BF963C1333042100B1EAD7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
EXECUTABLE_PREFIX = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 270CCDAF135E3C9E00007BE2 /* Build configuration list for PBXNativeTarget "testmime" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 270CCDAD135E3C9E00007BE2 /* Debug */,
+ 270CCDAE135E3C9E00007BE2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
273BF6C31333B5000022CAAB /* Build configuration list for PBXNativeTarget "testcups" */ = {
isa = XCConfigurationList;
buildConfigurations = (
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 720DD6C91358FD5F0064AA82 /* Debug */,
+ 720DD6CA1358FD5F0064AA82 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
72220EB21333047D00FCA411 /* Build configuration list for PBXNativeTarget "libcups" */ = {
isa = XCConfigurationList;
buildConfigurations = (
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 726AD6FE135E88F1002C930D /* Build configuration list for PBXNativeTarget "ippserver" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 726AD6FF135E88F1002C930D /* Debug */,
+ 726AD700135E88F1002C930D /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
72BF963A1333042100B1EAD7 /* Build configuration list for PBXProject "CUPS" */ = {
isa = XCConfigurationList;
buildConfigurations = (