-CHANGES.txt - 2006-06-21
+CHANGES.txt - 2006-07-18
------------------------
CHANGES IN CUPS V1.2.2
+ - Documentation updates (STR #1765, STR #1780)
+ - CUPS didn't know about alternate character set names
+ for Asian text (STR #1819)
+ - The lpoptions -o and -r options did not work unless you
+ specified a printer.
+ - The lpoptions command incorrectly allowed users to set
+ printer attributes like printer-type (STR #1791)
+ - httpWait() did not flush the write buffer, causing "bad
+ request" errors when communicating with CUPS 1.1.x
+ servers (STR #1717)
+ - Polling did not sanitize the printer description,
+ location, or make and model strings like broadcasts
+ did.
+ - Polled printers did not show the server's default
+ job-sheets option value.
+ - The Samba password prompt was not properly localized
+ (STR #1814)
+ - Added a German translation (STR #1842)
+ - The scheduler now creates self-signed SSL certficates
+ automatically when using OpenSSL and CDSA for
+ encryption, just as for GNU TLS.
+ - The SNMP backend sporatically reported some printers as
+ "unknown" (STR #1774)
+ - The scheduler now forces BrowseTimeout to be at least
+ twice the BrowseInterval value and non-zero to avoid
+ common configuration errors.
+ - The scheduler incorrectly returned printer URIs of the
+ form "ipp://server/printers/classname" for classes (STR
+ #1813)
+ - Updated Japanese localization (STR #1805)
+ - The scheduler's SSL certificate/key directory was not
+ created on installation (STR #1788)
+ - Added a mailto.conf man page and help page (STR #1754)
+ - The parallel and USB backends no longer wait for the
+ printer to go on-line - this caused problems with
+ certain printers that don't follow with the IEEE-1284
+ standard (STR #1738)
+ - The scheduler could crash on a reload when implicit
+ classes were present (STR #1828)
+ - The IPP backend incorrectly used the CUPS_ENCRYPTION
+ environment variable to determine the default
+ encryption mode when printing (STR #1820)
+ - USB printing did not work on Solaris (STR #1756)
+ - The scheduler sorted job priorities in the wrong order
+ (STR #1811)
+ - The scheduler did not automatically restart notifiers
+ that exited or crashed (STR #1793)
+ - IPv6 support did not work on NetBSD (STR #1834)
+ - The EPM packaging file did not work (STR #1804)
+ - The scheduler used up the CPU if BrowseRemoteProtocols
+ was empty (STR #1792)
+ - Custom page sizes did not work (STR #1787)
+ - The SNMP backend could crash on some systems when SNMP
+ logging was enabled (STR #1789)
+ - Browsing could produce some funny printer names when
+ ServerName was set to an IP address (STR #1799)
+ - Fixed the log message for BrowseRelay (STR #1798)
+ - Fixes to allow CUPS to compile on MirBSD (STR #1796)
+ - The scheduler incorrectly set the FINAL_CONTENT_TYPE
+ environment variable (STR #1795)
+ - The pdftops filter incorrectly embedded a "produced by"
+ comment, causing PDF printing not to work on some
+ operating systems (STR #1801)
- Sending raw jobs from a client system could cause the
client's scheduler to eventually crash (STR #1786)
- The scheduler now checks that the notifier exists prior
CHANGES IN CUPS V1.2.1
+ - "lprm -h hostname" did not work (STR #1800)
- The web interface did not handle reloads properly for
MSIE (STR #1716)
- The configure script no longer adds linker rpath
+++ /dev/null
-Preliminary Design for CUPS Firewire Printer Backend - 03/19/2002
------------------------------------------------------------------
-
-OVERVIEW
-
- Easy Software Products will develop an IEEE-1394, a.k.a.
- Firewire, printing interface for its Common UNIX Printing
- System ("CUPS") for initial use under the Linux operating
- system. A follow-on implementation for MacOS X is
- anticipated as well.
-
- The operating system interfaces for IEEE-1394 ports vary
- widely; the CUPS printing interface will abstract the OS
- layer to a simpler interface geared towards discovering,
- opening, reading from, writing to, and closing IEEE-1394
- printers.
-
- The initial development of the CUPS backend will be targeted
- at the EPSON Stylus Pro 10000 large format printer, which
- requires the bandwidth provided by Firewire in order to
- print at full speed. This printer supports printing via
- Serial Bus Protocol 2 (SBP-2) using the SCSI and PWG command
- sets. The CUPS backend will implement the PWG command set on
- LUN 0 only.
-
-
-OS ABSTRACTION LAYER
-
- The OS abstraction layer will be a thin client library that
- implements the following functions:
-
- ieee1394_list
- ieee1394_open
- ieee1394_close
- ieee1394_read
- ieee1394_write
- ieee1394_error
-
- The "ieee1394_list" function will list all of the available
- printer devices on the bus. The device information will
- consist of the device URI (ieee1394:/something) used to
- access the device and the make and model information, if
- available, for the device ("EPSON Stylus Printer").
-
- The "ieee1394_open" and "ieee1394_close" functions will open
- and close a connection to the printer, respectively.
-
- The "ieee1394_read" and "ieee1394_write" functions will read
- and write data to and from the printer, respectively. The
- read function will be non-blocking, returning data only if
- there is data coming back from the printer.
-
- The "ieee1394_error" function will return a string
- describing the last error or NULL if no error occurred.
-
- The library will be responsible for creating any background
- threads that are needed to monitor the connection to the
- printer.
-
-
-CUPS BACKEND
-
- The CUPS backend will use the OS abstraction layer to list
- and access the Firewire printers. The "main" function will
- read and write printer data, while the "list_devices"
- function will be called as necessary to identify the
- available devices.
-
- The CUPS 1.1 backend will record any status information in
- the error log file, while the 1.2 backend will supply it to
- the printer driver process.
+++ /dev/null
-Easy Software Products
-44141 Airport View Drive
-Suite 204
-Hollywood, Maryland 20636
-+1.301.373.9600
-March 8, 2002
-
-
-Subject: EPSON Firewire Printer Driver for Linux
-
-Currently, no Firewire printer support exists for Linux. Since
-the latest EPSON printer products depend on the Firewire
-interface to print at full speed, a solution is needed to
-support customers using Linux as their server platform.
-
-The Linux Firewire subsystem provides a user-mode driver
-interface that allows driver programs to access Firewire
-devices. Easy Software Products will utilize this interface to
-develop a "backend" program for the Common UNIX Printing System
-that will allow users to print to EPSON printers using the
-Firewire interface.
-
-After examining the Linux interface, we estimate that it will
-require approximately 30 hours of development time to write,
-test, and document the Firewire backend, for a total cost of
-$3,000. The new backend will become a standard part of the CUPS
-software distribution and will be included with at least the
-following Linux distributions:
-
- - Caldera Linux
- - Mandrake Linux
- - Red Hat Linux
- - SuSE Linux
-
-ESP will provide EPSON with binaries for Red Hat Linux 7.2.
+++ /dev/null
-/*
- * "$Id: ieee1394-linux.c 4703 2005-09-26 19:33:58Z mike $"
- *
- * Linux IEEE-1394 glue for the Common UNIX Printing System (CUPS).
- *
- * Copyright 2002 by Easy Software Products, all rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the
- * following conditions are met:
- *
- * 1. Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the
- * above copyright notice, this list of conditions and
- * the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use
- * of this software must display the following
- * acknowledgement:
- *
- * This product includes software developed by Easy
- * Software Products.
- *
- * 4. The name of Easy Software Products may not be used to
- * endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * Contents:
- *
- * get_device_id() - Get the IEEE-1284 device ID for a node...
- * get_unit_type() - Get the unit type for a node...
- * show_data() - Show a data node...
- * show_dir() - Show a directory list...
- * ieee1394_list() - List the available printer devices.
- * ieee1394_open() - Open a printer device.
- * ieee1394_close() - Close a printer device.
- * ieee1394_read() - Read from a printer device.
- * ieee1394_write() - Write data to a printer device.
- * ieee1394_error() - Return the last error.
- */
-
-/*
- * Include necessary headers.
- */
-
-#include "ieee1394.h"
-#include <cups/debug.h>
-#include <libraw1394/raw1394.h>
-#include <libraw1394/csr.h>
-
-
-/*
- * Limits...
- */
-
-#define MAX_NODES 100
-
-
-/*
- * Structures...
- */
-
-typedef struct
-{
- char uri[HTTP_MAX_URI],/* URI for this node... */
- description[128],/* Description of port */
- make_model[128];/* Make and model */
- int port, /* Port where this node is found */
- node; /* Node number */
- unsigned long long addr; /* Management address */
-} linux1394_node_t;
-
-typedef struct
-{
- raw1394handle_t handle; /* Handle for printer device */
- int node; /* Node number for printer device */
- unsigned long long addr; /* Management address */
-} linux1394_dev_t;
-
-
-/*
- * ORB messages for communication with the device...
- */
-
-typedef struct /**** Login ORB Message */
-{
- unsigned char passwd_addr[8]; /* Password address */
- unsigned char resp_addr[8]; /* Login response address */
- unsigned char notify_excl; /* Notify and exclusive bits */
- unsigned char recon_func; /* Reconnect time and function */
- unsigned char lun[2]; /* Logical unit number */
- unsigned char passwd_len[2]; /* Length of password */
- unsigned char resp_len[2]; /* Length of login response */
- unsigned char fifo_addr[8]; /* Local status FIFO address */
-} login_orb_t;
-
-typedef struct /**** Login Response Message ****/
-{
- unsigned char length[2]; /* Length of response */
- unsigned char login_id[2]; /* Login ID */
- unsigned char cmd_addr[8]; /* Command block agent address */
- unsigned char reserved[2]; /* Reserved (0) */
- unsigned char recon_hold[2]; /* Number of seconds to hold login */
-} login_resp_t;
-
-
-/*
- * Local globals...
- */
-
-static char error_string[1024] = "";
-static int num_nodes;
-static linux1394_node_t nodes[MAX_NODES];
-
-
-/*
- * 'get_device_id()' - Get the IEEE-1284 device ID for a node...
- */
-
-static char * /* O - Device ID */
-get_device_id(raw1394handle_t handle,/* I - Handle for device */
- int node, /* I - Node number */
- unsigned long long offset,/* I - Offset to directory */
- char *id, /* O - ID string */
- int idlen) /* I - Size of ID string */
-{
- unsigned char data[1024], /* Data from ROM */
- *dataptr; /* Pointer into data */
- int length; /* Length of directory */
- int datalen; /* Length of data */
- unsigned long long dataoff; /* Offset of data */
-
-
- DEBUG_printf(("get_device_id(handle = %p, node = %d, offset = %llx, id = %p, idlen = %d)\n",
- handle, node, offset, id, idlen));
-
- *id = '\0';
-
- /*
- * Read the directory length from the first quadlet...
- */
-
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return (NULL);
-
- offset += 4;
-
- /*
- * The length is in the upper 16 bits...
- */
-
- length = (data[0] << 8) | data[1];
-
- DEBUG_printf((" length = %d\n", length));
-
- /*
- * Then read the directory, looking for unit directory or device tags...
- */
-
- while (length > 0)
- {
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return (NULL);
-
- DEBUG_printf((" data = %02X %02X %02X %02X\n", data[0], data[1],
- data[2], data[3]));
-
- if (data[0] == 0xd1)
- {
- /*
- * Found the unit directory...
- */
-
- offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
-
- return (get_device_id(handle, node, offset, id, idlen));
- }
- else if (data[0] == 0x81)
- {
- /*
- * Found potential IEEE-1284 device ID...
- */
-
- dataoff = offset + (((((data[1] << 8) | data[2]) << 8) | data[3]) << 2);
-
- if (raw1394_read(handle, 0xffc0 | node, dataoff, 4, (quadlet_t *)data) < 0)
- return (NULL);
-
- dataoff += 4;
-
- /*
- * Read the leaf value...
- */
-
- datalen = (data[0] << 8) | data[1];
-
- if (datalen > (sizeof(data) / 4))
- datalen = sizeof(data) / 4;
-
- for (dataptr = data; datalen > 0; datalen --, dataptr += 4, dataoff += 4)
- if (raw1394_read(handle, 0xffc0 | node, dataoff, 4,
- (quadlet_t *)dataptr) < 0)
- return (NULL);
-
- if (data[0] == 0 && memcmp(data + 8, "MFG:", 4) == 0)
- {
- /*
- * Found the device ID...
- */
-
- datalen = dataptr - data - 8;
- if (datalen >= idlen)
- datalen --;
-
- memcpy(id, data + 8, datalen);
- id[datalen] = '\0';
-
- return (id);
- }
- }
-
- offset += 4;
- length --;
- }
-
- return (NULL);
-}
-
-
-/*
- * 'get_man_addr()' - Get the management address for a node...
- */
-
-static int /* O - Unit type */
-get_man_addr(raw1394handle_t handle, /* I - Handle for device */
- int node, /* I - Node number */
- unsigned long long offset) /* I - Offset to directory */
-{
- unsigned char data[4]; /* Data from ROM */
- int length; /* Length of directory */
-
-
- DEBUG_printf(("get_man_addr(handle = %p, node = %d, offset = %llx)\n",
- handle, node, offset));
-
- /*
- * Read the directory length from the first quadlet...
- */
-
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return (-1);
-
- offset += 4;
-
- /*
- * The length is in the upper 16 bits...
- */
-
- length = (data[0] << 8) | data[1];
-
- DEBUG_printf((" length = %d\n", length));
-
- /*
- * Then read the directory, looking for unit directory or type tags...
- */
-
- while (length > 0)
- {
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return (-1);
-
- DEBUG_printf((" data = %02X %02X %02X %02X\n", data[0], data[1],
- data[2], data[3]));
-
- if (data[0] == 0xd1)
- {
- /*
- * Found the unit directory...
- */
-
- offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
-
- return (get_man_addr(handle, node, offset));
- }
- else if (data[0] == 0x54)
- {
- /*
- * Found the management address...
- */
-
- return (((((data[1] << 8) | data[2]) << 8) | data[3]) << 2);
- }
-
- offset += 4;
- length --;
- }
-
- return (-1);
-}
-
-
-/*
- * 'get_unit_type()' - Get the unit type for a node...
- */
-
-static int /* O - Unit type */
-get_unit_type(raw1394handle_t handle,/* I - Handle for device */
- int node, /* I - Node number */
- unsigned long long offset)/* I - Offset to directory */
-{
- unsigned char data[4]; /* Data from ROM */
- int length; /* Length of directory */
-
-
- DEBUG_printf(("get_unit_type(handle = %p, node = %d, offset = %llx)\n",
- handle, node, offset));
-
- /*
- * Read the directory length from the first quadlet...
- */
-
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return (-1);
-
- offset += 4;
-
- /*
- * The length is in the upper 16 bits...
- */
-
- length = (data[0] << 8) | data[1];
-
- DEBUG_printf((" length = %d\n", length));
-
- /*
- * Then read the directory, looking for unit directory or type tags...
- */
-
- while (length > 0)
- {
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return (-1);
-
- DEBUG_printf((" data = %02X %02X %02X %02X\n", data[0], data[1],
- data[2], data[3]));
-
- if (data[0] == 0xd1)
- {
- /*
- * Found the unit directory...
- */
-
- offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
-
- return (get_unit_type(handle, node, offset));
- }
- else if (data[0] == 0x14)
- {
- /*
- * Found the unit type...
- */
-
- return (data[1] & 0x1f);
- }
-
- offset += 4;
- length --;
- }
-
- return (-1);
-}
-
-
-#ifdef DEBUG
-/*
- * 'show_data()' - Show a data node...
- */
-
-static void
-show_data(raw1394handle_t handle, /* I - Handle for device */
- int node, /* I - Node number */
- unsigned long long offset, /* I - Offset to directory */
- int indent) /* Amount to indent */
-{
- int i; /* Looping var */
- unsigned char data[4]; /* Data from ROM */
- int length; /* Length of data */
-
-
- /*
- * Read the data length from the first quadlet...
- */
-
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return;
-
- offset += 4;
-
- /*
- * The length is in the upper 16 bits...
- */
-
- length = (data[0] << 8) | data[1];
-
- /*
- * Then read the data...
- */
-
- for (i = 0; i < indent; i ++)
- putchar(' ');
-
- printf("LEAF (%d quadlets)\n", length);
-
- while (length > 0)
- {
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return;
-
- for (i = 0; i < indent; i ++)
- putchar(' ');
-
- printf("%02X %02X %02X %02X '%c%c%c%c'\n",
- data[0], data[1], data[2], data[3],
- (data[0] < ' ' || data[0] >= 0x7f) ? '.' : data[0],
- (data[1] < ' ' || data[1] >= 0x7f) ? '.' : data[1],
- (data[2] < ' ' || data[2] >= 0x7f) ? '.' : data[2],
- (data[3] < ' ' || data[3] >= 0x7f) ? '.' : data[3]);
-
- offset += 4;
- length --;
- }
-}
-
-
-/*
- * 'show_dir()' - Show a directory list...
- */
-
-static void
-show_dir(raw1394handle_t handle, /* I - Handle for device */
- int node, /* I - Node number */
- unsigned long long offset, /* I - Offset to directory */
- int indent) /* Amount to indent */
-{
- int i; /* Looping var */
- unsigned char data[4]; /* Data from ROM */
- int length; /* Length of directory */
- int value; /* Value in directory */
-
-
- /*
- * Read the directory length from the first quadlet...
- */
-
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return;
-
- offset += 4;
-
- /*
- * The length is in the upper 16 bits...
- */
-
- length = (data[0] << 8) | data[1];
-
- /*
- * Then read the directory...
- */
-
- while (length > 0)
- {
- if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
- return;
-
- for (i = 0; i < indent; i ++)
- putchar(' ');
-
- printf("%02X %02X %02X %02X\n", data[0], data[1], data[2], data[3]);
-
- value = (((data[1] << 8) | data[2]) << 8) | data[3];
-
- switch (data[0] & 0xc0)
- {
- case 0x00 :
- for (i = -4; i < indent; i ++)
- putchar(' ');
-
- printf("IMMEDIATE %d\n", value);
- break;
-
- case 0x40 :
- for (i = -4; i < indent; i ++)
- putchar(' ');
-
- printf("CSR OFFSET +%06X\n", value);
- break;
-
- case 0x80 :
- show_data(handle, node, offset + value * 4, indent + 4);
- break;
-
- case 0xc0 :
- show_dir(handle, node, offset + value * 4, indent + 4);
- break;
- }
-
- offset += 4;
- length --;
- }
-}
-#endif /* DEBUG */
-
-
-/*
- * 'ieee1394_list()' - List the available printer devices.
- */
-
-ieee1394_info_t * /* O - Printer information */
-ieee1394_list(int *num_devices) /* O - Number of printers */
-{
- int i, j; /* Looping vars */
- raw1394handle_t handle; /* 1394 handle */
- int num_ports; /* Number of ports */
- struct raw1394_portinfo ports[100]; /* Port data... */
- unsigned char guid[8]; /* Global unique ID */
- int vendor; /* Vendor portion of GUID */
- int unit_type; /* Unit type */
- int addr; /* Management address offset */
- char id[1024], /* Device ID string */
- *idptr, /* Pointer into ID string */
- *idsep; /* Pointer to separator */
- ieee1394_info_t *devices; /* Device list */
-
-
- /*
- * Connect to the user-mode driver interface...
- */
-
- handle = raw1394_new_handle();
- num_ports = raw1394_get_port_info(handle, ports,
- sizeof(ports) / sizeof(ports[0]));
-
- DEBUG_printf(("num_ports = %d\n", num_ports));
-
- /*
- * Loop through the ports to discover what nodes are available.
- */
-
- num_nodes = 0;
-
- for (i = 0; i < num_ports; i ++)
- {
- DEBUG_printf(("ports[%d] = { nodes = %d, name = \"%s\" }\n", i,
- ports[i].nodes, ports[i].name));
-
- raw1394_set_port(handle, i);
-
- for (j = 0; j < ports[i].nodes; j ++)
- {
- if (raw1394_read(handle, 0xffc0 | j,
- CSR_REGISTER_BASE + CSR_CONFIG_ROM + 12, 4,
- (quadlet_t *)guid) < 0)
- {
- DEBUG_printf((" Node #%d: Unable to contact (%s)!\n", j,
- strerror(errno)));
- continue;
- }
- else
- {
- raw1394_read(handle, 0xffc0 | j,
- CSR_REGISTER_BASE + CSR_CONFIG_ROM + 16, 4,
- (quadlet_t *)(guid + 4));
-
- DEBUG_printf((" Node #%d: GUID = %02X%02X%02X%02X%02X%02X%02X%02X\n",
- j, guid[0], guid[1], guid[2], guid[3], guid[4],
- guid[5], guid[6], guid[7]));
-
- vendor = (((guid[0] << 8) | guid[1]) << 8) | guid[2];
- unit_type = get_unit_type(handle, j,
- CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20);
-
- DEBUG_printf(("vendor = %x, unit_type = %d\n", vendor, unit_type));
-
- if (unit_type == 2 && num_nodes < MAX_NODES)
- {
- /*
- * Found a printer device; add it to the nodes list...
- */
-
-#ifdef DEBUG
- show_dir(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20, 0);
-#endif /* DEBUG */
-
- memset(nodes + num_nodes, 0, sizeof(linux1394_node_t));
-
- sprintf(nodes[num_nodes].uri, "ieee1394://%02X%02X%02X%02X%02X%02X%02X%02X",
- guid[0], guid[1], guid[2], guid[3], guid[4],
- guid[5], guid[6], guid[7]);
-
- nodes[num_nodes].port = i;
- nodes[num_nodes].node = j;
-
- addr = get_man_addr(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20);
-
- if (addr < 0)
- continue;
-
- nodes[num_nodes].addr = CSR_REGISTER_BASE + addr;
-
- DEBUG_printf(("Node address = %llx\n", nodes[num_nodes].addr));
-
- get_device_id(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20,
- id, sizeof(id));
-
- if (id[0])
- {
- /*
- * Grab the manufacturer and model name from the device ID
- * string...
- */
-
- idptr = id + 4;
- idsep = strchr(id, ';');
- if (idsep)
- *idsep++ = '\0';
- else
- idsep = idptr;
-
- snprintf(nodes[num_nodes].description,
- sizeof(nodes[num_nodes].description),
- "%s Firewire Printer", idptr);
-
- if ((idptr = strstr(idsep, "DES:")) == NULL)
- idptr = strstr(idsep, "MDL:");
-
- if (idptr == NULL)
- strcpy(nodes[num_nodes].make_model, "Unknown");
- else
- {
- /*
- * Grab the DES or MDL code...
- */
-
- idptr += 4;
- idsep = strchr(idptr, ';');
- if (idsep)
- *idsep = '\0';
-
- if (strncmp(id + 4, idptr, strlen(id + 4)) == 0)
- {
- /*
- * Use the description directly...
- */
-
- strlcpy(nodes[num_nodes].make_model, idptr,
- sizeof(nodes[num_nodes].make_model));
- }
- else
- {
- /*
- * Add the manufacturer to the front of the name...
- */
-
- snprintf(nodes[num_nodes].make_model,
- sizeof(nodes[num_nodes].make_model),
- "%s %s", id + 4, idptr);
- }
- }
- }
- else
- {
- /*
- * Flag it as an unknown printer...
- */
-
- sprintf(nodes[num_nodes].description,
- "Unknown%06X Firewire Printer", vendor);
- strcpy(nodes[num_nodes].make_model, "Unknown");
- }
-
- num_nodes ++;
- }
- }
- }
- }
-
- /*
- * Done querying the Firewire bus...
- */
-
- raw1394_destroy_handle(handle);
-
- /*
- * Build an array of device info structures as needed...
- */
-
- if (num_devices == NULL)
- return (NULL);
-
- *num_devices = num_nodes;
-
- if (num_nodes)
- {
- if ((devices = calloc(sizeof(ieee1394_info_t), num_nodes)) != NULL)
- {
- for (i = 0; i < num_nodes; i ++)
- {
- strcpy(devices[i].uri, nodes[i].uri);
- strcpy(devices[i].description, nodes[i].description);
- strcpy(devices[i].make_model, nodes[i].make_model);
- }
- }
-
- return (devices);
- }
- else
- return (NULL);
-}
-
-
-/*
- * 'ieee1394_open()' - Open a printer device.
- */
-
-ieee1394_dev_t /* O - Printer device or NULL */
-ieee1394_open(const char *uri) /* I - Device URI */
-{
- int i; /* Looping var */
- linux1394_dev_t *ldev; /* Linux device */
-
-
- /*
- * Return early if we can't see any printers...
- */
-
- if (num_nodes == 0)
- ieee1394_list(NULL);
-
- if (num_nodes == 0)
- {
- strcpy(error_string, "No IEEE-1394 printers found!");
- return (NULL);
- }
-
- /*
- * Look for the URI...
- */
-
- for (i = 0; i < num_nodes; i ++)
- if (strcmp(nodes[i].uri, uri) == 0)
- break;
-
- if (i >= num_nodes)
- {
- snprintf(error_string, sizeof(error_string), "Device %s not found!", uri);
- return (NULL);
- }
-
- /*
- * Now create a new device structure...
- */
-
- if ((ldev = calloc(sizeof(linux1394_dev_t), 1)) == NULL)
- {
- strcpy(error_string, "Out of memory!");
- return (NULL);
- }
-
- ldev->handle = raw1394_new_handle();
- ldev->node = nodes[i].node;
- ldev->addr = nodes[i].addr;
-
- raw1394_set_port(ldev->handle, nodes[i].port);
-
- error_string[0] = '\0';
-
- return ((ieee1394_dev_t)ldev);
-}
-
-
-/*
- * 'ieee1394_close()' - Close a printer device.
- */
-
-int /* O - 0 on success, -1 on failure */
-ieee1394_close(ieee1394_dev_t dev) /* I - Printer device */
-{
- linux1394_dev_t *ldev; /* Linux device */
-
-
- ldev = (linux1394_dev_t *)dev;
-
- raw1394_destroy_handle(ldev->handle);
-
- free(ldev);
-
- return (0);
-}
-
-
-/*
- * 'ieee1394_read()' - Read from a printer device.
- */
-
-int /* O - Number of bytes read or -1 */
-ieee1394_read(ieee1394_dev_t dev, /* I - Printer device */
- char *buffer, /* I - Read buffer */
- int len) /* I - Max bytes to read */
-{
- linux1394_dev_t *ldev; /* Linux device */
-
-
- ldev = (linux1394_dev_t *)dev;
-
-
- return (0);
-}
-
-
-/*
- * 'ieee1394_write()' - Write data to a printer device.
- */
-
-int /* O - Number of bytes written or -1 */
-ieee1394_write(ieee1394_dev_t dev, /* I - Printer device */
- char *buffer, /* I - Buffer to write */
- int len) /* I - Number of bytes to write */
-{
- linux1394_dev_t *ldev; /* Linux device */
-
-
- ldev = (linux1394_dev_t *)dev;
-
-
-/* if (raw1394_write(handle, 0xffc0 | j, 0, ,
- (quadlet_t *)guid) < 0)*/
-
- return (len);
-}
-
-
-/*
- * 'ieee1394_error()' - Return the last error.
- */
-
-const char * /* O - Error string or NULL */
-ieee1394_error(void)
-{
- if (error_string[0])
- return (error_string);
- else
- return (NULL);
-}
-
-
-/*
- * End of "$Id: ieee1394-linux.c 4703 2005-09-26 19:33:58Z mike $".
- */
+++ /dev/null
-/*
- * "$Id: ieee1394.c 5241 2006-03-07 22:07:44Z mike $"
- *
- * IEEE-1394 backend for the Common UNIX Printing System (CUPS).
- *
- * Copyright 2002 by Easy Software Products, all rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the
- * following conditions are met:
- *
- * 1. Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the
- * above copyright notice, this list of conditions and
- * the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use
- * of this software must display the following
- * acknowledgement:
- *
- * This product includes software developed by Easy
- * Software Products.
- *
- * 4. The name of Easy Software Products may not be used to
- * endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * Contents:
- *
- * main() - Send a file to the printer.
- * list_devices() - List all known printer devices...
- */
-
-/*
- * Include necessary headers.
- */
-
-#include "ieee1394.h"
-
-
-/*
- * Local functions...
- */
-
-void list_devices(void);
-
-
-/*
- * 'main()' - Send a file to the printer.
- *
- * Usage:
- *
- * printer-uri job-id user title copies options [file]
- */
-
-int /* O - Exit status */
-main(int argc, /* I - Number of command-line arguments (6 or 7) */
- char *argv[]) /* I - Command-line arguments */
-{
- ieee1394_dev_t dev; /* Printer device */
- int fp; /* Print file */
- int copies; /* Number of copies to print */
- int rbytes; /* Number of bytes read from device */
- size_t nbytes, /* Number of bytes read from file */
- tbytes; /* Total number of bytes written */
- char buffer[8192]; /* Input/output buffer */
-#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
- struct sigaction action; /* Actions for POSIX signals */
-#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-
-
- /*
- * Make sure status messages are not buffered...
- */
-
- setbuf(stderr, NULL);
-
- /*
- * Check command-line...
- */
-
- if (argc == 1)
- {
- list_devices();
-
- return (0);
- }
- else if (argc < 6 || argc > 7)
- {
- fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
- argv[0]);
- return (1);
- }
-
- /*
- * If we have 7 arguments, print the file named on the command-line.
- * Otherwise, send stdin instead...
- */
-
- if (argc == 6)
- {
- fp = 0;
- copies = 1;
- }
- else
- {
- /*
- * Try to open the print file...
- */
-
- if ((fp = open(argv[6], O_RDONLY)) < 0)
- {
- perror("ERROR: unable to open print file");
- return (1);
- }
-
- copies = atoi(argv[4]);
- }
-
- /*
- * Try to open the printer device...
- */
-
- fputs("STATE: +connecting-to-device\n", stderr);
-
- do
- {
- if ((dev = ieee1394_open(argv[0])) == NULL)
- {
- fputs("INFO: Firewire printer busy; will retry in 30 seconds...\n", stderr);
- sleep(30);
- }
- }
- while (dev == NULL);
-
- fputs("STATE: -connecting-to-device\n", stderr);
-
- /*
- * Now that we are "connected" to the port, ignore SIGTERM so that we
- * can finish out any page data the driver sends (e.g. to eject the
- * current page... Only ignore SIGTERM if we are printing data from
- * stdin (otherwise you can't cancel raw jobs...)
- */
-
- if (argc < 7)
- {
-#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
- sigset(SIGTERM, SIG_IGN);
-#elif defined(HAVE_SIGACTION)
- memset(&action, 0, sizeof(action));
-
- sigemptyset(&action.sa_mask);
- action.sa_handler = SIG_IGN;
- sigaction(SIGTERM, &action, NULL);
-#else
- signal(SIGTERM, SIG_IGN);
-#endif /* HAVE_SIGSET */
- }
-
- /*
- * Finally, send the print file...
- */
-
- while (copies > 0)
- {
- copies --;
-
- if (fp != 0)
- {
- fputs("PAGE: 1 1\n", stderr);
- lseek(fp, 0, SEEK_SET);
- }
-
- tbytes = 0;
- while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
- {
- /*
- * Write the print data to the printer...
- */
-
- tbytes += nbytes;
-
- if (ieee1394_write(dev, buffer, nbytes) < 0)
- {
- perror("ERROR: Unable to send print file to printer");
- break;
- }
-
- if ((rbytes = ieee1394_read(dev, buffer, sizeof(buffer))) > 0)
- fprintf(stderr, "INFO: Read %d bytes from printer...\n", rbytes);
-
- if (argc > 6)
- fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
- (unsigned long)tbytes);
- }
- }
-
- /*
- * Close the printer device and input file and return...
- */
-
- ieee1394_close(dev);
-
- if (fp != 0)
- close(fp);
-
- fputs("INFO: Ready to print.\n", stderr);
-
- return (0);
-}
-
-
-/*
- * 'list_devices()' - List all known devices...
- */
-
-void
-list_devices(void)
-{
- int i, /* Looping var */
- num_info; /* Number of devices */
- ieee1394_info_t *info; /* Devices... */
-
-
- /*
- * Get the available devices...
- */
-
- info = ieee1394_list(&num_info);
-
- /*
- * List them as needed...
- */
-
- if (num_info > 0)
- {
- for (i = 0; i < num_info; i ++)
- printf("direct %s \"%s\" \"%s\"\n", info[i].uri,
- info[i].make_model, info[i].description);
-
- free(info);
- }
-}
-
-
-/*
- * End of "$Id: ieee1394.c 5241 2006-03-07 22:07:44Z mike $".
- */
+++ /dev/null
-/*
- * "$Id: ieee1394.h 4494 2005-02-18 02:18:11Z mike $"
- *
- * IEEE-1394 header for the Common UNIX Printing System (CUPS).
- *
- * Copyright 2002 by Easy Software Products, all rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the
- * following conditions are met:
- *
- * 1. Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the
- * above copyright notice, this list of conditions and
- * the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use
- * of this software must display the following
- * acknowledgement:
- *
- * This product includes software developed by Easy
- * Software Products.
- *
- * 4. The name of Easy Software Products may not be used to
- * endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- */
-
-/*
- * Include necessary headers.
- */
-
-#include <cups/cups.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <cups/string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <signal.h>
-
-#ifdef WIN32
-# include <io.h>
-#else
-# include <unistd.h>
-# include <fcntl.h>
-#endif /* WIN32 */
-
-
-/*
- * Device information structure...
- */
-
-typedef struct
-{
- char uri[HTTP_MAX_URI], /* Device URI */
- description[128], /* Description of port */
- make_model[128]; /* Make and model */
-} ieee1394_info_t;
-
-
-/*
- * Private device connection information...
- */
-
-typedef void *ieee1394_dev_t;
-
-
-/*
- * Prototypes for standard IEEE-1394 interface...
- */
-
-extern ieee1394_info_t *ieee1394_list(int *num_devices);
-extern ieee1394_dev_t ieee1394_open(const char *uri);
-extern int ieee1394_close(ieee1394_dev_t dev);
-extern int ieee1394_read(ieee1394_dev_t dev, char *buffer, int len);
-extern int ieee1394_write(ieee1394_dev_t dev, char *buffer, int len);
-extern const char *ieee1394_error(void);
-
-
-/*
- * End of "$Id: ieee1394.h 4494 2005-02-18 02:18:11Z mike $".
- */
/*
- * "$Id: ipp.c 5686 2006-06-21 21:02:56Z mike $"
+ * "$Id: ipp.c 5724 2006-07-12 19:42:35Z mike $"
*
* IPP backend for the Common UNIX Printing System (CUPS).
*
if (!strcmp(method, "https"))
cupsSetEncryption(HTTP_ENCRYPT_ALWAYS);
+ else
+ cupsSetEncryption(HTTP_ENCRYPT_IF_REQUESTED);
/*
* See if there are any options...
/*
- * End of "$Id: ipp.c 5686 2006-06-21 21:02:56Z mike $".
+ * End of "$Id: ipp.c 5724 2006-07-12 19:42:35Z mike $".
*/
/*
- * "$Id: parallel.c 5594 2006-05-27 03:14:03Z mike $"
+ * "$Id: parallel.c 5726 2006-07-12 20:00:11Z mike $"
*
* Parallel port backend for the Common UNIX Printing System (CUPS).
*
int copies; /* Number of copies to print */
size_t tbytes; /* Total number of bytes written */
struct termios opts; /* Parallel port options */
-#if defined(__linux) && defined(LP_POUTPA)
- unsigned int status; /* Port status (off-line, out-of-paper, etc.) */
- int paperout; /* Paper out? */
-#endif /* __linux && LP_POUTPA */
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
struct sigaction action; /* Actions for POSIX signals */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
tcsetattr(device_fd, TCSANOW, &opts);
-#if defined(__linux) && defined(LP_POUTPA)
- /*
- * Show the printer status before we send the file...
- */
-
- paperout = 0;
-
- while (!ioctl(fd, LPGETSTATUS, &status))
- {
- fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of %02X...\n", status);
-
- if (status & LP_POUTPA)
- {
- fputs("WARNING: Media tray empty!\n", stderr);
- fputs("STATUS: +media-tray-empty-error\n", stderr);
-
- paperout = 1;
- }
-
- if (!(status & LP_PERRORP))
- fputs("WARNING: Printer fault!\n", stderr);
- else if (!(status & LP_PSELECD))
- fputs("WARNING: Printer off-line.\n", stderr);
- else
- break;
-
- sleep(5);
- }
-#endif /* __linux && LP_POUTPA */
-
/*
* Finally, send the print file...
*/
/*
- * End of "$Id: parallel.c 5594 2006-05-27 03:14:03Z mike $".
+ * End of "$Id: parallel.c 5726 2006-07-12 20:00:11Z mike $".
*/
/*
- * "$Id: runloop.c 5594 2006-05-27 03:14:03Z mike $"
+ * "$Id: runloop.c 5726 2006-07-12 20:00:11Z mike $"
*
* Common run loop API for the Common UNIX Printing System (CUPS).
*
total_bytes, /* Total bytes written */
bytes; /* Bytes written */
int paperout; /* "Paper out" status */
+ int offline; /* "Off-line" status */
char print_buffer[8192], /* Print data buffer */
*print_ptr, /* Pointer into print data buffer */
bc_buffer[1024]; /* Back-channel data buffer */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+ fprintf(stderr, "DEBUG: backendRunLoop(print_fd=%d, device_fd=%d, use_bc=%d)\n",
+ print_fd, device_fd, use_bc);
+
/*
* If we are printing data from a print driver on stdin, ignore SIGTERM
* so that the driver can finish out any page data, e.g. to eject the
* Now loop until we are out of data from print_fd...
*/
- for (print_bytes = 0, print_ptr = print_buffer, paperout = 0, total_bytes = 0;;)
+ for (print_bytes = 0, print_ptr = print_buffer, offline = 0, paperout = 0, total_bytes = 0;;)
{
/*
* Use select() to determine whether we have data to copy around...
FD_SET(device_fd, &input);
FD_ZERO(&output);
- if (print_bytes)
+ if (print_bytes || !use_bc)
FD_SET(device_fd, &output);
- if (select(nfds, &input, &output, NULL, NULL) < 0)
- continue; /* Ignore errors here */
+ if (use_bc)
+ {
+ if (select(nfds, &input, &output, NULL, NULL) < 0)
+ {
+ /*
+ * Pause printing to clear any pending errors...
+ */
+
+ if (errno == ENXIO && !offline)
+ {
+ fputs("STATE: +offline-error\n", stderr);
+ fputs("INFO: Printer is currently off-line.\n", stderr);
+ offline = 1;
+ }
+
+ sleep(1);
+ continue;
+ }
+ }
/*
* Check if we have back-channel data ready...
}
print_ptr = print_buffer;
+
+ fprintf(stderr, "DEBUG: Read %d bytes of print data...\n",
+ (int)print_bytes);
}
/*
paperout = 1;
}
}
+ else if (errno == ENXIO)
+ {
+ if (!offline)
+ {
+ fputs("STATE: +offline-error\n", stderr);
+ fputs("INFO: Printer is currently off-line.\n", stderr);
+ offline = 1;
+ }
+ }
else if (errno != EAGAIN && errno != EINTR && errno != ENOTTY)
{
perror("ERROR: Unable to write print data");
paperout = 0;
}
- fprintf(stderr, "DEBUG: Wrote %d bytes...\n", (int)bytes);
+ if (offline)
+ {
+ fputs("STATE: -offline-error\n", stderr);
+ fputs("INFO: Printer is now on-line.\n", stderr);
+ offline = 0;
+ }
+
+ fprintf(stderr, "DEBUG: Wrote %d bytes of print data...\n", (int)bytes);
print_bytes -= bytes;
print_ptr += bytes;
/*
- * End of "$Id: runloop.c 5594 2006-05-27 03:14:03Z mike $".
+ * End of "$Id: runloop.c 5726 2006-07-12 20:00:11Z mike $".
*/
/*
- * "$Id: snmp.c 5663 2006-06-15 20:36:42Z mike $"
+ * "$Id: snmp.c 5736 2006-07-13 19:59:36Z mike $"
*
* SNMP discovery backend for the Common UNIX Printing System (CUPS).
*
debug_printf("DEBUG: add_cache(addr=%p, addrname=\"%s\", uri=\"%s\", "
"id=\"%s\", make_and_model=\"%s\")\n",
- addr, addrname, uri, id ? id : "(null)",
+ addr, addrname, uri ? uri : "(null)", id ? id : "(null)",
make_and_model ? make_and_model : "(null)");
temp = calloc(1, sizeof(snmp_cache_t));
compare_cache(snmp_cache_t *a, /* I - First cache entry */
snmp_cache_t *b) /* I - Second cache entry */
{
- return (a->address.ipv4.sin_addr.s_addr - b->address.ipv4.sin_addr.s_addr);
+ return (strcasecmp(a->addrname, b->addrname));
}
* Find a matching device in the cache...
*/
- key.address = addr;
- device = (snmp_cache_t *)cupsArrayFind(Devices, &key);
+ key.addrname = addrname;
+ device = (snmp_cache_t *)cupsArrayFind(Devices, &key);
/*
* Process the message...
/*
- * End of "$Id: snmp.c 5663 2006-06-15 20:36:42Z mike $".
+ * End of "$Id: snmp.c 5736 2006-07-13 19:59:36Z mike $".
*/
/*
- * "$Id: usb-unix.c 5628 2006-06-05 15:25:23Z mike $"
+ * "$Id: usb-unix.c 5726 2006-07-12 20:00:11Z mike $"
*
* USB port backend for the Common UNIX Printing System (CUPS).
*
* Local functions...
*/
-int open_device(const char *uri);
+int open_device(const char *uri, int *use_bc);
/*
int device_fd; /* USB device */
size_t tbytes; /* Total number of bytes written */
struct termios opts; /* Parallel port options */
-#if defined(__linux) && defined(LP_POUTPA)
- unsigned int status; /* Port status (off-line, out-of-paper, etc.) */
- int paperout; /* Paper out? */
-#endif /* __linux && LP_POUTPA */
(void)argc;
(void)argv;
- /*
- * Disable backchannel data when printing to Canon USB printers - apparently
- * Canon printers will return the IEEE-1284 device ID over and over and over
- * when they get a read request...
- */
-
- use_bc = strcasecmp(hostname, "Canon") != 0;
-
/*
* Open the USB port device...
*/
do
{
- if ((device_fd = open_device(uri)) == -1)
+ /*
+ * Disable backchannel data when printing to Canon USB printers - apparently
+ * Canon printers will return the IEEE-1284 device ID over and over and over
+ * when they get a read request...
+ */
+
+ use_bc = strcasecmp(hostname, "Canon") != 0;
+
+ if ((device_fd = open_device(uri, &use_bc)) == -1)
{
if (getenv("CLASS") != NULL)
{
tcsetattr(device_fd, TCSANOW, &opts);
-#if defined(__linux) && defined(LP_POUTPA)
- /*
- * Show the printer status before we send the file...
- */
-
- paperout = 0;
-
- while (!ioctl(device_fd, LPGETSTATUS, &status))
- {
- fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of %02X...\n",
- status);
-
- if (status & LP_POUTPA)
- {
- fputs("WARNING: Media tray empty!\n", stderr);
- fputs("STATUS: +media-tray-empty-error\n", stderr);
-
- paperout = 1;
- }
-
- if (!(status & LP_PERRORP))
- fputs("WARNING: Printer fault!\n", stderr);
- else if (!(status & LP_PSELECD))
- fputs("WARNING: Printer off-line.\n", stderr);
- else
- break;
-
- sleep(5);
- }
-#endif /* __linux && LP_POUTPA */
-
/*
* Finally, send the print file...
*/
lseek(print_fd, 0, SEEK_SET);
}
- tbytes = backendRunLoop(print_fd, device_fd, 1);
+ tbytes = backendRunLoop(print_fd, device_fd, use_bc);
if (print_fd != 0 && tbytes >= 0)
fprintf(stderr, "INFO: Sent print file, " CUPS_LLFMT " bytes...\n",
{
sprintf(device, "/dev/usb/printer%d", i);
- if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
+ if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0)
{
if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
make_model, sizeof(make_model),
*/
int /* O - File descriptor or -1 on error */
-open_device(const char *uri) /* I - Device URI */
+open_device(const char *uri, /* I - Device URI */
+ int *use_bc) /* O - Set to 0 for unidirectional */
{
+ int fd; /* File descriptor */
+
+
/*
* The generic implementation just treats the URI as a device filename...
* Specific operating systems may also support using the device serial
int i; /* Looping var */
int busy; /* Are any ports busy? */
- int fd; /* File descriptor */
char format[255], /* Format for device filename */
device[255], /* Device filename */
device_id[1024], /* Device ID string */
int i; /* Looping var */
int busy; /* Are any ports busy? */
- int fd; /* File descriptor */
char device[255], /* Device filename */
device_id[1024], /* Device ID string */
make_model[1024], /* Make and model */
{
sprintf(device, "/dev/usb/printer%d", i);
- if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
+ if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0)
backendGetDeviceID(fd, device_id, sizeof(device_id),
make_model, sizeof(make_model),
"usb", device_uri, sizeof(device_uri));
}
if (!strcmp(uri, device_uri))
- return (fd); /* Yes, return this file descriptor... */
+ {
+ /*
+ * Yes, return this file descriptor...
+ */
+
+ fputs("DEBUG: Setting use_bc to 0!\n", stderr);
+
+ *use_bc = 0;
+
+ return (fd);
+ }
/*
* This wasn't the one...
return (-1);
}
#else
- return (open(uri + 4, O_RDWR | O_EXCL));
+ {
+ if ((fd = open(uri + 4, O_RDWR | O_EXCL)) < 0)
+ {
+ fd = open(uri + 4, O_WRONLY | O_EXCL);
+ *use_bc = 0;
+ }
+
+ return (fd);
+ }
#endif /* __linux */
else
{
/*
- * End of "$Id: usb-unix.c 5628 2006-06-05 15:25:23Z mike $".
+ * End of "$Id: usb-unix.c 5726 2006-07-12 20:00:11Z mike $".
*/
/*
- * "$Id: lprm.c 5023 2006-01-29 14:39:44Z mike $"
+ * "$Id: lprm.c 5719 2006-07-11 21:04:48Z mike $"
*
* "lprm" command for the Common UNIX Printing System (CUPS).
*
ipp_op_t op; /* Operation */
cups_lang_t *language; /* Language */
int num_dests; /* Number of destinations */
- cups_dest_t *dests; /* Destinations */
+ cups_dest_t *dests, /* Destinations */
+ *defdest; /* Default destination */
http_encryption_t encryption; /* Encryption? */
http = NULL;
encryption = cupsEncryption();
language = cupsLangDefault();
- num_dests = cupsGetDests(&dests);
-
- for (i = 0; i < num_dests; i ++)
- if (dests[i].is_default)
- dest = dests[i].name;
/*
* Open a connection to the server...
if ((http = httpConnectEncrypt(cupsServer(), ippPort(), encryption)) == NULL)
{
_cupsLangPuts(stderr, _("lprm: Unable to contact server!\n"));
- cupsFreeDests(num_dests, dests);
return (1);
}
+ num_dests = cupsGetDests2(http, &dests);
+ defdest = cupsGetDest(NULL, NULL, num_dests, dests);
+ dest = defdest ? defdest->name : NULL;
+
/*
* Process command-line arguments...
*/
encryption = HTTP_ENCRYPT_REQUIRED;
httpEncryption(http, encryption);
+ cupsSetEncryption(encryption);
#else
_cupsLangPrintf(stderr,
_("%s: Sorry, no encryption support compiled in!\n"),
break;
case 'h' : /* Connect to host */
- if (http != NULL)
- httpClose(http);
-
if (argv[i][2] != '\0')
cupsSetServer(argv[i] + 2);
else
else
cupsSetServer(argv[i]);
}
+
+ httpClose(http);
+ cupsFreeDests(num_dests, dests);
+
+ if ((http = httpConnectEncrypt(cupsServer(), ippPort(),
+ encryption)) == NULL)
+ {
+ _cupsLangPuts(stderr, _("lprm: Unable to contact server!\n"));
+ return (1);
+ }
+
+ num_dests = cupsGetDests2(http, &dests);
+ defdest = cupsGetDest(NULL, NULL, num_dests, dests);
+ dest = defdest ? defdest->name : NULL;
break;
default :
/*
- * End of "$Id: lprm.c 5023 2006-01-29 14:39:44Z mike $".
+ * End of "$Id: lprm.c 5719 2006-07-11 21:04:48Z mike $".
*/
dnl
-dnl "$Id: cups-compiler.m4 5643 2006-06-07 20:58:29Z mike $"
+dnl "$Id: cups-compiler.m4 5705 2006-06-30 01:07:29Z mike $"
dnl
dnl Compiler stuff for the Common UNIX Printing System (CUPS).
dnl
# Warning 829 is passing constant string as char *
CXXFLAGS="+W336,829 $CXXFLAGS"
- if test -z "$with_archflags"; then
- # Build portable binaries for all HP systems...
- ARCHFLAGS="+DAportable"
- fi
-
if test $PICFLAG = 1; then
OPTIM="+z $OPTIM"
fi
fi
dnl
-dnl End of "$Id: cups-compiler.m4 5643 2006-06-07 20:58:29Z mike $".
+dnl End of "$Id: cups-compiler.m4 5705 2006-06-30 01:07:29Z mike $".
dnl
dnl
-dnl "$Id: cups-defaults.m4 5643 2006-06-07 20:58:29Z mike $"
+dnl "$Id: cups-defaults.m4 5745 2006-07-18 13:45:56Z mike $"
dnl
dnl Default cupsd configuration settings for the Common UNIX Printing System
dnl (CUPS).
dnl
dnl Default langugages...
-AC_ARG_WITH(languages, [ --with-languages set installed languages, default="es ja" ],
+AC_ARG_WITH(languages, [ --with-languages set installed languages, default="de es ja pl sv" ],
LANGUAGES="$withval",
- LANGUAGES="es ja pl sv")
+ LANGUAGES="de es ja pl sv")
AC_SUBST(LANGUAGES)
dnl Default ConfigFilePerm
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTCAP, "$CUPS_DEFAULT_PRINTCAP")
dnl
-dnl End of "$Id: cups-defaults.m4 5643 2006-06-07 20:58:29Z mike $".
+dnl End of "$Id: cups-defaults.m4 5745 2006-07-18 13:45:56Z mike $".
dnl
dnl
-dnl "$Id: cups-directories.m4 5547 2006-05-19 12:44:29Z mike $"
+dnl "$Id: cups-directories.m4 5696 2006-06-26 18:34:20Z mike $"
dnl
dnl Directory stuff for the Common UNIX Printing System (CUPS).
dnl
if test x$rcdir = x; then
case "$uname" in
- FreeBSD* | OpenBSD*)
+ FreeBSD* | OpenBSD* | MirBsD* | ekkoBSD*)
# FreeBSD and OpenBSD
INITDIR=""
INITDDIR=""
AC_SUBST(CUPS_STATEDIR)
dnl
-dnl End of "$Id: cups-directories.m4 5547 2006-05-19 12:44:29Z mike $".
+dnl End of "$Id: cups-directories.m4 5696 2006-06-26 18:34:20Z mike $".
dnl
#! /bin/sh
#
-# "$Id: cups-config.in 5676 2006-06-19 20:28:05Z mike $"
+# "$Id: cups-config.in 5688 2006-06-23 20:33:08Z mike $"
#
# CUPS configuration utility.
#
# flags for C++ compiler:
CFLAGS=""
LDFLAGS="@EXPORT_LDFLAGS@"
-LIBS="@EXPORT_SSLLIBS@ @LIBS@"
-IMGLIBS="@EXPORT_LIBTIFF@ @EXPORT_LIBJPEG@ @EXPORT_LIBPNG@ @EXPORT_LIBZ@"
+LIBS="@EXPORT_SSLLIBS@ @EXPORT_LIBZ@ @LIBS@"
+IMGLIBS="@EXPORT_LIBTIFF@ @EXPORT_LIBJPEG@ @EXPORT_LIBPNG@"
# Check for local invocation...
selfdir=`dirname $0`
if test $image = no; then
echo -lcups $LIBS
else
- echo -lcupsimage $IMGLIBS -lcups $LIBS
+ echo -lcupsimage -lcups $IMGLIBS $LIBS
fi
else
if test $image = no; then
echo $libdir/libcups.a $LIBS
else
- echo $imagelibdir/libcupsimage.a $IMGLIBS $libdir/libcups.a $LIBS
+ echo $imagelibdir/libcupsimage.a $libdir/libcups.a $IMGLIBS $LIBS
fi
fi
;;
done
#
-# End of "$Id: cups-config.in 5676 2006-06-19 20:28:05Z mike $".
+# End of "$Id: cups-config.in 5688 2006-06-23 20:33:08Z mike $".
#
# DO NOT DELETE
adminutil.o: adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
-adminutil.o: language.h globals.h string.h ../config.h i18n.h transcode.h
-adminutil.o: debug.h
+adminutil.o: language.h globals.h string.h ../config.h http-private.h
+adminutil.o: ipp-private.h i18n.h transcode.h debug.h
array.o: array.h string.h ../config.h debug.h
attr.o: ppd.h array.h file.h debug.h string.h ../config.h
-auth.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-auth.o: array.h file.h language.h i18n.h transcode.h debug.h
+auth.o: globals.h string.h ../config.h http-private.h http.h md5.h
+auth.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+auth.o: transcode.h debug.h
backchannel.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
backend.o: backend.h string.h ../config.h
-custom.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-custom.o: array.h file.h language.h i18n.h transcode.h debug.h
-dest.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-dest.o: array.h file.h language.h i18n.h transcode.h
+custom.o: globals.h string.h ../config.h http-private.h http.h md5.h
+custom.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+custom.o: transcode.h debug.h
+dest.o: globals.h string.h ../config.h http-private.h http.h md5.h
+dest.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+dest.o: transcode.h
dir.o: dir.h string.h ../config.h debug.h
-emit.o: ppd.h array.h file.h string.h ../config.h
+emit.o: ppd.h array.h file.h string.h ../config.h debug.h
encode.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
encode.o: ipp-private.h string.h ../config.h debug.h
file.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
http.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
http.o: string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
http.o: debug.h
-http-addr.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-http-addr.o: array.h file.h language.h i18n.h transcode.h debug.h
+http-addr.o: globals.h string.h ../config.h http-private.h http.h md5.h
+http-addr.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+http-addr.o: i18n.h transcode.h debug.h
http-addrlist.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
http-addrlist.o: globals.h string.h cups.h ppd.h array.h file.h language.h
http-addrlist.o: i18n.h transcode.h debug.h
-http-support.o: debug.h globals.h string.h ../config.h cups.h ipp.h http.h
-http-support.o: md5.h ppd.h array.h file.h language.h i18n.h transcode.h
+http-support.o: debug.h globals.h string.h ../config.h http-private.h http.h
+http-support.o: md5.h ipp-private.h ipp.h cups.h ppd.h array.h file.h
+http-support.o: language.h i18n.h transcode.h
ipp.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
ipp.o: string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
ipp.o: debug.h
-ipp-support.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-ipp-support.o: array.h file.h language.h i18n.h transcode.h debug.h
-langprintf.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-langprintf.o: array.h file.h language.h i18n.h transcode.h
-language.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-language.o: array.h file.h language.h i18n.h transcode.h debug.h
-localize.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-localize.o: array.h file.h language.h i18n.h transcode.h debug.h
+ipp-support.o: globals.h string.h ../config.h http-private.h http.h md5.h
+ipp-support.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+ipp-support.o: i18n.h transcode.h debug.h
+langprintf.o: globals.h string.h ../config.h http-private.h http.h md5.h
+langprintf.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+langprintf.o: i18n.h transcode.h
+language.o: globals.h string.h ../config.h http-private.h http.h md5.h
+language.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+language.o: transcode.h debug.h
+localize.o: globals.h string.h ../config.h http-private.h http.h md5.h
+localize.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+localize.o: transcode.h debug.h
mark.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
mark.o: ../config.h debug.h
md5.o: md5.h string.h ../config.h
md5passwd.o: http.h md5.h string.h ../config.h
-notify.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-notify.o: array.h file.h language.h i18n.h transcode.h
+notify.o: globals.h string.h ../config.h http-private.h http.h md5.h
+notify.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+notify.o: transcode.h
options.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
options.o: ../config.h debug.h
page.o: ppd.h array.h file.h string.h ../config.h
-ppd.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h array.h
-ppd.o: file.h language.h i18n.h transcode.h debug.h
-request.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-request.o: array.h file.h language.h i18n.h transcode.h debug.h
+ppd.o: globals.h string.h ../config.h http-private.h http.h md5.h
+ppd.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+ppd.o: transcode.h debug.h
+request.o: globals.h string.h ../config.h http-private.h http.h md5.h
+request.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+request.o: transcode.h debug.h
snprintf.o: string.h ../config.h
string.o: array.h debug.h string.h ../config.h
-tempfile.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-tempfile.o: array.h file.h language.h i18n.h transcode.h debug.h
-transcode.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-transcode.o: array.h file.h language.h i18n.h transcode.h debug.h
+tempfile.o: globals.h string.h ../config.h http-private.h http.h md5.h
+tempfile.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+tempfile.o: transcode.h debug.h
+transcode.o: globals.h string.h ../config.h http-private.h http.h md5.h
+transcode.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+transcode.o: i18n.h transcode.h debug.h
usersys.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
usersys.o: globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
usersys.o: transcode.h
-util.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-util.o: array.h file.h language.h i18n.h transcode.h debug.h
+util.o: globals.h string.h ../config.h http-private.h http.h md5.h
+util.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+util.o: transcode.h debug.h
testadmin.o: adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
testadmin.o: language.h string.h ../config.h
testarray.o: ../cups/string.h ../config.h string.h array.h dir.h debug.h
testfile.o: string.h ../config.h file.h debug.h
testhttp.o: http.h md5.h string.h ../config.h
testi18n.o: i18n.h transcode.h language.h array.h string.h ../config.h
-testipp.o: ../cups/string.h ../config.h string.h ipp.h http.h md5.h
+testipp.o: ../cups/string.h ../config.h string.h ipp-private.h ipp.h http.h
+testipp.o: md5.h
testlang.o: i18n.h transcode.h language.h array.h
testppd.o: ../cups/string.h ../config.h string.h ppd.h array.h file.h
# DO NOT DELETE
adminutil.32.o: adminutil.c adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
-adminutil.32.o: adminutil.c language.h globals.h string.h ../config.h i18n.h transcode.h
-adminutil.32.o: adminutil.c debug.h
+adminutil.32.o: adminutil.c language.h globals.h string.h ../config.h http-private.h
+adminutil.32.o: adminutil.c ipp-private.h i18n.h transcode.h debug.h
array.32.o: array.c array.h string.h ../config.h debug.h
attr.32.o: attr.c ppd.h array.h file.h debug.h string.h ../config.h
-auth.32.o: auth.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-auth.32.o: auth.c array.h file.h language.h i18n.h transcode.h debug.h
+auth.32.o: auth.c globals.h string.h ../config.h http-private.h http.h md5.h
+auth.32.o: auth.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+auth.32.o: auth.c transcode.h debug.h
backchannel.32.o: backchannel.c cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
backend.32.o: backend.c backend.h string.h ../config.h
-custom.32.o: custom.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-custom.32.o: custom.c array.h file.h language.h i18n.h transcode.h debug.h
-dest.32.o: dest.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-dest.32.o: dest.c array.h file.h language.h i18n.h transcode.h
+custom.32.o: custom.c globals.h string.h ../config.h http-private.h http.h md5.h
+custom.32.o: custom.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+custom.32.o: custom.c transcode.h debug.h
+dest.32.o: dest.c globals.h string.h ../config.h http-private.h http.h md5.h
+dest.32.o: dest.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+dest.32.o: dest.c transcode.h
dir.32.o: dir.c dir.h string.h ../config.h debug.h
-emit.32.o: emit.c ppd.h array.h file.h string.h ../config.h
+emit.32.o: emit.c ppd.h array.h file.h string.h ../config.h debug.h
encode.32.o: encode.c cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
encode.32.o: encode.c ipp-private.h string.h ../config.h debug.h
file.32.o: file.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
http.32.o: http.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
http.32.o: http.c string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
http.32.o: http.c debug.h
-http-addr.32.o: http-addr.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-http-addr.32.o: http-addr.c array.h file.h language.h i18n.h transcode.h debug.h
+http-addr.32.o: http-addr.c globals.h string.h ../config.h http-private.h http.h md5.h
+http-addr.32.o: http-addr.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+http-addr.32.o: http-addr.c i18n.h transcode.h debug.h
http-addrlist.32.o: http-addrlist.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
http-addrlist.32.o: http-addrlist.c globals.h string.h cups.h ppd.h array.h file.h language.h
http-addrlist.32.o: http-addrlist.c i18n.h transcode.h debug.h
-http-support.32.o: http-support.c debug.h globals.h string.h ../config.h cups.h ipp.h http.h
-http-support.32.o: http-support.c md5.h ppd.h array.h file.h language.h i18n.h transcode.h
+http-support.32.o: http-support.c debug.h globals.h string.h ../config.h http-private.h http.h
+http-support.32.o: http-support.c md5.h ipp-private.h ipp.h cups.h ppd.h array.h file.h
+http-support.32.o: http-support.c language.h i18n.h transcode.h
ipp.32.o: ipp.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
ipp.32.o: ipp.c string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
ipp.32.o: ipp.c debug.h
-ipp-support.32.o: ipp-support.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-ipp-support.32.o: ipp-support.c array.h file.h language.h i18n.h transcode.h debug.h
-langprintf.32.o: langprintf.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-langprintf.32.o: langprintf.c array.h file.h language.h i18n.h transcode.h
-language.32.o: language.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-language.32.o: language.c array.h file.h language.h i18n.h transcode.h debug.h
-localize.32.o: localize.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-localize.32.o: localize.c array.h file.h language.h i18n.h transcode.h debug.h
+ipp-support.32.o: ipp-support.c globals.h string.h ../config.h http-private.h http.h md5.h
+ipp-support.32.o: ipp-support.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+ipp-support.32.o: ipp-support.c i18n.h transcode.h debug.h
+langprintf.32.o: langprintf.c globals.h string.h ../config.h http-private.h http.h md5.h
+langprintf.32.o: langprintf.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+langprintf.32.o: langprintf.c i18n.h transcode.h
+language.32.o: language.c globals.h string.h ../config.h http-private.h http.h md5.h
+language.32.o: language.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+language.32.o: language.c transcode.h debug.h
+localize.32.o: localize.c globals.h string.h ../config.h http-private.h http.h md5.h
+localize.32.o: localize.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+localize.32.o: localize.c transcode.h debug.h
mark.32.o: mark.c cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
mark.32.o: mark.c ../config.h debug.h
md5.32.o: md5.c md5.h string.h ../config.h
md5passwd.32.o: md5passwd.c http.h md5.h string.h ../config.h
-notify.32.o: notify.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-notify.32.o: notify.c array.h file.h language.h i18n.h transcode.h
+notify.32.o: notify.c globals.h string.h ../config.h http-private.h http.h md5.h
+notify.32.o: notify.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+notify.32.o: notify.c transcode.h
options.32.o: options.c cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
options.32.o: options.c ../config.h debug.h
page.32.o: page.c ppd.h array.h file.h string.h ../config.h
-ppd.32.o: ppd.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h array.h
-ppd.32.o: ppd.c file.h language.h i18n.h transcode.h debug.h
-request.32.o: request.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-request.32.o: request.c array.h file.h language.h i18n.h transcode.h debug.h
+ppd.32.o: ppd.c globals.h string.h ../config.h http-private.h http.h md5.h
+ppd.32.o: ppd.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+ppd.32.o: ppd.c transcode.h debug.h
+request.32.o: request.c globals.h string.h ../config.h http-private.h http.h md5.h
+request.32.o: request.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+request.32.o: request.c transcode.h debug.h
snprintf.32.o: snprintf.c string.h ../config.h
string.32.o: string.c array.h debug.h string.h ../config.h
-tempfile.32.o: tempfile.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-tempfile.32.o: tempfile.c array.h file.h language.h i18n.h transcode.h debug.h
-transcode.32.o: transcode.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-transcode.32.o: transcode.c array.h file.h language.h i18n.h transcode.h debug.h
+tempfile.32.o: tempfile.c globals.h string.h ../config.h http-private.h http.h md5.h
+tempfile.32.o: tempfile.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+tempfile.32.o: tempfile.c transcode.h debug.h
+transcode.32.o: transcode.c globals.h string.h ../config.h http-private.h http.h md5.h
+transcode.32.o: transcode.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+transcode.32.o: transcode.c i18n.h transcode.h debug.h
usersys.32.o: usersys.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
usersys.32.o: usersys.c globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
usersys.32.o: usersys.c transcode.h
-util.32.o: util.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-util.32.o: util.c array.h file.h language.h i18n.h transcode.h debug.h
+util.32.o: util.c globals.h string.h ../config.h http-private.h http.h md5.h
+util.32.o: util.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+util.32.o: util.c transcode.h debug.h
testadmin.32.o: testadmin.c adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
testadmin.32.o: testadmin.c language.h string.h ../config.h
testarray.32.o: testarray.c ../cups/string.h ../config.h string.h array.h dir.h debug.h
testfile.32.o: testfile.c string.h ../config.h file.h debug.h
testhttp.32.o: testhttp.c http.h md5.h string.h ../config.h
testi18n.32.o: testi18n.c i18n.h transcode.h language.h array.h string.h ../config.h
-testipp.32.o: testipp.c ../cups/string.h ../config.h string.h ipp.h http.h md5.h
+testipp.32.o: testipp.c ../cups/string.h ../config.h string.h ipp-private.h ipp.h http.h
+testipp.32.o: testipp.c md5.h
testlang.32.o: testlang.c i18n.h transcode.h language.h array.h
testppd.32.o: testppd.c ../cups/string.h ../config.h string.h ppd.h array.h file.h
# DO NOT DELETE
adminutil.64.o: adminutil.c adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
-adminutil.64.o: adminutil.c language.h globals.h string.h ../config.h i18n.h transcode.h
-adminutil.64.o: adminutil.c debug.h
+adminutil.64.o: adminutil.c language.h globals.h string.h ../config.h http-private.h
+adminutil.64.o: adminutil.c ipp-private.h i18n.h transcode.h debug.h
array.64.o: array.c array.h string.h ../config.h debug.h
attr.64.o: attr.c ppd.h array.h file.h debug.h string.h ../config.h
-auth.64.o: auth.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-auth.64.o: auth.c array.h file.h language.h i18n.h transcode.h debug.h
+auth.64.o: auth.c globals.h string.h ../config.h http-private.h http.h md5.h
+auth.64.o: auth.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+auth.64.o: auth.c transcode.h debug.h
backchannel.64.o: backchannel.c cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
backend.64.o: backend.c backend.h string.h ../config.h
-custom.64.o: custom.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-custom.64.o: custom.c array.h file.h language.h i18n.h transcode.h debug.h
-dest.64.o: dest.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-dest.64.o: dest.c array.h file.h language.h i18n.h transcode.h
+custom.64.o: custom.c globals.h string.h ../config.h http-private.h http.h md5.h
+custom.64.o: custom.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+custom.64.o: custom.c transcode.h debug.h
+dest.64.o: dest.c globals.h string.h ../config.h http-private.h http.h md5.h
+dest.64.o: dest.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+dest.64.o: dest.c transcode.h
dir.64.o: dir.c dir.h string.h ../config.h debug.h
-emit.64.o: emit.c ppd.h array.h file.h string.h ../config.h
+emit.64.o: emit.c ppd.h array.h file.h string.h ../config.h debug.h
encode.64.o: encode.c cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
encode.64.o: encode.c ipp-private.h string.h ../config.h debug.h
file.64.o: file.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
http.64.o: http.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
http.64.o: http.c string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
http.64.o: http.c debug.h
-http-addr.64.o: http-addr.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-http-addr.64.o: http-addr.c array.h file.h language.h i18n.h transcode.h debug.h
+http-addr.64.o: http-addr.c globals.h string.h ../config.h http-private.h http.h md5.h
+http-addr.64.o: http-addr.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+http-addr.64.o: http-addr.c i18n.h transcode.h debug.h
http-addrlist.64.o: http-addrlist.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
http-addrlist.64.o: http-addrlist.c globals.h string.h cups.h ppd.h array.h file.h language.h
http-addrlist.64.o: http-addrlist.c i18n.h transcode.h debug.h
-http-support.64.o: http-support.c debug.h globals.h string.h ../config.h cups.h ipp.h http.h
-http-support.64.o: http-support.c md5.h ppd.h array.h file.h language.h i18n.h transcode.h
+http-support.64.o: http-support.c debug.h globals.h string.h ../config.h http-private.h http.h
+http-support.64.o: http-support.c md5.h ipp-private.h ipp.h cups.h ppd.h array.h file.h
+http-support.64.o: http-support.c language.h i18n.h transcode.h
ipp.64.o: ipp.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
ipp.64.o: ipp.c string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
ipp.64.o: ipp.c debug.h
-ipp-support.64.o: ipp-support.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-ipp-support.64.o: ipp-support.c array.h file.h language.h i18n.h transcode.h debug.h
-langprintf.64.o: langprintf.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-langprintf.64.o: langprintf.c array.h file.h language.h i18n.h transcode.h
-language.64.o: language.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-language.64.o: language.c array.h file.h language.h i18n.h transcode.h debug.h
-localize.64.o: localize.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-localize.64.o: localize.c array.h file.h language.h i18n.h transcode.h debug.h
+ipp-support.64.o: ipp-support.c globals.h string.h ../config.h http-private.h http.h md5.h
+ipp-support.64.o: ipp-support.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+ipp-support.64.o: ipp-support.c i18n.h transcode.h debug.h
+langprintf.64.o: langprintf.c globals.h string.h ../config.h http-private.h http.h md5.h
+langprintf.64.o: langprintf.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+langprintf.64.o: langprintf.c i18n.h transcode.h
+language.64.o: language.c globals.h string.h ../config.h http-private.h http.h md5.h
+language.64.o: language.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+language.64.o: language.c transcode.h debug.h
+localize.64.o: localize.c globals.h string.h ../config.h http-private.h http.h md5.h
+localize.64.o: localize.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+localize.64.o: localize.c transcode.h debug.h
mark.64.o: mark.c cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
mark.64.o: mark.c ../config.h debug.h
md5.64.o: md5.c md5.h string.h ../config.h
md5passwd.64.o: md5passwd.c http.h md5.h string.h ../config.h
-notify.64.o: notify.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-notify.64.o: notify.c array.h file.h language.h i18n.h transcode.h
+notify.64.o: notify.c globals.h string.h ../config.h http-private.h http.h md5.h
+notify.64.o: notify.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+notify.64.o: notify.c transcode.h
options.64.o: options.c cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
options.64.o: options.c ../config.h debug.h
page.64.o: page.c ppd.h array.h file.h string.h ../config.h
-ppd.64.o: ppd.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h array.h
-ppd.64.o: ppd.c file.h language.h i18n.h transcode.h debug.h
-request.64.o: request.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-request.64.o: request.c array.h file.h language.h i18n.h transcode.h debug.h
+ppd.64.o: ppd.c globals.h string.h ../config.h http-private.h http.h md5.h
+ppd.64.o: ppd.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+ppd.64.o: ppd.c transcode.h debug.h
+request.64.o: request.c globals.h string.h ../config.h http-private.h http.h md5.h
+request.64.o: request.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+request.64.o: request.c transcode.h debug.h
snprintf.64.o: snprintf.c string.h ../config.h
string.64.o: string.c array.h debug.h string.h ../config.h
-tempfile.64.o: tempfile.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-tempfile.64.o: tempfile.c array.h file.h language.h i18n.h transcode.h debug.h
-transcode.64.o: transcode.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-transcode.64.o: transcode.c array.h file.h language.h i18n.h transcode.h debug.h
+tempfile.64.o: tempfile.c globals.h string.h ../config.h http-private.h http.h md5.h
+tempfile.64.o: tempfile.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+tempfile.64.o: tempfile.c transcode.h debug.h
+transcode.64.o: transcode.c globals.h string.h ../config.h http-private.h http.h md5.h
+transcode.64.o: transcode.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
+transcode.64.o: transcode.c i18n.h transcode.h debug.h
usersys.64.o: usersys.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
usersys.64.o: usersys.c globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
usersys.64.o: usersys.c transcode.h
-util.64.o: util.c globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-util.64.o: util.c array.h file.h language.h i18n.h transcode.h debug.h
+util.64.o: util.c globals.h string.h ../config.h http-private.h http.h md5.h
+util.64.o: util.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
+util.64.o: util.c transcode.h debug.h
testadmin.64.o: testadmin.c adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
testadmin.64.o: testadmin.c language.h string.h ../config.h
testarray.64.o: testarray.c ../cups/string.h ../config.h string.h array.h dir.h debug.h
testfile.64.o: testfile.c string.h ../config.h file.h debug.h
testhttp.64.o: testhttp.c http.h md5.h string.h ../config.h
testi18n.64.o: testi18n.c i18n.h transcode.h language.h array.h string.h ../config.h
-testipp.64.o: testipp.c ../cups/string.h ../config.h string.h ipp.h http.h md5.h
+testipp.64.o: testipp.c ../cups/string.h ../config.h string.h ipp-private.h ipp.h http.h
+testipp.64.o: testipp.c md5.h
testlang.64.o: testlang.c i18n.h transcode.h language.h array.h
testppd.64.o: testppd.c ../cups/string.h ../config.h string.h ppd.h array.h file.h
/*
- * "$Id: adminutil.c 5638 2006-06-06 20:08:13Z mike $"
+ * "$Id: adminutil.c 5753 2006-07-18 19:53:24Z mike $"
*
* Administration utility API definitions for the Common UNIX Printing
* System (CUPS).
{
status = -1;
- _cupsLangPrintf(stderr, _("cupsaddsmb: Unable to run \"%s\": %s\n"),
- command, strerror(errno));
+ if (logfile)
+ _cupsLangPrintf(logfile, _("Unable to run \"%s\": %s\n"),
+ command, strerror(errno));
}
else
{
/*
- * End of "$Id: adminutil.c 5638 2006-06-06 20:08:13Z mike $".
+ * End of "$Id: adminutil.c 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: dest.c 5346 2006-03-28 16:05:19Z mike $"
+ * "$Id: dest.c 5753 2006-07-18 19:53:24Z mike $"
*
* User-defined destination (and option) support for the Common UNIX
* Printing System (CUPS).
int wrote; /* Wrote definition? */
cups_dest_t *dest; /* Current destination */
cups_option_t *option; /* Current option */
+ _ipp_option_t *match; /* Matching attribute for option */
FILE *fp; /* File pointer */
const char *home; /* HOME environment variable */
char filename[1024]; /* lpoptions file */
for (j = dest->num_options, option = dest->options; j > 0; j --, option ++)
{
+ /*
+ * See if this option is a printer attribute; if so, skip it...
+ */
+
+ if ((match = _ippFindOption(option->name)) != NULL &&
+ match->group_tag == IPP_TAG_PRINTER)
+ continue;
+
/*
* See if the server/global options match these; if so, don't
* write 'em.
*/
- if (temp && (val = cupsGetOption(option->name, temp->num_options,
- temp->options)) != NULL)
- {
- if (!strcasecmp(val, option->value))
- continue;
- }
+ if (temp &&
+ (val = cupsGetOption(option->name, temp->num_options,
+ temp->options)) != NULL &&
+ !strcasecmp(val, option->value))
+ continue;
/*
* Options don't match, write to the file...
if (option->value[0])
{
- if (strchr(option->value, ' ') != NULL)
- fprintf(fp, " %s=\"%s\"", option->name, option->value);
- else
+ if (strchr(option->value, ' ') ||
+ strchr(option->value, '\\') ||
+ strchr(option->value, '\"') ||
+ strchr(option->value, '\''))
+ {
+ /*
+ * Quote the value...
+ */
+
+ fprintf(fp, " %s=\"", option->name);
+
+ for (val = option->value; *val; val ++)
+ {
+ if (strchr("\"\'\\", *val))
+ putc('\\', fp);
+
+ putc(*val, fp);
+ }
+
+ putc('\"', fp);
+ }
+ else
+ {
+ /*
+ * Store the literal value...
+ */
+
fprintf(fp, " %s=%s", option->name, option->value);
+ }
}
else
fprintf(fp, " %s", option->name);
/*
- * End of "$Id: dest.c 5346 2006-03-28 16:05:19Z mike $".
+ * End of "$Id: dest.c 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: emit.c 5257 2006-03-09 15:27:27Z mike $"
+ * "$Id: emit.c 5700 2006-06-26 19:20:39Z mike $"
*
* PPD code emission routines for the Common UNIX Printing System (CUPS).
*
#include <stdlib.h>
#include "string.h"
#include <errno.h>
+#include "debug.h"
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
ppd_choice_t **collect; /* Collected choices */
+ DEBUG_printf(("ppdCollect2(ppd=%p, section=%d, min_order=%f, choices=%p)\n",
+ ppd, section, min_order, choices));
+
if (ppd == NULL)
return (0);
for (k = o->num_choices, c = o->choices; k > 0; k --, c ++)
if (c->marked && count < 1000)
{
+ DEBUG_printf(("ppdCollect2: %s=%s marked...\n", o->keyword,
+ c->choice));
collect[count] = c;
count ++;
}
for (m = o->num_choices, c = o->choices; m > 0; m --, c ++)
if (c->marked && count < 1000)
{
+ DEBUG_printf(("ppdCollect2: %s=%s marked...\n", o->keyword,
+ c->choice));
collect[count] = c;
count ++;
}
qsort(collect, count, sizeof(ppd_choice_t *),
(int (*)(const void *, const void *))ppd_sort);
+ DEBUG_printf(("ppdCollect2: %d marked choices...\n", count));
+
/*
* Return the array and number of choices; if 0, free the array since
* it isn't needed.
struct lconv *loc; /* Locale data */
+ DEBUG_printf(("ppdEmitString(ppd=%p, section=%d, min_order=%f)\n",
+ ppd, section, min_order));
+
/*
* Range check input...
*/
!strcasecmp(choices[i]->option->keyword, "PageRegion")) &&
!strcasecmp(choices[i]->choice, "Custom"))
{
+ DEBUG_puts("ppdEmitString: Custom size set!");
+
bufsize += 37; /* %%BeginFeature: *CustomPageSize True\n */
bufsize += 50; /* Five 9-digit numbers + newline */
}
* Allocate memory...
*/
+ DEBUG_printf(("ppdEmitString: Allocating %d bytes for string...\n", bufsize));
+
if ((buffer = calloc(1, bufsize)) == NULL)
{
free(choices);
* Send DSC comments with option...
*/
+ DEBUG_printf(("Adding code for %s=%s...\n", choices[i]->option->keyword,
+ choices[i]->choice));
+
if ((!strcasecmp(choices[i]->option->keyword, "PageSize") ||
!strcasecmp(choices[i]->option->keyword, "PageRegion")) &&
!strcasecmp(choices[i]->choice, "Custom"))
strlcpy(bufptr, "%%EndFeature\n"
"} stopped cleartomark\n", bufend - bufptr + 1);
bufptr += strlen(bufptr);
+
+ DEBUG_printf(("ppdEmitString: Offset in string is %d...\n",
+ bufptr - buffer));
}
else
{
/*
- * End of "$Id: emit.c 5257 2006-03-09 15:27:27Z mike $".
+ * End of "$Id: emit.c 5700 2006-06-26 19:20:39Z mike $".
*/
/*
- * "$Id: encode.c 5545 2006-05-18 21:00:56Z mike $"
+ * "$Id: encode.c 5753 2006-07-18 19:53:24Z mike $"
*
* Option encoding routines for the Common UNIX Printing System (CUPS).
*
* cupsEncodeOptions() - Encode printer options into IPP attributes.
* cupsEncodeOptions2() - Encode printer options into IPP attributes for
* a group.
+ * _ippFindOption() - Find the attribute information for an option.
* compare_ipp_options() - Compare two IPP options.
*/
* **** THIS LIST MUST BE SORTED ****
*/
-typedef struct
-{
- const char *name;
- ipp_tag_t value_tag;
- ipp_tag_t group_tag;
-} _ipp_option_t;
-
static const _ipp_option_t ipp_options[] =
{
{ "blackplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB },
{ "ppi-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ "prettyprint", IPP_TAG_BOOLEAN, IPP_TAG_JOB },
{ "prettyprint-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER },
+ { "print-quality", IPP_TAG_ENUM, IPP_TAG_JOB },
+ { "print-quality-default", IPP_TAG_ENUM, IPP_TAG_PRINTER },
{ "printer-error-policy", IPP_TAG_NAME, IPP_TAG_PRINTER },
{ "printer-info", IPP_TAG_TEXT, IPP_TAG_PRINTER },
{ "printer-is-accepting-jobs",IPP_TAG_BOOLEAN, IPP_TAG_PRINTER },
{ "printer-state-reasons", IPP_TAG_KEYWORD, IPP_TAG_PRINTER },
{ "printer-type", IPP_TAG_ENUM, IPP_TAG_PRINTER },
{ "printer-uri", IPP_TAG_URI, IPP_TAG_OPERATION },
- { "print-quality", IPP_TAG_ENUM, IPP_TAG_JOB },
- { "print-quality-default", IPP_TAG_ENUM, IPP_TAG_PRINTER },
{ "queued-job-count", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ "raw", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION },
- { "resolution", IPP_TAG_RESOLUTION, IPP_TAG_JOB },
- { "resolution-default", IPP_TAG_RESOLUTION, IPP_TAG_PRINTER },
{ "requesting-user-name-allowed", IPP_TAG_NAME, IPP_TAG_PRINTER },
{ "requesting-user-name-denied", IPP_TAG_NAME, IPP_TAG_PRINTER },
+ { "resolution", IPP_TAG_RESOLUTION, IPP_TAG_JOB },
+ { "resolution-default", IPP_TAG_RESOLUTION, IPP_TAG_PRINTER },
{ "saturation", IPP_TAG_INTEGER, IPP_TAG_JOB },
{ "saturation-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ "scaling", IPP_TAG_INTEGER, IPP_TAG_JOB },
for (i = num_options, option = options; i > 0; i --, option ++)
{
- _ipp_option_t key, /* Search key */
- *match; /* Matching attribute */
+ _ipp_option_t *match; /* Matching attribute */
/*
* Figure out the proper value and group tags for this option...
*/
- key.name = option->name;
- match = (_ipp_option_t *)bsearch(&key, ipp_options,
- sizeof(ipp_options) /
- sizeof(ipp_options[0]),
- sizeof(ipp_options[0]),
- (int (*)(const void *,
- const void *))
- compare_ipp_options);
-
- if (match)
+ if ((match = _ippFindOption(option->name)) != NULL)
{
if (match->group_tag != group_tag)
continue;
}
+/*
+ * '_ippFindOption()' - Find the attribute information for an option.
+ */
+
+_ipp_option_t * /* O - Attribute information */
+_ippFindOption(const char *name) /* I - Option/attribute name */
+{
+ _ipp_option_t key; /* Search key */
+
+
+ /*
+ * Lookup the proper value and group tags for this option...
+ */
+
+ key.name = name;
+
+ return ((_ipp_option_t *)bsearch(&key, ipp_options,
+ sizeof(ipp_options) / sizeof(ipp_options[0]),
+ sizeof(ipp_options[0]),
+ (int (*)(const void *, const void *))
+ compare_ipp_options));
+}
+
+
/*
* 'compare_ipp_options()' - Compare two IPP options.
*/
/*
- * End of "$Id: encode.c 5545 2006-05-18 21:00:56Z mike $".
+ * End of "$Id: encode.c 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: globals.h 5366 2006-04-02 16:11:04Z mike $"
+ * "$Id: globals.h 5755 2006-07-19 13:29:44Z mike $"
*
* Global variable definitions for the Common UNIX Printing System (CUPS).
*
*/
# include "string.h"
+# include "http-private.h"
# include "cups.h"
# include "i18n.h"
#endif /* !_CUPS_GLOBALS_H_ */
/*
- * End of "$Id: globals.h 5366 2006-04-02 16:11:04Z mike $".
+ * End of "$Id: globals.h 5755 2006-07-19 13:29:44Z mike $".
*/
/*
- * "$Id: http.c 5630 2006-06-05 18:42:53Z mike $"
+ * "$Id: http.c 5753 2006-07-18 19:53:24Z mike $"
*
* HTTP routines for the Common UNIX Printing System (CUPS).
*
if (http->used)
return (1);
+ /*
+ * Flush pending data, if any...
+ */
+
+ if (http->wused)
+ {
+ if (httpFlushWrite(http) < 0)
+ return (0);
+ }
+
/*
* If not, check the SSL/TLS buffers and do a select() on the connection...
*/
/*
- * End of "$Id: http.c 5630 2006-06-05 18:42:53Z mike $".
+ * End of "$Id: http.c 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: http.h 5632 2006-06-06 14:46:10Z mike $"
+ * "$Id: http.h 5716 2006-07-11 17:56:57Z mike $"
*
* Hyper-Text Transport Protocol definitions for the Common UNIX Printing
* System (CUPS).
#if defined(AF_INET6) && !defined(s6_addr32)
# if defined(__sun)
# define s6_addr32 _S6_un._S6_u32
-# elif defined(__FreeBSD__) || defined(__APPLE__)
+# elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
# define s6_addr32 __u6_addr.__u6_addr32
# elif defined(__osf__)
# define s6_addr32 s6_un.sa6_laddr
#endif /* !_CUPS_HTTP_H_ */
/*
- * End of "$Id: http.h 5632 2006-06-06 14:46:10Z mike $".
+ * End of "$Id: http.h 5716 2006-07-11 17:56:57Z mike $".
*/
/*
- * "$Id: ipp-private.h 5230 2006-03-05 17:01:51Z mike $"
+ * "$Id: ipp-private.h 5753 2006-07-18 19:53:24Z mike $"
*
* Private IPP definitions for the Common UNIX Printing System (CUPS).
*
# endif /* __cplusplus */
+/*
+ * Structures...
+ */
+
+typedef struct /**** Attribute mapping data ****/
+{
+ const char *name; /* Option/attribute name */
+ ipp_tag_t value_tag; /* Value tag for this attribute */
+ ipp_tag_t group_tag; /* Group tag for this attribute */
+} _ipp_option_t;
+
+
/*
* Prototypes for private functions...
*/
extern ipp_attribute_t *_ippAddAttr(ipp_t *, int);
+extern _ipp_option_t *_ippFindOption(const char *name);
extern void _ippFreeAttr(ipp_attribute_t *);
#endif /* !_CUPS_IPP_H_ */
/*
- * End of "$Id: ipp-private.h 5230 2006-03-05 17:01:51Z mike $".
+ * End of "$Id: ipp-private.h 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: language.c 5373 2006-04-06 20:03:32Z mike $"
+ * "$Id: language.c 5753 2006-07-18 19:53:24Z mike $"
*
* I18N/language support for the Common UNIX Printing System (CUPS).
*
encoding = (cups_encoding_t)i;
break;
}
+
+ if (encoding == CUPS_AUTO_ENCODING)
+ {
+ /*
+ * Map alternate names for various character sets...
+ */
+
+ if (!strcasecmp(charset, "iso-2022-jp") ||
+ !strcasecmp(charset, "sjis"))
+ encoding = CUPS_WINDOWS_932;
+ else if (!strcasecmp(charset, "iso-2022-cn"))
+ encoding = CUPS_WINDOWS_936;
+ else if (!strcasecmp(charset, "iso-2022-kr"))
+ encoding = CUPS_WINDOWS_949;
+ else if (!strcasecmp(charset, "big5"))
+ encoding = CUPS_WINDOWS_950;
+ }
}
DEBUG_printf(("cupsLangGet: encoding=%d(%s)\n", encoding,
/*
- * End of "$Id: language.c 5373 2006-04-06 20:03:32Z mike $".
+ * End of "$Id: language.c 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: mark.c 5529 2006-05-15 20:06:46Z mike $"
+ * "$Id: mark.c 5700 2006-06-26 19:20:39Z mike $"
*
* Option marking routines for the Common UNIX Printing System (CUPS).
*
ppd_cparam_t *cparam; /* Custom parameter */
char *units; /* Custom points units */
+
if ((coption = ppdFindCustomOption(ppd, option)) != NULL)
{
if ((cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params)) == NULL)
}
}
}
+
+ /*
+ * Make sure that we keep the option marked below...
+ */
+
+ choice = "Custom";
}
else if (choice[0] == '{')
{
/*
- * End of "$Id: mark.c 5529 2006-05-15 20:06:46Z mike $".
+ * End of "$Id: mark.c 5700 2006-06-26 19:20:39Z mike $".
*/
/*
- * "$Id: testipp.c 5023 2006-01-29 14:39:44Z mike $"
+ * "$Id: testipp.c 5753 2006-07-18 19:53:24Z mike $"
*
* IPP test program for the Common UNIX Printing System (CUPS).
*
#include <stdlib.h>
#include <cups/string.h>
#include <errno.h>
-#include "ipp.h"
+#include "ipp-private.h"
#ifdef WIN32
# include <io.h>
#else
ippDelete(request);
+ /*
+ * Test _ippFindOption() private API...
+ */
+
+ fputs("_ippFindOption(\"printer-type\"): ", stdout);
+ if (_ippFindOption("printer-type"))
+ puts("PASS");
+ else
+ {
+ puts("FAIL");
+ status = 1;
+ }
+
/*
* Summarize...
*/
/*
- * End of "$Id: testipp.c 5023 2006-01-29 14:39:44Z mike $".
+ * End of "$Id: testipp.c 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: testppd.c 5484 2006-05-02 20:38:12Z mike $"
+ * "$Id: testppd.c 5700 2006-06-26 19:20:39Z mike $"
*
* PPD test program for the Common UNIX Printing System (CUPS).
*
"%%BeginFeature: *InputSlot Tray\n"
"InputSlot=Tray\n"
"%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *IntOption None\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *StringOption None\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n";
+
+static const char *custom_code =
+ "[{\n"
+ "%%BeginFeature: *CustomPageSize True\n"
+ "400\n"
+ "500\n"
+ "0\n"
+ "0\n"
+ "0\n"
+ "PageSize=Custom\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *InputSlot Tray\n"
+ "InputSlot=Tray\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *IntOption None\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *StringOption None\n"
+ "%%EndFeature\n"
"} stopped cleartomark\n";
printf("FAIL (%d conflicts)\n", conflicts);
}
- fputs("ppdEmitString: ", stdout);
+ fputs("ppdEmitString (defaults): ", stdout);
if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
!strcmp(s, default_code))
puts("PASS");
puts(s);
}
+ if (s)
+ free(s);
+
+ fputs("ppdEmitString (custom size): ", stdout);
+ ppdMarkOption(ppd, "PageSize", "Custom.400x500");
+
+ if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
+ !strcmp(s, custom_code))
+ puts("PASS");
+ else
+ {
+ printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
+ (int)strlen(custom_code));
+
+ if (s)
+ puts(s);
+ }
+
if (s)
free(s);
/*
- * End of "$Id: testppd.c 5484 2006-05-02 20:38:12Z mike $".
+ * End of "$Id: testppd.c 5700 2006-06-26 19:20:39Z mike $".
*/
/*
- * "$Id: util.c 5663 2006-06-15 20:36:42Z mike $"
+ * "$Id: util.c 5716 2006-07-11 17:56:57Z mike $"
*
* Printing utilities for the Common UNIX Printing System (CUPS).
*
resource, sizeof(resource), 0))
return (NULL);
+ DEBUG_printf(("Printer hostname=\"%s\", port=%d\n", hostname, port));
+
/*
* Remap local hostname to localhost...
*/
httpGetHostname(NULL, localhost, sizeof(localhost));
+ DEBUG_printf(("Local hostname=\"%s\"\n", localhost));
+
if (!strcasecmp(localhost, hostname))
strcpy(hostname, "localhost");
else
http_port = ippPort();
+ DEBUG_printf(("Connection hostname=\"%s\", port=%d\n", http_hostname,
+ http_port));
+
/*
* Reconnect to the correct server as needed...
*/
/*
- * End of "$Id: util.c 5663 2006-06-15 20:36:42Z mike $".
+ * End of "$Id: util.c 5716 2006-07-11 17:56:57Z mike $".
*/
#
-# "$Id: Makefile 5609 2006-05-30 20:31:10Z mike $"
+# "$Id: Makefile 5736 2006-07-13 19:59:36Z mike $"
#
# Documentation makefile for the Common UNIX Printing System (CUPS).
#
help/network.html \
help/options.html \
help/overview.html \
+ help/policies.html \
help/ref-access_log.html \
help/ref-classes-conf.html \
help/ref-client-conf.html \
help/ref-cupsd-conf.html \
help/ref-error_log.html \
+ help/ref-mailto-conf.html \
help/ref-page_log.html \
help/ref-printers-conf.html \
help/ref-snmp-conf.html \
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+ <TITLE>Startseite - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
+ <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
+ <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="Common UNIX Printing System @CUPS_VERSION@">
+<TR CLASS="header">
+<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
+<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
+<TD WIDTH="100%" HEIGHT="60"><H1>Common UNIX Printing System @CUPS_VERSION@@CUPS_REVISION@</H1></TD>
+<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
+SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+<TR CLASS="header"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
+
+<A CLASS="sel" HREF="/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> Startseite <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/admin/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> Verwaltung <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/classes/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> Klassen <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/help/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> Dokumentation/Hilfe <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/jobs/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> Aufträge <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/printers/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> Drucker <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+</TD></TR>
+<TR CLASS="page">
+<TD WIDTH="15"> </TD>
+<TD COLSPAN="2" WIDTH="100%" VALIGN="TOP" CLASS="page">
+
+<H2 CLASS="title">Herzlich Willkommen!</H2>
+
+<P>Auf diesen Seiten können Sie Ihre Drucker und Aufträge überwachen,
+sowie auch Verwaltungsaufgaben durchzuführen. Klicken Sie auf einen der
+oberen Karteireiter oder eine der Schaltflächen um eine Tätigkeit auszuführen.</P>
+
+<P>
+<A HREF="/help/"><IMG SRC="/images/button-help.gif" CLASS="button" ALT="Hilfe"></A>
+<A HREF="/admin?OP=add-class"><IMG SRC="/images/button-add-class.gif" CLASS="button" ALT="Klasse hinzufügen"></A>
+<A HREF="/admin?OP=add-printer"><IMG SRC="/images/button-add-printer.gif" CLASS="button" ALT="Drucker hinzufügen"></A>
+<A HREF="/classes"><IMG SRC="/images/button-manage-classes.gif" CLASS="button" ALT="Klassen verwalten"></A>
+<A HREF="/jobs"><IMG SRC="/images/button-manage-jobs.gif" CLASS="button" ALT="Aufträge verwalten"></A>
+<A HREF="/printers"><IMG SRC="/images/button-manage-printers.gif" CLASS="button" ALT="Drucker verwalten"></A>
+<A HREF="/admin"><IMG SRC="/images/button-manage-server.gif" CLASS="button" ALT="Server verwalten"></A>
+</P>
+
+<P><I>Wenn Sie nach einem Benutzernamen und Passwort gefragt werden,
+geben Sie bitte Ihren Benutzernamen und Ihr Passwort oder
+den Benutzernamen und das Passwort des "root" Benutzers ein.</I></P>
+
+<H2 CLASS="title">Über CUPS</H2>
+
+<P>
+<IMG SRC="/images/happy.gif" ALIGN="LEFT" WIDTH="196" HEIGHT="144"
+STYLE="padding-right: 10px;" ALT="Happy Computer and Printer">
+
+<A HREF="http://www.easysw.com/"><IMG SRC="/images/esp-logo.gif"
+ALIGN="RIGHT" WIDTH="110" HEIGHT="68" BORDER="0"
+STYLE="padding-left: 10px; padding-bottom: 10px;"
+ALT="Easy Software Products"></A>
+
+CUPS stellt eine portierbare Druckerschicht für
+UNIX<SUP>®</SUP>-basierte Betriebssysteme bereit. Es wird entwickelt
+und gepflegt von <A HREF="http://www.easysw.com">Easy Software
+Products</a> um eine Standard Druckerlösung zu fördern. CUPS ist das
+Standard Drucksystem welches von MacOS<SUP>®</SUP> X und den meisten
+Linux<SUP>®</SUP> Distributionen verwendet wird.</P>
+
+<P>CUPS benutzt das <A HREF="http://www.pwg.org/ipp/"
+TARGET="_blank"> Internet Printing Protocol ("IPP")</A> als
+Basis für die Verwaltung von Druckaufträge und Warteschlangen und fügt
+Drucker-Browsing und PostScript Printer Description ("PPD") basierte
+Druckeigenschaften hinzu um komplexe Druckumgebungen optimale zu
+unterstützen.<BR CLEAR="ALL"></P>
+
+<H2 CLASS="title">Druckertreiber und Unterstützung</H2>
+
+<P>Besuchen Sie die offizielle CUPS Seite um Druckertreiber und
+Unterstützung zu erhalten:</P>
+
+<PRE>
+ <A HREF="http://www.cups.org/" TARGET="_blank">www.cups.org</A>
+</PRE>
+
+<P>Kommerzieller Support und eine erweiterte Version von CUPS genannt <A
+HREF="http://www.easysw.com/printpro/">ESP Print Pro</A> ist
+verfügbar unter:</P>
+
+<PRE>
+ <A HREF="http://www.easysw.com/" TARGET="_blank">www.easysw.com</A>
+</PRE>
+
+</TD>
+<TD WIDTH="15"> </TD>
+</TR>
+<TR CLASS="header">
+<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
+
+<P><SMALL>Das Common UNIX Printing System, CUPS, und das CUPS Logo sind
+Warenzeichen der <A HREF="http://www.easysw.com">Easy Software
+Products</A>. CUPS ist urheberrechtlich geschützt 1997-2006 von Easy Software Products,
+Alle Rechte vorbehalten.</SMALL></P>
+
+</TD>
+
+<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>
--- /dev/null
+<HTML>
+<!-- SECTION: Getting Started -->
+<HEAD>
+ <TITLE>Managing Operation Policies</TITLE>
+</HEAD>
+<BODY>
+
+<P>Operation policies are the rules used for each IPP operation
+in CUPS. These rules include things like "user must provide a
+password", "user must be in the system group", "allow only from
+the local system", and so forth. Until CUPS 1.2, these rules were
+largely hardcoded and could only be customized at a very basic
+level.</P>
+
+<P>CUPS 1.2 adds a new fine-grained policy layer which allows you
+to completely redefine the rules for each operation and/or
+printer. Each policy is named and defines access control rules
+for each IPP operation. This document describes how to manage
+policies and their rules.</P>
+
+<H2 CLASS="title"><A NAME="BASICS">The Basics</A></H2>
+
+<P>Operation policies are used for all IPP requests sent to the
+scheduler and are evaluated <em>after</em> the <A
+HREF="ref-cupsd-conf.html#Location"><TT>Location</TT></A> based
+access control rules. This means that operation policies can only
+add additional security restrictions to a request, never relax
+them. Use <TT>Location</TT> based access control rules for
+server-wide limits and operation policies for limits on
+individual printers, tasks, or services.</P>
+
+<P>Policies are stored in the <VAR>cupsd.conf</VAR> file in <A
+HREF="ref-cupsd-conf.html#Policy"><TT>Policy</TT></A> sections.
+Each policy has an alphanumeric name that is used to select it.
+Inside the policy section are one or more <A
+HREF="ref-cupsd-conf.html#LimitIPP"><TT>Limit</TT></A>
+subsections which list the operations that are affected by the
+rules inside it. <A HREF="#LISTING01">Listing 1</A> shows the
+default operation policy, appropriately called "default", that is
+shipped with CUPS.</P>
+
+<P>The easiest way to add a policy to the <VAR>cupsd.conf</VAR>
+file is to use the web interface. Click on the
+<VAR>Administration</VAR> tab and then the <VAR>Edit
+Configuration File</VAR> button to edit the current
+<VAR>cupsd.conf</VAR> file. Click on the <VAR>Save Changes</VAR>
+button to save the changes and restart the scheduler. If you edit
+the <VAR>cupsd.conf</VAR> file from the console, make sure to <A
+HREF="ref-cupsd-conf.html">restart the cupsd process</A> before
+trying to use the new policy.</P>
+
+<PRE CLASS="command">
+<EM>Listing 1: <A NAME="LISTING01">Default Operation Policy</A></EM>
+
+ 1 <Policy default>
+ 2 # Job-related operations must be done by the owner or an
+ adminstrator...
+ 3 <Limit Send-Document Send-URI Hold-Job Release-Job
+ Restart-Job Purge-Jobs Set-Job-Attributes
+ Create-Job-Subscription Renew-Subscription
+ Cancel-Subscription Get-Notifications Reprocess-Job
+ Cancel-Current-Job Suspend-Current-Job Resume-Job
+ CUPS-Move-Job>
+ 4 Require user @OWNER @SYSTEM
+ 5 Order deny,allow
+ 6 </Limit>
+ 7
+ 8 # All administration operations require an adminstrator
+ to authenticate...
+ 9 <Limit Pause-Printer Resume-Printer
+ Set-Printer-Attributes Enable-Printer Disable-Printer
+ Pause-Printer-After-Current-Job Hold-New-Jobs
+ Release-Held-New-Jobs Deactivate-Printer Activate-Printer
+ Restart-Printer Shutdown-Printer Startup-Printer
+ Promote-Job Schedule-Job-After CUPS-Add-Printer
+ CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class
+ CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
+10 AuthType Basic
+11 Require user @SYSTEM
+12 Order deny,allow
+13 </Limit>
+14
+15 # Only the owner or an administrator can cancel or
+ authenticate a job...
+16 <Limit Cancel-Job CUPS-Authenticate-Job>
+17 Require user @OWNER @SYSTEM
+18 Order deny,allow
+19 </Limit>
+20
+21 <Limit All>
+22 Order deny,allow
+23 </Limit>
+24 </Policy>
+</PRE>
+
+<H3>The Default CUPS Operation Policy</H3>
+
+<P>The policy definition starts with an opening <TT>Policy</TT>
+directive:</P>
+
+<PRE CLASS="command">
+ 1 <Policy default>
+</PRE>
+
+<P>The first <TT>Limit</TT> subsection defines the rules for IPP
+job operations:</P>
+
+<PRE CLASS="command">
+ 3 <Limit Send-Document Send-URI Hold-Job Release-Job
+ Restart-Job Purge-Jobs Set-Job-Attributes
+ Create-Job-Subscription Renew-Subscription
+ Cancel-Subscription Get-Notifications Reprocess-Job
+ Cancel-Current-Job Suspend-Current-Job Resume-Job
+ CUPS-Move-Job>
+ 4 Require user @OWNER @SYSTEM
+ 5 Order deny,allow
+ 6 </Limit>
+</PRE>
+
+<P>The operation names are listed on a single line
+with spaces separating them. Each name corresponds to the IPP
+operation described in any of the IETF or PWG standards documents
+for the Internet Printing Protocol. <A HREF="#TABLE01">Table
+1</A> lists all of the operations that have been defined along
+with their usage in CUPS.</P>
+
+<P>The access control rules are listed after the <TT>Limit</TT>
+line and are the same as those used for <A
+HREF="ref-cupsd-conf.html#Location"><TT>Location</TT></A>
+sections. In this case, we require the owner of the job
+("@OWNER") or a member of the <A
+HREF="ref-cupsd-conf.html#SystemGroup"><TT>SystemGroup</TT></A>
+("@SYSTEM") to do the operation. Because we do not include an <A
+HREF="ref-cupsd-conf.html#AuthType"><TT>AuthType</TT></A>
+directive here, the user information can come from the IPP
+request itself or the authenticated username from the HTTP
+request. The administrative operations starting on line 9,
+however, <em>do</em> use the <TT>AuthType</TT> directive, and so
+administrative operations need to be authenticated:</P>
+
+<PRE CLASS="command">
+ 9 <Limit Pause-Printer Resume-Printer
+ Set-Printer-Attributes Enable-Printer Disable-Printer
+ Pause-Printer-After-Current-Job Hold-New-Jobs
+ Release-Held-New-Jobs Deactivate-Printer Activate-Printer
+ Restart-Printer Shutdown-Printer Startup-Printer
+ Promote-Job Schedule-Job-After CUPS-Add-Printer
+ CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class
+ CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
+10 AuthType Basic
+11 Require user @SYSTEM
+12 Order deny,allow
+13 </Limit>
+</PRE>
+
+<P>The "Order deny,allow" line at the end of both <TT>Limit</TT>
+subsections allows the request to come from any system allowed by
+the <TT>Location</TT> sections elsewhere in the
+<VAR>cupsd.conf</VAR> file.</P>
+
+<P>The <TT>Cancel-Job</TT> and <TT>CUPS-Authenticate-Job</TT>
+operations are listed separately to allow the web interface to
+more easily edit their policy without disturbing the rest. Like
+the rest of the job operations, we want the job's owner
+("@OWNER") or an administrator ("@SYSTEM") to do it:</P>
+
+<PRE CLASS="command">
+16 <Limit Cancel-Job CUPS-Authenticate-Job>
+17 Require user @OWNER @SYSTEM
+18 Order deny,allow
+19 </Limit>
+</PRE>
+
+<P>The last <TT>Limit</TT> subsection in any policy uses the
+special operation name <TT>All</TT>. CUPS will use the rules in
+this subsection for any operation you don't list specifically in
+the policy. In this case, all other operations are allowed
+without a username or authentication:</P>
+
+<PRE CLASS="command">
+21 <Limit All>
+22 Order deny,allow
+23 </Limit>
+24 </Policy>
+</PRE>
+
+
+<DIV CLASS="table"><TABLE WIDTH="80%" SUMMARY="IPP Operation Names">
+<CAPTION>Table 1: <A NAME="TABLE01">IPP Operation Names</A></CAPTION>
+<THEAD>
+<TR>
+ <TH>Name</TH>
+ <TH>Used by CUPS?</TH>
+ <TH>Description</TH>
+</TR>
+</THEAD>
+<TBODY>
+<TR>
+ <TD NOWRAP><TT>Print-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Creates a print job with a single file.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Print-URI</TT></TD>
+ <TD>No</TD>
+ <TD>Create a print job with a single URI.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Validate-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Validates a print request before printing.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Create-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Creates a print job with no files or URIs.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Send-Document</TT></TD>
+ <TD>Yes</TD>
+ <TD>Adds a file to a print job.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Send-URI</TT></TD>
+ <TD>No</TD>
+ <TD>Adds a URI to a print job.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Cancel-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Cancels a print job.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Get-Job-Attributes</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets information and options associated with a job.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Get-Jobs</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets a list of jobs.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Get-Printer-Attributes</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets information and options associated with a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Hold-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Holds a print job for printing.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Release-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Releases a print job for printing.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Restart-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Reprints a print job.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Pause-Printer</TT></TD>
+ <TD>Yes</TD>
+ <TD>Stops a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Resume-Printer</TT></TD>
+ <TD>Yes</TD>
+ <TD>Starts a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Purge-Jobs</TT></TD>
+ <TD>Yes</TD>
+ <TD>Cancels all jobs on the server or a printer or class
+ and removes the job history information.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Set-Printer-Attributes</TT></TD>
+ <TD>No</TD>
+ <TD>Sets printer or class information; CUPS uses
+ CUPS-Add-Modify-Printer and CUPS-Add-Modify-Class
+ instead.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Set-Job-Attributes</TT></TD>
+ <TD>Yes</TD>
+ <TD>Changes job options.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Get-Printer-Supported-Values</TT></TD>
+ <TD>No</TD>
+ <TD>Gets -supported attributes for a printer based on job
+ options.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Create-Printer-Subscription</TT></TD>
+ <TD>Yes</TD>
+ <TD>Creates an event subscription for a printer or the server.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Create-Job-Subscription</TT></TD>
+ <TD>Yes</TD>
+ <TD>Creates an event subscription for a job.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Get-Subscription-Attributes</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets information for an event subscription.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Get-Subscriptions</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets a list of event subscriptions.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Renew-Subscription</TT></TD>
+ <TD>Yes</TD>
+ <TD>Renews an event subscription that is about to expire.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Cancel-Subscription</TT></TD>
+ <TD>Yes</TD>
+ <TD>Cancels an event subscription.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Get-Notifications</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets (pending) events for an event subscription.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Send-Notifications</TT></TD>
+ <TD>No</TD>
+ <TD>Sends events for an event subscription.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Get-Printer-Support-Files</TT></TD>
+ <TD>No</TD>
+ <TD>Gets printer driver files for a Novell client.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Enable-Printer</TT></TD>
+ <TD>Yes</TD>
+ <TD>Starts a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Disable-Printer</TT></TD>
+ <TD>Yes</TD>
+ <TD>Stops a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Pause-Printer-After-Current-Job</TT></TD>
+ <TD>No</TD>
+ <TD>Stops a printer or class after the current job is finished.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Hold-New-Jobs</TT></TD>
+ <TD>No</TD>
+ <TD>Holds new jobs submitted to a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Release-Held-New-Jobs</TT></TD>
+ <TD>No</TD>
+ <TD>Releases jobs that were held because of the
+ Hold-New-Jobs operation.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Deactivate-Printer</TT></TD>
+ <TD>No</TD>
+ <TD>Deactivates a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Activate-Printer</TT></TD>
+ <TD>No</TD>
+ <TD>Activates a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Restart-Printer</TT></TD>
+ <TD>No</TD>
+ <TD>Restarts a printer or class, resuming print jobs as needed.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Shutdown-Printer</TT></TD>
+ <TD>No</TD>
+ <TD>Powers a printer or class off.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Startup-Printer</TT></TD>
+ <TD>No</TD>
+ <TD>Powers a printer or class on.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Reprocess-Job</TT></TD>
+ <TD>No</TD>
+ <TD>Reprints a job on a different printer or class; CUPS has the
+ CUPS-Move-Job operation instead.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Cancel-Current-Job</TT></TD>
+ <TD>No</TD>
+ <TD>Cancels the current job on a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Suspend-Current-Job</TT></TD>
+ <TD>No</TD>
+ <TD>Stops the current job on a printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Resume-Job</TT></TD>
+ <TD>No</TD>
+ <TD>Resumes printing of a stopped job.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Promote-Job</TT></TD>
+ <TD>No</TD>
+ <TD>Prints a job before others.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>Schedule-Job-After</TT></TD>
+ <TD>No</TD>
+ <TD>Prints a job after others.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Get-Default</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets the server/network default printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Get-Printers</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets a list of printers and/or classes.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Add-Modify-Printer</TT></TD>
+ <TD>Yes</TD>
+ <TD>Adds or modifies a printer.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Delete-Printer</TT></TD>
+ <TD>Yes</TD>
+ <TD>Removes a printer.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Get-Classes</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets a list of classes.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Add-Modify-Class</TT></TD>
+ <TD>Yes</TD>
+ <TD>Adds or modifies a class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Delete-Class</TT></TD>
+ <TD>Yes</TD>
+ <TD>Removes a class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Accept-Jobs</TT></TD>
+ <TD>Yes</TD>
+ <TD>Sets a printer's or class' printer-is-accepting-jobs
+ attribute to true.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Reject-Jobs</TT></TD>
+ <TD>Yes</TD>
+ <TD>Sets a printer's or class' printer-is-accepting-jobs
+ attribute to false.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Set-Default</TT></TD>
+ <TD>Yes</TD>
+ <TD>Sets the server/network default printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Get-Devices</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets a list of printer devices.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Get-PPDs</TT></TD>
+ <TD>Yes</TD>
+ <TD>Gets a list of printer drivers or manufacturers.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Move-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Moves a job to a different printer or class.</TD>
+</TR>
+<TR>
+ <TD NOWRAP><TT>CUPS-Authenticate-Job</TT></TD>
+ <TD>Yes</TD>
+ <TD>Authenticates a job for printing.</TD>
+</TR>
+</TBODY>
+</TABLE></DIV>
+
+
+<H2 CLASS="title"><A NAME="CREATING">Creating Your Own Policies</A></H2>
+
+<P>The easiest way to create a new policy is to start with the
+default policy and then make changes to the copy. The first
+change you'll make is to give the policy a new name. Policy names
+can use the same characters as a printer name, specifically all
+printable characters except space, slash (/), and pound (#):</P>
+
+<PRE CLASS="command">
+<Policy mypolicy>
+</PRE>
+
+<P>Then you need to decide exactly what limits you want for the
+policy. For example, if you want to allow any user to cancel any
+other users' jobs, you can change the <TT>Cancel-Job</TT> limits
+to:</P>
+
+<PRE CLASS="command">
+<Limit Cancel-Job>
+ Order deny,allow
+</Limit>
+</PRE>
+
+<P>The directives inside the <TT>Limit</TT> subsection can use
+any of the normal limiting directives: <A
+HREF="ref-cupsd-conf.html#Allow"><TT>Allow</TT></A>, <A
+HREF="ref-cupsd-conf.html#AuthType"><TT>AuthType</TT></A>, <A
+HREF="ref-cupsd-conf.html#Deny"><TT>Deny</TT></A>, <A
+HREF="ref-cupsd-conf.html#Encryption"><TT>Encryption</TT></A>, <A
+HREF="ref-cupsd-conf.html#Require"><TT>Require</TT></A>, and <A
+HREF="ref-cupsd-conf.html#Satisfy"><TT>Satisfy</TT></A>. <A
+HREF="#TABLE02">Table 2</A> lists some basic "recipes" for
+different access control rules.</P>
+
+<DIV CLASS="table"><TABLE WIDTH="80%" SUMMARY="Access Control Recipes">
+<CAPTION>Table 2: <A NAME="TABLE02">Access Control Recipes</A></CAPTION>
+<THEAD>
+<TR>
+ <TH>Access Level</TH>
+ <TH>Directives to Use</TH>
+</TR>
+</THEAD>
+<TBODY>
+<TR>
+ <TD>Allow Everyone</TD>
+ <TD><PRE>Order deny,allow
+Allow from all</PRE></TD>
+</TR>
+<TR>
+ <TD>Allow Everyone on the Local Network</TD>
+ <TD><PRE>Order deny,allow
+Allow from @LOCAL</PRE></TD>
+</TR>
+<TR>
+ <TD>Deny Everyone/Disable Operation(s)</TD>
+ <TD><PRE>Order allow,deny
+Deny from all</PRE></TD>
+</TR>
+<TR>
+ <TD>Require Login (System) Password</TD>
+ <TD><PRE>AuthType Basic</PRE></TD>
+</TR>
+<TR>
+ <TD>Require CUPS (lppasswd) Password</TD>
+ <TD><PRE>AuthType BasicDigest</PRE></TD>
+</TR>
+<TR>
+ <TD>Require the Owner of a Job or Subscription</TD>
+ <TD><PRE>Require user @OWNER</PRE></TD>
+</TR>
+<TR>
+ <TD>Require an Administrative User</TD>
+ <TD><PRE>Require user @SYSTEM</PRE></TD>
+</TR>
+<TR>
+ <TD>Require Member of Group "foogroup"</TD>
+ <TD><PRE>Require user @foogroup</PRE></TD>
+</TR>
+<TR>
+ <TD>Require "john" or "mary"</TD>
+ <TD><PRE>Require user john mary</PRE></TD>
+</TR>
+<TR>
+ <TD>Require Encryption</TD>
+ <TD><PRE>Encryption Required</PRE></TD>
+</TR>
+</TABLE></DIV>
+
+
+<H3>Creating a Policy for a Computer Lab</H3>
+
+<P>One common operating scenario is a computer lab. The lab is
+managed by one or more technicians that assist the users of the
+lab and handle the basic administration tasks. <A
+HREF="#LISTING02">Listing 2</A> shows an operation policy that
+only allows access from the lab's subnet, 10.0.2.x, and allows
+the lab technicians, who are members of a special UNIX group for
+that lab called "lab999", to do job, printer, and subscription
+management operations.</P>
+
+<PRE CLASS="command">
+<EM>Listing 2: <A NAME="LISTING02">Operation Policy for a Lab</A></EM>
+
+ 1 <Policy lab999>
+ 2 # Job- and subscription-related operations must be done
+ by the owner, a lab technician, or an adminstrator...
+ 3 <Limit Send-Document Send-URI Hold-Job Release-Job
+ Restart-Job Purge-Jobs Set-Job-Attributes
+ Create-Job-Subscription Renew-Subscription
+ Cancel-Subscription Get-Notifications Reprocess-Job
+ Cancel-Current-Job Suspend-Current-Job Resume-Job
+ CUPS-Move-Job Cancel-Job CUPS-Authenticate-Job>
+ 4 Require user @OWNER @lab999 @SYSTEM
+ 5 Order allow,deny
+ 6 Allow from 10.0.2.0/24
+ 7 </Limit>
+ 8
+ 9 # All administration operations require a lab technician
+ or an adminstrator to authenticate...
+10 <Limit Pause-Printer Resume-Printer
+ Set-Printer-Attributes Enable-Printer Disable-Printer
+ Pause-Printer-After-Current-Job Hold-New-Jobs
+ Release-Held-New-Jobs Deactivate-Printer Activate-Printer
+ Restart-Printer Shutdown-Printer Startup-Printer
+ Promote-Job Schedule-Job-After CUPS-Accept-Jobs
+ CUPS-Reject-Jobs CUPS-Set-Default>
+11 AuthType Basic
+12 Require user @lab999 @SYSTEM
+13 Order allow,deny
+14 Allow from 10.0.2.0/24
+15 </Limit>
+16
+17 # All other operations are allowed from the lab network...
+18 <Limit All>
+19 Order allow,deny
+20 Allow from 10.0.2.0/24
+21 </Limit>
+22 </Policy>
+</PRE>
+
+
+<H2 CLASS="title"><A NAME="SELECT">Using Policies</A></H2>
+
+<P>Once you have created a policy, you can use it in two ways.
+The first way is to assign it as the default policy for the
+system using the <A
+HREF="ref-cupsd-conf.html#DefaultPolicy"><TT>DefaultPolicy</TT></A>
+directive in the <VAR>cupsd.conf</VAR> file. For example, add the
+following line to the <VAR>cupsd.conf</VAR> file to use the
+"lab999" policy from the previous section:</P>
+
+<PRE CLASS="command">
+DefaultPolicy lab999
+</PRE>
+
+<P>To associate the policy with one or more printers, use either
+the <A HREF="man-lpadmin.html">lpadmin(8)</A> command or the web
+interface to change the operation policy for each printer. When
+using the <B>lpadmin</B> command, the <TT>-o
+printer-op-policy=name</TT> option sets the operation policy for
+a printer. For example, enter the following command to use the
+"lab999" policy from the previous section with a printer named
+"LaserJet4000":</P>
+
+<PRE CLASS="command">
+lpadmin -p LaserJet4000 -o printer-op-policy=lab999
+</PRE>
+
+<P>To make the same change in the web interface, go to the
+printer's web page, for example
+"http://localhost:631/printers/LaserJet4000", and click on the
+<VAR>Set Printer Options</VAR> button. Scroll down to the bottom
+of the page and choose the desired policy from the pull-down
+list. Click on <VAR>Save Changes</VAR> to change the policy for
+the printer.</P>
+
+</BODY>
+</HTML>
--- /dev/null
+<HTML>
+<!-- SECTION: References -->
+<HEAD>
+ <TITLE>mailto.conf</TITLE>
+</HEAD>
+<BODY>
+
+<P>The <VAR>/etc/cups/mailto.conf</VAR> file contains several
+directives that defines the local mail server and email
+notification preferences for CUPS. Each directive is listed on a
+line by itself followed by its value. Comments are introduced
+using the number sign ("#") character at the beginning of a
+line.</P>
+
+
+<H2 CLASS="title"><A NAME="Cc">Cc</A></H2>
+
+<H3>Examples</H3>
+
+<PRE CLASS="command">
+Cc bigbrother@domain.com
+Cc John Doe <jd@domain.com>
+</PRE>
+
+<H3>Description</H3>
+
+<P>The <CODE>Cc</CODE> directive specifies an additional
+recipient ("carbon copy") for all email notifications. The
+default is to not send a copy to anyone but the subscriber.</P>
+
+
+<H2 CLASS="title"><A NAME="From">From</A></H2>
+
+<H3>Examples</H3>
+
+<PRE CLASS="command">
+From printserver@domain.com
+From Your Happy Printer <printserver@domain.com>
+</PRE>
+
+<H3>Description</H3>
+
+<P>The <CODE>From</CODE> directive specifies the sender of email
+notifications. The default is the <A
+HREF="ref-cupsd-conf.html#ServerAdmin"><TT>ServerAdmin</TT><A>
+address defined in the <VAR>cupsd.conf</VAR> file.</P>
+
+
+<H2 CLASS="title"><A NAME="Sendmail">Sendmail</A></H2>
+
+<H3>Examples</H3>
+
+<PRE CLASS="command">
+Sendmail /usr/sbin/sendmail
+Sendmail /usr/lib/sendmail -bm -i
+</PRE>
+
+<H3>Description</H3>
+
+<P>The <CODE>Sendmail</CODE> directive specifies the command to
+run to deliver an email locally. This directive cannot be used
+with the <TT>SMTPServer</TT> directive, and if both
+<TT>Sendmail</TT> and <TT>SMTPServer</TT> lines appear in the
+<VAR>mailto.conf</VAR> file, only the last line is used. The
+default is <TT>/usr/sbin/sendmail</TT>.</P>
+
+
+<H2 CLASS="title"><A NAME="SMTPServer">SMTPServer</A></H2>
+
+<H3>Examples</H3>
+
+<PRE CLASS="command">
+SMTPServer mail.domain.com
+SMTPServer 192.168.2.1
+</PRE>
+
+<H3>Description</H3>
+
+<P>The <CODE>SMTPServer</CODE> directive specifies a hostname or
+IP address of a (possibly remote) SMTP mail server. This
+directive cannot be used with the <TT>Sendmail</TT> directive,
+and if both <TT>Sendmail</TT> and <TT>SMTPServer</TT> lines
+appear in the <VAR>mailto.conf</VAR> file, only the last line is
+used. The default is to use the <TT>Sendmail</TT> command
+instead.</P>
+
+
+<H2 CLASS="title"><A NAME="Subject">Subject</A></H2>
+
+<H3>Examples</H3>
+
+<PRE CLASS="command">
+Subject [CUPS]
+Subject URGENT EMAIL NOTIFICATION
+</PRE>
+
+<H3>Description</H3>
+
+<P>The <CODE>Subject</CODE> directive specifies a prefix string to
+add to the subject of each email notification. The default is to
+not add a prefix string.</P>
+
+
+</BODY>
+</HTML>
/*
- * "$Id: rastertolabel.c 5665 2006-06-16 00:59:10Z mike $"
+ * "$Id: rastertolabel.c 5703 2006-06-29 18:12:04Z mike $"
*
* Label printer filter for the Common UNIX Printing System (CUPS).
*
printf("! 0 %u %u %u %u\r\n", header->HWResolution[0],
header->HWResolution[1], header->cupsHeight,
header->NumCopies);
+ printf("PAGE-WIDTH %d\r\n", header->cupsWidth);
+ printf("PAGE-HEIGHT %d\r\n", header->cupsWidth);
break;
}
* Print the label...
*/
- puts("FORM\r");
+ if ((choice = ppdFindMarkedChoice(ppd, "zeMediaTracking")) == NULL ||
+ strcmp(choice->choice, "Continuous"))
+ puts("FORM\r");
+
puts("PRINT\r");
break;
}
/*
- * End of "$Id: rastertolabel.c 5665 2006-06-16 00:59:10Z mike $".
+ * End of "$Id: rastertolabel.c 5703 2006-06-29 18:12:04Z mike $".
*/
--- /dev/null
+#
+# "$Id$"
+#
+# Message catalog template for the Common UNIX Printing System (CUPS).
+#
+# Copyright 2005-2006 by Easy Software Products.
+#
+# These coded instructions, statements, and computer programs are the
+# property of Easy Software Products and are protected by Federal
+# copyright law. Distribution and use rights are outlined in the file
+# "LICENSE.txt" which should have been included with this file. If this
+# file is missing or damaged please contact Easy Software Products
+# at:
+#
+# Attn: CUPS Licensing Information
+# Easy Software Products
+# 44141 Airport View Drive, Suite 204
+# Hollywood, Maryland 20636 USA
+#
+# Voice: (301) 373-9600
+# EMail: cups-info@cups.org
+# WWW: http://www.cups.org
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: CUPS 1.2\n"
+"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
+"POT-Creation-Date: 2006-04-14 14:35-0400\n"
+"PO-Revision-Date: 2006-07-17 19:55+0200\n"
+"Last-Translator: Bernd Krumböck <b.krumboeck@rewe-group.at>\n"
+"Language-Team: Deutsch\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Options Installed"
+msgstr "Installierte Optionen"
+
+msgid "Class"
+msgstr "Klasse"
+
+msgid "Printer"
+msgstr "Drucker"
+
+msgid "Extra"
+msgstr "Extra"
+
+msgid "General"
+msgstr "Allgemein"
+
+msgid "Media Size"
+msgstr "Mediengröße"
+
+msgid "Media Type"
+msgstr "Medientyp"
+
+msgid "Media Source"
+msgstr "Medienquelle"
+
+msgid "Output Mode"
+msgstr "Ausgabemodus"
+
+msgid "Resolution"
+msgstr "Auflösung"
+
+msgid "Variable"
+msgstr "Variable"
+
+msgid "Yes"
+msgstr "Ja"
+
+msgid "No"
+msgstr "Nein"
+
+msgid "Auto"
+msgstr "Automatisch"
+
+msgid "Enter your username and password or the root username and password to access this page."
+msgstr "Für Zugang Benutzername und Passwort (oder Benutzername und Password für root) eingeben."
+
+msgid "You must use a https: URL to access this page."
+msgstr "Eine https:-URL ist für den Zugriff erforderlich."
+
+#, c-format
+msgid "Bad request version number %d.%d!"
+msgstr "Ungültige Versionsnummer %d.%d für Abfrage!"
+
+msgid "No attributes in request!"
+msgstr "Abfrage enthält keine Eigenschaften!"
+
+#, c-format
+msgid "Attribute groups are out of order (%x < %x)!"
+msgstr "Eigenschaftsgruppen haben falsche Reihenfolge (%x<%x)!"
+
+msgid "Missing required attributes!"
+msgstr "Benötigte Eigenschaften fehlen!"
+
+#, c-format
+msgid "%s not supported!"
+msgstr "%s nicht unterstützt!"
+
+msgid "The printer or class was not found."
+msgstr "Drucker oder Klasse nicht gefunden."
+
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+msgstr "Die printer-uri muss in der Form \"ipp://HOSTNAME/classes/KLASSENNAME\" sein."
+
+#, c-format
+msgid "The printer-uri \"%s\" contains invalid characters."
+msgstr "Die printer-uri \"%s\" enthält ungültige Zeichen."
+
+#, c-format
+msgid "A printer named \"%s\" already exists!"
+msgstr "Ein Drucker mit dem Namen \"%s\" existiert bereits!"
+
+#, c-format
+msgid "Attempt to set %s printer-state to bad value %d!"
+msgstr "Versuch den %s printer-state auf ungültigen Wert %d zu setzen!"
+
+#, c-format
+msgid "add_class: Unknown printer-op-policy \"%s\"."
+msgstr "add_class: Unbekannte printer-op-policy \"%s\"."
+
+#, c-format
+msgid "add_class: Unknown printer-error-policy \"%s\"."
+msgstr "add_class: Unbekannte printer-error-policy \"%s\"."
+
+msgid "Unable to allocate memory for file types!"
+msgstr "Speicherreservierung für Dateitypen fehlgeschlagen!"
+
+#, c-format
+msgid "Character set \"%s\" not supported!"
+msgstr "Zeichensatz \"%s\" nicht unterstützt!"
+
+#, c-format
+msgid "Language \"%s\" not supported!"
+msgstr "Sprache \"%s\" nicht unterstützt!"
+
+#, c-format
+msgid "The notify-user-data value is too large (%d > 63 octets)!"
+msgstr "Der Wert von notify-user-data ist zu groß (%d > 63 Oktette)!"
+
+msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
+msgstr "notify-lease-duration kann nicht bei Auftragssubskriptionen verwendet werden."
+
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+msgstr "Die printer-uri muss in der Form \"ipp://HOSTNAME/printers/DRUCKERNAME\" sein."
+
+#, c-format
+msgid "A class named \"%s\" already exists!"
+msgstr "Eine Klasse namens \"%s\" existiert bereits!"
+
+#, c-format
+msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
+msgstr "Ausgabe auf Dateien gesperrt! Gegebenenfalls FileDevice-Einstellung in \"%s/cupsd.conf\" ändern."
+
+#, c-format
+msgid "Bad device-uri \"%s\"!"
+msgstr "Falsche device-uri \"%s\"!"
+
+#, c-format
+msgid "Bad port-monitor \"%s\"!"
+msgstr "Falscher port-monitor \"%s\"!"
+
+#, c-format
+msgid "Bad printer-state value %d!"
+msgstr "Falscher printer-state Wert %d!"
+
+#, c-format
+msgid "Unknown printer-op-policy \"%s\"."
+msgstr "Unbekannte printer-op-policy \"%s\"."
+
+#, c-format
+msgid "Unknown printer-error-policy \"%s\"."
+msgstr "Unbekannte printer-error-policy \"%s\"."
+
+#, c-format
+msgid "Unable to copy interface script - %s!"
+msgstr "Interface Skript konnte nicht kopiert werden - %s!"
+
+#, c-format
+msgid "Unable to copy PPD file - %s!"
+msgstr "PPD Datei konnte nicht kopiert werden - %s!"
+
+msgid "Unable to copy PPD file!"
+msgstr "Kann PPD Datei nicht kopieren!"
+
+msgid "Got a printer-uri attribute but no job-id!"
+msgstr "Eigenschaft der printer-uri ohne job-id erhalten!"
+
+#, c-format
+msgid "Bad job-uri attribute \"%s\"!"
+msgstr "Falsche job-uri Eigenschaft \"%s\"!"
+
+#, c-format
+msgid "Job #%d doesn't exist!"
+msgstr "Auftrag #%d existiert nicht!"
+
+#, c-format
+msgid "Job #%d is not held for authentication!"
+msgstr "Auftrag %d nicht für Authentifizierung angehalten!"
+
+#, c-format
+msgid "You are not authorized to authenticate job #%d owned by \"%s\"!"
+msgstr "Nicht berechtigt den Auftrag #%d von \"%s\" zu authentifizieren!"
+
+msgid "The printer-uri attribute is required!"
+msgstr "Die Eigenschaft printer-uri wird benötigt!"
+
+msgid "Missing requesting-user-name attribute!"
+msgstr "Vermisse die Eigenschaft requesting-user-name!"
+
+#, c-format
+msgid "The printer-uri \"%s\" is not valid."
+msgstr "Die printer-uri \"%s\" ist nicht gültig."
+
+#, c-format
+msgid "No active jobs on %s!"
+msgstr "Keine aktiven Aufträge auf %s!"
+
+#, c-format
+msgid "You are not authorized to delete job #%d owned by \"%s\"!"
+msgstr "Sie sind nicht berechtigt den Auftrag #%d, von \"%s\" zu löschen!"
+
+#, c-format
+msgid "Job #%d is already %s - can't cancel."
+msgstr "Auftrag #%d ist bereits %s - Abbruch unmöglich."
+
+msgid "The printer or class is not shared!"
+msgstr "Drucker oder Klasse ist nicht verteilt!"
+
+#, c-format
+msgid "Destination \"%s\" is not accepting jobs."
+msgstr "Ziel \"%s\" akzeptiert keine Aufträge."
+
+#, c-format
+msgid "Bad copies value %d."
+msgstr "Falscher Wert für Kopien: %d."
+
+#, c-format
+msgid "Bad page-ranges values %d-%d."
+msgstr "Falscher page-ranges Wert %d-%d."
+
+msgid "Too many active jobs."
+msgstr "Zu viele aktive Aufträge."
+
+msgid "Quota limit reached."
+msgstr "Kontigentsgrenze erreicht."
+
+#, c-format
+msgid "Unable to add job for destination \"%s\"!"
+msgstr "Kann Auftrag nicht zu Ziel \"%s\" hinzufügen!"
+
+msgid "No subscription attributes in request!"
+msgstr "Keine Subskriptionseigenschaften in der Abfrage!"
+
+msgid "notify-events not specified!"
+msgstr "notify-events nicht festgelegt!"
+
+#, c-format
+msgid "Job %d not found!"
+msgstr "Auftrag %d nicht gefunden!"
+
+msgid "No default printer"
+msgstr "Kein Standarddrucker"
+
+msgid "cups-deviced failed to execute."
+msgstr "cups-deviced konnte nicht ausgeführt werden."
+
+msgid "cups-driverd failed to execute."
+msgstr "cups-driverd konnte nicht ausgeführt werden."
+
+msgid "No destinations added."
+msgstr "Keine Ziele hinzugefügt."
+
+#, c-format
+msgid "notify-subscription-id %d no good!"
+msgstr "notify-subscription-id %d unbrauchbar!"
+
+#, c-format
+msgid "Job #%s does not exist!"
+msgstr "Auftrag #%s existiert nicht!"
+
+#, c-format
+msgid "Job #%d does not exist!"
+msgstr "Auftrag #%d existiert nicht!"
+
+msgid "No subscriptions found."
+msgstr "Keine Subskription gefunden."
+
+#, c-format
+msgid "Not authorized to hold job #%d owned by \"%s\"!"
+msgstr "Nicht berechtigt den Auftrag #%d von \"%s\" aufzuhalten!"
+
+#, c-format
+msgid "Job #%d is finished and cannot be altered!"
+msgstr "Auftrag #%d ist bereits fertig und nicht änderbar!"
+
+#, c-format
+msgid "You are not authorized to move job #%d owned by \"%s\"!"
+msgstr "Nicht berechtigt den Auftrag #%d von \"%s\" zu verschieben!"
+
+msgid "job-printer-uri attribute missing!"
+msgstr "Eigenschaft job-printer-uri fehlt."
+
+#, c-format
+msgid "Unsupported compression \"%s\"!"
+msgstr "Nicht unterstützte Kompression \"%s\"!"
+
+msgid "No file!?!"
+msgstr "Keine Datei!?!"
+
+#, c-format
+msgid "Could not scan type \"%s\"!"
+msgstr "Konnte Typ nicht scannen \"%s\"!"
+
+#, c-format
+msgid "Unsupported format '%s/%s'!"
+msgstr "Nicht unterstütztes Format '%s/%s'!"
+
+msgid "Printer not shared!"
+msgstr "Drucker nicht verteilt!"
+
+#, c-format
+msgid "Too many jobs - %d jobs, max jobs is %d."
+msgstr "Zu viele Aufträge - %d; das Maximum ist %d."
+
+#, c-format
+msgid "Job #%d is not held!"
+msgstr "Auftrag #%d wurde nicht aufgehalten!"
+
+#, c-format
+msgid "You are not authorized to release job id %d owned by \"%s\"!"
+msgstr "Nicht berechtigt den Auftrag mit der ID %d von \"%s\" freizugeben!"
+
+#, c-format
+msgid "Job #%d is not complete!"
+msgstr "Auftrag #%d ist nicht komplett!"
+
+#, c-format
+msgid "Job #%d cannot be restarted - no files!"
+msgstr "Auftrag #%d kann nicht neu gestartet werden - keine Dateien!"
+
+#, c-format
+msgid "You are not authorized to restart job id %d owned by \"%s\"!"
+msgstr "Sie sind nicht berechtigt den Auftrag mit der ID %d von \"%s\" neu zu starten!"
+
+#, c-format
+msgid "You are not authorized to send document for job #%d owned by \"%s\"!"
+msgstr "Sie sind nicht berechtigt ein Dokument für den Auftrag #%d von \"%s\" zu senden!"
+
+#, c-format
+msgid "Bad document-format \"%s\"!"
+msgstr "document-format \"%s\" ist falsch!"
+
+#, c-format
+msgid "You are not authorized to alter job id %d owned by \"%s\"!"
+msgstr "Sie sind nicht berechtigt den Aufrag mit der ID %d von \"%s\" abzuändern."
+
+#, c-format
+msgid "%s cannot be changed."
+msgstr "%s kann nicht geändert werden."
+
+msgid "Bad job-priority value!"
+msgstr "Falscher job-priority Wert!"
+
+msgid "Job is completed and cannot be changed."
+msgstr "Auftrag abgeschlossen, kann nicht geändert werden."
+
+msgid "Bad job-state value!"
+msgstr "Falscher job-state Wert!"
+
+msgid "Job state cannot be changed."
+msgstr "Auftragsstatus kann nicht geändert werden."
+
+#, c-format
+msgid "Unsupported compression attribute %s!"
+msgstr "Nicht unterstützte Kompressionseigenschaft %s!"
+
+#, c-format
+msgid "Unsupported format \"%s\"!"
+msgstr "Nicht unterstütztes Format \"%s\"!"
+
+#, c-format
+msgid "%s is not implemented by the CUPS version of lpc.\n"
+msgstr "%s ist in der CUPS Version von lpc nicht implementiert.\n"
+
+msgid ""
+"Commands may be abbreviated. Commands are:\n"
+"\n"
+"exit help quit status ?\n"
+msgstr ""
+"Befehle sind abkürzbar. Befehle sind:\n"
+"\n"
+"exit help quit status ?\n"
+
+msgid "help\t\tget help on commands\n"
+msgstr "help\t\tum Hilfe für die Befehle zu bekommen\n"
+
+msgid "status\t\tshow status of daemon and queue\n"
+msgstr "status\t\tzeigt den Status von Diensten und Warteschlangen\n"
+
+msgid "?Invalid help command unknown\n"
+msgstr "?Ungültig Hilfebefehl nicht bekannt\n"
+
+#, c-format
+msgid "\tprinter is on device '%s' speed -1\n"
+msgstr "\tDrucker verbunden über '%s' Geschwindigkeit -1\n"
+
+msgid "\tqueuing is enabled\n"
+msgstr "\tWarteschlange ist freigegeben\n"
+
+msgid "\tqueuing is disabled\n"
+msgstr "\tWarteschlange ist gesperrt\n"
+
+msgid "\tprinting is enabled\n"
+msgstr "\tDrucken ist freigegeben\n"
+
+msgid "\tprinting is disabled\n"
+msgstr "\tDrucken ist gesperrt\n"
+
+msgid "\tno entries\n"
+msgstr "\tKeine Einträge\n"
+
+#, c-format
+msgid "\t%d entries\n"
+msgstr "\t%d Einträge\n"
+
+msgid "\tdaemon present\n"
+msgstr "\tDienst läuft\n"
+
+msgid "lpq: Unable to contact server!\n"
+msgstr "lpq: Kann Server nicht kontaktieren!\n"
+
+#, c-format
+msgid "%s: Sorry, no encryption support compiled in!\n"
+msgstr "%s: Bedaure, Verschlüsselungen nicht mitkompiliert!\n"
+
+#, c-format
+msgid "lpq: Unknown destination \"%s/%s\"!\n"
+msgstr "lpq: Unbekanntes Ziel \"%s/%s\"!\n"
+
+#, c-format
+msgid "lpq: Unknown destination \"%s\"!\n"
+msgstr "lpq: Unbekanntes Ziel \"%s\"!\n"
+
+#, c-format
+msgid "lp: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lp: Fehler - Umgebungsvariable %s enhält nicht vorhandenes Ziel \"%s\"!\n"
+
+msgid "lpq: error - no default destination available.\n"
+msgstr "lpq: Fehler - kein Standardziel verfügbar.\n"
+
+#, c-format
+msgid "lpq: get-jobs failed: %s\n"
+msgstr "lpq: get-jobs fehlgeschlagen: %s\n"
+
+msgid "Rank Owner Pri Job Files Total Size\n"
+msgstr "Rang Besitzer Pri Auftrag Dateien Gesamtgröße\n"
+
+msgid "Rank Owner Job File(s) Total Size\n"
+msgstr "Rang Besitz Auftrag Datei(en) Gesamtgröße\n"
+
+#, c-format
+msgid "%s: %-33.33s [job %d localhost]\n"
+msgstr "%s: %-33.33s [Auftrag %d localhost]\n"
+
+#, c-format
+msgid " %-39.39s %.0f bytes\n"
+msgstr " %-39.39s %.0f Byte\n"
+
+#, c-format
+msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
+msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f Byte\n"
+
+#, c-format
+msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
+msgstr "%-7s %-7.7s %-7d %-31.31s %.0f Byte\n"
+
+msgid "no entries\n"
+msgstr "keine Einträge\n"
+
+#, c-format
+msgid "lpq: get-printer-attributes failed: %s\n"
+msgstr "lpq: get-printer-attributes fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s is ready\n"
+msgstr "%s ist bereit\n"
+
+#, c-format
+msgid "%s is ready and printing\n"
+msgstr "%s ist bereit und druckt\n"
+
+#, c-format
+msgid "%s is not ready\n"
+msgstr "%s ist nicht bereit\n"
+
+msgid "Usage: lpq [-P dest] [-l] [+interval]\n"
+msgstr "Benutzung: lpq [-P Ziel] [-l] [+Intervall]\n"
+
+#, c-format
+msgid "lpr: error - expected value after -%c option!\n"
+msgstr "lpr: Fehler - Es wird ein Wert hinter dem Parameter -%c erwartet!\n"
+
+#, c-format
+msgid "lpr: warning - '%c' format modifier not supported - output may not be correct!\n"
+msgstr "lpr: Warnung - Formatangabe '%c' nicht unterstützt - Ausgabe evtl. fehlerhaft!\n"
+
+msgid "lpr: error - expected option=value after -o option!\n"
+msgstr "lpr: Fehler - Erwarte Parameter=Wert hinter dem Parameter -o!\n"
+
+msgid "lpr: warning - email notification is not currently supported!\n"
+msgstr "lpr: Warnung - Email Benachrichtigung wird zurzeit nicht unterstützt!\n"
+
+msgid "lpr: error - expected destination after -P option!\n"
+msgstr "lpr: Fehler - Erwarte Ziel hinter dem Parameter -P!\n"
+
+msgid "lpr: error - expected copy count after -# option!\n"
+msgstr "lpr: Fehler - Erwarte Kopienanzahl hinter dem Parameter -#!\n"
+
+#, c-format
+msgid "lpr: error - expected name after -%c option!\n"
+msgstr "lpr: Fehler - Erwarte Name hinter dem Parameter -%c!\n"
+
+msgid "lpr: error - expected username after -U option!\n"
+msgstr "lpr: Fehler - Erwarte Benutzername hinter dem Parameter -U!\n"
+
+#, c-format
+msgid "lpr: error - unknown option '%c'!\n"
+msgstr "lpr: Fehler - Unbekannter Parameter '%c'!\n"
+
+#, c-format
+msgid "lpr: error - unable to access \"%s\" - %s\n"
+msgstr "lpr: Fehler - Zugriff nicht möglich auf \"%s\" - %s\n"
+
+#, c-format
+msgid "lpr: error - too many files - \"%s\"\n"
+msgstr "lpr: Fehler - Zu viele Dateien \"%s\"\n"
+
+#, c-format
+msgid "lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lpr: Fehler - Die Umgebungsvariable %s beinhaltet das nicht vorhandene Ziel \"%s\"!\n"
+
+msgid "lpr: error - no default destination available.\n"
+msgstr "lpr: Fehler - Kein Standardziel verfügbar.\n"
+
+msgid "lpr: error - scheduler not responding!\n"
+msgstr "lpr: Fehler - Scheduler antwortet nicht!\n"
+
+#, c-format
+msgid "lpr: error - unable to create temporary file \"%s\" - %s\n"
+msgstr "lpr: Fehler - Kann temporäre Datei \"%s\" nicht erstellen - %s\n"
+
+#, c-format
+msgid "lpr: error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "lpr: Fehler - Kann nicht in die temporäre Datei \"%s\" schreiben - %s\n"
+
+msgid "lpr: error - stdin is empty, so no job has been sent.\n"
+msgstr "lpr: Fehler - stdin ist leer, kein Auftrag gesendet.\n"
+
+#, c-format
+msgid "lpr: error - unable to print file: %s\n"
+msgstr "lpr: Fehler - Kann Datei nicht drucken: %s\n"
+
+msgid "lprm: Unable to contact server!\n"
+msgstr "lprm: Server nicht erreichbar!\n"
+
+#, c-format
+msgid "lprm: Unknown destination \"%s\"!\n"
+msgstr "lprm: Unbekanntes Ziel \"%s\"\n"
+
+#, c-format
+msgid "lprm: Unknown option '%c'!\n"
+msgstr "lprm: Unbekannter Parameter '%c'!\n"
+
+msgid "lprm: Job or printer not found!\n"
+msgstr "lprm: Auftrag oder Drucker nicht gefunden!\n"
+
+msgid "lprm: Not authorized to lprm job(s)!\n"
+msgstr "lprm: Keine Berechtigung um Aufträge zu löschen!\n"
+
+#, c-format
+msgid "lprm: You don't own job ID %d!\n"
+msgstr "lprm: Ihnen gehört die Auftrags ID %d nicht!\n"
+
+msgid "lprm: Unable to lprm job(s)!\n"
+msgstr "lprm: Kann keine Aufträge löschen!\n"
+
+msgid "lprm: Unable to cancel job(s)!\n"
+msgstr "lprm: Kann keine Aufträge abbrechen!\n"
+
+#, c-format
+msgid "%s: Don't know what to do!\n"
+msgstr "%s: Keine Ahnung was zu tun ist!\n"
+
+#, c-format
+msgid "%s: Expected server name after -h!\n"
+msgstr "%s: Servername wird hinter -h erwartet!\n"
+
+#, c-format
+msgid "%s: Expected reason text after -r!\n"
+msgstr "%s: Begründungstext wird hinter -r erwartet!\n"
+
+#, c-format
+msgid "%s: Unknown option '%c'!\n"
+msgstr "%s: Unbekannter Parameter '%c'!\n"
+
+#, c-format
+msgid "%s: Unable to connect to server: %s\n"
+msgstr "%s: Server nicht erreichbar: %s!\n"
+
+#, c-format
+msgid "%s: Operation failed: %s\n"
+msgstr "%s: Vorgang fehlgeschlagen: %s\n"
+
+msgid "cancel: Error - expected hostname after '-h' option!\n"
+msgstr "cancel: Fehler - Erwarte Hostname hinter dem Parameter -h!\n"
+
+msgid "cancel: Error - expected username after '-u' option!\n"
+msgstr "cancel: Fehler - Erwarte Benutzername hinter dem Parameter -u!\n"
+
+#, c-format
+msgid "cancel: Unknown option '%c'!\n"
+msgstr "cancel: Unbekannter Parameter '%c'!\n"
+
+#, c-format
+msgid "cancel: Unknown destination \"%s\"!\n"
+msgstr "cancel: Unbekanntes Ziel \"%s\"!\n"
+
+msgid "cancel: Unable to contact server!\n"
+msgstr "cancel: Server nicht erreichbar!\n"
+
+#, c-format
+msgid "cancel: %s failed: %s\n"
+msgstr "cancel: %s fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "cupsaddsmb: Missing value on line %d!\n"
+msgstr "cupsaddsmb: Vermisse Wert in Zeile %d!\n"
+
+#, c-format
+msgid "cupsaddsmb: Missing double quote on line %d!\n"
+msgstr "cupsaddsmb: Vermisse doppelte Anführungszeichen in Zeile %d!\n"
+
+#, c-format
+msgid "cupsaddsmb: Bad option + choice on line %d!\n"
+msgstr "cupsaddsmb: Falscher Parameter + Auswahl in Zeile %d!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to connect to server \"%s\" for %s - %s\n"
+msgstr "cupsaddsmb: Server \"%s\" nicht erreichbar für %s - %s\n"
+
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - skipping!\n"
+msgstr "cupsaddsmb: PPD Datei für Drucker \"%s\" fehlt - überspringe!\n"
+
+#, c-format
+msgid "cupsaddsmb: get-printer-attributes failed for \"%s\": %s\n"
+msgstr "cupsaddsmb: get-printer-attributes fehlgeschlagen für \"%s\": %s\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to convert PPD file for %s - %s\n"
+msgstr "cupsaddsmb: Kann PPD Datei nicht konvertieren für %s - %s\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy Windows 2000 printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Kann Windows 2000 Druckertreiberdateien (%d) nicht kopieren!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy CUPS printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Kann CUPS Druckertreiberdateien (%d) nicht kopieren!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to install Windows 2000 printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Kann Windows 2000 Druckertreiberdateien (%d) nicht installieren!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy Windows 9x printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Kann Windows 9x Druckertreiberdateien (%d) nicht kopieren!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to install Windows 9x printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Kann Windows 9x Druckertreiberdateien (%d) nicht installieren!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to set Windows printer driver (%d)!\n"
+msgstr "cupsaddsmb: Kann Windows Druckertreiber (%d) nicht festlegen!\n"
+
+msgid ""
+"Usage: cupsaddsmb [options] printer1 ... printerN\n"
+" cupsaddsmb [options] -a\n"
+"\n"
+"Options:\n"
+" -H samba-server Use the named SAMBA server\n"
+" -U samba-user Authenticate using the named SAMBA user\n"
+" -a Export all printers\n"
+" -h cups-server Use the named CUPS server\n"
+" -v Be verbose (show commands)\n"
+msgstr ""
+"Benutzung: cupsaddsmb [Parameter] Drucker1 ... DruckerN\n"
+" cupsaddsmb [Parameter] -a\n"
+"\n"
+"Options:\n"
+" -H Samba-Server Benutze den genannten Samba Server\n"
+" -U Samba-Benutzer Authentifiziere mit dem genannten Samba Benutzer\n"
+" -a Alle Drucker exportieren\n"
+" -h CUPS-Server Benutze den genannten CUPS Server\n"
+" -v Zusätzliche Ausgaben einschalten (zeige Kommandos)\n"
+
+msgid "cupstestppd: The -q option is incompatible with the -v option.\n"
+msgstr "cupstestppd: Der Parameter -q ist nicht kompatibel mit dem Parameter -v.\n"
+
+msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
+msgstr "cupstestppd: Der Parameter -v ist nicht kompatibel mit dem Parameter -d.\n"
+
+#, c-format
+msgid ""
+" FAIL\n"
+" **FAIL** Unable to open PPD file - %s\n"
+msgstr ""
+" FEHLGESCHLAGEN\n"
+" **FEHLGESCHLAGEN** Kann PPD Datei nicht öffnen - %s\n"
+
+#, c-format
+msgid ""
+" FAIL\n"
+" **FAIL** Unable to open PPD file - %s on line %d.\n"
+msgstr ""
+" FEHLGESCHLAGEN\n"
+" **FEHLGESCHLAGEN** Kann PPD Datei nicht öffnen - %s in Zeile %d.\n"
+
+msgid " REF: Page 42, section 5.2.\n"
+msgstr " REF: Seite 42, Kapitel 5.2.\n"
+
+msgid " REF: Page 20, section 3.4.\n"
+msgstr " REF: Seite 20, Kapitel 3.4.\n"
+
+msgid " REF: Pages 45-46, section 5.2.\n"
+msgstr " REF: Seite 45-46, Kapitel 5.2.\n"
+
+msgid " REF: Pages 42-45, section 5.2.\n"
+msgstr " REF: Seiten 42-45, Kapitel 5.2.\n"
+
+msgid " REF: Pages 48-49, section 5.2.\n"
+msgstr " REF: Seiten 48-49, Kapitel 5.2.\n"
+
+msgid " REF: Pages 52-54, section 5.2.\n"
+msgstr " REF: Seiten 52-54, Kapitel 5.2.\n"
+
+msgid " REF: Page 15, section 3.2.\n"
+msgstr " REF: Seite 15, Kapitel 3.2.\n"
+
+msgid " REF: Page 15, section 3.1.\n"
+msgstr " REF: Seite 15, Kapitel 3.1.\n"
+
+msgid " REF: Pages 16-17, section 3.2.\n"
+msgstr " REF: Seite 16-17, Kapitel 3.2.\n"
+
+msgid " REF: Page 19, section 3.3.\n"
+msgstr " REF: Seite 19, Kapitel 3.3.\n"
+
+msgid " REF: Page 27, section 3.5.\n"
+msgstr " REF: Seite 27, Kapitel 3.5.\n"
+
+msgid ""
+"\n"
+" DETAILED CONFORMANCE TEST RESULTS\n"
+msgstr ""
+"\n"
+" DETAILIERTE ERGEBNISSE DES KONFORMITÄTSTESTS\n"
+
+#, c-format
+msgid " WARN %s has no corresponding options!\n"
+msgstr " WARNUNG %s hat keine entsprechenden Parameter!\n"
+
+msgid " FAIL\n"
+msgstr " FEHLGESCHLAGEN\n"
+
+msgid ""
+" **FAIL** REQUIRED DefaultImageableArea\n"
+" REF: Page 102, section 5.15.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT DefaultImageableArea\n"
+" REF: Seite 102, Kapitel 5.15.\n"
+
+#, c-format
+msgid ""
+" **FAIL** BAD DefaultImageableArea %s!\n"
+" REF: Page 102, section 5.15.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCHE DefaultImageableArea %s!\n"
+" REF: Seite 102, Kapitel 5.15.\n"
+
+msgid " PASS DefaultImageableArea\n"
+msgstr " BESTANDEN DefaultImageableArea\n"
+
+msgid ""
+" **FAIL** REQUIRED DefaultPaperDimension\n"
+" REF: Page 103, section 5.15.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT DefaultPaperDimension\n"
+" REF: Seite 103, Kapitel 5.15.\n"
+
+#, c-format
+msgid ""
+" **FAIL** BAD DefaultPaperDimension %s!\n"
+" REF: Page 103, section 5.15.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCHE DefaultPaperDimension %s!\n"
+" REF: Seite 103, Kapitel 5.15.\n"
+
+msgid " PASS DefaultPaperDimension\n"
+msgstr " BESTANDEN DefaultPaperDimension\n"
+
+#, c-format
+msgid ""
+" **FAIL** BAD Default%s %s\n"
+" REF: Page 40, section 4.5.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCHE Default%s %s\n"
+" REF: Seite 40, Kapitel 4.5.\n"
+
+#, c-format
+msgid " PASS Default%s\n"
+msgstr " BESTANDEN Default%s\n"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED Default%s\n"
+" REF: Page 40, section 4.5.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT Default%s\n"
+" REF: Seite 40, Kapitel 4.5.\n"
+
+msgid " PASS FileVersion\n"
+msgstr " BESTANDEN FileVersion\n"
+
+msgid ""
+" **FAIL** REQUIRED FileVersion\n"
+" REF: Page 56, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT FileVersion\n"
+" REF: Seite 56, Kapitel 5.3.\n"
+
+msgid " PASS FormatVersion\n"
+msgstr " BESTANDEN FormatVersion\n"
+
+msgid ""
+" **FAIL** REQUIRED FormatVersion\n"
+" REF: Page 56, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT FormatVersion\n"
+" REF: Seite 56, Kapitel 5.3.\n"
+
+msgid " PASS LanguageEncoding\n"
+msgstr " BESTANDEN LanguageEncoding\n"
+
+msgid ""
+" **FAIL** REQUIRED LanguageEncoding\n"
+" REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT LanguageEncoding\n"
+" REF: Seiten 56-57, Kapitel 5.3.\n"
+
+msgid " PASS LanguageVersion\n"
+msgstr " BESTANDEN LanguageVersion\n"
+
+msgid ""
+" **FAIL** REQUIRED LanguageVersion\n"
+" REF: Pages 57-58, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT LanguageVersion\n"
+" REF: Seiten 57-58, Kapitel 5.3.\n"
+
+msgid ""
+" **FAIL** BAD Manufacturer (should be \"HP\")\n"
+" REF: Page 211, table D.1.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCHER Manufacturer (sollte \"HP\" sein)\n"
+" REF: Seite 211, Tabelle D.1.\n"
+
+msgid " PASS Manufacturer\n"
+msgstr " BESTANDEN Manufacturer\n"
+
+msgid ""
+" **FAIL** REQUIRED Manufacturer\n"
+" REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT Manufacturer\n"
+" REF: Seiten 58-59, Kapitel 5.3.\n"
+
+#, c-format
+msgid ""
+" **FAIL** BAD ModelName - \"%c\" not allowed in string.\n"
+" REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCH ModelName - \"%c\" nicht in Zeichenkette erlaubt.\n"
+" REF: Seiten 59-60, Kapitel 5.3.\n"
+
+msgid " PASS ModelName\n"
+msgstr " BESTANDEN Modellname\n"
+
+msgid ""
+" **FAIL** REQUIRED ModelName\n"
+" REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT ModelName\n"
+" REF: Seiten 59-60, Kapitel 5.3.\n"
+
+# NickName is a PPD term
+msgid " PASS NickName\n"
+msgstr " BESTANDEN NickName\n"
+
+msgid ""
+" **FAIL** REQUIRED NickName\n"
+" REF: Page 60, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT NickName\n"
+" REF: Seite 60, Kapitel 5.3.\n"
+
+msgid " PASS PageSize\n"
+msgstr " BESTANDEN PageSize\n"
+
+msgid ""
+" **FAIL** REQUIRED PageSize\n"
+" REF: Pages 99-100, section 5.14.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT PageSize\n"
+" REF: Seiten 99-100, Kapitel 5.14.\n"
+
+msgid " PASS PageRegion\n"
+msgstr " BESTANDEN PageRegion\n"
+
+msgid ""
+" **FAIL** REQUIRED PageRegion\n"
+" REF: Page 100, section 5.14.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT PageRegion\n"
+" REF: Seite 100, Kapitel 5.14.\n"
+
+msgid " PASS PCFileName\n"
+msgstr " BESTANDEN PCFileName\n"
+
+msgid ""
+" **FAIL** REQUIRED PCFileName\n"
+" REF: Pages 61-62, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT PCFileName\n"
+" REF: Seiten 61-62, Kapitel 5.3.\n"
+
+msgid ""
+" **FAIL** BAD Product - not \"(string)\".\n"
+" REF: Page 62, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCH Product - ist nicht \"(string)\".\n"
+" REF: Seite 62, Kapitel 5.3.\n"
+
+msgid " PASS Product\n"
+msgstr " BESTANDEN Product\n"
+
+msgid ""
+" **FAIL** REQUIRED Product\n"
+" REF: Page 62, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT Product\n"
+" REF: Seite 62, Kapitel 5.3.\n"
+
+msgid ""
+" **FAIL** BAD PSVersion - not \"(string) int\".\n"
+" REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCH PSVersion - ist nicht \"(string) int\".\n"
+" REF: Seiten 62-64, Kapitel 5.3.\n"
+
+msgid " PASS PSVersion\n"
+msgstr " BESTANDEN PSVersion\n"
+
+msgid ""
+" **FAIL** REQUIRED PSVersion\n"
+" REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT PSVersion\n"
+" REF: Seiten 62-64, Kapitel 5.3.\n"
+
+msgid ""
+" **FAIL** BAD ShortNickName - longer than 31 chars.\n"
+" REF: Pages 64-65, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCH ShortNickName - länger als 31 Zeichen.\n"
+" REF: Seiten 64-65, Kapitel 5.3.\n"
+
+msgid " PASS ShortNickName\n"
+msgstr " BESTANDEN ShortNickName\n"
+
+msgid ""
+" **FAIL** REQUIRED ShortNickName\n"
+" REF: Page 64-65, section 5.3.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT ShortNickName\n"
+" REF: Seiten 64-65, Kapitel 5.3.\n"
+
+msgid ""
+" **FAIL** BAD JobPatchFile attribute in file\n"
+" REF: Page 24, section 3.4.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** FALSCH JobPatchFile Eigenschaften in Datei\n"
+" REF: Seiten 24, Kapitel 3.4.\n"
+
+msgid ""
+" **FAIL** REQUIRED PageSize\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 99, section 5.14.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT PageSize\n"
+" REF: Seite 41, Kapitel 5.\n"
+" REF: Seite 99, Kapitel 5.14.\n"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED ImageableArea for PageSize %s\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 102, section 5.15.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT ImageableArea für PageSize %s\n"
+" REF: Seite 41, Kapitel 5.\n"
+" REF: Seite 102, Kapitel 5.15.\n"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED PaperDimension for PageSize %s\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 103, section 5.15.\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT PaperDimension für PageSize %s\n"
+" REF: Seite 41, Kapitel 5.\n"
+" REF: Seite 103, Kapitel 5.15.\n"
+
+#, c-format
+msgid ""
+" **FAIL** Bad %s choice %s!\n"
+" REF: Page 84, section 5.9\n"
+msgstr ""
+" **FEHLGESCHLAGEN** Falsche %s Auswahl %s!\n"
+" REF: Seite 84, Kapitel 5.9\n"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED %s does not define choice None!\n"
+" REF: Page 122, section 5.17\n"
+msgstr ""
+" **FEHLGESCHLAGEN** BENÖTIGT %s definiert nicht die Auswahl \"None\"!\n"
+" REF: Seite 122, Kapitel 5.17\n"
+
+#, c-format
+msgid ""
+" **FAIL** Bad %s choice %s!\n"
+" REF: Page 122, section 5.17\n"
+msgstr ""
+" **FEHLGESCHLAGEN** Falsche %s Auswahl %s!\n"
+" REF: Seite 122, Kapitel 5.17\n"
+
+msgid " PASS\n"
+msgstr " BESTANDEN\n"
+
+#, c-format
+msgid ""
+" WARN Duplex option keyword %s should be named Duplex or JCLDuplex!\n"
+" REF: Page 122, section 5.17\n"
+msgstr ""
+" WARNUNG Schlüsselwort für Duplexparameter %s sollte Duplex oder JCLDuplex heißen!\n"
+" REF: Seite 122, Kapitel 5.17\n"
+
+msgid " WARN Default choices conflicting!\n"
+msgstr " WARNUNG Konflikte in der Standardauswahl!\n"
+
+#, c-format
+msgid ""
+" WARN Obsolete PPD version %.1f!\n"
+" REF: Page 42, section 5.2.\n"
+msgstr ""
+" WARNUNG Obsolete PPD Version %.1f!\n"
+" REF: Seite 42, Kapitel 5.2.\n"
+
+msgid ""
+" WARN LanguageEncoding required by PPD 4.3 spec.\n"
+" REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+" WARNUNG LanguageEncoding wird verlangt von PPD 4.3 Spez.\n"
+" REF: Seiten 56-57, Kapitel 5.3.\n"
+
+msgid ""
+" WARN Manufacturer required by PPD 4.3 spec.\n"
+" REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+" WARNUNG Manufacturer wird verlangt von PPD 4.3 Spez.\n"
+" REF: Seiten 58-59, Kapitel 5.3.\n"
+
+msgid ""
+" WARN PCFileName longer than 8.3 in violation of PPD spec.\n"
+" REF: Pages 61-62, section 5.3.\n"
+msgstr ""
+" WARNUNG PCFileName länger als 8.3 ist eine Verletzung der PPD Spez.\n"
+" REF: Seiten 61-62, Kapitel 5.3.\n"
+
+msgid ""
+" WARN ShortNickName required by PPD 4.3 spec.\n"
+" REF: Pages 64-65, section 5.3.\n"
+msgstr ""
+" WARNUNG ShortNickName wird verlangt von PPD 4.3 Spez.\n"
+" REF: Seiten 64-65, Kapitel 5.3.\n"
+
+msgid ""
+" WARN Protocols contains both PJL and BCP; expected TBCP.\n"
+" REF: Pages 78-79, section 5.7.\n"
+msgstr ""
+" WARNUNG Protokoll enthält PJL und BCP; TBCP wird erwartet.\n"
+" REF: Seiten 78-79, Kapitel 5.7.\n"
+
+msgid ""
+" WARN Protocols contains PJL but JCL attributes are not set.\n"
+" REF: Pages 78-79, section 5.7.\n"
+msgstr ""
+" WARNUNG Protokoll enthält PJL jedoch sind keine JCL Eigenschaften gesetzt.\n"
+" REF: Seiten 78-79, Kapitel 5.7.\n"
+
+#, c-format
+msgid ""
+" WARN %s shares a common prefix with %s\n"
+" REF: Page 15, section 3.2.\n"
+msgstr ""
+" WARNUNG %s teilt ein gemeinsames Präfix mit %s\n"
+" REF: Seite 15, Kapitel 3.2.\n"
+
+#, c-format
+msgid " %d ERROR%s FOUND\n"
+msgstr " %d FEHLER%s GEFUNDEN\n"
+
+msgid " NO ERRORS FOUND\n"
+msgstr " KEINE FEHLER GEFUNDEN\n"
+
+#, c-format
+msgid ""
+" WARN \"%s %s\" conflicts with \"%s %s\"\n"
+" (constraint=\"%s %s %s %s\")\n"
+msgstr ""
+" WARNUNG \"%s %s\" kolidiert mit \"%s %s\"\n"
+" (Beschränkung=\"%s %s %s %s\")\n"
+
+msgid ""
+"Usage: cupstestppd [-q] [-r] [-v[v]] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
+" program | cupstestppd [-q] [-r] [-v[v]] -\n"
+msgstr ""
+"Benutzung: cupstestppd [-q] [-r] [-v[v]] Dateiname1.ppd[.gz] [... DateinameN.ppd[.gz]]\n"
+" Programm | cupstestppd [-q] [-r] [-v[v]] -\n"
+
+msgid "lpstat: Need \"completed\" or \"not-completed\" after -W!\n"
+msgstr "lpstat: Braucht \"completed\" oder \"not-completed\" hinter -W!\n"
+
+msgid "lpstat: The -b option requires a destination argument.\n"
+msgstr "lpstat: Der Parameter -b benötigt ein Zielargument.\n"
+
+msgid "Error: need hostname after '-h' option!\n"
+msgstr "Fehler: Brauche Hostname hinter dem Parameter '-h'!\n"
+
+#, c-format
+msgid "lpstat: Unknown option '%c'!\n"
+msgstr "lpstat: Unbekannter Parameter '%c'!\n"
+
+#, c-format
+msgid "lpstat: Invalid destination name in list \"%s\"!\n"
+msgstr "lpstat: Ungültiger Zielname in der Liste \"%s\"!\n"
+
+#, c-format
+msgid "lpstat: Unknown destination \"%s\"!\n"
+msgstr "lpstat: Unbekanntes Ziel \"%s\"!\n"
+
+#, c-format
+msgid "lpstat: Unable to connect to server %s on port %d: %s\n"
+msgstr "lpstat: Kann Server %s auf Port %d nicht erreichen: %s\n"
+
+#, c-format
+msgid "lpstat: get-printers failed: %s\n"
+msgstr "lpstat: get-printers fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s accepting requests since Jan 01 00:00\n"
+msgstr "%s akzeptiert Anfragen seit Jan 01 00:00\n"
+
+#, c-format
+msgid ""
+"%s not accepting requests since Jan 01 00:00 -\n"
+"\t%s\n"
+msgstr ""
+"%s akzeptiert keine Anfragen seit Jan 01 00:00 -\n"
+"\t%s\n"
+
+#, c-format
+msgid "%s/%s accepting requests since Jan 01 00:00\n"
+msgstr "%s/%s akzeptiert Anfragen seit Jan 01 00:00\n"
+
+#, c-format
+msgid ""
+"%s/%s not accepting requests since Jan 01 00:00 -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s akzeptiert keine Anfragen seit Jan 01 00:00 -\n"
+"\t%s\n"
+
+#, c-format
+msgid "lpstat: get-classes failed: %s\n"
+msgstr "lpstat: get-classes fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "members of class %s:\n"
+msgstr "Mitglieder der Klasse %s:\n"
+
+#, c-format
+msgid "system default destination: %s/%s\n"
+msgstr "System Standardziel: %s/%s\n"
+
+#, c-format
+msgid "system default destination: %s\n"
+msgstr "System Standardziel: %s\n"
+
+#, c-format
+msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lpstat: Fehler - Umgebungsvariable %s enthält das nicht vorhandene Ziel \"%s\"!\n"
+
+msgid "no system default destination\n"
+msgstr "Kein systemweites Standardziel\n"
+
+#, c-format
+msgid "Output for printer %s is sent to remote printer %s on %s\n"
+msgstr "Ausgabe für Drucker %s wurde gesendet an entfernten Drucker %s auf %s\n"
+
+#, c-format
+msgid "Output for printer %s is sent to %s\n"
+msgstr "Ausgabe für Drucker %s wurde gesendet an %s\n"
+
+#, c-format
+msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
+msgstr "Ausgabe für Drucker %s/%s wurde gesendet an entfernten Drucker %s auf %s\n"
+
+#, c-format
+msgid "Output for printer %s/%s is sent to %s\n"
+msgstr "Ausgabe für Drucker %s/%s wurde gesendet an %s\n"
+
+#, c-format
+msgid "device for %s: %s\n"
+msgstr "Gerät für %s: %s\n"
+
+#, c-format
+msgid "device for %s/%s: %s\n"
+msgstr "Gerät für %s/%s: %s\n"
+
+#, c-format
+msgid "lpstat: get-jobs failed: %s\n"
+msgstr "lpstat: get-jobs fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "\tqueued for %s\n"
+msgstr "\teingereiht für %s\n"
+
+#, c-format
+msgid "printer %s is idle. enabled since %s\n"
+msgstr "Drucker %s ist frei. freigegeben seit %s\n"
+
+#, c-format
+msgid "printer %s now printing %s-%d. enabled since %s\n"
+msgstr "Drucker %s druckt gerade %s-%d. freigegeben seit %s\n"
+
+#, c-format
+msgid "printer %s disabled since %s -\n"
+msgstr "Drucker %s ist gesperrt seit %s -\n"
+
+msgid "\treason unknown\n"
+msgstr "\tGrund unbekannt\n"
+
+msgid ""
+"\tForm mounted:\n"
+"\tContent types: any\n"
+"\tPrinter types: unknown\n"
+msgstr ""
+"\tEingebundenes Formular:\n"
+"\tInhaltstypen: keine\n"
+"\tDruckertypen: unbekannt\n"
+
+#, c-format
+msgid "\tDescription: %s\n"
+msgstr "\tBeschreibung: %s\n"
+
+msgid "\tAlerts:"
+msgstr "\tAlarme:"
+
+#, c-format
+msgid "\tLocation: %s\n"
+msgstr "\tOrt: %s\n"
+
+msgid "\tConnection: remote\n"
+msgstr "\tVerbindung: entfernt\n"
+
+#, c-format
+msgid "\tInterface: %s.ppd\n"
+msgstr "\tInterface: %s.ppd\n"
+
+msgid "\tConnection: direct\n"
+msgstr "\tVerbindung: direkt\n"
+
+#, c-format
+msgid "\tInterface: %s/interfaces/%s\n"
+msgstr "\tInterface: %s/interfaces/%s\n"
+
+#, c-format
+msgid "\tInterface: %s/ppd/%s.ppd\n"
+msgstr "\tInterface: %s/ppd/%s.ppd\n"
+
+msgid "\tOn fault: no alert\n"
+msgstr "\tBei Fehlerfall: kein Alarm\n"
+
+msgid "\tAfter fault: continue\n"
+msgstr "\tNach Fehlerfall: fortsetzen\n"
+
+msgid "\tUsers allowed:\n"
+msgstr "\tErlaubte Benutzer:\n"
+
+msgid "\tUsers denied:\n"
+msgstr "\tNicht erlaubte Benutzer:\n"
+
+msgid "\t\t(all)\n"
+msgstr "\t\t(alle)\n"
+
+msgid "\tForms allowed:\n"
+msgstr "\tErlaubte Formulare:\n"
+
+msgid "\t\t(none)\n"
+msgstr "\t\t(keine)\n"
+
+msgid "\tBanner required\n"
+msgstr "\tBanner benötigt\n"
+
+msgid "\tCharset sets:\n"
+msgstr "\tZeichensatzeinstellungen:\n"
+
+msgid "\tDefault pitch:\n"
+msgstr "\tStandard Zeichenabstand:\n"
+
+msgid "\tDefault page size:\n"
+msgstr "\tStandard Seitengröße:\n"
+
+msgid "\tDefault port settings:\n"
+msgstr "\tStandard Porteinstellungen:\n"
+
+#, c-format
+msgid "printer %s/%s is idle. enabled since %s\n"
+msgstr "Drucker %s/%s ist frei. freigegeben seit %s\n"
+
+#, c-format
+msgid "printer %s/%s now printing %s-%d. enabled since %s\n"
+msgstr "Drucker %s/%s druckt gerade %s-%d. freigegeben seit %s\n"
+
+#, c-format
+msgid "printer %s/%s disabled since %s -\n"
+msgstr "Drucker %s/%s gesperrt seit %s -\n"
+
+msgid "scheduler is running\n"
+msgstr "Scheduler läuft\n"
+
+msgid "scheduler is not running\n"
+msgstr "Scheduler läuft nicht\n"
+
+#, c-format
+msgid "lpadmin: Unable to connect to server: %s\n"
+msgstr "lpadmin: Kann Server nicht erreichen: %s\n"
+
+msgid ""
+"lpadmin: Unable to add a printer to the class:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann Drucker nicht zur Klasse hinzufügen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid "lpadmin: Expected class name after '-c' option!\n"
+msgstr "lpadmin: Klassenname wird hinter dem Parameter '-c' erwartet!\n"
+
+msgid "lpadmin: Class name can only contain printable characters!\n"
+msgstr "lpadmin: Klassenname kann nur druckbare Zeichen enthalten!\n"
+
+msgid "lpadmin: Expected printer name after '-d' option!\n"
+msgstr "lpadmin: Druckername wird hinter dem Parameter '-d' erwartet!\n"
+
+msgid "lpadmin: Printer name can only contain printable characters!\n"
+msgstr "lpadmin: Druckername kann nur druckbare Zeichen enthalten!\n"
+
+msgid "lpadmin: Expected hostname after '-h' option!\n"
+msgstr "lpadmin: Hostname wird hinter dem Parameter '-h' erwartet!\n"
+
+msgid ""
+"lpadmin: Unable to set the interface script:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann Interface Skript nicht festlegen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid "lpadmin: Expected interface after '-i' option!\n"
+msgstr "lpadmin: Interface wird hinter dem Parameter '-i' erwartet!\n"
+
+msgid ""
+"lpadmin: Unable to set the interface script or PPD file:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann weder Interface Skript noch PPD Datei setzen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid "lpadmin: Expected model after '-m' option!\n"
+msgstr "lpadmin: Modell wird hinter dem Parameter '-m' erwartet!\n"
+
+msgid "lpadmin: Expected name=value after '-o' option!\n"
+msgstr "lpadmin: Name=Wert wird hinter dem Parameter '-o' erwartet!\n"
+
+msgid "lpadmin: Expected printer after '-p' option!\n"
+msgstr "lpadmin: Drucker wird hinter dem Parameter '-p' erwartet!\n"
+
+msgid ""
+"lpadmin: Unable to remove a printer from the class:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann Drucker nicht aus Klasse entfernen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid "lpadmin: Expected class after '-r' option!\n"
+msgstr "lpadmin: Klasse wird hinter dem Parameter '-r' erwartet!\n"
+
+msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
+msgstr "lpadmin: Benutzerliste für Erlaubt/Verweigert wird nach dem Parameter '-u' erwartet!\n"
+
+#, c-format
+msgid "lpadmin: Unknown allow/deny option \"%s\"!\n"
+msgstr "lpadmin: Unbekannter Erlaubt/Verweigert Parameter \"%s\"!\n"
+
+msgid ""
+"lpadmin: Unable to set the device URI:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann Geräte URI nicht setzen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid "lpadmin: Expected device URI after '-v' option!\n"
+msgstr "lpadmin: Erwarte Geräte URI hinter dem Parameter '-v'!\n"
+
+msgid "lpadmin: Expected printer or class after '-x' option!\n"
+msgstr "lpadmin: Drucker oder Klasse wird hinter dem Parameter '-x' erwartet!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer description:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann Druckerbeschreibung nicht setzen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid "lpadmin: Expected description after '-D' option!\n"
+msgstr "lpadmin: Beschreibung wird hinter dem Parameter '-D' erwartet!\n"
+
+msgid "lpadmin: Expected file type(s) after '-I' option!\n"
+msgstr "lpadmin: Dateityp(en) wird bzw. werden hinter dem Parameter '-I' erwartet!\n"
+
+msgid "lpadmin: Warning - content type list ignored!\n"
+msgstr "lpadmin: Warnung - Datentypliste ignoriert!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer location:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann Druckeraufstellort nicht setzen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid "lpadmin: Expected location after '-L' option!\n"
+msgstr "lpadmin: Ortsangabe wird hinter dem Parameter '-L' erwartet!\n"
+
+msgid ""
+"lpadmin: Unable to set the PPD file:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann PPD Datei nicht setzen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid "lpadmin: Expected PPD after '-P' option!\n"
+msgstr "lpadmin: PPD wird hinter dem Parameter '-P' erwartet!\n"
+
+#, c-format
+msgid "lpadmin: Unknown option '%c'!\n"
+msgstr "lpadmin: Unbekannter Parameter '%c'!\n"
+
+#, c-format
+msgid "lpadmin: Unknown argument '%s'!\n"
+msgstr "lpadmin: Unbekanntes Argument '%s'!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer options:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Kann Druckereinstellungen nicht setzen:\n"
+" Sie müssen zuerst einen Druckernamen angeben!\n"
+
+msgid ""
+"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]\n"
+"\n"
+msgstr ""
+"Benutzung:\n"
+"\n"
+" lpadmin [-h Server] -d Ziel\n"
+" lpadmin [-h Server] -x Ziel\n"
+" lpadmin [-h Server] -p Drucker [-c hinzuzufügende-Klasse] [-i Interface] [-m Modell]\n"
+" [-r zu-löschende-Klasse] [-v Gerät] [-D Beschreibung]\n"
+" [-P PPD-Datei] [-o Name=Wert]\n"
+" [-u allow:Benutzer,Benutzer] [-u deny:Benutzer,Benutzer]\n"
+"\n"
+
+#, c-format
+msgid "lpadmin: Unable to create temporary file: %s\n"
+msgstr "lpadmin: Kann temporäre Datei nicht erstellen: %s\n"
+
+#, c-format
+msgid "lpadmin: Unable to open file \"%s\": %s\n"
+msgstr "lpadmin: Kann temporäre Datei \"%s\" nicht öffnen: %s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set model) failed: %s\n"
+msgstr "lpadmin: add-printer (Setzen des Modells) fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set description) failed: %s\n"
+msgstr "lpadmin: Drucker hinzufügen (Setzen der Beschreibung) fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set location) failed: %s\n"
+msgstr "lpadmin: Drucker hinzufügen (Setzen des Ortes) fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "lpadmin: Unable to create temporary file - %s\n"
+msgstr "lpadmin: Kann temporäre Datei nicht erstellen - %s\n"
+
+#, c-format
+msgid "lpadmin: Unable to open PPD file \"%s\" - %s\n"
+msgstr "lpadmin: Kann PPD Datei \"%s\" nicht öffnen - %s\n"
+
+#, c-format
+msgid "lpadmin: %s failed: %s\n"
+msgstr "lpadmin: %s fehlgeschlagen: %s\n"
+
+msgid "lp: Expected destination after -d option!\n"
+msgstr "lp: Ziel wird hinter dem Parameter -d erwartet!\n"
+
+msgid "lp: Expected form after -f option!\n"
+msgstr "lp: Formular wird hinter dem Parameter -f erwartet!\n"
+
+msgid "lp: Expected hostname after -h option!\n"
+msgstr "lp: Hostname wird hinter dem Parameter -h erwartet!\n"
+
+msgid "lp: Expected job ID after -i option!\n"
+msgstr "lp: Auftrags ID wird hinter dem Parameter -i erwartet!\n"
+
+msgid "lp: Error - cannot print files and alter jobs simultaneously!\n"
+msgstr "lp: Fehler - Kann nicht gleichzeitig Dateien drucken und Aufträge abändern!\n"
+
+msgid "lp: Error - bad job ID!\n"
+msgstr "lp: Fehler - Falsche Auftrags ID!\n"
+
+msgid "lp: Expected copies after -n option!\n"
+msgstr "lp: Kopienanzahl wird hinter dem Parameter -n erwartet!\n"
+
+msgid "lp: Expected option string after -o option!\n"
+msgstr "lp: Parameterzeichenkette wird hinter dem Parameter -o erwartet!\n"
+
+#, c-format
+msgid "lp: Expected priority after -%c option!\n"
+msgstr "lp: Priorität wird hinter dem Parameter -%c erwartet!\n"
+
+msgid "lp: Priority must be between 1 and 100.\n"
+msgstr "lp: Priorität muss zwischen 1 und 100 sein.\n"
+
+msgid "lp: Expected title after -t option!\n"
+msgstr "lp: Titel wird hinter dem Parameter -t erwartet!\n"
+
+msgid "lp: Expected mode list after -y option!\n"
+msgstr "lp: Modusliste hinter dem Parameter -y erwartet!\n"
+
+msgid "lp: Warning - mode option ignored!\n"
+msgstr "lp: Warnung - Parameter für Modus ignoriert!\n"
+
+msgid "lp: Expected hold name after -H option!\n"
+msgstr "lp: Haltebezeichner wird hinter dem Parameter -H erwartet!\n"
+
+msgid "lp: Need job ID (-i) before \"-H restart\"!\n"
+msgstr "lp: Brauche Auftrags ID (-i) vor \"-H restart\"!\n"
+
+msgid "lp: Expected page list after -P option!\n"
+msgstr "lp: Seitenliste wird hinter dem Parameter -P erwartet!\n"
+
+msgid "lp: Expected character set after -S option!\n"
+msgstr "lp: Zeichensatz wird hinter dem Parameter -S erwartet!\n"
+
+msgid "lp: Warning - character set option ignored!\n"
+msgstr "lp: Warnung - Parameter für Zeichnsatz wird ignoriert!\n"
+
+msgid "lp: Expected content type after -T option!\n"
+msgstr "lp: Inhaltstyp hinter dem Parameter -T erwartet!\n"
+
+msgid "lp: Warning - content type option ignored!\n"
+msgstr "lp: Warnung - Parameter für Inhaltstyp ignoriert!\n"
+
+#, c-format
+msgid "lp: Unknown option '%c'!\n"
+msgstr "lp: Unbekannter Parameter '%c'!\n"
+
+msgid "lp: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "lp: Fehler - Kann nicht von stdin drucken wenn Dateien oder eine Auftrags ID übergeben wurde!\n"
+
+#, c-format
+msgid "lp: Unable to access \"%s\" - %s\n"
+msgstr "lp: Zugriff auf \"%s\" nicht möglich - %s\n"
+
+#, c-format
+msgid "lp: Too many files - \"%s\"\n"
+msgstr "lp: Zu viele Dateien - \"%s\"\n"
+
+msgid "lp: error - no default destination available.\n"
+msgstr "lp: Fehler - Kein Standardziel vorhanden.\n"
+
+msgid "lp: error - scheduler not responding!\n"
+msgstr "lp: Fehler - Scheduler antwortet nicht!\n"
+
+#, c-format
+msgid "lp: unable to create temporary file \"%s\" - %s\n"
+msgstr "lp: Kann temporäre Datei \"%s\" nicht erstellen - %s\n"
+
+#, c-format
+msgid "lp: error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "lp: Fehler - Kann nicht in temporäre Datei \"%s\" schreiben - %s\n"
+
+msgid "lp: stdin is empty, so no job has been sent.\n"
+msgstr "lp: stdin ist leer, somit wurde kein Auftrag gesendet.\n"
+
+#, c-format
+msgid "lp: unable to print file: %s\n"
+msgstr "lp: Kann Datei nicht drucken: %s\n"
+
+#, c-format
+msgid "request id is %s-%d (%d file(s))\n"
+msgstr "Auftrags ID ist %s-%d (%d Datei(en))\n"
+
+#, c-format
+msgid "lp: restart-job failed: %s\n"
+msgstr "lp: restart-job fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "lp: set-job-attributes failed: %s\n"
+msgstr "lp: set-job-attributes fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "lpinfo: Unable to connect to server: %s\n"
+msgstr "lpinfo: Kann Server nicht erreichen: %s\n"
+
+#, c-format
+msgid "lpinfo: Unknown option '%c'!\n"
+msgstr "lpinfo: Unbekannter Parameter '%c'!\n"
+
+#, c-format
+msgid "lpinfo: Unknown argument '%s'!\n"
+msgstr "lpinfo: Unbekanntes Argument '%s'!\n"
+
+#, c-format
+msgid "lpinfo: cups-get-devices failed: %s\n"
+msgstr "lpinfo: cups-get-devices fehlgeschlagen: %s\n"
+
+#, c-format
+msgid ""
+"Device: uri = %s\n"
+" class = %s\n"
+" info = %s\n"
+" make-and-model = %s\n"
+msgstr ""
+"Gerät: uri = %s\n"
+" class = %s\n"
+" info = %s\n"
+" make-and-model = %s\n"
+
+#, c-format
+msgid "lpinfo: cups-get-ppds failed: %s\n"
+msgstr "lpinfo: cups-get-ppds fehlgeschlagen: %s\n"
+
+#, c-format
+msgid ""
+"Model: name = %s\n"
+" natural_language = %s\n"
+" make-and-model = %s\n"
+msgstr ""
+"Modell: name = %s\n"
+" natural_language = %s\n"
+" make-and-model = %s\n"
+
+#, c-format
+msgid "lpmove: Unknown option '%c'!\n"
+msgstr "lpmove: Unbekannter Parameter '%c'!\n"
+
+#, c-format
+msgid "lpmove: Unknown argument '%s'!\n"
+msgstr "lpmove: Unbekanntes Argument '%s'!\n"
+
+msgid "Usage: lpmove job dest\n"
+msgstr "Benutzung: lpmove Auftrag Ziel\n"
+
+#, c-format
+msgid "lpmove: Unable to connect to server: %s\n"
+msgstr "lpmove: Kann Server nicht erreichen: %s\n"
+
+#, c-format
+msgid "lpmove: move-job failed: %s\n"
+msgstr "lpmove: move-job fehlgeschlagen: %s\n"
+
+msgid "lpoptions: Unknown printer or class!\n"
+msgstr "lpoptions: Unbekannter Drucker oder Klasse!\n"
+
+msgid "lpoptions: No printers!?!\n"
+msgstr "lpoptions: Keine Drucker!?!\n"
+
+#, c-format
+msgid "lpoptions: Unable to add printer or instance: %s\n"
+msgstr "lpoptions: Kann Drucker oder Instanz nicht hinzufügen: %s\n"
+
+#, c-format
+msgid "lpoptions: Destination %s has no PPD file!\n"
+msgstr "lpoptions: Ziel %s hat keine PPD Datei!\n"
+
+#, c-format
+msgid "lpoptions: Unable to open PPD file for %s!\n"
+msgstr "lpoptions: Kann PPD für %s nicht öffnen!\n"
+
+msgid ""
+"Usage: lpoptions [-h server] [-E] -d printer\n"
+" lpoptions [-h server] [-E] [-p printer] -l\n"
+" lpoptions [-h server] [-E] -p printer -o option[=value] ...\n"
+" lpoptions [-h server] [-E] -x printer\n"
+msgstr ""
+"Benutzung: lpoptions [-h Server] [-E] -d Drucker\n"
+" lpoptions [-h Server] [-E] [-p Drucker] -l\n"
+" lpoptions [-h Server] [-E] -p Drucker -o Parameter[=Wert] ...\n"
+" lpoptions [-h Server] [-E] -x Drucker\n"
+
+msgid "lppasswd: Only root can add or delete passwords!\n"
+msgstr "lppasswd: Nur root kann Passwörter hinzufügen oder löschen!\n"
+
+msgid "Enter old password:"
+msgstr "Altes Passwort eingeben:"
+
+#, c-format
+msgid "lppasswd: Unable to copy password string: %s\n"
+msgstr "lppasswd: Kann Passwort nicht kopieren: %s\n"
+
+msgid "Enter password:"
+msgstr "Passwort eingeben:"
+
+msgid "Enter password again:"
+msgstr "Passwort nochmal eingeben:"
+
+msgid "lppasswd: Sorry, passwords don't match!\n"
+msgstr "lppasswd: Bedaure, Passwörter stimmen nicht überein!\n"
+
+msgid ""
+"lppasswd: Sorry, password rejected.\n"
+"Your password must be at least 6 characters long, cannot contain\n"
+"your username, and must contain at least one letter and number.\n"
+msgstr ""
+"lppasswd: Bedaure, Passwort zurückgewiesen.\n"
+"Ihr Passwort muss zumindest 6 Zeichen lang sein, darf nicht den Benutzernamen\n"
+"enthalten, und muss mindestens einen Buchstaben und eine Zahl enthalten.\n"
+
+msgid "lppasswd: Password file busy!\n"
+msgstr "lppasswd: Passwortdatei in Verwendung!\n"
+
+#, c-format
+msgid "lppasswd: Unable to open password file: %s\n"
+msgstr "lppasswd: Kann Passwortdatei nicht öffnen: %s\n"
+
+#, c-format
+msgid "lppasswd: Unable to write to password file: %s\n"
+msgstr "lppasswd: Kann nicht in die Passwortdatei schreiben: %s\n"
+
+#, c-format
+msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
+msgstr "lppasswd: Benutzer \"%s\" und Gruppe \"%s\" existieren nicht.\n"
+
+msgid "lppasswd: Sorry, password doesn't match!\n"
+msgstr "lppasswd: Bedaure, Passwort stimmt nicht überein!\n"
+
+msgid "lppasswd: Password file not updated!\n"
+msgstr "lppasswd: Passwortdatei wurde nicht aktualisiert!\n"
+
+#, c-format
+msgid "lppasswd: failed to backup old password file: %s\n"
+msgstr "lppasswd: Konnte alte Passwortdatei nicht sichern: %s\n"
+
+#, c-format
+msgid "lppasswd: failed to rename password file: %s\n"
+msgstr "lppasswd: Konnte Passwortdatei nicht umbenennen: %s\n"
+
+msgid "Usage: lppasswd [-g groupname]\n"
+msgstr "Benutzung: lppasswd [-g Gruppenname]\n"
+
+msgid ""
+"Usage: lppasswd [-g groupname] [username]\n"
+" lppasswd [-g groupname] -a [username]\n"
+" lppasswd [-g groupname] -x [username]\n"
+msgstr ""
+"Benutzung: lppasswd [-g Gruppenname] [Benutzername]\n"
+" lppasswd [-g Gruppenname] -a [Benutzername]\n"
+" lppasswd [-g Gruppenname] -x [Benutzername]\n"
+
+msgid "Start Printer"
+msgstr "Starte Drucker"
+
+msgid "Stop Printer"
+msgstr "Stoppe Drucker"
+
+msgid "Start Class"
+msgstr "Starte Klasse"
+
+msgid "Stop Class"
+msgstr "Stoppe Klasse"
+
+msgid "Accept Jobs"
+msgstr "Akzeptiere Aufträge"
+
+msgid "Reject Jobs"
+msgstr "Aufträge ablehnen"
+
+msgid "Purge Jobs"
+msgstr "Eliminiere Aufträge"
+
+msgid "Set As Default"
+msgstr "Setze als Standard"
+
+msgid "Administration"
+msgstr "Verwaltung"
+
+msgid "Modify Class"
+msgstr "Klasse ändern"
+
+msgid "Add Class"
+msgstr "Klasse hinzufügen"
+
+msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "Der Klassenname darf nur bis zu 127 druckbare Zeichen und keine Leerzeichen, Slashes (/), oder das Rautezeichen (#) enthalten."
+
+msgid "Unable to modify class:"
+msgstr "Kann Klasse nicht ändern:"
+
+msgid "Unable to add class:"
+msgstr "Kann Klasse nicht hinzufügen:"
+
+msgid "Modify Printer"
+msgstr "Drucker ändern"
+
+msgid "Add Printer"
+msgstr "Drucker hinzufügen"
+
+msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "Der Druckername darf nur bis zu 127 druckbare Zeichen und keine Leerzeichen, Slashes (/), oder das Rautezeichen (#) enthalten."
+
+msgid "Unable to get list of printer drivers:"
+msgstr "Holen der Druckertreiberliste nicht möglich:"
+
+msgid "Unable to modify printer:"
+msgstr "Kann Drucker nicht ändern:"
+
+msgid "Unable to add printer:"
+msgstr "Kann Drucker nicht hinzufügen:"
+
+msgid "Set Printer Options"
+msgstr "Druckereinstellugen setzen"
+
+msgid "Missing form variable!"
+msgstr "Vermisse Formularvariable!"
+
+msgid "Unable to get PPD file!"
+msgstr "Kann PPD Datei nicht holen!"
+
+msgid "Unable to open PPD file:"
+msgstr "Kann PPD Datei nicht öffnen:"
+
+msgid "Banners"
+msgstr "Banner"
+
+msgid "Starting Banner"
+msgstr "Startbanner"
+
+msgid "Ending Banner"
+msgstr "Endbanner"
+
+msgid "Policies"
+msgstr "Richtlinien"
+
+msgid "Error Policy"
+msgstr "Fehlerrichtlinie"
+
+msgid "Operation Policy"
+msgstr "Betriebsrichtlinie"
+
+msgid "PS Binary Protocol"
+msgstr "PS Binärprotokoll"
+
+msgid "None"
+msgstr "Kein(e)"
+
+msgid "Unable to set options:"
+msgstr "Kann Parameter nicht setzen:"
+
+msgid "Change Settings"
+msgstr "Konfiguration ändern"
+
+msgid "Unable to change server settings:"
+msgstr "Kann Servereinstellungen nicht ändern:"
+
+msgid "Unable to upload cupsd.conf file:"
+msgstr "Kann die Datei cupsd.conf nicht hochladen:"
+
+msgid "Edit Configuration File"
+msgstr "Bearbeite Konfigurationsdatei"
+
+msgid "Unable to create temporary file:"
+msgstr "Kann temporäre Datei nicht erstellen:"
+
+msgid "Unable to access cupsd.conf file:"
+msgstr "Kann auf die Datei cupsd.conf nicht zugreifen:"
+
+msgid "Unable to edit cupsd.conf files larger than 1MB!"
+msgstr "Kann cupsd.conf Dateien größer als 1MB nicht bearbeiten!"
+
+msgid "Delete Class"
+msgstr "Lösche Klasse"
+
+msgid "Unable to delete class:"
+msgstr "Kann Klasse nicht löschen:"
+
+msgid "Delete Printer"
+msgstr "Lösche Drucker"
+
+msgid "Unable to delete printer:"
+msgstr "Kann Drucker nicht löschen:"
+
+msgid "Export Printers to Samba"
+msgstr "Drucker für Samba bereitstellen"
+
+msgid "Unable to fork process!"
+msgstr "Kann Prozess nicht forken!"
+
+msgid "Unable to connect to server!"
+msgstr "Kann Server nicht erreichen!"
+
+msgid "Unable to get printer attributes!"
+msgstr "Kann Druckereigenschaften nicht holen!"
+
+msgid "Unable to convert PPD file!"
+msgstr "Kann PPD Datei nicht konvertieren!"
+
+msgid "Unable to copy Windows 2000 printer driver files!"
+msgstr "Kann Windows 2000 Druckertreiberdateien nicht kopieren!"
+
+msgid "Unable to install Windows 2000 printer driver files!"
+msgstr "Kann Windows 2000 Druckertreiberdateien nicht installieren!"
+
+msgid "Unable to copy Windows 9x printer driver files!"
+msgstr "Kann Windows 9x Druckertreiberdateien nicht kopieren!"
+
+msgid "Unable to install Windows 9x printer driver files!"
+msgstr "Kann Windows 9x Druckertreiberdateien nicht installieren!"
+
+msgid "Unable to set Windows printer driver!"
+msgstr "Kann Windows Druckertreiber nicht festlegen!"
+
+msgid "No printer drivers found!"
+msgstr "Keine Druckertreiber gefunden!"
+
+msgid "Unable to execute cupsaddsmb command!"
+msgstr "Kann Befehl cupsaddsmb nicht ausführen!"
+
+#, c-format
+msgid "cupsaddsmb failed with status %d"
+msgstr "cupsaddsmb fehlgeschlagen mit Status %d"
+
+#, c-format
+msgid "cupsaddsmb crashed on signal %d"
+msgstr "cupsaddsmb abgestürzt mit Signal %d"
+
+msgid "A Samba username is required to export printer drivers!"
+msgstr "Ein Samba Benutzername wird benötigt um Drucker für Samba bereitzustellen!"
+
+msgid "A Samba password is required to export printer drivers!"
+msgstr "Ein Samba Passwort wird benötigt um Druckertreiber bereitzustellen!"
+
+msgid "Unable to open cupsd.conf file:"
+msgstr "Kann die Datei cupsd.conf nicht öffnen:"
+
+msgid "Unable to change printer:"
+msgstr "Kann Drucker nicht ändern:"
+
+msgid "Set Allowed Users"
+msgstr "Erlaubte Benutzer festlegen:"
+
+msgid "Unable to get printer attributes:"
+msgstr "Kann Druckereigenschaften nicht holen:"
+
+msgid "Set Publishing"
+msgstr "Veröffentlichung setzen"
+
+msgid "Unable to change printer-is-shared attribute:"
+msgstr "Kann die Eigenschaft printer-is-shared nicht ändern:"
+
+msgid "Classes"
+msgstr "Klassen"
+
+msgid "Unable to get class list:"
+msgstr "Kann Klassenliste nicht holen:"
+
+msgid "Unable to get class status:"
+msgstr "Kann Klassenstatus nicht holen:"
+
+msgid "Move Job"
+msgstr "Verschiebe Auftrag"
+
+msgid "Unable to find destination for job!"
+msgstr "Kann das Ziel für den Auftrag nicht ermitteln!"
+
+msgid "Move All Jobs"
+msgstr "Verschiebe alle Aufträge"
+
+msgid "Unable to move job"
+msgstr "Kann Auftrag nicht verschieben"
+
+msgid "Unable to move jobs"
+msgstr "Kann Aufträge nicht verschieben"
+
+msgid "Print Test Page"
+msgstr "Drucke Testseite"
+
+msgid "Unable to print test page:"
+msgstr "Kann Testseite nicht drucken:"
+
+msgid "Jobs"
+msgstr "Aufträge"
+
+msgid "Job operation failed:"
+msgstr "Auftragsdurchführung fehlgeschlagen:"
+
+msgid "Printers"
+msgstr "Drucker"
+
+msgid "Unable to get printer list:"
+msgstr "Kann Druckerliste nicht holen:"
+
+msgid "Unable to get printer status:"
+msgstr "Kann Druckerstatus nicht holen:"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Unable to open PPD file"
+msgstr "Kann PPD Datei nicht öffnen"
+
+msgid "NULL PPD file pointer"
+msgstr "Zeiger für PPD Datei ist NULL"
+
+msgid "Memory allocation error"
+msgstr "Speicherreservierungsfehler"
+
+msgid "Missing PPD-Adobe-4.x header"
+msgstr "Vermisse PPD-Adobe-4.x header"
+
+msgid "Missing value string"
+msgstr "Vermisse Zeichenkette für Wert"
+
+msgid "Internal error"
+msgstr "Interner Fehler"
+
+msgid "Bad OpenGroup"
+msgstr "Falsche OpenGroup-Angabe"
+
+msgid "OpenGroup without a CloseGroup first"
+msgstr "OpenGroup ohne vorheriges CloseGroup"
+
+msgid "Bad OpenUI/JCLOpenUI"
+msgstr "Falsche OpenUI/JCLOpenUI-Angabe"
+
+msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
+msgstr "OpenUI/JCLOpenUI ohne vorheriges CloseUI/JCLCloseUI"
+
+msgid "Bad OrderDependency"
+msgstr "Falsche OrderDependency-Angabe"
+
+msgid "Bad UIConstraints"
+msgstr "Falsche UIConstraints-Angabe"
+
+msgid "Missing asterisk in column 1"
+msgstr "Vermisse Stern in Zeile 1"
+
+msgid "Line longer than the maximum allowed (255 characters)"
+msgstr "Zeile ist länger als maximal erlaubt (255 Zeichen)"
+
+msgid "Illegal control character"
+msgstr "Ungültiges Steuerzeichen"
+
+msgid "Illegal main keyword string"
+msgstr "Ungültige Zeichenkette für Hauptschlüsselwort"
+
+msgid "Illegal option keyword string"
+msgstr "Ungültige Zeichenkette für Eigenschafts-Schlüsselwort"
+
+msgid "Illegal translation string"
+msgstr "Ungültige Übersetzungszeichenkette"
+
+# Whitespace. Tab, Space, CR...
+msgid "Illegal whitespace character"
+msgstr "Ungültiges Whitespace-Zeichen"
+
+msgid "Bad custom parameter"
+msgstr "Falscher benutzerspezifischer Parameter"
+
+msgid "Unknown"
+msgstr "Unbekannt"
+
+msgid "Custom"
+msgstr "Benutzerspezifisch"
+
+msgid "JCL"
+msgstr "JCL"
+
+msgid "No authentication information provided!"
+msgstr "Keine Authentifizierungsinformationen übergeben!"
+
+#, c-format
+msgid "Password for %s required to access %s via SAMBA: "
+msgstr "Passwort für %s benötigt um auf %s via SAMBA zugreifen zu können."
+
+#, c-format
+msgid "Running command: %s %s -N -U '%s%%%s' -c '%s'\n"
+msgstr "Befehl wird ausgeführt: %s %s -N -U '%s%%%s' -c '%s'\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to run \"%s\": %s\n"
+msgstr "cupsaddsmb: Kann \"%s\" nicht ausführen: %s\n"
+
+msgid "cupsaddsmb: No Windows printer drivers are installed!\n"
+msgstr "cupsaddsmb: Keine Windows Druckertreiber installiert!\n"
+
+msgid "cupsaddsmb: Warning, no Windows 2000 printer drivers are installed!\n"
+msgstr "cupsaddsmb: Warnung, keine Windows 2000 Druckertreiber installiert!\n"
+
+#, c-format
+msgid "lpadmin: Printer %s is already a member of class %s.\n"
+msgstr "lpadmin: Drucker %s ist bereits Mitglied der Klasse %s.\n"
+
+msgid "lpadmin: No member names were seen!\n"
+msgstr "lpadmin: Keine Mitgliedernamen gesehen!\n"
+
+#, c-format
+msgid "lpadmin: Printer %s is not a member of class %s.\n"
+msgstr "lpadmin: Drucker %s ist kein Mitglied der Klasse %s.\n"
+
+#, c-format
+msgid ""
+"Device: uri = %s\n"
+" class = %s\n"
+" info = %s\n"
+" make-and-model = %s\n"
+" device-id = %s\n"
+msgstr ""
+"Gerät: uri = %s\n"
+" class = %s\n"
+" info = %s\n"
+" make-and-model = %s\n"
+" device-id = %s\n"
+
+#, c-format
+msgid ""
+"Model: name = %s\n"
+" natural_language = %s\n"
+" make-and-model = %s\n"
+" device-id = %s\n"
+msgstr ""
+"Modell: Name = %s\n"
+" natural_language = %s\n"
+" make-and-model = %s\n"
+" device-id = %s\n"
+
+msgid "Usage: lpmove job/src dest\n"
+msgstr "Benutzung: lpmove Auftrag/Quelle Ziel\n"
+
+msgid "lpstat: Need \"completed\", \"not-completed\", or \"all\" after -W!\n"
+msgstr "lpstat: Brauche \"completed\", \"not-completed\", oder \"all\" hinter dem Parameter -W!\n"
+
+#, c-format
+msgid "%s accepting requests since %s\n"
+msgstr "%s akzeptiert Anfragen seit %s\n"
+
+#, c-format
+msgid ""
+"%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s akzeptiert keine Anfragen seit %s -\n"
+"\t%s\n"
+
+#, c-format
+msgid "%s/%s accepting requests since %s\n"
+msgstr "%s/%s akzeptiert Anfragen seit %s\n"
+
+#, c-format
+msgid ""
+"%s/%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s akzeptiert keine Anfragen seit %s -\n"
+"\t%s\n"
+
+msgid "lpc> "
+msgstr "lpc> "
+
+#, c-format
+msgid "%s: Unable to contact server!\n"
+msgstr "%s: Kann Server nicht erreichen!\n"
+
+#, c-format
+msgid "%s: Error - expected username after '-U' option!\n"
+msgstr "%s: Fehler - Benutzername wird hinter dem Parameter '-U' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - unknown destination \"%s/%s\"!\n"
+msgstr "%s: Fehler - Unbekanntes Ziel \"%s/%s\"!\n"
+
+#, c-format
+msgid "%s: Unknown destination \"%s\"!\n"
+msgstr "%s: Unbekanntes Ziel \"%s\"!\n"
+
+#, c-format
+msgid "%s: Error - expected hostname after '-h' option!\n"
+msgstr "%s: Fehler - Hostname wird hinter dem Parameter '-h' erwartet!\n"
+
+#, c-format
+msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "%s: Fehler - Die Umgebungsvariable %s enthält das nicht existierende Ziel \"%s\"!\n"
+
+#, c-format
+msgid "%s: error - no default destination available.\n"
+msgstr "%s: Fehler - Kein Standardziel verfügbar.\n"
+
+msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
+msgstr "Benutzung: lpq [-P Ziel] [-U Benutzername] [-h Hostname[:Port]] [-l] [+Intervall]\n"
+
+#, c-format
+msgid "%s: Error - expected hostname after '-H' option!\n"
+msgstr "%s: Fehler - Hostname wird hinter dem Parameter '-H' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected value after '-%c' option!\n"
+msgstr "%s: Fehler - Wert wird hinter dem Paramter '-%c' erwartet!\n"
+
+#, c-format
+msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
+msgstr "%s: Warnung - Formatangabe '%c' nicht unterstützt - Ausgabe ist möglicherweise falsch!\n"
+
+#, c-format
+msgid "%s: error - expected option=value after '-o' option!\n"
+msgstr "%s: Fehler - Parameter=Wert wird hinter dem Parameter '-o' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-P' option!\n"
+msgstr "%s: Fehler - Ziel wird hinter dem Parameter '-P' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected copy count after '-#' option!\n"
+msgstr "%s: Fehler - Kopienanzahl wird hinter dem Parameter '-#' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected name after '-%c' option!\n"
+msgstr "%s: Fehler - Name wird hinter dem Paramter '-%c' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - unknown option '%c'!\n"
+msgstr "%s: Fehler - Unbekannter Parameter '%c'!\n"
+
+#, c-format
+msgid "%s: Error - unable to access \"%s\" - %s\n"
+msgstr "%s: Fehler - Kann auf \"%s\" nicht zugreifen - %s\n"
+
+#, c-format
+msgid "%s: Error - too many files - \"%s\"\n"
+msgstr "%s: Fehler - Zu viele Dateien - \"%s\"\n"
+
+#, c-format
+msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "%s: Fehler - Die Umgebungsvariable %s enthält das nicht existierende Ziel \"%s\"!\n"
+
+#, c-format
+msgid "%s: Error - no default destination available.\n"
+msgstr "%s: Fehler - Kein Standardziel verfügbar.\n"
+
+#, c-format
+msgid "%s: Error - scheduler not responding!\n"
+msgstr "%s: Fehler - Scheduler antwortet nicht!\n"
+
+#, c-format
+msgid "%s: Error - unable to create temporary file \"%s\" - %s\n"
+msgstr "%s: Fehler - Kann die temporäre Datei \"%s\" nicht erzeugen - %s\n"
+
+#, c-format
+msgid "%s: Error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "%s: Fehler - Kann nicht in die temporäre Datei \"%s\" schreiben - %s\n"
+
+#, c-format
+msgid "%s: Error - stdin is empty, so no job has been sent.\n"
+msgstr "%s: Fehler - stdin ist leer, somit wurde kein Auftrag gesendet.\n"
+
+#, c-format
+msgid "%s: Error - unknown destination \"%s\"!\n"
+msgstr "%s: Fehler - unbekanntes Ziel \"%s\"!\n"
+
+#, c-format
+msgid "%s: Error - expected reason text after '-r' option!\n"
+msgstr "%s: Fehler - Begründungstext wird hinter dem Parameter '-r' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected username after '-u' option!\n"
+msgstr "%s: Fehler - Benutzernamen wird hinter dem Parameter '-u' erwartet!\n"
+
+#, c-format
+msgid "%s: %s failed: %s\n"
+msgstr "%s: %s fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-d' option!\n"
+msgstr "%s: Fehler - Ziel wird hinter dem Parameter '-d' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected form after '-f' option!\n"
+msgstr "%s: Fehler - Formular wird hinter dem Parameter '-f' erwartet!\n"
+
+#, c-format
+msgid "%s: Warning - form option ignored!\n"
+msgstr "%s: Warnung - Parameter für Formular ignoriert!\n"
+
+#, c-format
+msgid "%s: Expected job ID after '-i' option!\n"
+msgstr "%s: Auftrags ID wird hinter dem Parameter '-i' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
+msgstr "%s: Fehler - Kann nicht gleichzeitig Dateien drucken und Aufträge abändern!\n"
+
+#, c-format
+msgid "%s: Error - bad job ID!\n"
+msgstr "%s: Fehler - Falsche Auftrags ID!\n"
+
+#, c-format
+msgid "%s: Error - expected copies after '-n' option!\n"
+msgstr "%s: Fehler - Kopienanzahl wird hinter dem Parameter '-n' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected option string after '-o' option!\n"
+msgstr "%s: Fehler - Zeichenkette mit Parametern wird hinter dem Parameter '-o' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected priority after '-%c' option!\n"
+msgstr "%s: Fehler - Priorität wird hinter dem Parameter '-%c' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - priority must be between 1 and 100.\n"
+msgstr "%s: Fehler - Priorität muss zwischen 1 und 100 sein.\n"
+
+#, c-format
+msgid "%s: Error - expected title after '-t' option!\n"
+msgstr "%s: Fehler - Titel wird hinter dem Parameter '-t' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected mode list after '-y' option!\n"
+msgstr "%s: Fehler - Modusliste wird hinter dem Parameter '-y' erwartet!\n"
+
+#, c-format
+msgid "%s: Warning - mode option ignored!\n"
+msgstr "%s: Warnung - Modusangabe ignoriert!\n"
+
+#, c-format
+msgid "%s: Error - expected hold name after '-H' option!\n"
+msgstr "%s: Fehler - Haltebezeichnung wird hinter dem Parameter '-H' erwartet!\n"
+
+#, c-format
+msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
+msgstr "%s: Brauche Auftrags ID ('-i jobid') vor '-H restart'!\n"
+
+#, c-format
+msgid "%s: Error - expected page list after '-P' option!\n"
+msgstr "%s: Fehler - Seitenliste wird hinter dem Paramter '-P' erwartet!\n"
+
+#, c-format
+msgid "%s: Error - expected character set after '-S' option!\n"
+msgstr "%s: Fehler - Zeichensatz wird hinter dem Paramter '-S' erwartet!\n"
+
+#, c-format
+msgid "%s: Warning - character set option ignored!\n"
+msgstr "%s: Warnung - Zeichensatzangabe ignoriert!\n"
+
+#, c-format
+msgid "%s: Error - expected content type after '-T' option!\n"
+msgstr "%s: Fehler - Inhaltstyp hinter dem Parameter '-T' erwartet!\n"
+
+#, c-format
+msgid "%s: Warning - content type option ignored!\n"
+msgstr "%s: Warnung - Parameter für Inhaltstyp ignoriert!\n"
+
+#, c-format
+msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "%s: Fehler - Kann nicht von stdin drucken wenn Dateien oder eine Autrags ID übergeben wurde!\n"
+
+#, c-format
+msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
+msgstr "%s: Fehler - Brauche \"completed\", \"not-completed\", oder \"all\" hinter dem Parameter '-W'!\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-b' option!\n"
+msgstr "%s: Fehler - Ziel wird hinter dem Parameter '-b' erwartet!\n"
+
+#, c-format
+msgid "%s: Invalid destination name in list \"%s\"!\n"
+msgstr "%s: Ungültiger Zielname in der Liste \"%s\"!\n"
+
+#, c-format
+msgid "%s: Unable to connect to server\n"
+msgstr "%s: Kann Server nicht erreichen\n"
+
+msgid "Print Job:"
+msgstr "Druckauftrag:"
+
+msgid "pending"
+msgstr "schwebend"
+
+msgid "held"
+msgstr "gehalten"
+
+msgid "processing"
+msgstr "verarbeite"
+
+msgid "stopped"
+msgstr "gestoppt"
+
+msgid "canceled"
+msgstr "abgebrochen"
+
+msgid "aborted"
+msgstr "abgebrochen"
+
+msgid "completed"
+msgstr "beendet"
+
+msgid "unknown"
+msgstr "unbekannt"
+
+msgid "untitled"
+msgstr "unbenannt"
+
+msgid "Printer:"
+msgstr "Drucker:"
+
+msgid "idle"
+msgstr "frei"
+
+msgid "Missing notify-subscription-ids attribute!"
+msgstr "Vermisse Eigenschaft notify-subscription-ids!"
+
+msgid "Job subscriptions cannot be renewed!"
+msgstr "Auftragssubkription kann nicht erneuert werden!"
+
+msgid "cupsd: Expected config filename after \"-c\" option!\n"
+msgstr "cupsd: Konfigurationsdateiname wird hinter dem Paramter \"-c\" erwartet!\n"
+
+msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
+msgstr "cupsd: launchd(8)-unterstützung wurde nicht kompiliert, laufe im normalen Modus.\n"
+
+#, c-format
+msgid "cupsd: Unknown option \"%c\" - aborting!\n"
+msgstr "cupsd: Unbekannter Paramter \"%c\" - Abbruch!\n"
+
+#, c-format
+msgid "cupsd: Unknown argument \"%s\" - aborting!\n"
+msgstr "cupsd: Unbekanntes Argument \"%s\" - Abbruch!\n"
+
+msgid ""
+"Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n"
+"\n"
+"-c config-file Load alternate configuration file\n"
+"-f Run in the foreground\n"
+"-F Run in the foreground but detach\n"
+"-h Show this usage message\n"
+"-l Run cupsd from launchd(8)\n"
+msgstr ""
+"Benutzung: cupsd [-c Konfigurationsdatei] [-f] [-F] [-h] [-l]\n"
+"\n"
+"-c Konfig. Datei Lade alternative Konfigurationsdatei\n"
+"-f Laufe im Vordergrund\n"
+"-F Laufe abgetrennt im Vordergrund\n"
+"-h Zeige diese Gebrauchsanweisung\n"
+"-l cupsd über launchd(8) laufen lassen\n"
+
+#, c-format
+msgid " WARN Line %d only contains whitespace!\n"
+msgstr " WARNUNG Zeile %d enthält nur Whitespace!\n"
+
+msgid " WARN File contains a mix of CR, LF, and CR LF line endings!\n"
+msgstr " WARNUNG Datei enthält gemischt CR, LF und CR LF als Zeilenende!\n"
+
+msgid " WARN Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
+msgstr " WARNUNG Nicht-Windows PPD Dateien sollten nur das Zeilenende LF benutzen, nicht CR LF!\n"
+
+msgid "Printer Maintenance"
+msgstr "Druckerwartung"
+
+msgid "Unable to send maintenance job:"
+msgstr "Kann Wartungsauftrag nicht senden:"
+
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
+msgstr "cupsaddsmb: Keine PPD Datei für Drucker \"%s\" vorhanden - %s\n"
+
+#, c-format
+msgid " **FAIL** %s %s does not exist!\n"
+msgstr " **FEHLGESCHLAGEN** %s %s existiert nicht!\n"
+
+#, c-format
+msgid " **FAIL** Bad language \"%s\"!\n"
+msgstr " **FEHLGESCHLAGEN** Falsche Sprache \"%s\"!\n"
+
+#, c-format
+msgid " **FAIL** Missing \"%s\" translation string for option %s!\n"
+msgstr " **FEHLGESCHLAGEN** Vermisse \"%s\" Übersetzung für Parameter %s!\n"
+
+#, c-format
+msgid " **FAIL** Default translation string for option %s contains 8-bit characters!\n"
+msgstr " **FEHLGESCHLAGEN** Standardübersetzung für Parameter %s enthält 8-bit Zeichen!\n"
+
+#, c-format
+msgid " **FAIL** Missing \"%s\" translation string for option %s, choice %s!\n"
+msgstr " **FEHLGESCHLAGEN** Vermisse \"%s\" Übersetzung für Parameter %s, Auswahl %s!\n"
+
+#, c-format
+msgid " **FAIL** Default translation string for option %s choice %s contains 8-bit characters!\n"
+msgstr " **FEHLGESCHLAGEN** Standardübersetzung für Parameter %s Auswahl %s enthält 8-bit Zeichen!\n"
+
+#, c-format
+msgid " **FAIL** Bad cupsFilter value \"%s\"!\n"
+msgstr " **FEHLGESCHLAGEN** Falscher cupsFilter Wert \"%s\"!\n"
+
+msgid "Help"
+msgstr "Hilfe"
+
+#, c-format
+msgid "Missing value on line %d!\n"
+msgstr "Vermisse Wert in Zeile %d!\n"
+
+#, c-format
+msgid "Missing double quote on line %d!\n"
+msgstr "Vermisse doppelte Anführungszeichen in Zeile %d!\n"
+
+#, c-format
+msgid "Bad option + choice on line %d!\n"
+msgstr "Falscher Parameter + Auswahl in Zeile %d!\n"
+
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)!\n"
+msgstr "Kann Windows 2000 Druckertreiberdateien nicht kopieren (%d)!\n"
+
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)!\n"
+msgstr "Kann CUPS Druckertreiberdateien nicht kopieren (%d)!\n"
+
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)!\n"
+msgstr "Kann Windows 2000 Druckertreiberdateien nicht installieren (%d)!\n"
+
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)!\n"
+msgstr "Kann Windows 9x Druckertreiberdateien nicht kopieren (%d)!\n"
+
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)!\n"
+msgstr "Kann Windows 9x Druckertreiberdateien nicht installieren (%d)!\n"
+
+msgid "No Windows printer drivers are installed!\n"
+msgstr "Keine Windows Druckertreiber installiert!\n"
+
+msgid "Warning, no Windows 2000 printer drivers are installed!\n"
+msgstr "Warnung, keine Windows 2000 Druckertreiber installiert!\n"
+
+#, c-format
+msgid "Unable to set Windows printer driver (%d)!\n"
+msgstr "Kann Windows Druckertreiber nicht setzen (%d)!\n"
+
+msgid ""
+"Usage: cupsaddsmb [options] printer1 ... printerN\n"
+" cupsaddsmb [options] -a\n"
+"\n"
+"Options:\n"
+" -E Encrypt the connection to the server\n"
+" -H samba-server Use the named SAMBA server\n"
+" -U samba-user Authenticate using the named SAMBA user\n"
+" -a Export all printers\n"
+" -h cups-server Use the named CUPS server\n"
+" -v Be verbose (show commands)\n"
+msgstr ""
+"Benutzung: cupsaddsmb [Parameter] Drucker1 ... DruckerN\n"
+" cupsaddsmb [Parameter] -a\n"
+"\n"
+"Options:\n"
+" -E Verbindung zum Server verschlüsseln\n"
+" -H Samba-Server Benutze den angegebenen Samba Server\n"
+" -U Samba-Benutzer Authentifiziere mit dem angegebenen Samba Benutzer\n"
+" -a Alle Drucker bereitstellen\n"
+" -h CUPS-Server Benutze den angegebenen CUPS Server\n"
+" -v zusätzliche Ausgaben einschalten (zeige Befehle)\n"
+
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)!"
+msgstr "Kann Windows 2000 Druckertreiberdateien nicht kopieren (%d)!"
+
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)!"
+msgstr "Kann CUPS Druckertreiberdateien nicht kopieren (%d)!"
+
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)!"
+msgstr "Kann Windows 2000 Druckertreiberdateien nicht installieren (%d)!"
+
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)!"
+msgstr "Kann Windows 9x Druckertreiberdateien nicht kopieren (%d)!"
+
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)!"
+msgstr "Kann Windows 9x Druckertreiberdateien nicht installieren (%d)!"
+
+msgid "No Windows printer drivers are installed!"
+msgstr "Keine Windows Druckertreiber installiert!"
+
+msgid "Warning, no Windows 2000 printer drivers are installed!"
+msgstr "Warnung, keine Windows 2000 Druckertreiber installiert!"
+
+#, c-format
+msgid "open of %s failed: %s"
+msgstr "öffnen von %s fehlgeschlagen: %s"
+
+#, c-format
+msgid "Running command: %s %s -N -A %s -c '%s'\n"
+msgstr "Befehl wird ausgeführt: %s %s -N -A %s -c '%s'\n"
+
+#, c-format
+msgid "stat of %s failed: %s"
+msgstr "Prüfung von %s fehlgeschlagen: %s"
+
+#, c-format
+msgid "Job #%d is already cancelled - can't cancel."
+msgstr "Auftrag #%d wurde bereits abgebrochen - abbrechen nicht möglich."
+
+#, c-format
+msgid "Job #%d is already aborted - can't cancel."
+msgstr "Auftrag #%d wurde bereits abgebrochen - abbrechen nicht möglich."
+
+#, c-format
+msgid "Job #%d is already completed - can't cancel."
+msgstr "Auftrag #%d wurde bereits beendet - abbrechen nicht möglich."
+
+#, c-format
+msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
+msgstr "Um auf diese Seite zuzugreifen müssen Sie die URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> verwenden."
+
+#, c-format
+msgid "Unsupported format '%s'!"
+msgstr "Nicht unterstütztes Format '%s'!"
+
+msgid "FAIL\n"
+msgstr "FEHLGESCHLAGEN\n"
+
+#, c-format
+msgid ""
+" Line %d is longer than 255 characters (%d)!\n"
+" REF: Page 25, Line Length\n"
+msgstr ""
+" Zeile %d ist länger als 255 Zeichen (%d)!\n"
+" REF: Seite 25, Zeilenlänge\n"
+
+msgid ""
+" Missing %!PS-Adobe-3.0 on first line!\n"
+" REF: Page 17, 3.1 Conforming Documents\n"
+msgstr ""
+" Vermisse %!PS-Adobe-3.0 in der ersten Zeile!\n"
+" REF: Seite 17, 3.1 Den Konventionen entsprechende Dokumente\n"
+
+#, c-format
+msgid ""
+" Bad %%%%Pages: on line %d!\n"
+" REF: Page 43, %%%%Pages:\n"
+msgstr ""
+" Falsche %%%%Pages: in Zeile %d!\n"
+" REF: Seite 43, %%%%Pages:\n"
+
+#, c-format
+msgid ""
+" Bad %%%%BoundingBox: on line %d!\n"
+" REF: Page 39, %%%%BoundingBox:\n"
+msgstr ""
+" Falsche %%%%BoundingBox: in Zeile %d!\n"
+" REF: Seite 39, %%%%BoundingBox:\n"
+
+#, c-format
+msgid ""
+" Bad %%%%Page: on line %d!\n"
+" REF: Page 53, %%%%Page:\n"
+msgstr ""
+" Falsche %%%%Page: in Zeile %d!\n"
+" REF: Seite 53, %%%%Page:\n"
+
+#, c-format
+msgid ""
+" Missing or bad %%BoundingBox: comment!\n"
+" REF: Page 39, %%BoundingBox:\n"
+msgstr ""
+" Vermisster oder falscher %%BoundingBox: Kommentar!\n"
+" REF: Seite 39, %%BoundingBox:\n"
+
+#, c-format
+msgid ""
+" Missing or bad %%Pages: comment!\n"
+" REF: Page 43, %%Pages:\n"
+msgstr ""
+" Vermisster oder Falscher %%Pages: Kommentar!\n"
+" REF: Seite 43, %%Pages:\n"
+
+#, c-format
+msgid ""
+" Missing %%EndComments comment!\n"
+" REF: Page 41, %%EndComments\n"
+msgstr ""
+" Vermisster %%EndComments Kommentar!\n"
+" REF: Seite 41, %%EndComments\n"
+
+#, c-format
+msgid ""
+" Missing or bad %%Page: comments!\n"
+" REF: Page 53, %%Page:\n"
+msgstr ""
+" Vermisste oder falsche %%Page: Kommentare!\n"
+" REF: Seite 53, %%Page:\n"
+
+#, c-format
+msgid " Too many %%EndDocument comments!\n"
+msgstr " Zu viele %%EndDocument Kommentare!\n"
+
+#, c-format
+msgid " Too many %%BeginDocument comments!\n"
+msgstr " Zu viele %%BeginDocument Kommentare!\n"
+
+#, c-format
+msgid " Saw %d lines that exceeded 255 characters!\n"
+msgstr " Sah %d Zeilen welche 255 Zeichen überschreiten!\n"
+
+msgid "PASS\n"
+msgstr "PASS\n"
+
+msgid " Warning: file contains binary data!\n"
+msgstr " Warnung: Datei enthält binäre Daten!\n"
+
+#, c-format
+msgid " Warning: obsolete DSC version %.1f in file!\n"
+msgstr " Warnung: obsolete DSC Version %.1f in Datei!\n"
+
+#, c-format
+msgid " Warning: no %%EndComments comment in file!\n"
+msgstr " Warnung: keine %%EndComments Kommentare in Datei!\n"
+
+msgid ""
+"Usage: cupstestdsc [options] filename.ps [... filename.ps]\n"
+" cupstestdsc [options] -\n"
+"\n"
+"Options:\n"
+"\n"
+" -h Show program usage\n"
+"\n"
+" Note: this program only validates the DSC comments, not the PostScript itself.\n"
+msgstr ""
+"Benutzung: cupstestdsc [Parameter] Dateiname.ps [... Dateiname.ps]\n"
+" cupstestdsc [Parameter] -\n"
+"\n"
+"Parameter:\n"
+"\n"
+" -h Zeige Gebrauchsanleitung\n"
+"\n"
+" Notiz: Dieses Programm validiert nur die DSC Kommentare, nicht das PostScript selbst.\n"
+
+#, c-format
+msgid "Password for %s on %s? "
+msgstr "Passwort für %s auf %s? "
+
+msgid ""
+" **FAIL** 1284DeviceId must be 1284DeviceID!\n"
+" REF: Page 72, section 5.5\n"
+msgstr ""
+" **FEHLGESCHLAGEN** 1284DeviceId muss 1284DeviceID sein!\n"
+" REF: Seite 72, Kapitel 5.5\n"
"Project-Id-Version: CUPS 1.2\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
"POT-Creation-Date: 2006-05-21 10:08-0400\n"
-"PO-Revision-Date: 2006-03-29 23:44+0900\n"
+"PO-Revision-Date: 2006-06-27 22:55+0900\n"
"Last-Translator: Kenshi Muto <kmuto@debian.org>\n"
"Language-Team: Japanese <LL@li.org>\n"
"MIME-Version: 1.0\n"
#, c-format
msgid "Password for %s on %s? "
-msgstr ""
+msgstr "%s のパスワード (%s 上)? "
-#, fuzzy
msgid ""
" **FAIL** 1284DeviceId must be 1284DeviceID!\n"
" REF: Page 72, section 5.5\n"
msgstr ""
-" **FAIL** 不正な %s が %s を選んでいます!\n"
-" REF: 122 ページ、セクション 5.17\n"
+" **FAIL** 1284DeviceId は 1284DeviceID でなければなりません!\n"
+" REF: 72 ページ、セクション 5.5\n"
#
-# "$Id: Makefile 5472 2006-04-30 16:27:50Z mike $"
+# "$Id: Makefile 5728 2006-07-12 20:45:13Z mike $"
#
# Man page makefile for the Common UNIX Printing System (CUPS).
#
client.conf.$(MAN5EXT) \
cups-snmp.conf.$(MAN5EXT) \
cupsd.conf.$(MAN5EXT) \
+ mailto.conf.$(MAN5EXT) \
mime.convs.$(MAN5EXT) \
mime.types.$(MAN5EXT) \
printers.conf.$(MAN5EXT) \
#
-# End of "$Id: Makefile 5472 2006-04-30 16:27:50Z mike $".
+# End of "$Id: Makefile 5728 2006-07-12 20:45:13Z mike $".
#
.\"
-.\" "$Id: lpadmin.man 5327 2006-03-23 19:53:24Z mike $"
+.\" "$Id: lpadmin.man 5736 2006-07-13 19:59:36Z mike $"
.\"
.\" lpadmin man page for the Common UNIX Printing System (CUPS).
.\"
.\" EMail: cups-info@cups.org
.\" WWW: http://www.cups.org
.\"
-.TH lpadmin 8 "Common UNIX Printing System" "23 March 2006" "Easy Software Products"
+.TH lpadmin 8 "Common UNIX Printing System" "13 July 2006" "Easy Software Products"
.SH NAME
lpadmin \- configure cups printers and classes
.SH SYNOPSIS
Sets the binary communications program to use when printing,
"none", "bcp", or "tbcp". The default program is "none".
.TP 5
+-o printer-error-policy=name
+.br
+Sets the error policy to be used when the printer backend is
+unable to send the job to the printer. The name must be one of
+"cancel-job", "retry-job" or "stop-printer". The default error
+policy is "stop-printer".
+.TP 5
+-o printer-is-shared=true/false
+.br
+Sets the printer to shared/published or unshared/unpublished.
+Shared/published printers are publically announced by the server
+on the LAN based on the browsing configuration in
+\fBcupsd.conf\fR, while unshared/unpublished printers are not
+announced. The default value is "true".
+.TP 5
+-o printer-op-policy=name
+.br
+Sets the IPP operation policy associated with the printer. The
+name must be defined in the \fBcupsd.conf\fR in a Policy section.
+The default operation policy is "default".
+.TP 5
-r class
.br
Removes the named \fIprinter\fR from \fIclass\fR. If the
.br
Sets the \fIdevice-uri\fR attribute of the printer queue. If
\fIdevice-uri\fR is a filename it is automatically converted to
-the form \fIfile:///file/name\fR.
+the form \fIfile:///file/name\fR. Use the \fIlpinfo(8)\fR command
+to get a list of supported device URIs and schemes.
.TP 5
-D "info"
.br
The CUPS version of \fIlpadmin\fR does not support all of the
System V or Solaris printing system configuration options.
.SH SEE ALSO
-\fIaccept(8)\fR, \fIcupsenable(8)\fR, \fIlpoptions(1)\fR,
+\fIaccept(8)\fR, \fIcupsenable(8)\fR, \fIlpinfo(8)\fR,
+\fIlpoptions(1)\fR,
.br
http://localhost:631/help
.SH COPYRIGHT
Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
.\"
-.\" End of "$Id: lpadmin.man 5327 2006-03-23 19:53:24Z mike $".
+.\" End of "$Id: lpadmin.man 5736 2006-07-13 19:59:36Z mike $".
.\"
--- /dev/null
+.\"
+.\" "$Id$"
+.\"
+.\" mailto.conf man page for the Common UNIX Printing System (CUPS).
+.\"
+.\" Copyright 1997-2006 by Easy Software Products.
+.\"
+.\" These coded instructions, statements, and computer programs are the
+.\" property of Easy Software Products and are protected by Federal
+.\" copyright law. Distribution and use rights are outlined in the file
+.\" "LICENSE.txt" which should have been included with this file. If this
+.\" file is missing or damaged please contact Easy Software Products
+.\" at:
+.\"
+.\" Attn: CUPS Licensing Information
+.\" Easy Software Products
+.\" 44141 Airport View Drive, Suite 204
+.\" Hollywood, Maryland 20636 USA
+.\"
+.\" Voice: (301) 373-9600
+.\" EMail: cups-info@cups.org
+.\" WWW: http://www.cups.org
+.\"
+.TH mailto.conf 5 "Common UNIX Printing System" "12 July 2006" "Easy Software Products"
+.SH NAME
+mailto.conf \- configuration file for cups email notifier
+.SH DESCRIPTION
+The \fImailto.conf\fR file defines the local mail server and
+email notification preferences for CUPS.
+.LP
+Each line in the file can be a configuration directive, a blank line,
+or a comment. Comment lines start with the # character.
+.SH DIRECTIVES
+.TP 5
+Cc \fIcc-address@domain.com\fR
+.br
+Specifies an additional recipient for all email notifications.
+.TP 5
+From \fIfrom-address@domain.com\fR
+.br
+Specifies the sender of email notifications.
+.TP 5
+Sendmail \fIsendmail command and options\fR
+.br
+Specifies the sendmail command to use when sending email
+notifications. Only one \fISendmail\fR or \fISMTPServer\fR line
+may be present in the \fImailto.conf\fR file. If multiple lines
+are present, only the last one is used.
+.TP 5
+SMTPServer \fIservername\fR
+.br
+Specifies a SMTP server to send email notifications to. Only one
+\fISendmail\fR or \fISMTPServer\fR line may be present in the
+\fImailto.conf\fR file. If multiple lines are present, only the
+last one is used.
+.TP 5
+Subject \fIsubject-prefix\fR
+.br
+Specifies a prefix string for the subject line of an email notification.
+.SH SEE ALSO
+\fIclasses.conf(5)\fR, \fIcupsd(8)\fR, \fIcupsd.conf(5)\fR,
+\fImime.convs(5)\fR, \fImime.types(5)\fR, \fIprinters.conf(5)\fR,
+.br
+http://localhost:631/help
+.SH COPYRIGHT
+Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
+.\"
+.\" End of "$Id$".
+.\"
/*
- * "$Id: testnotify.c 4829 2005-11-12 03:15:10Z mike $"
+ * "$Id: testnotify.c 5716 2006-07-11 17:56:57Z mike $"
*
* Test notifier for the Common UNIX Printing System (CUPS).
*
print_attributes(event, 4);
ippDelete(event);
+
+ /*
+ * If the recipient URI is "testnotify://nowait", then we exit after each
+ * event...
+ */
+
+ if (!strcmp(argv[1], "testnotify://nowait"))
+ return (0);
}
}
/*
- * End of "$Id: testnotify.c 4829 2005-11-12 03:15:10Z mike $".
+ * End of "$Id: testnotify.c 5716 2006-07-11 17:56:57Z mike $".
*/
#
-# "$Id: cups.list.in 5628 2006-06-05 15:25:23Z mike $"
+# "$Id: cups.list.in 5745 2006-07-18 13:45:56Z mike $"
#
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
%provides cups-lpd 1:@CUPS_VERSION@
%format all
+%subpackage de
+%description Common UNIX Printing System - German support
+
%subpackage es
%description Common UNIX Printing System - Spanish support
$MAN1EXT=@MAN1EXT@
$MAN5EXT=@MAN5EXT@
$MAN7EXT=@MAN7EXT@
+$MAN8EXT=@MAN8EXT@
$MAN8DIR=@MAN8DIR@
$DSOLIBS=@DSOLIBS@
d 0511 root $CUPS_PRIMARY_SYSTEM_GROUP $STATEDIR/certs -
# Data files
+%subpackage de
+f 0644 root sys $LOCALEDIR/es/cups_de.po locale/cups_de.po
%subpackage es
f 0644 root sys $LOCALEDIR/es/cups_es.po locale/cups_es.po
%subpackage ja
c 0644 root sys $DATADIR/templates templates/*.tmpl
# Japanese template files
+%subpackage de
+d 0755 root sys $DATADIR/templates/de
+f 0644 root sys $DATADIR/templates/de templates/de/*.tmpl
%subpackage es
d 0755 root sys $DATADIR/templates/es
f 0644 root sys $DATADIR/templates/es templates/es/*.tmpl
d 0755 root sys $SERVERROOT -
d 0755 root $CUPS_GROUP $SERVERROOT/interfaces -
d 0755 root $CUPS_GROUP $SERVERROOT/ppd -
+d 0700 root $CUPS_GROUP $SERVERROOT/ssl -
c $CUPS_PERM root $CUPS_GROUP $SERVERROOT conf/*.conf
f $CUPS_PERM root $CUPS_GROUP $SERVERROOT/cupsd.conf.default conf/cupsd.conf
f 0644 root $CUPS_GROUP $SERVERROOT/mime.convs conf/mime.convs
f 0644 root sys $DOCDIR/help/network.html doc/help/network.html
f 0644 root sys $DOCDIR/help/options.html doc/help/options.html
f 0644 root sys $DOCDIR/help/overview.html doc/help/overview.html
+f 0644 root sys $DOCDIR/help/policies.html doc/help/policies.html
f 0644 root sys $DOCDIR/help/security.html doc/help/security.html
f 0644 root sys $DOCDIR/help/standard.html doc/help/standard.html
f 0644 root sys $DOCDIR/help/translation.html doc/help/translation.html
f 0644 root sys $DOCDIR/robots.txt doc/robots.txt
# Localized documentation files
+%subpackage de
+d 0755 root sys $DOCDIR/de
+f 0644 root sys $DOCDIR/de doc/de/*.html
+d 0755 root sys $DOCDIR/de/images -
+f 0644 root sys $DOCDIR/de/images doc/de/images/*.gif
%subpackage es
d 0755 root sys $DOCDIR/es
f 0644 root sys $DOCDIR/es doc/es/*.html
f 0644 root sys $MANDIR/man5/classes.conf.$MAN5EXT man/classes.conf.$MAN5EXT
f 0644 root sys $MANDIR/man5/cupsd.conf.$MAN5EXT man/cupsd.conf.$MAN5EXT
+f 0644 root sys $MANDIR/man5/mailto.conf.$MAN5EXT man/mailto.conf.$MAN5EXT
f 0644 root sys $MANDIR/man5/mime.convs.$MAN5EXT man/mime.convs.$MAN5EXT
f 0644 root sys $MANDIR/man5/mime.types.$MAN5EXT man/mime.types.$MAN5EXT
f 0644 root sys $MANDIR/man5/printers.conf.$MAN5EXT man/printers.conf.$MAN5EXT
i 0755 root sys cups init/cups.sh
#
-# End of "$Id: cups.list.in 5628 2006-06-05 15:25:23Z mike $".
+# End of "$Id: cups.list.in 5745 2006-07-18 13:45:56Z mike $".
#
#
-# "$Id: cups.spec.in 5584 2006-05-24 11:17:55Z mike $"
+# "$Id: cups.spec.in 5758 2006-07-19 13:31:27Z mike $"
#
# RPM "spec" file for the Common UNIX Printing System (CUPS).
#
Group: System Environment/Daemons
Requires: %{name} = %{epoch}:%{version} xinetd
+%package de
+Summary: Common UNIX Printing System - German support
+Group: System Environment/Daemons
+Requires: %{name} = %{epoch}:%{version}
+
%package es
Summary: Common UNIX Printing System - Spanish support
Group: System Environment/Daemons
The Common UNIX Printing System provides a portable printing layer for
UNIX® operating systems. This package provides LPD client support.
+%description de
+The Common UNIX Printing System provides a portable printing layer for
+UNIX® operating systems. This package provides German support.
+
%description es
The Common UNIX Printing System provides a portable printing layer for
UNIX® operating systems. This package provides Spanish support.
/etc/cups/mime.types
/etc/cups/mime.convs
%dir /etc/cups/ppd
+%attr(0700,root,root) %dir /etc/cups/ssl
%if %{?_with_dbus:1}%{!?_with_dbus:0}
# DBUS
/usr/share/doc/cups/help/network.html
/usr/share/doc/cups/help/options.html
/usr/share/doc/cups/help/overview.html
+/usr/share/doc/cups/help/policies.html
/usr/share/doc/cups/help/ref-*.html
/usr/share/doc/cups/help/security.html
/usr/share/doc/cups/help/standard.html
%dir /usr/share/man/man8
/usr/share/man/man8/cups-lpd.8.gz
+%files de
+%defattr(-,root,root)
+%dir /usr/share/doc/cups/de
+/usr/share/doc/cups/de/index.html
+%dir /usr/share/doc/cups/de/images
+/usr/share/doc/cups/de/images/*
+%dir /usr/share/cups/templates/de
+/usr/share/cups/templates/de/*
+/usr/share/locale/de/cups_de.po
+
%files es
%defattr(-,root,root)
%dir /usr/share/doc/cups/es
#
-# End of "$Id: cups.spec.in 5584 2006-05-24 11:17:55Z mike $".
+# End of "$Id: cups.spec.in 5758 2006-07-19 13:31:27Z mike $".
#
break;
}
- writePSFmt("% Produced by xpdf/pdftops %s\n", xpdfVersion);
+ writePSFmt("%%Producer: xpdf/pdftops %s\n", xpdfVersion);
xref->getDocInfo(&info);
if (info.dictLookup("Creator", &obj1)->isString()) {
writePS("%%Creator: ");
*Resolution 203dpi/203 DPI: "<</HWResolution[203 203]>>setpagedevice"
*CloseUI: *Resolution
+*OpenUI *zeMediaTracking/Media Tracking: PickOne
+*OrderDependency: 20 AnySetup *zeMediaTracking
+*DefaultzeMediaTracking: Web
+*zeMediaTracking Continuous: ""
+*zeMediaTracking Web/Non-continuous (Web sensing): ""
+*zeMediaTracking Mark/Non-continuous (Mark sensing): ""
+*CloseUI: *zeMediaTracking
+
*OpenGroup: PrinterSettings/Printer Settings
*OpenUI *Darkness/Media Darkness: PickOne
*OrderDependency: 20 AnySetup *Darkness
#
-# "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $"
+# "$Id: Makefile 5736 2006-07-13 19:59:36Z mike $"
#
# Scheduler Makefile for the Common UNIX Printing System (CUPS).
#
echo Creating $(SERVERROOT)/ppd...
$(INSTALL_DIR) -m 755 $(SERVERROOT)/ppd
-chgrp $(CUPS_GROUP) $(SERVERROOT)/ppd
+ echo Creating $(SERVERROOT)/ssl...
+ $(INSTALL_DIR) -m 700 $(SERVERROOT)/ssl
+ -chgrp $(CUPS_GROUP) $(SERVERROOT)/ssl
echo Creating $(STATEDIR)...
$(INSTALL_DIR) -m 755 $(STATEDIR)
echo Creating $(STATEDIR)/certs...
#
-# End of "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $".
+# End of "$Id: Makefile 5736 2006-07-13 19:59:36Z mike $".
#
/*
- * "$Id: client.c 5630 2006-06-05 18:42:53Z mike $"
+ * "$Id: client.c 5739 2006-07-16 15:21:18Z mike $"
*
* Client routines for the Common UNIX Printing System (CUPS) scheduler.
*
static int is_cgi(cupsd_client_t *con, const char *filename,
struct stat *filestats, mime_type_t *type);
static int is_path_absolute(const char *path);
-#ifdef HAVE_GNUTLS
-static void make_certificate(void);
-#endif /* HAVE_GNUTLS */
+#ifdef HAVE_SSL
+static int make_certificate(void);
+#endif /* HAVE_SSL */
static int pipe_command(cupsd_client_t *con, int infile, int *outfile,
char *command, char *options, int root);
static int write_file(cupsd_client_t *con, http_status_t code,
unsigned long error; /* Error code */
+ /*
+ * Verify that we have a certificate...
+ */
+
+ if (access(ServerKey, 0) || access(ServerCertificate, 0))
+ {
+ /*
+ * Nope, make a self-signed certificate...
+ */
+
+ if (!make_certificate())
+ return (0);
+ }
+
/*
* Create the SSL context and accept the connection...
*/
* Nope, make a self-signed certificate...
*/
- make_certificate();
+ if (!make_certificate())
+ return (0);
}
/*
conn->session = NULL;
conn->certsArray = get_cdsa_server_certs();
+ if (!conn->certsArray)
+ {
+ /*
+ * No keychain (yet), make a self-signed certificate...
+ */
+
+ if (make_certificate())
+ conn->certsArray = get_cdsa_server_certs();
+ }
+
if (!conn->certsArray)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
}
-#ifdef HAVE_GNUTLS
+#ifdef HAVE_SSL
/*
* 'make_certificate()' - Make a self-signed SSL/TLS certificate.
*/
-static void
+static int /* O - 1 on success, 0 on failure */
make_certificate(void)
{
+#if defined(HAVE_LIBSSL) && defined(HAVE_WAITPID)
+ int pid, /* Process ID of command */
+ status; /* Status of command */
+ char command[1024], /* Command */
+ *argv[11], /* Command-line arguments */
+ *envp[MAX_ENV]; /* Environment variables */
+
+
+ /*
+ * Run the "openssl" command to generate a self-signed certificate
+ * that is good for 10 years:
+ *
+ * openssl req -new -x509 -keyout ServerKey \
+ * -out ServerCertificate -days 3650 -nodes
+ */
+
+ if (!cupsFileFind("openssl", getenv("PATH"), 1, command, sizeof(command)))
+ {
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "No SSL certificate and openssl command not found!");
+ return (0);
+ }
+
+ cupsdLogMessage(CUPSD_LOG_INFO,
+ "Generating SSL server key and certificate...");
+
+ argv[0] = "openssl";
+ argv[1] = "req";
+ argv[2] = "-new";
+ argv[3] = "-x509";
+ argv[4] = "-keyout";
+ argv[5] = ServerKey;
+ argv[6] = "-out";
+ argv[7] = ServerCertificate;
+ argv[8] = "-days";
+ argv[9] = "3650";
+ argv[10] = "-nodes";
+ argv[11] = NULL;
+
+ cupsdLoadEnv(envp, MAX_ENV);
+
+ if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, 1, &pid))
+ return (0);
+
+ while (waitpid(pid, &status, 0) < 0)
+ if (errno != EINTR)
+ {
+ status = 1;
+ break;
+ }
+
+ cupsdFinishProcess(pid, command, sizeof(command));
+
+ if (status)
+ {
+ if (WIFEXITED(status))
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Unable to create SSL server key and certificate - "
+ "the openssl command stopped with status %d!",
+ WEXITSTATUS(status));
+ else
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Unable to create SSL server key and certificate - "
+ "the openssl command crashed on signal %d!",
+ WTERMSIG(status));
+ }
+ else
+ {
+ cupsdLogMessage(CUPSD_LOG_INFO, "Created SSL server key file \"%s\"...",
+ ServerKey);
+ cupsdLogMessage(CUPSD_LOG_INFO,
+ "Created SSL server certificate file \"%s\"...",
+ ServerCertificate);
+ }
+
+ return (!status);
+
+#elif defined(HAVE_GNUTLS)
gnutls_x509_crt crt; /* Self-signed certificate */
gnutls_x509_privkey key; /* Encryption key */
cups_lang_t *language; /* Default language info */
* Create the encryption key...
*/
- cupsdLogMessage(CUPSD_LOG_INFO, "Generating server key...");
+ cupsdLogMessage(CUPSD_LOG_INFO, "Generating SSL server key...");
gnutls_x509_privkey_init(&key);
gnutls_x509_privkey_generate(key, GNUTLS_PK_RSA, 2048, 0);
if ((result = gnutls_x509_privkey_export(key, GNUTLS_X509_FMT_PEM,
buffer, &bytes)) < 0)
{
- cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to export server key - %s",
+ cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to export SSL server key - %s",
gnutls_strerror(result));
gnutls_x509_privkey_deinit(key);
- return;
+ return (0);
}
else if ((fp = cupsFileOpen(ServerKey, "w")) != NULL)
{
cupsFileWrite(fp, (char *)buffer, bytes);
cupsFileClose(fp);
- cupsdLogMessage(CUPSD_LOG_INFO, "Created server key file \"%s\"...",
+ cupsdLogMessage(CUPSD_LOG_INFO, "Created SSL server key file \"%s\"...",
ServerKey);
}
else
{
cupsdLogMessage(CUPSD_LOG_ERROR,
- "Unable to create server key file \"%s\" - %s",
+ "Unable to create SSL server key file \"%s\" - %s",
ServerKey, strerror(errno));
gnutls_x509_privkey_deinit(key);
- return;
+ return (0);
}
/*
* Create the self-signed certificate...
*/
- cupsdLogMessage(CUPSD_LOG_INFO, "Generating self-signed certificate...");
+ cupsdLogMessage(CUPSD_LOG_INFO, "Generating self-signed SSL certificate...");
language = cupsLangDefault();
curtime = time(NULL);
if ((result = gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM,
buffer, &bytes)) < 0)
cupsdLogMessage(CUPSD_LOG_ERROR,
- "Unable to export server certificate - %s",
+ "Unable to export SSL server certificate - %s",
gnutls_strerror(result));
else if ((fp = cupsFileOpen(ServerCertificate, "w")) != NULL)
{
cupsFileClose(fp);
cupsdLogMessage(CUPSD_LOG_INFO,
- "Created 10-year server certificate file \"%s\"...",
+ "Created SSL server certificate file \"%s\"...",
ServerCertificate);
}
else
cupsdLogMessage(CUPSD_LOG_ERROR,
- "Unable to create server certificate file \"%s\" - %s",
+ "Unable to create SSL server certificate file \"%s\" - %s",
ServerCertificate, strerror(errno));
/*
gnutls_x509_crt_deinit(crt);
gnutls_x509_privkey_deinit(key);
+
+ return (1);
+
+#elif defined(HAVE_CDSASSL) && defined(HAVE_WAITPID)
+ int pid, /* Process ID of command */
+ status; /* Status of command */
+ char command[1024], /* Command */
+ keychain[1024], /* Keychain argument */
+ *argv[5], /* Command-line arguments */
+ *envp[MAX_ENV]; /* Environment variables */
+
+
+ /*
+ * Run the "certtool" command to generate a self-signed certificate:
+ *
+ * certtool c Z k=ServerCertificate
+ */
+
+ if (!cupsFileFind("certtool", getenv("PATH"), 1, command, sizeof(command)))
+ {
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "No SSL certificate and certtool command not found!");
+ return (0);
+ }
+
+ cupsdLogMessage(CUPSD_LOG_INFO,
+ "Generating SSL server key and certificate...");
+
+ snprintf(keychain, sizeof(keychain), "k=%s", ServerCertificate);
+
+ argv[0] = "certtool";
+ argv[1] = "c";
+ argv[2] = "Z";
+ argv[3] = keychain;
+ argv[4] = NULL;
+
+ cupsdLoadEnv(envp, MAX_ENV);
+
+ if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, 1, &pid))
+ return (0);
+
+ while (waitpid(pid, &status, 0) < 0)
+ if (errno != EINTR)
+ {
+ status = 1;
+ break;
+ }
+
+ cupsdFinishProcess(pid, command, sizeof(command));
+
+ if (status)
+ {
+ if (WIFEXITED(status))
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Unable to create SSL server key and certificate - "
+ "the certtool command stopped with status %d!",
+ WEXITSTATUS(status));
+ else
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Unable to create SSL server key and certificate - "
+ "the certtool command crashed on signal %d!",
+ WTERMSIG(status));
+ }
+ else
+ {
+ cupsdLogMessage(CUPSD_LOG_INFO,
+ "Created SSL server certificate file \"%s\"...",
+ ServerCertificate);
+ }
+
+ return (!status);
+
+#else
+ return (0);
+#endif /* HAVE_LIBSSL && HAVE_WAITPID */
}
-#endif /* HAVE_GNUTLS */
+#endif /* HAVE_SSL */
/*
/*
- * End of "$Id: client.c 5630 2006-06-05 18:42:53Z mike $".
+ * End of "$Id: client.c 5739 2006-07-16 15:21:18Z mike $".
*/
/*
- * "$Id: conf.c 5663 2006-06-15 20:36:42Z mike $"
+ * "$Id: conf.c 5736 2006-07-13 19:59:36Z mike $"
*
* Configuration routines for the Common UNIX Printing System (CUPS).
*
RunUser = getuid();
+ /*
+ * See if the ServerName is an IP address...
+ */
+
+ for (slash = ServerName; isdigit(*slash & 255) || *slash == '.'; slash ++);
+
+ ServerNameIsIP = !*slash;
+
/*
* Use the default system group if none was supplied in cupsd.conf...
*/
"Allowing up to %d client connections per host.",
MaxClientsPerHost);
+ /*
+ * Make sure that BrowseTimeout is at least twice the interval...
+ */
+
+ if (BrowseTimeout < (2 * BrowseInterval) || BrowseTimeout <= 0)
+ {
+ cupsdLogMessage(CUPSD_LOG_ALERT, "Invalid BrowseTimeout value %d!",
+ BrowseTimeout);
+
+ if (BrowseInterval)
+ BrowseTimeout = BrowseInterval * 2;
+ else
+ BrowseTimeout = DEFAULT_TIMEOUT;
+
+ cupsdLogMessage(CUPSD_LOG_ALERT, "Reset BrowseTimeout to %d!",
+ BrowseTimeout);
+ }
+
/*
* Update the default policy, as needed...
*/
strlcpy(temp2, relay->from.mask.name.name, sizeof(temp2));
cupsdLogMessage(CUPSD_LOG_INFO, "Relaying from %s to %s:%d (IPv4)",
- temp, temp2, ntohs(relay->to.ipv4.sin_port));
+ temp2, temp, ntohs(relay->to.ipv4.sin_port));
NumRelays ++;
}
n *= 262144;
}
- *((int *)var->ptr) = n;
+ if (n < 0)
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Bad negative integer value for %s on line %d!",
+ line, linenum);
+ else
+ *((int *)var->ptr) = n;
}
break;
/*
- * End of "$Id: conf.c 5663 2006-06-15 20:36:42Z mike $".
+ * End of "$Id: conf.c 5736 2006-07-13 19:59:36Z mike $".
*/
/*
- * "$Id: conf.h 5216 2006-03-02 17:47:53Z mike $"
+ * "$Id: conf.h 5696 2006-06-26 18:34:20Z mike $"
*
* Configuration file definitions for the Common UNIX Printing System (CUPS)
* scheduler.
/* Directory for request files */
*DocumentRoot VALUE(NULL);
/* Root directory for documents */
+VAR int ServerNameIsIP VALUE(0);
VAR int NumSystemGroups VALUE(0);
/* Number of system group names */
VAR char *SystemGroups[MAX_SYSTEM_GROUPS];
/*
- * End of "$Id: conf.h 5216 2006-03-02 17:47:53Z mike $".
+ * End of "$Id: conf.h 5696 2006-06-26 18:34:20Z mike $".
*/
/*
- * "$Id: cups-polld.c 5305 2006-03-18 03:05:12Z mike $"
+ * "$Id: cups-polld.c 5753 2006-07-18 19:53:24Z mike $"
*
* Polling daemon for the Common UNIX Printing System (CUPS).
*
- * Copyright 1997-2005 by Easy Software Products, all rights reserved.
+ * Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* Contents:
*
* main() - Open sockets and poll until we are killed...
+ * dequote() - Remote quotes from a string.
* poll_server() - Poll the server for the given set of printers or classes.
*/
* Local functions...
*/
-static int poll_server(http_t *http, cups_lang_t *language, ipp_op_t op,
- int sock, int port, int interval,
+static char *dequote(char *d, const char *s, int dlen);
+static int poll_server(http_t *http, int sock, int port, int interval,
const char *prefix);
*/
int /* O - Exit status */
-main(int argc, /* I - Number of command-line arguments */
+main(int argc, /* I - Number of command-line args */
char *argv[]) /* I - Command-line arguments */
{
- http_t *http; /* HTTP connection */
- cups_lang_t *language; /* Language info */
- int interval; /* Polling interval */
- int sock; /* Browser sock */
- int port; /* Browser port */
- int val; /* Socket option value */
- int seconds, /* Seconds left from poll */
- remain; /* Total remaining time to sleep */
- char prefix[1024]; /* Prefix for log messages */
+ http_t *http; /* HTTP connection */
+ int interval; /* Polling interval */
+ int sock; /* Browser sock */
+ int port; /* Browser port */
+ int val; /* Socket option value */
+ int seconds, /* Seconds left from poll */
+ remain; /* Total remaining time to sleep */
+ char prefix[1024]; /* Prefix for log messages */
/*
fprintf(stderr, "ERROR: %s Unable to connect to %s on port %s: %s\n",
prefix, argv[1], argv[2],
h_errno ? hstrerror(h_errno) : strerror(errno));
- sleep (interval);
+ sleep(interval);
}
/*
* Loop forever, asking for available printers and classes...
*/
- language = cupsLangDefault();
-
for (;;)
{
/*
- * Get the printers, then the classes...
+ * Get the printers and classes...
*/
remain = interval;
- if ((seconds = poll_server(http, language, CUPS_GET_PRINTERS, sock, port,
- interval, prefix)) > 0)
+ if ((seconds = poll_server(http, sock, port, interval, prefix)) > 0)
remain -= seconds;
/*
}
+/*
+ * 'dequote()' - Remote quotes from a string.
+ */
+
+static char * /* O - Dequoted string */
+dequote(char *d, /* I - Destination string */
+ const char *s, /* I - Source string */
+ int dlen) /* I - Destination length */
+{
+ char *dptr; /* Pointer into destination */
+
+
+ if (s)
+ {
+ for (dptr = d, dlen --; *s && dlen > 0; s ++)
+ if (*s != '\"')
+ {
+ *dptr++ = *s;
+ dlen --;
+ }
+
+ *dptr = '\0';
+ }
+ else
+ *d = '\0';
+
+ return (d);
+}
+
+
/*
* 'poll_server()' - Poll the server for the given set of printers or classes.
*/
static int /* O - Number of seconds or -1 on error */
poll_server(http_t *http, /* I - HTTP connection */
- cups_lang_t *language, /* I - Language */
- ipp_op_t op, /* I - Operation code */
int sock, /* I - Broadcast sock */
int port, /* I - Broadcast port */
int interval, /* I - Polling interval */
ipp_t *request, /* Request data */
*response; /* Response data */
ipp_attribute_t *attr; /* Current attribute */
- const char *uri, /* printer-uri */
- *info, /* printer-info */
- *location, /* printer-location */
- *make_model; /* printer-make-and-model */
+ const char *uri; /* printer-uri */
+ char info[1024], /* printer-info */
+ job_sheets[1024],/* job-sheets-default */
+ location[1024], /* printer-location */
+ make_model[1024];
+ /* printer-make-and-model */
cups_ptype_t type; /* printer-type */
ipp_pstate_t state; /* printer-state */
int accepting; /* printer-is-accepting-jobs */
char packet[1540]; /* Data packet */
static const char * const attrs[] = /* Requested attributes */
{
+ "job-sheets-default",
"printer-info",
"printer-is-accepting-jobs",
"printer-location",
addr.sin_port = htons(port);
/*
- * Build a CUPS_GET_PRINTERS or CUPS_GET_CLASSES request, which requires
- * only the attributes-charset and attributes-natural-language attributes.
+ * Build a CUPS_GET_PRINTERS request and pass along a list of the
+ * attributes we are interested in along with the types of printers
+ * (and classes) we want.
*/
- request = ippNew();
-
- request->request.op.operation_id = op;
- request->request.op.request_id = 1;
-
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
- "attributes-charset", NULL, cupsLangEncoding(language));
-
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
- "attributes-natural-language", NULL, language->language);
+ request = ippNewRequest(CUPS_GET_PRINTERS);
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", sizeof(attrs) / sizeof(attrs[0]),
* Do the request and get back a response...
*/
- if ((response = cupsDoRequest(http, request, "/")) != NULL)
+ response = cupsDoRequest(http, request, "/");
+
+ if (cupsLastError() > IPP_OK_CONFLICT)
{
- if (response->request.status.status_code > IPP_OK_CONFLICT)
- {
- fprintf(stderr, "ERROR: %s get-%s failed: %s\n", prefix,
- op == CUPS_GET_PRINTERS ? "printers" : "classes",
- ippErrorString(response->request.status.status_code));
- ippDelete(response);
- return (-1);
- }
+ fprintf(stderr, "ERROR: %s CUPS-Get-Printers failed: %s\n", prefix,
+ cupsLastErrorString());
+ ippDelete(response);
+ return (-1);
+ }
+ if (response)
+ {
/*
* Figure out how many printers/classes we have...
*/
attr = ippFindNextAttribute(response, "printer-name", IPP_TAG_NAME),
max_count ++);
- fprintf(stderr, "DEBUG: %s found %d %s.\n", prefix, max_count,
- op == CUPS_GET_PRINTERS ? "printers" : "classes");
+ fprintf(stderr, "DEBUG: %s Found %d printers.\n", prefix, max_count);
count = 0;
seconds = time(NULL);
* Loop through the printers or classes returned in the list...
*/
- for (attr = response->attrs; attr != NULL; attr = attr->next)
+ for (attr = response->attrs; attr; attr = attr->next)
{
/*
* Skip leading attributes until we hit a printer...
*/
- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
+ while (attr && attr->group_tag != IPP_TAG_PRINTER)
attr = attr->next;
- if (attr == NULL)
+ if (!attr)
break;
/*
* Pull the needed attributes from this printer...
*/
- uri = NULL;
- info = "";
- location = "";
- make_model = "";
- type = CUPS_PRINTER_REMOTE;
- accepting = 1;
- state = IPP_PRINTER_IDLE;
+ uri = NULL;
+ info[0] = '\0';
+ job_sheets[0] = '\0';
+ location[0] = '\0';
+ make_model[0] = '\0';
+ type = CUPS_PRINTER_REMOTE;
+ accepting = 1;
+ state = IPP_PRINTER_IDLE;
while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
{
- if (strcmp(attr->name, "printer-uri-supported") == 0 &&
- attr->value_tag == IPP_TAG_URI)
+ if (!strcmp(attr->name, "job-sheets-default") &&
+ (attr->value_tag == IPP_TAG_NAME ||
+ attr->value_tag == IPP_TAG_KEYWORD))
+ {
+ if (attr->num_values == 1)
+ snprintf(job_sheets, sizeof(job_sheets), " job-sheets=%s",
+ attr->values[0].string.text);
+ else
+ snprintf(job_sheets, sizeof(job_sheets), " job-sheets=%s,%s",
+ attr->values[0].string.text,
+ attr->values[1].string.text);
+ }
+ else if (!strcmp(attr->name, "printer-uri-supported") &&
+ attr->value_tag == IPP_TAG_URI)
uri = attr->values[0].string.text;
-
- if (strcmp(attr->name, "printer-info") == 0 &&
- attr->value_tag == IPP_TAG_TEXT)
- info = attr->values[0].string.text;
-
- if (strcmp(attr->name, "printer-is-accepting-jobs") == 0 &&
- attr->value_tag == IPP_TAG_BOOLEAN)
+ else if (!strcmp(attr->name, "printer-info") &&
+ attr->value_tag == IPP_TAG_TEXT)
+ dequote(info, attr->values[0].string.text, sizeof(info));
+ else if (!strcmp(attr->name, "printer-is-accepting-jobs") &&
+ attr->value_tag == IPP_TAG_BOOLEAN)
accepting = attr->values[0].boolean;
-
- if (strcmp(attr->name, "printer-location") == 0 &&
- attr->value_tag == IPP_TAG_TEXT)
- location = attr->values[0].string.text;
-
- if (strcmp(attr->name, "printer-make-and-model") == 0 &&
- attr->value_tag == IPP_TAG_TEXT)
- make_model = attr->values[0].string.text;
-
- if (strcmp(attr->name, "printer-state") == 0 &&
- attr->value_tag == IPP_TAG_ENUM)
+ else if (!strcmp(attr->name, "printer-location") &&
+ attr->value_tag == IPP_TAG_TEXT)
+ dequote(location, attr->values[0].string.text, sizeof(location));
+ else if (!strcmp(attr->name, "printer-make-and-model") &&
+ attr->value_tag == IPP_TAG_TEXT)
+ dequote(make_model, attr->values[0].string.text, sizeof(location));
+ else if (!strcmp(attr->name, "printer-state") &&
+ attr->value_tag == IPP_TAG_ENUM)
state = (ipp_pstate_t)attr->values[0].integer;
-
- if (strcmp(attr->name, "printer-type") == 0 &&
- attr->value_tag == IPP_TAG_ENUM)
+ else if (!strcmp(attr->name, "printer-type") &&
+ attr->value_tag == IPP_TAG_ENUM)
type = (cups_ptype_t)attr->values[0].integer;
attr = attr->next;
if (!accepting)
type |= CUPS_PRINTER_REJECTING;
- snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\"\n",
- type, state, uri, location, info, make_model);
+ snprintf(packet, sizeof(packet),
+ "%x %x %s \"%s\" \"%s\" \"%s\" lease-duration=%d%s\n",
+ type, state, uri, location, info, make_model, interval * 2,
+ job_sheets);
fprintf(stderr, "DEBUG2: %s Sending %s", prefix, packet);
*/
count = 0;
+
sleep(1);
}
- if (attr == NULL)
+ if (!attr)
break;
}
ippDelete(response);
}
- else
- {
- fprintf(stderr, "ERROR: %s get-%s failed: %s\n", prefix,
- op == CUPS_GET_PRINTERS ? "printers" : "classes",
- ippErrorString(cupsLastError()));
- return (-1);
- }
/*
* Return the number of seconds we used...
/*
- * End of "$Id: cups-polld.c 5305 2006-03-18 03:05:12Z mike $".
+ * End of "$Id: cups-polld.c 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: dirsvc.c 5663 2006-06-15 20:36:42Z mike $"
+ * "$Id: dirsvc.c 5724 2006-07-12 19:42:35Z mike $"
*
* Directory services routines for the Common UNIX Printing System (CUPS).
*
else
p = cupsdAddPrinter(value);
- p->accepting = 1;
- p->state = IPP_PRINTER_IDLE;
- p->type |= CUPS_PRINTER_REMOTE;
- p->browse_time = now + BrowseTimeout;
+ p->accepting = 1;
+ p->state = IPP_PRINTER_IDLE;
+ p->type |= CUPS_PRINTER_REMOTE;
+ p->browse_time = now;
+ p->browse_expire = now + BrowseTimeout;
/*
* Set the default printer as needed...
else
p = cupsdAddClass(value);
- p->accepting = 1;
- p->state = IPP_PRINTER_IDLE;
- p->type |= CUPS_PRINTER_REMOTE;
- p->browse_time = now + BrowseTimeout;
+ p->accepting = 1;
+ p->state = IPP_PRINTER_IDLE;
+ p->type |= CUPS_PRINTER_REMOTE;
+ p->browse_time = now;
+ p->browse_expire = now + BrowseTimeout;
/*
* Set the default printer as needed...
{
time_t t = atoi(value);
- if (t > (now + BrowseInterval))
- p->browse_time = t;
+ if (t > p->browse_expire)
+ p->browse_expire = t;
}
else
{
cupsFilePrintf(fp, "Type %d\n", printer->type);
- cupsFilePrintf(fp, "BrowseTime %d\n", (int)printer->browse_time);
+ cupsFilePrintf(fp, "BrowseTime %d\n", (int)printer->browse_expire);
if (printer->info)
cupsFilePrintf(fp, "Info %s\n", printer->info);
fcntl(BrowseSocket, F_SETFD, fcntl(BrowseSocket, F_GETFD) | FD_CLOEXEC);
/*
- * Finally, add the socket to the input selection set...
+ * Finally, add the socket to the input selection set as needed...
*/
- cupsdLogMessage(CUPSD_LOG_DEBUG2,
- "cupsdStartBrowsing: Adding fd %d to InputSet...",
- BrowseSocket);
+ if (BrowseRemoteProtocols & BROWSE_CUPS)
+ {
+ /*
+ * We only listen if we want remote printers...
+ */
- FD_SET(BrowseSocket, InputSet);
+ cupsdLogMessage(CUPSD_LOG_DEBUG2,
+ "cupsdStartBrowsing: Adding fd %d to InputSet...",
+ BrowseSocket);
+
+ FD_SET(BrowseSocket, InputSet);
+ }
}
else
BrowseSocket = -1;
hptr = strchr(host, '.');
sptr = strchr(ServerName, '.');
- if (sptr != NULL && hptr != NULL)
+ if (!ServerNameIsIP && sptr != NULL && hptr != NULL)
{
/*
* Strip the common domain name components...
/*
- * End of "$Id: dirsvc.c 5663 2006-06-15 20:36:42Z mike $".
+ * End of "$Id: dirsvc.c 5724 2006-07-12 19:42:35Z mike $".
*/
/*
- * "$Id: ipp.c 5686 2006-06-21 21:02:56Z mike $"
+ * "$Id: ipp.c 5736 2006-07-13 19:59:36Z mike $"
*
* IPP routines for the Common UNIX Printing System (CUPS) scheduler.
*
{
httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri),
"ipp", NULL, con->servername, con->serverport,
- "/printers/%s", printer->name);
+ (printer->type & CUPS_PRINTER_CLASS) ?
+ "/classes/%s" : "/printers/%s", printer->name);
ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI,
"printer-uri-supported", NULL, printer_uri);
cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-uri-supported=\"%s\"",
recipient = attr->values[0].string.text;
- if (httpSeparateURI(HTTP_URI_CODING_ALL, recipient, scheme,
- sizeof(scheme), userpass, sizeof(userpass), host,
- sizeof(host), &port, resource, sizeof(resource)))
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, recipient,
+ scheme, sizeof(scheme), userpass, sizeof(userpass),
+ host, sizeof(host), &port,
+ resource, sizeof(resource)) < HTTP_URI_OK)
{
send_ipp_status(con, IPP_NOT_POSSIBLE,
_("Bad notify-recipient URI \"%s\"!"), recipient);
cupsdStartPrinter(printer, 1);
if (dtype & CUPS_PRINTER_CLASS)
- {
cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" started by \"%s\".", name,
get_username(con));
- cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL,
- "Class \"%s\" started by \"%s\".", name, get_username(con));
- }
else
- {
cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" started by \"%s\".", name,
get_username(con));
- cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL,
- "Printer \"%s\" started by \"%s\".", name, get_username(con));
- }
cupsdCheckJobs();
cupsdStopPrinter(printer, 1);
if (dtype & CUPS_PRINTER_CLASS)
- {
cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" stopped by \"%s\".", name,
get_username(con));
- cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL,
- "Class \"%s\" stopped by \"%s\".", name, get_username(con));
- }
else
- {
cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" stopped by \"%s\".", name,
get_username(con));
- cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL,
- "Printer \"%s\" stopped by \"%s\".", name, get_username(con));
- }
/*
* Everything was ok, so return OK status...
/*
- * End of "$Id: ipp.c 5686 2006-06-21 21:02:56Z mike $".
+ * End of "$Id: ipp.c 5736 2006-07-13 19:59:36Z mike $".
*/
/*
- * "$Id: job.c 5686 2006-06-21 21:02:56Z mike $"
+ * "$Id: job.c 5719 2006-07-11 21:04:48Z mike $"
*
* Job management routines for the Common UNIX Printing System (CUPS).
*
int diff; /* Difference */
- if ((diff = ((cupsd_job_t *)first)->priority -
- ((cupsd_job_t *)second)->priority) != 0)
+ if ((diff = ((cupsd_job_t *)second)->priority -
+ ((cupsd_job_t *)first)->priority) != 0)
return (diff);
else
return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
{
snprintf(final_content_type, sizeof(final_content_type),
"FINAL_CONTENT_TYPE=%s/%s",
- filter->dst->super, filter->dst->type);
+ filter->src->super, filter->src->type);
envp[envc ++] = final_content_type;
}
/*
- * End of "$Id: job.c 5686 2006-06-21 21:02:56Z mike $".
+ * End of "$Id: job.c 5719 2006-07-11 21:04:48Z mike $".
*/
/*
- * "$Id: listen.c 5083 2006-02-06 02:57:43Z mike $"
+ * "$Id: listen.c 5724 2006-07-12 19:42:35Z mike $"
*
* Server listening routines for the Common UNIX Printing System (CUPS)
* scheduler.
* "any" address...
*/
- if (!LocalPort && p > 0 &&
+ if ((!LocalPort || LocalEncryption == HTTP_ENCRYPT_ALWAYS) && p > 0 &&
(httpAddrLocalhost(&(lis->address)) ||
httpAddrAny(&(lis->address))))
{
*/
cupsdSetEnv("CUPS_SERVER", have_domain);
+
+ LocalEncryption = HTTP_ENCRYPT_IF_REQUESTED;
}
else
{
/*
- * End of "$Id: listen.c 5083 2006-02-06 02:57:43Z mike $".
+ * End of "$Id: listen.c 5724 2006-07-12 19:42:35Z mike $".
*/
/*
- * "$Id: printers.c 5686 2006-06-21 21:02:56Z mike $"
+ * "$Id: printers.c 5724 2006-07-12 19:42:35Z mike $"
*
* Printer routines for the Common UNIX Printing System (CUPS).
*
}
cupsArrayDelete(notifiers);
+ cupsDirClose(dir);
}
/* number-up-supported */
cupsArrayRemove(Printers, p);
+ if (p->type & CUPS_PRINTER_IMPLICIT)
+ cupsArrayRemove(ImplicitPrinters, p);
+
/*
* Remove the dummy interface/icon/option files under IRIX...
*/
*/
cupsArrayAdd(Printers, p);
+
if (p->type & CUPS_PRINTER_IMPLICIT)
cupsArrayAdd(ImplicitPrinters, p);
}
/*
- * End of "$Id: printers.c 5686 2006-06-21 21:02:56Z mike $".
+ * End of "$Id: printers.c 5724 2006-07-12 19:42:35Z mike $".
*/
/*
- * "$Id: subscriptions.c 5673 2006-06-16 21:04:45Z mike $"
+ * "$Id: subscriptions.c 5716 2006-07-11 17:56:57Z mike $"
*
* Subscription routines for the Common UNIX Printing System (CUPS) scheduler.
*
cupsd_subscription_t *sub; /* Current subscription */
+ cupsdLogMessage(CUPSD_LOG_DEBUG2,
+ "cupsdAddEvent(event=%s, dest=%p(%s), job=%p(%d), text=\"%s\", ...)",
+ cupsdEventName(event), dest, dest ? dest->name : "",
+ job, job ? job->id : 0, text);
+
/*
* Keep track of events with any OS-supplied notification mechanisms...
*/
ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
"job-impressions-completed",
job->sheets ? job->sheets->values[0].integer : 0);
+ }
- /*
- * Send the notification for this subscription...
- */
+ /*
+ * Send the notification for this subscription...
+ */
- cupsd_send_notification(sub, temp);
- }
+ cupsd_send_notification(sub, temp);
}
}
ipp_state_t state; /* IPP event state */
- cupsdLogMessage(CUPSD_LOG_DEBUG,
+ cupsdLogMessage(CUPSD_LOG_DEBUG2,
"cupsd_send_notification(sub=%p(%d), event=%p(%s))\n",
sub, sub->id, event, cupsdEventName(event->event));
if (sub->recipient)
{
- if (sub->pipe < 0)
- cupsd_start_notifier(sub);
+ for (;;)
+ {
+ if (sub->pipe < 0)
+ cupsd_start_notifier(sub);
- cupsdLogMessage(CUPSD_LOG_DEBUG, "sub->pipe=%d", sub->pipe);
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "sub->pipe=%d", sub->pipe);
+
+ if (sub->pipe < 0)
+ break;
- if (sub->pipe >= 0)
- {
event->attrs->state = IPP_IDLE;
while ((state = ippWriteFile(sub->pipe, event->attrs)) != IPP_DATA)
break;
if (state == IPP_ERROR)
+ {
+ if (errno == EPIPE)
+ {
+ /*
+ * Notifier died, try restarting it...
+ */
+
+ cupsdLogMessage(CUPSD_LOG_WARN,
+ "Notifier for subscription %d (%s) went away, "
+ "retrying!",
+ sub->id, sub->recipient);
+ cupsdEndProcess(sub->pid, 0);
+
+ close(sub->pipe);
+ sub->pipe = -1;
+ continue;
+ }
+
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to send event for subscription %d (%s)!",
sub->id, sub->recipient);
+ }
+
+ /*
+ * If we get this far, break out of the loop...
+ */
+
+ break;
}
}
/*
- * End of "$Id: subscriptions.c 5673 2006-06-16 21:04:45Z mike $".
+ * End of "$Id: subscriptions.c 5716 2006-07-11 17:56:57Z mike $".
*/
/*
- * "$Id: cancel.c 5091 2006-02-08 18:39:56Z mike $"
+ * "$Id: cancel.c 5696 2006-06-26 18:34:20Z mike $"
*
* "cancel" command for the Common UNIX Printing System (CUPS).
*
case 'h' : /* Connect to host */
if (http != NULL)
+ {
httpClose(http);
+ http = NULL;
+ }
if (argv[i][2] != '\0')
cupsSetServer(argv[i] + 2);
/*
- * End of "$Id: cancel.c 5091 2006-02-08 18:39:56Z mike $".
+ * End of "$Id: cancel.c 5696 2006-06-26 18:34:20Z mike $".
*/
/*
- * "$Id: cupsaddsmb.c 5233 2006-03-06 03:39:28Z mike $"
+ * "$Id: cupsaddsmb.c 5753 2006-07-18 19:53:24Z mike $"
*
* "cupsaddsmb" command for the Common UNIX Printing System (CUPS).
*
if (!SAMBAPassword)
{
snprintf(prompt, sizeof(prompt),
- _("Password for %s required to access %s via SAMBA: "),
+ _cupsLangString(cupsLangDefault(),
+ _("Password for %s required to access %s via "
+ "SAMBA: ")),
SAMBAUser, SAMBAServer);
if ((SAMBAPassword = cupsGetPassword(prompt)) == NULL)
/*
- * End of "$Id: cupsaddsmb.c 5233 2006-03-06 03:39:28Z mike $".
+ * End of "$Id: cupsaddsmb.c 5753 2006-07-18 19:53:24Z mike $".
*/
/*
- * "$Id: lpoptions.c 4924 2006-01-13 01:55:20Z mike $"
+ * "$Id: lpoptions.c 5753 2006-07-18 19:53:24Z mike $"
*
* Printer option program for the Common UNIX Printing System (CUPS).
*
break;
case 'o' : /* -o option[=value] */
+ if (dest == NULL)
+ {
+ if (num_dests == 0)
+ num_dests = cupsGetDests(&dests);
+
+ if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) == NULL)
+ dest = dests;
+
+ for (j = 0; j < dest->num_options; j ++)
+ if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
+ num_options = cupsAddOption(dest->options[j].name,
+ dest->options[j].value,
+ num_options, &options);
+ }
+
if (argv[i][2])
num_options = cupsParseOptions(argv[i] + 2, num_options, &options);
else
break;
case 'r' : /* -r option (remove) */
+ if (dest == NULL)
+ {
+ if (num_dests == 0)
+ num_dests = cupsGetDests(&dests);
+
+ if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) == NULL)
+ dest = dests;
+
+ for (j = 0; j < dest->num_options; j ++)
+ if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
+ num_options = cupsAddOption(dest->options[j].name,
+ dest->options[j].value,
+ num_options, &options);
+ }
+
if (argv[i][2])
option = argv[i] + 2;
else
}
for (j = 0; j < num_options; j ++)
- if (strcasecmp(options[j].name, option) == 0)
+ if (!strcasecmp(options[j].name, option))
{
/*
* Remove this option...
/*
- * End of "$Id: lpoptions.c 4924 2006-01-13 01:55:20Z mike $".
+ * End of "$Id: lpoptions.c 5753 2006-07-18 19:53:24Z mike $".
*/
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Klasse hinzufügen</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Name:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Ort:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Beschreibung:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Mitglieder:</TH>
+<TD>
+<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
+{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-add-class.gif" ALT="Klasse hinzufügen"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Neuen Drucker hinzufügen</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Name:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Darf alle druckbaren Zeichen außer "/", "#", und Leerzeichen enthalten)</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Ort:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Für Menschen lesbarer Ort wie "Labor 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Beschreibung:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Für Menschen lesbare Beschreibung wie "HP LaserJet mit Duplexeinheit")</SMALL></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<TABLE CELLPADDING="0" CELLSPACING="0" WIDTH="100%" SUMMARY="Administration Tasks">
+<TR><TD VALIGN="TOP" NOWRAP>
+
+<H2 CLASS="title">Drucker</H2>
+
+<P>
+<A HREF="/admin?op=add-printer"><IMG
+SRC="/images/button-add-printer.gif" ALT="Drucker hinzufügen" CLASS="button"></A>
+<A HREF="/printers/"><IMG SRC="/images/button-manage-printers.gif"
+ALT="Drucker verwalten" CLASS="button"></A>
+{have_samba?<A HREF="/admin/?op=export-samba"><IMG
+SRC="/images/button-export-samba.gif" ALT="Drucker für Samba exportieren"
+CLASS="button"></A>:}
+</P>
+
+{#device_uri=0?:<P><B>Neue Drucker gefunden:</B></P><UL>{[device_uri]
+<LI><A HREF="/admin?op=add-printer&{device_options}"><IMG
+SRC="/images/button-add-this-printer.gif" ALT="Diesen Drucker hinzufuegen" CLASS="button"
+ALIGN="MIDDLE"></A>
+{device_make_and_model} ({device_info})</LI>
+}</UL>}
+
+<H2 CLASS="title">Klassen</H2>
+
+<P>
+<A HREF="/admin?op=add-class"><IMG SRC="/images/button-add-class.gif"
+ALT="Klasse hinzufügen" CLASS="button"></A>
+<A HREF="/classes/"><IMG SRC="/images/button-manage-classes.gif"
+ALT="Klassen verwalten" CLASS="button"></A>
+</P>
+
+<H2 CLASS="title">Druckaufträge</H2>
+
+<P>
+<A HREF="/jobs/"><IMG SRC="/images/button-manage-jobs.gif" ALT="Aufträge
+verwalten" CLASS="button"></A>
+</P>
+
+</TD><TD> </TD><TD VALIGN="TOP">
+
+<H2 CLASS="title">Server</H2>
+
+<P>
+<A HREF="/admin?op=config-server"><IMG
+SRC="/images/button-edit-configuration-file.gif" ALT="Konfigurationsdatei
+bearbeiten" CLASS="button"></A>
+<A HREF="/admin/log/access_log" TARGET="_blank"><IMG
+SRC="/images/button-view-access-log.gif" ALT="Zugriffsprotokoll betrachten"
+CLASS="button"></A>
+<A HREF="/admin/log/error_log" TARGET="_blank"><IMG
+SRC="/images/button-view-error-log.gif" ALT="Fehlerprotokoll betrachten"
+CLASS="button"></A>
+<A HREF="/admin/log/page_log" TARGET="_blank"><IMG
+SRC="/images/button-view-page-log.gif" ALT="Seitenprotokoll betrachten"
+CLASS="button"></A>
+</P>
+
+{SETTINGS_ERROR?<P>{SETTINGS_MESSAGE}</P>
+<BLOCKQUOTE>{SETTINGS_ERROR}</BLOCKQUOTE>:
+
+<FORM METHOD="POST" ACTION="/admin">
+
+<P><B>Grundlegende Servereinstellungen:</B></P>
+
+<P><INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_PRINTERS" {?remote_printers}> Zeige verteilte Drucker von anderen Systemen<BR>
+<INPUT TYPE="CHECKBOX" NAME="SHARE_PRINTERS" {?share_printers}> Verteile publizierte Drucker welche mit diesem System verbunden sind<BR>
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_ADMIN" {?remote_admin}> Erlaube entfernte Verwaltung<BR>
+<INPUT TYPE="CHECKBOX" NAME="USER_CANCEL_ANY" {?user_cancel_any}> Erlaube Benutzern jeden Auftrag abzubrechen (nicht nur die Eigenen)<BR>
+<INPUT TYPE="CHECKBOX" NAME="DEBUG_LOGGING" {?debug_logging}> Speichere Fehlerinformationen für Fehlersuche</P>
+
+<P><INPUT TYPE="IMAGE" SRC="/images/button-change-settings.gif" ALT="Einstellungen ändern"></P>
+
+</FORM>}
+
+</TD></TR>
+</TABLE>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
+
+<H2 CLASS="title">Gerät für {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Gerät:</TH>
+<TD>
+<SELECT NAME="DEVICE_URI">
+{[device_uri]<OPTION VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}" {?current_device_uri={device_uri}?SELECTED:{current_device_scheme={device_uri}?SELECTED:}}>
+{device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}</OPTION>
+}</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
+<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
+<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
+<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
+
+<H2 CLASS="title">Marke/Hersteller für {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Marke:</TH>
+<TD>
+<SELECT NAME="PPD_MAKE" SIZE="10">
+{[ppd_make]<OPTION VALUE="{ppd_make}" {?current_make={ppd_make}?SELECTED:}>{ppd_make}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD> </TD>
+</TR>
+<TR>
+<TH CLASS="label">Oder stellen Sie eine PPD Datei bereit:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
+TYPE="FILE" NAME="PPD_FILE"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-{op}.gif" ALT="{op=add-printer?Add Printer:Modify Printer}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
+<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
+<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
+<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
+
+<H2 CLASS="title">Modell/Treiber für {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Modell:</TH>
+<TD>
+<SELECT NAME="PPD_NAME" SIZE="10">
+{[ppd_name]<OPTION VALUE="{ppd_name}" {?current_make_and_model={ppd_make_and_model}?SELECTED:}>{ppd_make_and_model} ({ppd_natural_language})
+}</SELECT>
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">Oder stellen Sie eine PPD Datei bereit:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
+TYPE="FILE" NAME="PPD_FILE"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-{op}.gif" ALT="{op=add-printer?Add Printer:Modify Printer}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+
+<H2 CLASS="title">Serielle Anschlusseinstellungen für {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Baud Rate:</TH>
+<TD><SELECT NAME="BAUDRATE">
+{[baudrates]<OPTION {?baudrate={baudrates}?SELECTED:}>{baudrates}}
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Parität:</TH>
+<TD><SELECT NAME="PARITY">
+<OPTION VALUE="none" {?parity=none?SELECTED:}>None
+<OPTION VALUE="even" {?parity=even?SELECTED:}>Even
+<OPTION VALUE="odd" {?parity=odd?SELECTED:}>Odd
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Daten Bits:</TH>
+<TD><SELECT NAME="BITS">
+<OPTION {?bits=8?SELECTED:}>8
+<OPTION {?bits=7?SELECTED:}>7
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Flußkontrolle:</TH>
+<TD><SELECT NAME="FLOW">
+<OPTION VALUE="none" {?flow=none?SELECTED:}>None
+<OPTION VALUE="soft" {?flow=soft?SELECTED:}>XON/XOFF (Software)
+<OPTION VALUE="hard" {?flow=hard?SELECTED:}>RTS/CTS (Hardware)
+<OPTION VALUE="dtrdsr" {?flow=dtrdsr?SELECTED:}>DTR/DSR (Hardware)
+</SELECT></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
+
+<H2 CLASS="title">Geräte URI für {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Geräte URI:</TH>
+<TD><INPUT TYPE="TEXT" SIZE="60" MAXLENGTH="1024" NAME="DEVICE_URI" VALUE="{device_uri}"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>Beispiele:
+<PRE>
+ http://hostname:631/ipp/
+ http://hostname:631/ipp/port1
+
+ ipp://hostname/ipp/
+ ipp://hostname/ipp/port1
+
+ lpd://hostname/warteschlange
+
+ socket://hostname
+ socket://hostname:9100
+</PRE>
+
+<P>Bitte lesen Sie <A HREF="/help/network.html" TARGET="_blank">"Netzwerk
+Drucker"</A> um die korrekte URI für Ihren Drucker zu benutzen.</P>
+
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<P>Class <A HREF="/classes/{printer_name}">{printer_name}</A> wurde erfolgreich
+hinzugefügt.
--- /dev/null
+<P><B>Warning:</B> Sind Sie sicher, daß Sie die Klasse
+{printer_name} löschen zu wollen?</P>
+
+<P ALIGN="CENTER"><A
+HREF="/admin?op=delete-class&printer_name={printer_name}&confirm=yes"><IMG
+SRC="/images/button-delete-class.gif" ALT="Klasse löschen"
+CLASS="button"></A></P>
--- /dev/null
+<P>Klasse {printer_name} wurde erfolgreich gelöscht.
--- /dev/null
+<H3 CLASS="title">Aufträge</H3>
--- /dev/null
+<P>Klasse <A HREF="/classes/{printer_name}">{printer_name}</A> wurde
+erfolgreich geändert.
--- /dev/null
+<P ALIGN="CENTER">{total=0?Keine Klassen gefunden:Zeige {#printer_name} von {total} Klasse{total=1?:n}}.</P>
--- /dev/null
+{#printer_name=0?:
+{[printer_name]
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Standarddrucker):}
+{?printer_state_message=?:<SPAN CLASS="message">"{printer_state_message}"</SPAN>}</H2>
+
+<TABLE WIDTH="100%" CLASS="button" CELLSPACING="0" CELLPADDING="0" SUMMARY="{printer_name}">
+<TR>
+<TD VALIGN=TOP><A HREF="{printer_uri_supported}">
+<IMG SRC="/images/classes.gif" CLASS="button" ALT=""></A></TD>
+<TD VALIGN=TOP><B>Beschreibung:</B> {printer_info}<BR>
+<B>Ort:</B> {printer_location}<BR>
+<B>Klassenstatus:</B> {printer_state=3?frei:{printer_state=4?verarbeitend:gestoppt}},
+{printer_is_accepting_jobs=0?Aufträge ablehnen:Aufträge akzeptieren}, {printer_is_shared=0?nicht:} publiziert.
+{?member_uris=?:<BR>Mitglieder: {member_uris}}
+
+<P>
+<A HREF="{printer_uri_supported}?op=print-test-page">
+<IMG SRC="/images/button-print-test-page.gif" ALT="Testseite drucken" CLASS="button"></A>
+{printer_state=5?
+<A HREF="{admin_uri}?op=start-class&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-start-class.gif" ALT="Klasse starten" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-class&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-stop-class.gif" ALT="Klasse stoppen" CLASS="button"></A>
+}
+{printer_is_accepting_jobs=0?
+<A HREF="{admin_uri}?op=accept-jobs&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-accept-jobs.gif" ALT="Aufträge akzeptieren" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="Aufträge ablehnen" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=purge-jobs&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Alle Aufträge abbrechen" CLASS="button"></A>
+{printer_is_shared=0?
+<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=1&is_class=Y">
+<IMG SRC="/images/button-publish-printer.gif" ALT="Drucker publizieren" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=0&is_class=Y">
+<IMG SRC="/images/button-unpublish-printer.gif" ALT="Druckerpublikation aufheben" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-class&printer_name={%printer_name}">
+<IMG SRC="/images/button-modify-class.gif" ALT="Klasse ändern" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-class&printer_name={%printer_name}">
+<IMG SRC="/images/button-delete-class.gif" ALT="Klasse löschen" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-as-default&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-set-as-default.gif" ALT="Setze als Standard" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-allowed-users&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-set-allowed-users.gif" ALT="Erlaubte Benutzer festlegen" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
--- /dev/null
+<SCRIPT TYPE="text/javascript">
+function reset_config()
+{
+ document.cups.CUPSDCONF.value =
+"# Log general information in error_log - change \\"info\\" to \\"debug\\" for\\n" +
+"# troubleshooting...\\n" +
+"LogLevel info\\n" +
+"\\n" +
+"\\n" +
+"# Administrator user group...\\n" +
+"SystemGroup @CUPS_SYSTEM_GROUPS@\\n" +
+"\\n" +
+"\\n" +
+"# Only listen for connections from the local machine.\\n" +
+"Listen 127.0.0.1:@DEFAULT_IPP_PORT@\\n" +
+"@CUPS_LISTEN_DOMAINSOCKET@\\n" +
+"\\n" +
+"\\n" +
+"# Show shared printers on the local network.\\n" +
+"Browsing On\\n" +
+"BrowseOrder allow,deny\\n" +
+"BrowseAllow @LOCAL\\n" +
+"\\n" +
+"\\n" +
+"# Authenticate against system accounts by default...\\n" +
+"DefaultAuthType Basic\\n" +
+"\\n" +
+"# Restrict access to the server...\\n" +
+"<Location />\\n" +
+" Order allow,deny\\n" +
+" Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Restrict access to the admin pages...\\n" +
+"<Location /admin>\\n" +
+"@ENCRYPTION_REQUIRED@\\n" +
+" Order allow,deny\\n" +
+" Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Restrict access to configuration files...\\n" +
+"<Location /admin/conf>\\n" +
+" AuthType Basic\\n" +
+" Require user @SYSTEM\\n" +
+" Order allow,deny\\n" +
+" Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Set the default printer/job policies...\\n" +
+"<Policy default>\\n" +
+" # Job-related operations must be done by the owner or an adminstrator...\\n" +
+" <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>\\n" +
+" Require user @OWNER @SYSTEM\\n" +
+" Order deny,allow\\n" +
+" </Limit>\\n" +
+"\\n" +
+" # All administration operations require an adminstrator to authenticate...\\n" +
+" <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\\n" +
+" AuthType Basic\\n" +
+" Require user @SYSTEM\\n" +
+" Order deny,allow\\n" +
+" </Limit>\\n" +
+"\\n" +
+" # Only the owner or an administrator can cancel or authenticate a job...\\n" +
+" <Limit Cancel-Job CUPS-Authenticate-Job>\\n" +
+" Require user @OWNER @SYSTEM\\n" +
+" Order deny,allow\\n" +
+" </Limit>\\n" +
+"\\n" +
+" <Limit All>\\n" +
+" Order deny,allow\\n" +
+" </Limit>\\n" +
+"</Policy>\\n";
+}
+</SCRIPT>
+
+<H2 CLASS="title">Server Konfigurationsdatei</H2>
+
+<FORM NAME="cups" METHOD="POST" ACTION="/admin/">
+
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+
+<TEXTAREA NAME="CUPSDCONF" COLS="80" ROWS="25">{CUPSDCONF}</TEXTAREA>
+
+<P><INPUT TYPE="IMAGE" SRC="/images/button-save-changes.gif"
+ALT="Änderungen speichern"> <A
+HREF="javascript:reset_config();"><IMG
+SRC="/images/button-use-default-config.gif" CLASS="button"
+ALT="Standard Konfigurationsdatei verwenden"></A></P>
+
+</FORM>
--- /dev/null
+<P>Fehler:</P>
+
+<BLOCKQUOTE>Unbekannte Operation "{op}"!</BLOCKQUOTE>
--- /dev/null
+<P>{?message?{message}:Fehler:}</P>
+
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+ <TITLE>{title} - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
+ <!-- Prevent caching of CGI content -->
+ <META HTTP-EQUIV="Expires" CONTENT="now">
+ <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
+ {refresh_page?<META HTTP-EQUIV="Refresh" CONTENT="{refresh_page}">:}
+ <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
+ <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="{title}">
+<TR CLASS="HEADER">
+<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
+<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
+<TD WIDTH="100%" HEIGHT="60"><H1>{title}</H1></TD>
+<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
+SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+<TR CLASS="HEADER"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
+
+<A CLASS="unsel" HREF="/"><IMG SRC="/images/tab-left.gif"
+WIDTH="4" HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> Startseite <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=admin?:un}sel" HREF="/admin"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> Verwaltung <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=classes?:un}sel" HREF="/classes/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> Klassen <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=help?:un}sel" HREF="/help/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> Dokumentation/Hilfe <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=jobs?:un}sel" HREF="/jobs/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> Aufträge <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=printers?:un}sel" HREF="/printers/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> Drucker <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+</TD></TR>
+<TR CLASS="page">
+<TD WIDTH="15"> </TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="height: 100%;" VALIGN="TOP" CLASS="page">
--- /dev/null
+<FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
+{TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
+
+<P ALIGN="CENTER"><B>Suche in
+{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:Alle Dokumente}}:</B> <INPUT
+TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
+TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Suche">
+<A HREF="/help/{?HELPFILE}{QUERY?{TOPIC??TOPIC={TOPIC}:}:}"><IMG
+SRC="/images/button-clear.gif" ALT="Leeren" CLASS="button"></A></P>
+
+</FORM>
+
+<!-- Bookmarks -->
+<DIV CLASS="sidebar">
+<H3 CLASS="title">On-Line Hilfe Dokumente</H3>
+
+<P CLASS="l0"><A HREF="/help{QUERY??QUERY={QUERY}:}">Alle Dokumente</A></P>
+<HR>
+
+{[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
+}
+</DIV>
+
+{QUERY?<P>Suchresultate in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:Alle Dokumente}}\:</P>
+{QTEXT?<UL>
+{[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
+{QTEXT?</UL>:}
+:<P>Keine Übereinstimmung gefunden.</P>}
+<HR NOSHADE>:}
+{HELPTITLE?<H1>{HELPTITLE}
+<A HREF="/help/{HELPFILE}?PRINTABLE=YES" TARGET="_blank"><IMG
+SRC="/images/button-view-printable-version.gif" ALT="Druckversion anzeigen"
+CLASS="button"></A></H1>:<H1>CUPS Hilfeseiten</H1>
+
+<P>Dies ist das CUPS online Hilfesystem. Geben Sie Ihren Suchbegriff
+oben ein oder klicken Sie auf einen der Dokumentationslinks
+um sich die Online Hilfe Informationen anzeigen zu lassen</P>
+
+<P>Wenn Sie noch unerfahren im Umgang mit CUPS sind, lesen Sie die
+"<a href="overview.html">CUPS Übersicht</a>".
+Erfahrene Benutzer sollten "<a href="whatsnew.html">Was ist neu in CUPS 1.2</a>" lesen.</P>
+
+<P>Die <A HREF="http://www.cups.org/">CUPS Home Page</A> bietet
+ebenfalls viele Angebote inklusive Benutzer Diskussionsforen,
+Antworten auf häufig gestellte Fragen, und ein Formular für
+Fehlerberichte und Wünsche.</P>}
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+ <TITLE>{HELPTITLE}</TITLE>
+ <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups-printable.css">
+ <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+
+<H1>{HELPTITLE}</H1>
--- /dev/null
+<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde abgebrochen.
--- /dev/null
+<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde angehalten.
--- /dev/null
+<FORM METHOD="POST" ACTION="/{SECTION}/{job_id?:{printer_name}}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{job_id?<INPUT TYPE="HIDDEN" NAME="JOB_ID" VALUE="{job_id}">:}
+
+<H2 CLASS="title">{job_id?Verschiebe Auftrag {job_id}:Verschiebe alle Aufträge}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Neues Ziel:</TH>
+<TD>
+<SELECT NAME="JOB_PRINTER_URI" SIZE="10">
+{[job_printer_uri]<OPTION VALUE="{job_printer_uri}">{job_printer_name}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-move-job{job_id?:s}.gif" ALT="Verschiebe {job_id?Auftrag:Aufträge}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<P>{job_id?<A HREF="/jobs/{job_id}">Auftrag {job_id}</A>:All jobs} verschoben nach
+<A HREF="{job_printer_uri}">{job_printer_name}</A>.</P>
--- /dev/null
+<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde für Druck freigegeben.
--- /dev/null
+<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde neu gestartet.
--- /dev/null
+<P>{?which_jobs=?<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
+SRC="/images/button-show-completed.gif" CLASS="button" ALT="Fertige Aufträge anzeigen"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
+SRC="/images/button-show-all.gif" CLASS="button" ALT="Alle Aufträge anzeigen">:{which_jobs=all?<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
+SRC="/images/button-show-completed.gif" CLASS="button" ALT="Fertige Aufträge anzeigen"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="Aktive Aufträge anzeigen">:<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="Aktive Aufträge anzeigen"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
+SRC="/images/button-show-all.gif" CLASS="button" ALT="Alle Aufträge anzeigen">}}</A></P>
+
+<P ALIGN="CENTER">{total=0?Keine Aufträge gefunden:Zeige {#job_id} von {total} {?which_jobs=?active:{which_jobs=all?:fertigen}} {total=1?Auftrag:Aufträgen}}.</P>
--- /dev/null
+{#job_id=0?:
+<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%" SUMMARY="Auftragsliste">
+<TR CLASS="data">
+<TH>ID </TH>
+<TH>Name </TH>
+<TH>Benutzer </TH>
+<TH>Größe </TH>
+<TH>Seiten </TH>
+<TH>Status </TH>
+<TH>Kontrolle </TH>
+</TR>
+
+{[job_id]
+<TR CLASS="data" VALIGN="TOP">
+<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id} </TD>
+<TD>{?job_name=?Unbekannt:{job_name}} </TD>
+<TD>{job_originating_user_name} </TD>
+<TD>{job_k_octets}k </TD>
+<TD>{job_media_sheets_completed=0?Unbekannt:{?job_media_sheets_completed}}</TD>
+<TD>{job_state=3?schwebend seit<BR>{time_at_creation}:{job_state=4?angehalten seit<BR>{time_at_creation}:
+{job_state=5?verarbeitet seit<BR>{time_at_processing}:{job_state=6?gestoppt um<BR>{time_at_completed}:
+{job_state=7?abgebrochen um<BR>{time_at_completed}:{job_state=8?aborted:beendet um<BR>{time_at_completed}}}}}}} </TD>
+<TD>
+{job_preserved>0?
+<A HREF="/jobs/?op=restart-job&job_id={job_id}&job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-restart-job.gif" ALT="Auftrag neu drucken" CLASS="button"></A>:}
+{job_state=4?
+<A HREF="/jobs/?op=release-job&job_id={job_id}&job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-release-job.gif" ALT="Auftrag freigeben" CLASS="button"></A>:}
+{job_state=3?
+<A HREF="/jobs/?op=hold-job&job_id={job_id}&job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-hold-job.gif" ALT="Auftrag anhalten" CLASS="button"></A>:}
+{job_state<7?
+<A HREF="/jobs/?op=cancel-job&job_id={job_id}&job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-cancel-job.gif" ALT="Auftrag abbrechen" CLASS="button"></A>
+<A HREF="/jobs/?op=move-job&job_id={job_id}"><IMG
+SRC="/images/button-move-job.gif" ALT="Auftrag verschieben" CLASS="button"></A>:}
+ </TD>
+</TR>
+}
+</TABLE>
+}
--- /dev/null
+<P>Wartungskommando gesendet; Auftrags ID ist <A HREF="/printers/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Klasse {printer_name} ändern</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Name:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+{printer_name}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Ort:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Beschreibung:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Mitglieder:</TH>
+<TD>
+<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
+{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-modify-class.gif" ALT="Klasse ändern"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{?device_uri=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_DEVICE_URI" VALUE="{device_uri}">}
+{?printer_make_and_model=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{printer_make_and_model}">}
+
+<H2 CLASS="title">Drucker {printer_name} ändern</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Name:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">{printer_name}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Ort:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Für Menschen lesbarer Ort wie "Labor 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Beschreibung:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Für Menschen lesbare Beschreibung wie "HP LaserJet mit Duplexeinheit")</SMALL></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD>
+{[choices]<INPUT TYPE="RADIO" NAME="{keyword}" {choices={defchoice}?CHECKED:} VALUE="{choices}">{text}}
+</TD>
+</TR>
--- /dev/null
+<P><B>Error:</B> Die folgenden Parameter stehen im Konflikt zueinander:</P>
+
+<UL>
+{[ckeyword]<LI><A HREF="#{ckeyword}">{ckeytext}</A></LI>
+}</UL>
+
+<P>Bitte ändern Sie einen oder mehrere Parameter um die Konflikte zu beheben.</P>
--- /dev/null
+<H2 CLASS="title">{printer_name}: {group}</H2>
+
+<TABLE>
--- /dev/null
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD><SELECT NAME="{keyword}" MULTIPLE SIZE="10">
+{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
+</SELECT></TD>
+</TR>
--- /dev/null
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD><SELECT NAME="{keyword}">
+{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
+</SELECT></TD>
+</TR>
--- /dev/null
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-set-printer-options.gif" ALT="Druckereinstellungen festlegen"></TD>
+</TR>
+</TABLE>
--- /dev/null
+<TABLE WIDTH="100%" CLASS="pager" SUMMARY="Paging Bar">
+<TR>
+ <TD WIDTH="33%">{PREVURL?<A HREF="{PREVURL}"><IMG SRC="/images/button-show-previous.gif" ALT="Vorherige anzeigen" CLASS="button"></A>: }</TD>
+ <TD WIDTH="34%" ALIGN="CENTER">{ORDER=dec?<A HREF="{THISURL}&ORDER=asc"><IMG SRC="/images/button-sort-ascending.gif" ALT="Aufsteigend sortieren" CLASS="button"></A>:<A HREF="{THISURL}&ORDER=dec"><IMG SRC="/images/button-sort-descending.gif" ALT="Absteigend sortieren" CLASS="button"></A>}</TD>
+ <TD WIDTH="33%" ALIGN="RIGHT">{NEXTURL?<A HREF="{NEXTURL}"><IMG SRC="/images/button-show-next.gif" ALT="Nächste anzeigen" CLASS="button"></A>: }</TD>
+</TR>
+</TABLE>
--- /dev/null
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+akzeptiert jetzt Aufträge.</P>
--- /dev/null
+<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde erfolgreich
+hinzugefügt.
--- /dev/null
+<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde
+erfolgreich konfiguriert.
--- /dev/null
+<P><B>Warnung:</B> Sind Sie sicher, daß Sie den Drucker
+{printer_name} löschen wollen?</P>
+
+<P ALIGN="CENTER"><A
+HREF="/admin?op=delete-printer&printer_name={printer_name}&confirm=yes"><IMG
+SRC="/images/button-delete-printer.gif" ALT="Drucker löschen"
+CLASS="button"></A></P>
--- /dev/null
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+wurde zum Standarddrucker für diesen Server bestimmt.</P>
+
+<BLOCKQUOTE><B>Notiz:</B> Jede benutzerspezifische Standardeinstellung welche
+mit dem Befehl <TT>lpoptions</TT> gemacht wird überschreibt diese
+Standardeinstellung.</BLOCKQUOTE>
--- /dev/null
+<P>Drucker {printer_name} wurde erfolgreich gelöscht.
--- /dev/null
+<H3 CLASS="title">Aufträge</H3>
--- /dev/null
+<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde
+erfolgreich geändert.
--- /dev/null
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+wurde aus allen Aufträgen eliminiert.</P>
--- /dev/null
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+akzeptiert ab sofort keine Aufträge mehr.</P>
--- /dev/null
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+wurde gestartet.</P>
--- /dev/null
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+wurde gestoppt.</P>
--- /dev/null
+<P ALIGN="CENTER">{total=0?Keine Drucker gefunden:Zeige {#printer_name} von {total} Drucker{total=1?:n}}.</P>
--- /dev/null
+{printer_type?:}{#printer_name=0?:
+{[printer_name]
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Standarddrucker):}
+{?printer_state_message=?:<SPAN CLASS="message">"{printer_state_message}"</SPAN>}</H2>
+
+<TABLE WIDTH="100%" CLASS="button" CELLSPACING="0" CELLPADDING="0" SUMMARY="{printer_name}">
+<TR>
+<TD VALIGN="TOP"><A HREF="{printer_uri_supported}">
+<IMG SRC="/images/printer-{printer_state=3?idle:{printer_state=4?verarbeitend:gestoppt}}.gif" CLASS="button" ALT=""></A>
+</TD>
+<TD VALIGN="TOP"><B>Beschreibung:</B> {printer_info}<BR>
+<B>Ort:</B> {printer_location}<BR>
+<B>Marke und Modell:</B> {printer_make_and_model}<BR>
+<B>Druckerstatus:</B> {printer_state=3?frei:{printer_state=4?verarbeitend:gestoppt}},
+{printer_is_accepting_jobs=0?Aufträge ablehnen:Aufträge akzeptieren}, {printer_is_shared=0?nicht:} publiziert.
+{?device_uri=?:<BR><B>Geräte URI:</B> {device_uri}}
+
+<P>
+<A HREF="{printer_uri_supported}?op=print-test-page">
+<IMG SRC="/images/button-print-test-page.gif" ALT="Testseite drucken" CLASS="button"></A>
+{?cupscommand=1?<A HREF="{printer_uri_supported}?op=clean-print-heads">
+<IMG SRC="/images/button-clean-print-heads.gif" ALT="Druckköpfe reinigen" CLASS="button"></A>
+<A HREF="{printer_uri_supported}?op=print-self-test-page">
+<IMG SRC="/images/button-print-self-test-page.gif" ALT="Selbsttest-Seite drucken" CLASS="button"></A>:}
+{printer_state=5?
+<A HREF="{admin_uri}?op=start-printer&printer_name={%printer_name}">
+<IMG SRC="/images/button-start-printer.gif" ALT="Drucker starten" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-printer&printer_name={%printer_name}">
+<IMG SRC="/images/button-stop-printer.gif" ALT="Drucker stoppen" CLASS="button"></A>
+}
+{printer_is_accepting_jobs=0?
+<A HREF="{admin_uri}?op=accept-jobs&printer_name={%printer_name}">
+<IMG SRC="/images/button-accept-jobs.gif" ALT="Aufträge akzeptieren" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&printer_name={%printer_name}">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="Aufträge ablehnen" CLASS="button"></A>
+}
+<A HREF="{printer_uri_supported}?op=move-jobs&printer_name={%printer_name}">
+<IMG SRC="/images/button-move-jobs.gif" ALT="Alle Aufträge verschieben" CLASS="button"></A>
+<A HREF="{admin_uri}?op=purge-jobs&printer_name={%printer_name}">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Aufträge abbrechen" CLASS="button"></A>
+{printer_is_shared=0?
+<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=1">
+<IMG SRC="/images/button-publish-printer.gif" ALT="Drucker publizieren" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=0">
+<IMG SRC="/images/button-unpublish-printer.gif" ALT="Druckerpublikation aufheben" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-printer&printer_name={%printer_name}">
+<IMG SRC="/images/button-modify-printer.gif" ALT="Drucker ändern" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-printer-options&printer_name={%printer_name}">
+<IMG SRC="/images/button-set-printer-options.gif" ALT="Druckereinstellungen festlegen" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-printer&printer_name={%printer_name}">
+<IMG SRC="/images/button-delete-printer.gif" ALT="Drucker löschen" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-as-default&printer_name={%printer_name}">
+<IMG SRC="/images/button-set-as-default.gif" ALT="Als Standard festlegen" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-allowed-users&printer_name={%printer_name}">
+<IMG SRC="/images/button-set-allowed-users.gif" ALT="Erlaubte Benutzer festlegen" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
--- /dev/null
+<p>Bitte warten Sie während der Server neu startet...</p>
--- /dev/null
+<SCRIPT TYPE="text/javascript"><!--
+function select_printers() {
+ var list = document.export_samba.EXPORT_NAME;
+ var sel = document.export_samba.EXPORT_ALL.checked;
+
+ for (i = 0; i < list.length; i ++) {
+ list.options[i].selected = sel;
+ }
+}
+--></SCRIPT>
+
+<FORM METHOD="POST" ACTION="/admin/" NAME="export_samba">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="export-samba">
+
+<H2 CLASS="title">Exportiere Drucker für Samba</H2>
+
+{error?<P>Kann Drucker nicht für Samba exportieren\:</P>
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
+<P>Konsultieren Sie die <A HREF="/admin/log/error_log"
+TARGET="_blank">error_log</A> Datei um mehr Informationen zu erhalten.</P>:
+<P>Diese Seite erlaubt es Ihnen Drucker für Samba bereitzustellen
+damit auf diese mittels Windows Clients über die Desktopsymbole
+<VAR>Netzwerk Nachbarn</VAR> oder <VAR>Netzwerkumgebung</VAR>
+zugegriffen werden kann. Sie müssen zuerst einen
+Windows PostScript Druckerteiber installieren wie diese in der Hilfe für <A
+HREF="/help/man-cupsaddsmb.html"
+TARGET="_blank">cupsaddsmb(8)</A> beschrieben ist.</P>}
+
+<TABLE>
+<TR>
+<TH CLASS="label">Drucker:</TH>
+<TD>
+<SELECT NAME="EXPORT_NAME" SIZE="10" MULTIPLE>
+{[printer_name]<OPTION VALUE="{printer_name}"{export_all? SELECTED:{printer_export? SELECTED:}}>{printer_name}}
+</SELECT><BR>
+<INPUT TYPE="CHECKBOX" NAME="EXPORT_ALL"{export_all? CHECKED:}
+onChange="select_printers()"> Alle Drucker exportieren
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">Samba Benutzername:</TH>
+<TD><INPUT TYPE="TEXT" NAME="USERNAME" VALUE="{?USERNAME}"> (required)</TD>
+</TR>
+<TR>
+<TH CLASS="label">Samba Passwort:</TH>
+<TD><INPUT TYPE="PASSWORD" NAME="PASSWORD" VALUE=""> (required)</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-export-samba.gif"
+ALT="Exportiere Drucker für Samba"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<P>Drucker wurden fü Samba erfolgreich exportiert.</P>
--- /dev/null
+<FORM ACTION="/{SECTION}/{?SEARCH_DEST}" METHOD="GET">
+{WHICH_JOBS?<INPUT TYPE="HIDDEN" NAME="WHICH_JOBS" VALUE="{WHICH_JOBS}">:}
+{ORDER?<INPUT TYPE="HIDDEN" NAME="ORDER" VALUE="{ORDER}">:}
+
+<P ALIGN="CENTER"><B>Suche in
+{SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?Klassen:{SECTION=jobs?Aufträge:Drucker}}}:</B>
+<INPUT TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
+TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Suche">
+<A
+HREF="/{SECTION}/{?SEARCH_DEST}{WHICH_JOBS??WHICH_JOBS={WHICH_JOBS}{ORDER?&ORDER={ORDER}:}:{ORDER??ORDER={ORDER}:}}"><IMG
+SRC="/images/button-clear.gif" ALT="Leeren" CLASS="button"></A></P>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
--- /dev/null
+<P>Testseite gesendet; Auftrags ID ist <A HREF="/{SECTION}/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
--- /dev/null
+</TD>
+<TD WIDTH="15"> </TD>
+</TR>
+<TR CLASS="trailer">
+<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
+
+<P><SMALL>Das Common UNIX Printing System, CUPS, und das CUPS Logo sind
+eingetragene Warenzeichen der <A HREF="http://www.easysw.com">Easy Software
+Products</A>. CUPS ist urheberrechtlich geschützt 1997-2006 von Easy Software Products,
+Alle Rechte vorbehalten.</SMALL></P>
+
+</TD>
+
+<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{OP}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+{IS_CLASS?<INPUT TYPE="HIDDEN" NAME="IS_CLASS" VALUE="{IS_CLASS}">:}
+
+<H2 CLASS="title">Berechtigte Benutzer für {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Benutzer:</TH>
+<TD>
+<INPUT TYPE='TEXT' NAME='users' SIZE='60' VALUE='{?requesting_user_name_allowed}{?requesting_user_name_denied}'>
+<BR>
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-allowed' {requesting_user_name_allowed?checked:}>Erlaube diesen Benutzern zu drucken
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-denied' {requesting_user_name_denied?checked:}>Verweigere diesen Benutzern zu drucken
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>
+<INPUT TYPE="IMAGE" SRC="/images/button-set-allowed-users.gif" ALT="Erlaubte Benutzer festlegen">
+</TD>
+</TR>
+</TABLE>
+
+</FORM>
<B>場所:</B> {printer_location}<BR>
<B>メーカとモデル:</B> {printer_make_and_model}<BR>
<B>プリンタの状態:</B> {printer_state=3?待機中:{printer_state=4?処理中:停止}},
-{printer_is_accepting_jobs=0?ジョブを拒否中:ジョブを受け付け中}, {printer_is_shared=0?not:} 公開。
+{printer_is_accepting_jobs=0?ジョブを拒否中:ジョブを受け付け中}, {printer_is_shared=0?非:}公開。
{?device_uri=?:<BR><B>デバイス URI:</B> {device_uri}}
<P>
/*
- * "$Id: ipptest.c 5414 2006-04-17 20:07:24Z mike $"
+ * "$Id: ipptest.c 5741 2006-07-17 18:36:20Z mike $"
*
* IPP test command for the Common UNIX Printing System (CUPS).
*
int status; /* Status of tests... */
const char *uri; /* URI to use */
const char *testfile; /* Test file to use */
+ int interval; /* Test interval */
/*
uri = NULL;
testfile = NULL;
status = 0;
+ interval = 0;
for (i = 1; i < argc; i ++)
{
{
if (!strcmp(argv[i], "-v"))
Verbosity ++;
+ else if (!strcmp(argv[i], "-i"))
+ {
+ i++;
+
+ if (i >= argc)
+ usage(NULL);
+ else
+ interval = atoi(argv[i]);
+ }
else
usage(argv[i]);
}
if (!uri || !testfile)
usage(NULL);
+ /*
+ * Loop if the interval is set...
+ */
+
+ if (interval)
+ {
+ for (;;)
+ {
+ sleep(interval);
+ do_tests(uri, testfile);
+ }
+ }
+
/*
* Exit...
*/
fputs("Usage: ipptest [options] URL testfile [ ... testfileN ]\n", stderr);
fputs("Options:\n", stderr);
fputs("\n", stderr);
- fputs("-v Show all attributes in response, even on success.\n", stderr);
+ fputs("-i N Repeat the last test file once every N seconds.\n", stderr);
+ fputs("-v Show all attributes in response, even on success.\n", stderr);
exit(1);
}
/*
- * End of "$Id: ipptest.c 5414 2006-04-17 20:07:24Z mike $".
+ * End of "$Id: ipptest.c 5741 2006-07-17 18:36:20Z mike $".
*/