summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>2006-07-20 22:59:35 +0000
committerjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>2006-07-20 22:59:35 +0000
commit8ca02f3c0539293422509d03219786fb6d7db48b (patch)
tree20bd0e2739f7c6cadc7c70be3831505d59466e08
parentf7faf1f5c3235dfa4f883522da7dc6446f028247 (diff)
downloadcups-8ca02f3c0539293422509d03219786fb6d7db48b.tar.gz
Load cups into easysw/current.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@194 a1ca3aef-8c08-0410-bb20-df032aa958be
-rw-r--r--CHANGES.txt66
-rw-r--r--backend/easysw-firewire-design.txt71
-rw-r--r--backend/easysw-firewire-linux.txt35
-rw-r--r--backend/ieee1394-linux.c877
-rw-r--r--backend/ieee1394.c267
-rw-r--r--backend/ieee1394.h103
-rw-r--r--backend/ipp.c6
-rw-r--r--backend/parallel.c38
-rw-r--r--backend/runloop.c54
-rw-r--r--backend/snmp.c12
-rw-r--r--backend/usb-unix.c95
-rw-r--r--berkeley/lprm.c35
-rw-r--r--config-scripts/cups-compiler.m49
-rw-r--r--config-scripts/cups-defaults.m48
-rw-r--r--config-scripts/cups-directories.m46
-rwxr-xr-xcups-config.in12
-rw-r--r--cups/Dependencies252
-rw-r--r--cups/adminutil.c9
-rw-r--r--cups/dest.c55
-rw-r--r--cups/emit.c27
-rw-r--r--cups/encode.c58
-rw-r--r--cups/globals.h5
-rw-r--r--cups/http.c14
-rw-r--r--cups/http.h6
-rw-r--r--cups/ipp-private.h17
-rw-r--r--cups/language.c21
-rw-r--r--cups/mark.c11
-rw-r--r--cups/testipp.c19
-rw-r--r--cups/testppd.c57
-rw-r--r--cups/util.c11
-rw-r--r--doc/Makefile4
-rw-r--r--doc/de/images/button-accept-jobs.gifbin0 -> 633 bytes
-rw-r--r--doc/de/images/button-add-class.gifbin0 -> 626 bytes
-rw-r--r--doc/de/images/button-add-printer.gifbin0 -> 631 bytes
-rw-r--r--doc/de/images/button-add-this-printer.gifbin0 -> 764 bytes
-rw-r--r--doc/de/images/button-cancel-all-jobs.gifbin0 -> 728 bytes
-rw-r--r--doc/de/images/button-cancel-job.gifbin0 -> 633 bytes
-rw-r--r--doc/de/images/button-change-settings.gifbin0 -> 635 bytes
-rw-r--r--doc/de/images/button-clean-print-heads.gifbin0 -> 661 bytes
-rw-r--r--doc/de/images/button-clear.gifbin0 -> 371 bytes
-rw-r--r--doc/de/images/button-continue.gifbin0 -> 467 bytes
-rw-r--r--doc/de/images/button-delete-class.gifbin0 -> 552 bytes
-rw-r--r--doc/de/images/button-delete-printer.gifbin0 -> 568 bytes
-rw-r--r--doc/de/images/button-edit-configuration-file.gifbin0 -> 837 bytes
-rw-r--r--doc/de/images/button-export-samba.gifbin0 -> 874 bytes
-rw-r--r--doc/de/images/button-help.gifbin0 -> 321 bytes
-rw-r--r--doc/de/images/button-hold-job.gifbin0 -> 585 bytes
-rw-r--r--doc/de/images/button-manage-classes.gifbin0 -> 639 bytes
-rw-r--r--doc/de/images/button-manage-jobs.gifbin0 -> 669 bytes
-rw-r--r--doc/de/images/button-manage-printers.gifbin0 -> 632 bytes
-rw-r--r--doc/de/images/button-manage-server.gifbin0 -> 611 bytes
-rw-r--r--doc/de/images/button-modify-class.gifbin0 -> 553 bytes
-rw-r--r--doc/de/images/button-modify-printer.gifbin0 -> 565 bytes
-rw-r--r--doc/de/images/button-move-job.gifbin0 -> 686 bytes
-rw-r--r--doc/de/images/button-move-jobs.gifbin0 -> 783 bytes
-rw-r--r--doc/de/images/button-print-self-test-page.gifbin0 -> 726 bytes
-rw-r--r--doc/de/images/button-print-test-page.gifbin0 -> 596 bytes
-rw-r--r--doc/de/images/button-publish-printer.gifbin0 -> 626 bytes
-rw-r--r--doc/de/images/button-reject-jobs.gifbin0 -> 643 bytes
-rw-r--r--doc/de/images/button-release-job.gifbin0 -> 619 bytes
-rw-r--r--doc/de/images/button-restart-job.gifbin0 -> 635 bytes
-rw-r--r--doc/de/images/button-save-changes.gifbin0 -> 702 bytes
-rw-r--r--doc/de/images/button-search.gifbin0 -> 395 bytes
-rw-r--r--doc/de/images/button-set-allowed-users.gifbin0 -> 774 bytes
-rw-r--r--doc/de/images/button-set-as-default.gifbin0 -> 738 bytes
-rw-r--r--doc/de/images/button-set-printer-options.gifbin0 -> 844 bytes
-rw-r--r--doc/de/images/button-show-active.gifbin0 -> 788 bytes
-rw-r--r--doc/de/images/button-show-all.gifbin0 -> 713 bytes
-rw-r--r--doc/de/images/button-show-completed.gifbin0 -> 757 bytes
-rw-r--r--doc/de/images/button-show-next.gifbin0 -> 643 bytes
-rw-r--r--doc/de/images/button-show-previous.gifbin0 -> 679 bytes
-rw-r--r--doc/de/images/button-sort-ascending.gifbin0 -> 779 bytes
-rw-r--r--doc/de/images/button-sort-descending.gifbin0 -> 774 bytes
-rw-r--r--doc/de/images/button-start-class.gifbin0 -> 552 bytes
-rw-r--r--doc/de/images/button-start-printer.gifbin0 -> 560 bytes
-rw-r--r--doc/de/images/button-stop-class.gifbin0 -> 589 bytes
-rw-r--r--doc/de/images/button-stop-printer.gifbin0 -> 574 bytes
-rw-r--r--doc/de/images/button-unpublish-printer.gifbin0 -> 821 bytes
-rw-r--r--doc/de/images/button-view-access-log.gifbin0 -> 802 bytes
-rw-r--r--doc/de/images/button-view-error-log.gifbin0 -> 742 bytes
-rw-r--r--doc/de/images/button-view-page-log.gifbin0 -> 772 bytes
-rw-r--r--doc/de/images/button-view-printable-version.gifbin0 -> 833 bytes
-rw-r--r--doc/de/index.html.in143
-rw-r--r--doc/help/policies.html677
-rw-r--r--doc/help/ref-mailto-conf.html105
-rw-r--r--filter/rastertolabel.c11
-rw-r--r--locale/cups_de.po2821
-rw-r--r--locale/cups_ja.po9
-rw-r--r--man/Makefile5
-rw-r--r--man/lpadmin.man33
-rw-r--r--man/mailto.conf.man69
-rw-r--r--notifier/testnotify.c12
-rw-r--r--packaging/cups.list.in21
-rw-r--r--packaging/cups.spec.in25
-rw-r--r--pdftops/PSOutputDev.cxx2
-rw-r--r--ppd/zebracpl.ppd8
-rw-r--r--scheduler/Makefile7
-rw-r--r--scheduler/client.c216
-rw-r--r--scheduler/conf.c39
-rw-r--r--scheduler/conf.h5
-rw-r--r--scheduler/cups-polld.c209
-rw-r--r--scheduler/dirsvc.c47
-rw-r--r--scheduler/ipp.c30
-rw-r--r--scheduler/job.c10
-rw-r--r--scheduler/listen.c8
-rw-r--r--scheduler/printers.c9
-rw-r--r--scheduler/subscriptions.c59
-rw-r--r--systemv/cancel.c7
-rw-r--r--systemv/cupsaddsmb.c8
-rw-r--r--systemv/lpoptions.c36
-rw-r--r--templates/de/add-class.tmpl33
-rw-r--r--templates/de/add-printer.tmpl28
-rw-r--r--templates/de/admin.tmpl77
-rw-r--r--templates/de/choose-device.tmpl26
-rw-r--r--templates/de/choose-make.tmpl42
-rw-r--r--templates/de/choose-model.tmpl34
-rw-r--r--templates/de/choose-serial.tmpl47
-rw-r--r--templates/de/choose-uri.tmpl42
-rw-r--r--templates/de/class-added.tmpl2
-rw-r--r--templates/de/class-confirm.tmpl7
-rw-r--r--templates/de/class-deleted.tmpl1
-rw-r--r--templates/de/class-jobs-header.tmpl1
-rw-r--r--templates/de/class-modified.tmpl2
-rw-r--r--templates/de/classes-header.tmpl1
-rw-r--r--templates/de/classes.tmpl54
-rw-r--r--templates/de/edit-config.tmpl.in91
-rw-r--r--templates/de/error-op.tmpl3
-rw-r--r--templates/de/error.tmpl3
-rw-r--r--templates/de/header.tmpl.in63
-rw-r--r--templates/de/help-header.tmpl46
-rw-r--r--templates/de/help-printable.tmpl11
-rw-r--r--templates/de/job-cancel.tmpl1
-rw-r--r--templates/de/job-hold.tmpl1
-rw-r--r--templates/de/job-move.tmpl22
-rw-r--r--templates/de/job-moved.tmpl2
-rw-r--r--templates/de/job-release.tmpl1
-rw-r--r--templates/de/job-restart.tmpl1
-rw-r--r--templates/de/jobs-header.tmpl15
-rw-r--r--templates/de/jobs.tmpl42
-rw-r--r--templates/de/maintenance.tmpl2
-rw-r--r--templates/de/modify-class.tmpl34
-rw-r--r--templates/de/modify-printer.tmpl29
-rw-r--r--templates/de/option-boolean.tmpl6
-rw-r--r--templates/de/option-conflict.tmpl7
-rw-r--r--templates/de/option-header.tmpl3
-rw-r--r--templates/de/option-pickmany.tmpl6
-rw-r--r--templates/de/option-pickone.tmpl6
-rw-r--r--templates/de/option-trailer.tmpl5
-rw-r--r--templates/de/pager.tmpl7
-rw-r--r--templates/de/printer-accept.tmpl3
-rw-r--r--templates/de/printer-added.tmpl2
-rw-r--r--templates/de/printer-configured.tmpl2
-rw-r--r--templates/de/printer-confirm.tmpl7
-rw-r--r--templates/de/printer-default.tmpl7
-rw-r--r--templates/de/printer-deleted.tmpl1
-rw-r--r--templates/de/printer-jobs-header.tmpl1
-rw-r--r--templates/de/printer-modified.tmpl2
-rw-r--r--templates/de/printer-purge.tmpl3
-rw-r--r--templates/de/printer-reject.tmpl3
-rw-r--r--templates/de/printer-start.tmpl3
-rw-r--r--templates/de/printer-stop.tmpl3
-rw-r--r--templates/de/printers-header.tmpl1
-rw-r--r--templates/de/printers.tmpl64
-rw-r--r--templates/de/restart.tmpl1
-rw-r--r--templates/de/samba-export.tmpl55
-rw-r--r--templates/de/samba-exported.tmpl1
-rw-r--r--templates/de/search.tmpl13
-rw-r--r--templates/de/set-printer-options-header.tmpl3
-rw-r--r--templates/de/set-printer-options-trailer.tmpl1
-rw-r--r--templates/de/test-page.tmpl2
-rw-r--r--templates/de/trailer.tmpl21
-rw-r--r--templates/de/users.tmpl26
-rw-r--r--templates/ja/printers.tmpl2
-rw-r--r--test/ipptest.c31
174 files changed, 6077 insertions, 1876 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index c866727c8..f55439e5f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,8 +1,71 @@
-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
@@ -82,6 +145,7 @@ CHANGES IN CUPS V1.2.2
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
diff --git a/backend/easysw-firewire-design.txt b/backend/easysw-firewire-design.txt
deleted file mode 100644
index 194c487ed..000000000
--- a/backend/easysw-firewire-design.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-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.
diff --git a/backend/easysw-firewire-linux.txt b/backend/easysw-firewire-linux.txt
deleted file mode 100644
index a8e461189..000000000
--- a/backend/easysw-firewire-linux.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-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.
diff --git a/backend/ieee1394-linux.c b/backend/ieee1394-linux.c
deleted file mode 100644
index b95e8204e..000000000
--- a/backend/ieee1394-linux.c
+++ /dev/null
@@ -1,877 +0,0 @@
-/*
- * "$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 $".
- */
diff --git a/backend/ieee1394.c b/backend/ieee1394.c
deleted file mode 100644
index 3d88c7a08..000000000
--- a/backend/ieee1394.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * "$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 $".
- */
diff --git a/backend/ieee1394.h b/backend/ieee1394.h
deleted file mode 100644
index 19181c5c0..000000000
--- a/backend/ieee1394.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * "$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 $".
- */
diff --git a/backend/ipp.c b/backend/ipp.c
index 4bcd3c794..e64d6c44c 100644
--- a/backend/ipp.c
+++ b/backend/ipp.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -230,6 +230,8 @@ main(int argc, /* I - Number of command-line args */
if (!strcmp(method, "https"))
cupsSetEncryption(HTTP_ENCRYPT_ALWAYS);
+ else
+ cupsSetEncryption(HTTP_ENCRYPT_IF_REQUESTED);
/*
* See if there are any options...
@@ -1620,5 +1622,5 @@ sigterm_handler(int sig) /* I - Signal */
/*
- * 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 $".
*/
diff --git a/backend/parallel.c b/backend/parallel.c
index 3b8c9ba09..c223fb06c 100644
--- a/backend/parallel.c
+++ b/backend/parallel.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -92,10 +92,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
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 */
@@ -252,36 +248,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
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...
*/
@@ -612,5 +578,5 @@ list_devices(void)
/*
- * 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 $".
*/
diff --git a/backend/runloop.c b/backend/runloop.c
index 6393ed507..03bb09282 100644
--- a/backend/runloop.c
+++ b/backend/runloop.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -53,6 +53,7 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
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 */
@@ -61,6 +62,9 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
#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
@@ -93,7 +97,7 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
* 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...
@@ -106,11 +110,28 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
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...
@@ -158,6 +179,9 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
}
print_ptr = print_buffer;
+
+ fprintf(stderr, "DEBUG: Read %d bytes of print data...\n",
+ (int)print_bytes);
}
/*
@@ -182,6 +206,15 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
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");
@@ -196,7 +229,14 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
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;
@@ -214,5 +254,5 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
/*
- * 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 $".
*/
diff --git a/backend/snmp.c b/backend/snmp.c
index 8ac2dea4f..56e7ad9e7 100644
--- a/backend/snmp.c
+++ b/backend/snmp.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -384,7 +384,7 @@ add_cache(http_addr_t *addr, /* I - Device IP address */
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));
@@ -1203,7 +1203,7 @@ static int /* O - Result of comparison */
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));
}
@@ -1874,8 +1874,8 @@ read_snmp_response(int fd) /* I - SNMP socket file descriptor */
* 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...
@@ -2215,5 +2215,5 @@ update_cache(snmp_cache_t *device, /* I - Device */
/*
- * 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 $".
*/
diff --git a/backend/usb-unix.c b/backend/usb-unix.c
index 13b2dc049..94544df5e 100644
--- a/backend/usb-unix.c
+++ b/backend/usb-unix.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -44,7 +44,7 @@
* Local functions...
*/
-int open_device(const char *uri);
+int open_device(const char *uri, int *use_bc);
/*
@@ -65,24 +65,12 @@ print_device(const char *uri, /* I - Device URI */
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...
*/
@@ -90,7 +78,15 @@ print_device(const char *uri, /* I - Device URI */
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)
{
@@ -148,37 +144,6 @@ print_device(const char *uri, /* I - Device URI */
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...
*/
@@ -195,7 +160,7 @@ print_device(const char *uri, /* I - Device URI */
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",
@@ -277,7 +242,7 @@ list_devices(void)
{
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),
@@ -314,8 +279,12 @@ list_devices(void)
*/
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
@@ -340,7 +309,6 @@ open_device(const char *uri) /* I - Device URI */
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 */
@@ -446,7 +414,6 @@ open_device(const char *uri) /* I - Device URI */
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 */
@@ -463,7 +430,7 @@ open_device(const char *uri) /* I - Device URI */
{
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));
@@ -481,7 +448,17 @@ open_device(const char *uri) /* I - 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...
@@ -514,7 +491,15 @@ open_device(const char *uri) /* I - Device URI */
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
{
@@ -525,5 +510,5 @@ open_device(const char *uri) /* I - Device URI */
/*
- * 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 $".
*/
diff --git a/berkeley/lprm.c b/berkeley/lprm.c
index 67479b5a3..41f35ca12 100644
--- a/berkeley/lprm.c
+++ b/berkeley/lprm.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -57,7 +57,8 @@ main(int argc, /* I - Number of command-line arguments */
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? */
@@ -72,11 +73,6 @@ main(int argc, /* I - Number of command-line arguments */
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...
@@ -85,10 +81,13 @@ main(int argc, /* I - Number of command-line arguments */
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...
*/
@@ -102,6 +101,7 @@ main(int argc, /* I - Number of command-line arguments */
encryption = HTTP_ENCRYPT_REQUIRED;
httpEncryption(http, encryption);
+ cupsSetEncryption(encryption);
#else
_cupsLangPrintf(stderr,
_("%s: Sorry, no encryption support compiled in!\n"),
@@ -152,9 +152,6 @@ main(int argc, /* I - Number of command-line arguments */
break;
case 'h' : /* Connect to host */
- if (http != NULL)
- httpClose(http);
-
if (argv[i][2] != '\0')
cupsSetServer(argv[i] + 2);
else
@@ -172,6 +169,20 @@ main(int argc, /* I - Number of command-line arguments */
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 :
@@ -283,5 +294,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * 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 $".
*/
diff --git a/config-scripts/cups-compiler.m4 b/config-scripts/cups-compiler.m4
index adbc1294f..7dc7b7052 100644
--- a/config-scripts/cups-compiler.m4
+++ b/config-scripts/cups-compiler.m4
@@ -1,5 +1,5 @@
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
@@ -297,11 +297,6 @@ else
# 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
@@ -465,5 +460,5 @@ if test $uname = HP-UX; then
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
diff --git a/config-scripts/cups-defaults.m4 b/config-scripts/cups-defaults.m4
index ea23bd5c3..6b99cb575 100644
--- a/config-scripts/cups-defaults.m4
+++ b/config-scripts/cups-defaults.m4
@@ -1,5 +1,5 @@
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).
@@ -24,9 +24,9 @@ dnl WWW: http://www.cups.org
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
@@ -248,5 +248,5 @@ fi
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
diff --git a/config-scripts/cups-directories.m4 b/config-scripts/cups-directories.m4
index afbeba5aa..ece2b5820 100644
--- a/config-scripts/cups-directories.m4
+++ b/config-scripts/cups-directories.m4
@@ -1,5 +1,5 @@
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
@@ -115,7 +115,7 @@ AC_ARG_WITH(rcdir, [ --with-rcdir set path for rc scripts],rcdir="$w
if test x$rcdir = x; then
case "$uname" in
- FreeBSD* | OpenBSD*)
+ FreeBSD* | OpenBSD* | MirBsD* | ekkoBSD*)
# FreeBSD and OpenBSD
INITDIR=""
INITDDIR=""
@@ -302,5 +302,5 @@ AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$localstatedir/run/cups")
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
diff --git a/cups-config.in b/cups-config.in
index 9b998736f..ef5084a64 100755
--- a/cups-config.in
+++ b/cups-config.in
@@ -1,6 +1,6 @@
#! /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.
#
@@ -42,8 +42,8 @@ INSTALLSTATIC=@INSTALLSTATIC@
# 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`
@@ -115,13 +115,13 @@ while test $# -gt 0; do
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
;;
@@ -150,5 +150,5 @@ while test $# -gt 0; do
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 $".
#
diff --git a/cups/Dependencies b/cups/Dependencies
index 4cb7cb37f..fda8a6ae8 100644
--- a/cups/Dependencies
+++ b/cups/Dependencies
@@ -1,20 +1,23 @@
# 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
@@ -29,74 +32,90 @@ globals.o: transcode.h debug.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
@@ -111,74 +130,90 @@ globals.32.o: globals.c transcode.h debug.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
@@ -193,54 +228,67 @@ globals.64.o: globals.c transcode.h debug.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
diff --git a/cups/adminutil.c b/cups/adminutil.c
index 6848538e2..3825b40bf 100644
--- a/cups/adminutil.c
+++ b/cups/adminutil.c
@@ -1,5 +1,5 @@
/*
- * "$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).
@@ -1681,8 +1681,9 @@ do_samba_command(const char *command, /* I - Command to run */
{
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
{
@@ -1928,5 +1929,5 @@ write_option(cups_file_t *dstfp, /* I - PPD file */
/*
- * 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 $".
*/
diff --git a/cups/dest.c b/cups/dest.c
index a91e39847..faf8241b8 100644
--- a/cups/dest.c
+++ b/cups/dest.c
@@ -1,5 +1,5 @@
/*
- * "$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).
@@ -456,6 +456,7 @@ cupsSetDests2(http_t *http, /* I - HTTP connection */
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 */
@@ -568,16 +569,23 @@ cupsSetDests2(http_t *http, /* I - HTTP connection */
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...
@@ -593,10 +601,35 @@ cupsSetDests2(http_t *http, /* I - HTTP connection */
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);
@@ -1008,5 +1041,5 @@ cups_get_sdests(http_t *http, /* I - HTTP connection */
/*
- * 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 $".
*/
diff --git a/cups/emit.c b/cups/emit.c
index 6f4dc78de..dd650c61d 100644
--- a/cups/emit.c
+++ b/cups/emit.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -50,6 +50,7 @@
#include <stdlib.h>
#include "string.h"
#include <errno.h>
+#include "debug.h"
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
@@ -111,6 +112,9 @@ ppdCollect2(ppd_file_t *ppd, /* I - PPD file data */
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);
@@ -132,6 +136,8 @@ ppdCollect2(ppd_file_t *ppd, /* I - PPD file data */
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 ++;
}
@@ -142,6 +148,8 @@ ppdCollect2(ppd_file_t *ppd, /* I - PPD file data */
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 ++;
}
@@ -155,6 +163,8 @@ ppdCollect2(ppd_file_t *ppd, /* I - PPD file data */
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.
@@ -492,6 +502,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
struct lconv *loc; /* Locale data */
+ DEBUG_printf(("ppdEmitString(ppd=%p, section=%d, min_order=%f)\n",
+ ppd, section, min_order));
+
/*
* Range check input...
*/
@@ -527,6 +540,8 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
!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 */
}
@@ -580,6 +595,8 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
* Allocate memory...
*/
+ DEBUG_printf(("ppdEmitString: Allocating %d bytes for string...\n", bufsize));
+
if ((buffer = calloc(1, bufsize)) == NULL)
{
free(choices);
@@ -608,6 +625,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
* 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"))
@@ -800,6 +820,9 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
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
{
@@ -917,5 +940,5 @@ ppd_sort(ppd_choice_t **c1, /* I - First choice */
/*
- * 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 $".
*/
diff --git a/cups/encode.c b/cups/encode.c
index a00e2c52a..b3cc28831 100644
--- a/cups/encode.c
+++ b/cups/encode.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -28,6 +28,7 @@
* 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.
*/
@@ -49,13 +50,6 @@
* **** 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 },
@@ -114,6 +108,8 @@ static const _ipp_option_t ipp_options[] =
{ "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 },
@@ -127,14 +123,12 @@ static const _ipp_option_t ipp_options[] =
{ "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 },
@@ -243,8 +237,7 @@ cupsEncodeOptions2(
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 */
/*
@@ -260,16 +253,7 @@ cupsEncodeOptions2(
* 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;
@@ -547,6 +531,30 @@ cupsEncodeOptions2(
/*
+ * '_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.
*/
@@ -559,5 +567,5 @@ compare_ipp_options(_ipp_option_t *a, /* I - First option */
/*
- * 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 $".
*/
diff --git a/cups/globals.h b/cups/globals.h
index 819d2bd6f..36af79e32 100644
--- a/cups/globals.h
+++ b/cups/globals.h
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -32,6 +32,7 @@
*/
# include "string.h"
+# include "http-private.h"
# include "cups.h"
# include "i18n.h"
@@ -151,5 +152,5 @@ extern void _cupsSetError(ipp_status_t status, const char *message);
#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 $".
*/
diff --git a/cups/http.c b/cups/http.c
index e864c18c4..84e204620 100644
--- a/cups/http.c
+++ b/cups/http.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -1809,6 +1809,16 @@ httpWait(http_t *http, /* I - HTTP connection */
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...
*/
@@ -2801,5 +2811,5 @@ http_write_ssl(http_t *http, /* I - HTTP 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 $".
*/
diff --git a/cups/http.h b/cups/http.h
index 937b94fa0..6303af452 100644
--- a/cups/http.h
+++ b/cups/http.h
@@ -1,5 +1,5 @@
/*
- * "$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).
@@ -98,7 +98,7 @@ extern "C" {
#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
@@ -504,5 +504,5 @@ extern ssize_t httpWrite2(http_t *http, const char *buffer,
#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 $".
*/
diff --git a/cups/ipp-private.h b/cups/ipp-private.h
index af303f1da..3b3455fe7 100644
--- a/cups/ipp-private.h
+++ b/cups/ipp-private.h
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -44,10 +44,23 @@ extern "C" {
/*
+ * 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 *);
@@ -61,5 +74,5 @@ 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 $".
*/
diff --git a/cups/language.c b/cups/language.c
index 6990d9127..b74738dbf 100644
--- a/cups/language.c
+++ b/cups/language.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -560,6 +560,23 @@ cupsLangGet(const char *language) /* I - Language or locale */
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,
@@ -1295,5 +1312,5 @@ cups_unquote(char *d, /* O - Unquoted string */
/*
- * 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 $".
*/
diff --git a/cups/mark.c b/cups/mark.c
index 3b2226774..6577c0bfc 100644
--- a/cups/mark.c
+++ b/cups/mark.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -407,6 +407,7 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
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)
@@ -455,6 +456,12 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
}
}
}
+
+ /*
+ * Make sure that we keep the option marked below...
+ */
+
+ choice = "Custom";
}
else if (choice[0] == '{')
{
@@ -679,5 +686,5 @@ ppd_defaults(ppd_file_t *ppd, /* I - PPD file */
/*
- * 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 $".
*/
diff --git a/cups/testipp.c b/cups/testipp.c
index 07bcdffc0..6975cb054 100644
--- a/cups/testipp.c
+++ b/cups/testipp.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -36,7 +36,7 @@
#include <stdlib.h>
#include <cups/string.h>
#include <errno.h>
-#include "ipp.h"
+#include "ipp-private.h"
#ifdef WIN32
# include <io.h>
#else
@@ -283,6 +283,19 @@ main(int argc, /* I - Number of command-line arguments */
ippDelete(request);
/*
+ * Test _ippFindOption() private API...
+ */
+
+ fputs("_ippFindOption(\"printer-type\"): ", stdout);
+ if (_ippFindOption("printer-type"))
+ puts("PASS");
+ else
+ {
+ puts("FAIL");
+ status = 1;
+ }
+
+ /*
* Summarize...
*/
@@ -645,5 +658,5 @@ write_cb(void *data, /* I - Data */
/*
- * 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 $".
*/
diff --git a/cups/testppd.c b/cups/testppd.c
index 7e59a4276..bdaf944a4 100644
--- a/cups/testppd.c
+++ b/cups/testppd.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -59,6 +59,39 @@ static const char *default_code =
"%%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";
@@ -107,7 +140,7 @@ main(int argc, /* I - Number of command-line arguments */
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");
@@ -123,6 +156,24 @@ main(int argc, /* I - Number of command-line arguments */
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);
+
ppdClose(ppd);
}
else
@@ -172,5 +223,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * 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 $".
*/
diff --git a/cups/util.c b/cups/util.c
index 988a3e43d..1082ceb24 100644
--- a/cups/util.c
+++ b/cups/util.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -837,12 +837,16 @@ cupsGetPPD2(http_t *http, /* I - HTTP connection */
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");
@@ -862,6 +866,9 @@ cupsGetPPD2(http_t *http, /* I - HTTP connection */
else
http_port = ippPort();
+ DEBUG_printf(("Connection hostname=\"%s\", port=%d\n", http_hostname,
+ http_port));
+
/*
* Reconnect to the correct server as needed...
*/
@@ -1652,5 +1659,5 @@ cups_get_printer_uri(
/*
- * 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 $".
*/
diff --git a/doc/Makefile b/doc/Makefile
index df0b76384..784173e31 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -1,5 +1,5 @@
#
-# "$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).
#
@@ -153,11 +153,13 @@ HELPFILES = \
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 \
diff --git a/doc/de/images/button-accept-jobs.gif b/doc/de/images/button-accept-jobs.gif
new file mode 100644
index 000000000..ab5715945
--- /dev/null
+++ b/doc/de/images/button-accept-jobs.gif
Binary files differ
diff --git a/doc/de/images/button-add-class.gif b/doc/de/images/button-add-class.gif
new file mode 100644
index 000000000..3cfd28cce
--- /dev/null
+++ b/doc/de/images/button-add-class.gif
Binary files differ
diff --git a/doc/de/images/button-add-printer.gif b/doc/de/images/button-add-printer.gif
new file mode 100644
index 000000000..49b4bcb85
--- /dev/null
+++ b/doc/de/images/button-add-printer.gif
Binary files differ
diff --git a/doc/de/images/button-add-this-printer.gif b/doc/de/images/button-add-this-printer.gif
new file mode 100644
index 000000000..df9c7c02a
--- /dev/null
+++ b/doc/de/images/button-add-this-printer.gif
Binary files differ
diff --git a/doc/de/images/button-cancel-all-jobs.gif b/doc/de/images/button-cancel-all-jobs.gif
new file mode 100644
index 000000000..bb92d2059
--- /dev/null
+++ b/doc/de/images/button-cancel-all-jobs.gif
Binary files differ
diff --git a/doc/de/images/button-cancel-job.gif b/doc/de/images/button-cancel-job.gif
new file mode 100644
index 000000000..48821df67
--- /dev/null
+++ b/doc/de/images/button-cancel-job.gif
Binary files differ
diff --git a/doc/de/images/button-change-settings.gif b/doc/de/images/button-change-settings.gif
new file mode 100644
index 000000000..0c0c4f540
--- /dev/null
+++ b/doc/de/images/button-change-settings.gif
Binary files differ
diff --git a/doc/de/images/button-clean-print-heads.gif b/doc/de/images/button-clean-print-heads.gif
new file mode 100644
index 000000000..14c64744a
--- /dev/null
+++ b/doc/de/images/button-clean-print-heads.gif
Binary files differ
diff --git a/doc/de/images/button-clear.gif b/doc/de/images/button-clear.gif
new file mode 100644
index 000000000..1002f4db2
--- /dev/null
+++ b/doc/de/images/button-clear.gif
Binary files differ
diff --git a/doc/de/images/button-continue.gif b/doc/de/images/button-continue.gif
new file mode 100644
index 000000000..b8a55bfc8
--- /dev/null
+++ b/doc/de/images/button-continue.gif
Binary files differ
diff --git a/doc/de/images/button-delete-class.gif b/doc/de/images/button-delete-class.gif
new file mode 100644
index 000000000..6cab405d9
--- /dev/null
+++ b/doc/de/images/button-delete-class.gif
Binary files differ
diff --git a/doc/de/images/button-delete-printer.gif b/doc/de/images/button-delete-printer.gif
new file mode 100644
index 000000000..1991ba009
--- /dev/null
+++ b/doc/de/images/button-delete-printer.gif
Binary files differ
diff --git a/doc/de/images/button-edit-configuration-file.gif b/doc/de/images/button-edit-configuration-file.gif
new file mode 100644
index 000000000..fdba12276
--- /dev/null
+++ b/doc/de/images/button-edit-configuration-file.gif
Binary files differ
diff --git a/doc/de/images/button-export-samba.gif b/doc/de/images/button-export-samba.gif
new file mode 100644
index 000000000..a9f51a9a3
--- /dev/null
+++ b/doc/de/images/button-export-samba.gif
Binary files differ
diff --git a/doc/de/images/button-help.gif b/doc/de/images/button-help.gif
new file mode 100644
index 000000000..8079e4431
--- /dev/null
+++ b/doc/de/images/button-help.gif
Binary files differ
diff --git a/doc/de/images/button-hold-job.gif b/doc/de/images/button-hold-job.gif
new file mode 100644
index 000000000..955f9a4e7
--- /dev/null
+++ b/doc/de/images/button-hold-job.gif
Binary files differ
diff --git a/doc/de/images/button-manage-classes.gif b/doc/de/images/button-manage-classes.gif
new file mode 100644
index 000000000..6489ebc9a
--- /dev/null
+++ b/doc/de/images/button-manage-classes.gif
Binary files differ
diff --git a/doc/de/images/button-manage-jobs.gif b/doc/de/images/button-manage-jobs.gif
new file mode 100644
index 000000000..4d4e55348
--- /dev/null
+++ b/doc/de/images/button-manage-jobs.gif
Binary files differ
diff --git a/doc/de/images/button-manage-printers.gif b/doc/de/images/button-manage-printers.gif
new file mode 100644
index 000000000..26feda4e5
--- /dev/null
+++ b/doc/de/images/button-manage-printers.gif
Binary files differ
diff --git a/doc/de/images/button-manage-server.gif b/doc/de/images/button-manage-server.gif
new file mode 100644
index 000000000..16a879590
--- /dev/null
+++ b/doc/de/images/button-manage-server.gif
Binary files differ
diff --git a/doc/de/images/button-modify-class.gif b/doc/de/images/button-modify-class.gif
new file mode 100644
index 000000000..e163da7f6
--- /dev/null
+++ b/doc/de/images/button-modify-class.gif
Binary files differ
diff --git a/doc/de/images/button-modify-printer.gif b/doc/de/images/button-modify-printer.gif
new file mode 100644
index 000000000..a9ec14765
--- /dev/null
+++ b/doc/de/images/button-modify-printer.gif
Binary files differ
diff --git a/doc/de/images/button-move-job.gif b/doc/de/images/button-move-job.gif
new file mode 100644
index 000000000..700b9beaf
--- /dev/null
+++ b/doc/de/images/button-move-job.gif
Binary files differ
diff --git a/doc/de/images/button-move-jobs.gif b/doc/de/images/button-move-jobs.gif
new file mode 100644
index 000000000..5da778816
--- /dev/null
+++ b/doc/de/images/button-move-jobs.gif
Binary files differ
diff --git a/doc/de/images/button-print-self-test-page.gif b/doc/de/images/button-print-self-test-page.gif
new file mode 100644
index 000000000..d5d3aab60
--- /dev/null
+++ b/doc/de/images/button-print-self-test-page.gif
Binary files differ
diff --git a/doc/de/images/button-print-test-page.gif b/doc/de/images/button-print-test-page.gif
new file mode 100644
index 000000000..01dc7573f
--- /dev/null
+++ b/doc/de/images/button-print-test-page.gif
Binary files differ
diff --git a/doc/de/images/button-publish-printer.gif b/doc/de/images/button-publish-printer.gif
new file mode 100644
index 000000000..181cb2767
--- /dev/null
+++ b/doc/de/images/button-publish-printer.gif
Binary files differ
diff --git a/doc/de/images/button-reject-jobs.gif b/doc/de/images/button-reject-jobs.gif
new file mode 100644
index 000000000..e23cfca90
--- /dev/null
+++ b/doc/de/images/button-reject-jobs.gif
Binary files differ
diff --git a/doc/de/images/button-release-job.gif b/doc/de/images/button-release-job.gif
new file mode 100644
index 000000000..d353700d0
--- /dev/null
+++ b/doc/de/images/button-release-job.gif
Binary files differ
diff --git a/doc/de/images/button-restart-job.gif b/doc/de/images/button-restart-job.gif
new file mode 100644
index 000000000..97449c1c8
--- /dev/null
+++ b/doc/de/images/button-restart-job.gif
Binary files differ
diff --git a/doc/de/images/button-save-changes.gif b/doc/de/images/button-save-changes.gif
new file mode 100644
index 000000000..661c59060
--- /dev/null
+++ b/doc/de/images/button-save-changes.gif
Binary files differ
diff --git a/doc/de/images/button-search.gif b/doc/de/images/button-search.gif
new file mode 100644
index 000000000..9378f8d17
--- /dev/null
+++ b/doc/de/images/button-search.gif
Binary files differ
diff --git a/doc/de/images/button-set-allowed-users.gif b/doc/de/images/button-set-allowed-users.gif
new file mode 100644
index 000000000..a62eb100a
--- /dev/null
+++ b/doc/de/images/button-set-allowed-users.gif
Binary files differ
diff --git a/doc/de/images/button-set-as-default.gif b/doc/de/images/button-set-as-default.gif
new file mode 100644
index 000000000..c2a33a97a
--- /dev/null
+++ b/doc/de/images/button-set-as-default.gif
Binary files differ
diff --git a/doc/de/images/button-set-printer-options.gif b/doc/de/images/button-set-printer-options.gif
new file mode 100644
index 000000000..daf871094
--- /dev/null
+++ b/doc/de/images/button-set-printer-options.gif
Binary files differ
diff --git a/doc/de/images/button-show-active.gif b/doc/de/images/button-show-active.gif
new file mode 100644
index 000000000..4a2270e6e
--- /dev/null
+++ b/doc/de/images/button-show-active.gif
Binary files differ
diff --git a/doc/de/images/button-show-all.gif b/doc/de/images/button-show-all.gif
new file mode 100644
index 000000000..8564af952
--- /dev/null
+++ b/doc/de/images/button-show-all.gif
Binary files differ
diff --git a/doc/de/images/button-show-completed.gif b/doc/de/images/button-show-completed.gif
new file mode 100644
index 000000000..ad03d3e48
--- /dev/null
+++ b/doc/de/images/button-show-completed.gif
Binary files differ
diff --git a/doc/de/images/button-show-next.gif b/doc/de/images/button-show-next.gif
new file mode 100644
index 000000000..c3a18e968
--- /dev/null
+++ b/doc/de/images/button-show-next.gif
Binary files differ
diff --git a/doc/de/images/button-show-previous.gif b/doc/de/images/button-show-previous.gif
new file mode 100644
index 000000000..426180f1e
--- /dev/null
+++ b/doc/de/images/button-show-previous.gif
Binary files differ
diff --git a/doc/de/images/button-sort-ascending.gif b/doc/de/images/button-sort-ascending.gif
new file mode 100644
index 000000000..a544d2b9d
--- /dev/null
+++ b/doc/de/images/button-sort-ascending.gif
Binary files differ
diff --git a/doc/de/images/button-sort-descending.gif b/doc/de/images/button-sort-descending.gif
new file mode 100644
index 000000000..076533dbc
--- /dev/null
+++ b/doc/de/images/button-sort-descending.gif
Binary files differ
diff --git a/doc/de/images/button-start-class.gif b/doc/de/images/button-start-class.gif
new file mode 100644
index 000000000..e5170346a
--- /dev/null
+++ b/doc/de/images/button-start-class.gif
Binary files differ
diff --git a/doc/de/images/button-start-printer.gif b/doc/de/images/button-start-printer.gif
new file mode 100644
index 000000000..4bab122f8
--- /dev/null
+++ b/doc/de/images/button-start-printer.gif
Binary files differ
diff --git a/doc/de/images/button-stop-class.gif b/doc/de/images/button-stop-class.gif
new file mode 100644
index 000000000..5bce80851
--- /dev/null
+++ b/doc/de/images/button-stop-class.gif
Binary files differ
diff --git a/doc/de/images/button-stop-printer.gif b/doc/de/images/button-stop-printer.gif
new file mode 100644
index 000000000..934486074
--- /dev/null
+++ b/doc/de/images/button-stop-printer.gif
Binary files differ
diff --git a/doc/de/images/button-unpublish-printer.gif b/doc/de/images/button-unpublish-printer.gif
new file mode 100644
index 000000000..ecf33fa51
--- /dev/null
+++ b/doc/de/images/button-unpublish-printer.gif
Binary files differ
diff --git a/doc/de/images/button-view-access-log.gif b/doc/de/images/button-view-access-log.gif
new file mode 100644
index 000000000..82ad70b7b
--- /dev/null
+++ b/doc/de/images/button-view-access-log.gif
Binary files differ
diff --git a/doc/de/images/button-view-error-log.gif b/doc/de/images/button-view-error-log.gif
new file mode 100644
index 000000000..c90c0bff5
--- /dev/null
+++ b/doc/de/images/button-view-error-log.gif
Binary files differ
diff --git a/doc/de/images/button-view-page-log.gif b/doc/de/images/button-view-page-log.gif
new file mode 100644
index 000000000..cc7a22f1a
--- /dev/null
+++ b/doc/de/images/button-view-page-log.gif
Binary files differ
diff --git a/doc/de/images/button-view-printable-version.gif b/doc/de/images/button-view-printable-version.gif
new file mode 100644
index 000000000..e7b4e9c3c
--- /dev/null
+++ b/doc/de/images/button-view-printable-version.gif
Binary files differ
diff --git a/doc/de/index.html.in b/doc/de/index.html.in
new file mode 100644
index 000000000..bd7ec21c8
--- /dev/null
+++ b/doc/de/index.html.in
@@ -0,0 +1,143 @@
+<!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="">&nbsp;&nbsp;Startseite&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/admin/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Verwaltung&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/classes/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Klassen&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/help/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Dokumentation/Hilfe&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/jobs/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Auftr&auml;ge&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/printers/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Drucker&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+</TD></TR>
+<TR CLASS="page">
+<TD WIDTH="15">&nbsp;</TD>
+<TD COLSPAN="2" WIDTH="100%" VALIGN="TOP" CLASS="page">
+
+<H2 CLASS="title">Herzlich Willkommen!</H2>
+
+<P>Auf diesen Seiten k&ouml;nnen Sie Ihre Drucker und Aufträge &uuml;berwachen,
+sowie auch Verwaltungsaufgaben durchzuführen. Klicken Sie auf einen der
+oberen Karteireiter oder eine der Schaltflächen um eine T&auml;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&uuml;gen"></A>
+<A HREF="/admin?OP=add-printer"><IMG SRC="/images/button-add-printer.gif" CLASS="button" ALT="Drucker hinzuf&uuml;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&auml;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">&Uuml;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&uuml;r
+UNIX<SUP>&reg;</SUP>-basierte Betriebssysteme bereit. Es wird entwickelt
+und gepflegt von <A HREF="http://www.easysw.com">Easy Software
+Products</a> um eine Standard Druckerl&ouml;sung zu f&ouml;rdern. CUPS ist das
+Standard Drucksystem welches von MacOS<SUP>&reg;</SUP> X und den meisten
+Linux<SUP>&reg;</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&auml;ge und Warteschlangen und f&uuml;gt
+Drucker-Browsing und PostScript Printer Description ("PPD") basierte
+Druckeigenschaften hinzu um komplexe Druckumgebungen optimale zu
+unterst&uuml;tzen.<BR CLEAR="ALL"></P>
+
+<H2 CLASS="title">Druckertreiber und Unterst&uuml;tzung</H2>
+
+<P>Besuchen Sie die offizielle CUPS Seite um Druckertreiber und
+Unterst&uuml;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&uuml;gbar unter:</P>
+
+<PRE>
+ <A HREF="http://www.easysw.com/" TARGET="_blank">www.easysw.com</A>
+</PRE>
+
+</TD>
+<TD WIDTH="15">&nbsp;</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&uuml;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>
diff --git a/doc/help/policies.html b/doc/help/policies.html
new file mode 100644
index 000000000..804fc3e9e
--- /dev/null
+++ b/doc/help/policies.html
@@ -0,0 +1,677 @@
+<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 &lt;Policy default>
+ 2 # Job-related operations must be done by the owner or an
+ adminstrator...
+ 3 &lt;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 &lt;/Limit>
+ 7
+ 8 # All administration operations require an adminstrator
+ to authenticate...
+ 9 &lt;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 &lt;/Limit>
+14
+15 # Only the owner or an administrator can cancel or
+ authenticate a job...
+16 &lt;Limit Cancel-Job CUPS-Authenticate-Job>
+17 Require user @OWNER @SYSTEM
+18 Order deny,allow
+19 &lt;/Limit>
+20
+21 &lt;Limit All>
+22 Order deny,allow
+23 &lt;/Limit>
+24 &lt;/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 &lt;Policy default>
+</PRE>
+
+<P>The first <TT>Limit</TT> subsection defines the rules for IPP
+job operations:</P>
+
+<PRE CLASS="command">
+ 3 &lt;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 &lt;/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 &lt;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 &lt;/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 &lt;Limit Cancel-Job CUPS-Authenticate-Job>
+17 Require user @OWNER @SYSTEM
+18 Order deny,allow
+19 &lt;/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 &lt;Limit All>
+22 Order deny,allow
+23 &lt;/Limit>
+24 &lt;/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">
+&lt;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">
+&lt;Limit Cancel-Job>
+ Order deny,allow
+&lt;/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 &lt;Policy lab999>
+ 2 # Job- and subscription-related operations must be done
+ by the owner, a lab technician, or an adminstrator...
+ 3 &lt;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 &lt;/Limit>
+ 8
+ 9 # All administration operations require a lab technician
+ or an adminstrator to authenticate...
+10 &lt;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 &lt;/Limit>
+16
+17 # All other operations are allowed from the lab network...
+18 &lt;Limit All>
+19 Order allow,deny
+20 Allow from 10.0.2.0/24
+21 &lt;/Limit>
+22 &lt;/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>
diff --git a/doc/help/ref-mailto-conf.html b/doc/help/ref-mailto-conf.html
new file mode 100644
index 000000000..031700df9
--- /dev/null
+++ b/doc/help/ref-mailto-conf.html
@@ -0,0 +1,105 @@
+<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 &lt;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 &lt;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>
diff --git a/filter/rastertolabel.c b/filter/rastertolabel.c
index d5f403182..340ee976d 100644
--- a/filter/rastertolabel.c
+++ b/filter/rastertolabel.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -352,6 +352,8 @@ StartPage(ppd_file_t *ppd, /* I - PPD file */
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;
}
@@ -588,7 +590,10 @@ EndPage(ppd_file_t *ppd, /* I - PPD file */
* Print the label...
*/
- puts("FORM\r");
+ if ((choice = ppdFindMarkedChoice(ppd, "zeMediaTracking")) == NULL ||
+ strcmp(choice->choice, "Continuous"))
+ puts("FORM\r");
+
puts("PRINT\r");
break;
}
@@ -1003,5 +1008,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * 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 $".
*/
diff --git a/locale/cups_de.po b/locale/cups_de.po
new file mode 100644
index 000000000..6b1cefcb5
--- /dev/null
+++ b/locale/cups_de.po
@@ -0,0 +1,2821 @@
+#
+# "$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"
diff --git a/locale/cups_ja.po b/locale/cups_ja.po
index cf6d770a9..7dbe5334a 100644
--- a/locale/cups_ja.po
+++ b/locale/cups_ja.po
@@ -26,7 +26,7 @@ msgstr ""
"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"
@@ -2929,12 +2929,11 @@ msgstr ""
#, 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"
diff --git a/man/Makefile b/man/Makefile
index 6071d57e0..709e0ac7e 100644
--- a/man/Makefile
+++ b/man/Makefile
@@ -1,5 +1,5 @@
#
-# "$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).
#
@@ -44,6 +44,7 @@ MAN5 = classes.conf.$(MAN5EXT) \
client.conf.$(MAN5EXT) \
cups-snmp.conf.$(MAN5EXT) \
cupsd.conf.$(MAN5EXT) \
+ mailto.conf.$(MAN5EXT) \
mime.convs.$(MAN5EXT) \
mime.types.$(MAN5EXT) \
printers.conf.$(MAN5EXT) \
@@ -183,5 +184,5 @@ mantohtml: mantohtml.o
#
-# End of "$Id: Makefile 5472 2006-04-30 16:27:50Z mike $".
+# End of "$Id: Makefile 5728 2006-07-12 20:45:13Z mike $".
#
diff --git a/man/lpadmin.man b/man/lpadmin.man
index 28d747053..6bb24c3b3 100644
--- a/man/lpadmin.man
+++ b/man/lpadmin.man
@@ -1,5 +1,5 @@
.\"
-.\" "$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).
.\"
@@ -21,7 +21,7 @@
.\" 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
@@ -123,6 +123,27 @@ Sets the default banner page(s) to use for print jobs.
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
@@ -144,7 +165,8 @@ user-level access control off.
.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
@@ -176,11 +198,12 @@ requires the root user to execute this command.
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 $".
.\"
diff --git a/man/mailto.conf.man b/man/mailto.conf.man
new file mode 100644
index 000000000..5e0371fc7
--- /dev/null
+++ b/man/mailto.conf.man
@@ -0,0 +1,69 @@
+.\"
+.\" "$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$".
+.\"
diff --git a/notifier/testnotify.c b/notifier/testnotify.c
index d334a4a9e..d0a502b20 100644
--- a/notifier/testnotify.c
+++ b/notifier/testnotify.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -82,6 +82,14 @@ main(int argc, /* I - Number of command-line arguments */
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);
}
}
@@ -281,5 +289,5 @@ print_attributes(ipp_t *ipp, /* I - IPP request */
/*
- * 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 $".
*/
diff --git a/packaging/cups.list.in b/packaging/cups.list.in
index c6d7e8f1d..923b254f2 100644
--- a/packaging/cups.list.in
+++ b/packaging/cups.list.in
@@ -1,5 +1,5 @@
#
-# "$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).
@@ -97,6 +97,9 @@
%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
@@ -173,6 +176,7 @@ $INSTALLSTATIC=@INSTALLSTATIC@
$MAN1EXT=@MAN1EXT@
$MAN5EXT=@MAN5EXT@
$MAN7EXT=@MAN7EXT@
+$MAN8EXT=@MAN8EXT@
$MAN8DIR=@MAN8DIR@
$DSOLIBS=@DSOLIBS@
@@ -337,6 +341,8 @@ d 0755 root $CUPS_GROUP $STATEDIR -
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
@@ -400,6 +406,9 @@ d 0755 root sys $DATADIR/templates -
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
@@ -418,6 +427,7 @@ f 0644 root sys $DATADIR/templates/sv templates/sv/*.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
@@ -462,6 +472,7 @@ f 0644 root sys $DOCDIR/help/license.html doc/help/license.html
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
@@ -475,6 +486,11 @@ f 0644 root sys $DOCDIR/images doc/images/*.png
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
@@ -518,6 +534,7 @@ f 0644 root sys $MANDIR/man1/lp.$MAN1EXT man/lp.$MAN1EXT
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
@@ -550,5 +567,5 @@ f 0644 root sys $AMANDIR/man$MAN8DIR/cups-lpd.$MAN8EXT man/cups-lpd.$MAN8EXT
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 $".
#
diff --git a/packaging/cups.spec.in b/packaging/cups.spec.in
index 3f15b4a94..e171fad51 100644
--- a/packaging/cups.spec.in
+++ b/packaging/cups.spec.in
@@ -1,5 +1,5 @@
#
-# "$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).
#
@@ -76,6 +76,11 @@ Summary: Common UNIX Printing System - LPD support
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
@@ -122,6 +127,10 @@ UNIX operating systems. This package contains the CUPS shared libraries.
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.
@@ -204,6 +213,7 @@ rm -rf $RPM_BUILD_ROOT
/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
@@ -291,6 +301,7 @@ rm -rf $RPM_BUILD_ROOT
/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
@@ -371,6 +382,16 @@ rm -rf $RPM_BUILD_ROOT
%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
@@ -419,5 +440,5 @@ rm -rf $RPM_BUILD_ROOT
#
-# 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 $".
#
diff --git a/pdftops/PSOutputDev.cxx b/pdftops/PSOutputDev.cxx
index 41d359098..4c98d207c 100644
--- a/pdftops/PSOutputDev.cxx
+++ b/pdftops/PSOutputDev.cxx
@@ -1158,7 +1158,7 @@ void PSOutputDev::writeHeader(int firstPage, int lastPage,
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: ");
diff --git a/ppd/zebracpl.ppd b/ppd/zebracpl.ppd
index db46f8d03..e5bd41241 100644
--- a/ppd/zebracpl.ppd
+++ b/ppd/zebracpl.ppd
@@ -120,6 +120,14 @@
*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
diff --git a/scheduler/Makefile b/scheduler/Makefile
index 403997bb9..f269c3849 100644
--- a/scheduler/Makefile
+++ b/scheduler/Makefile
@@ -1,5 +1,5 @@
#
-# "$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).
#
@@ -127,6 +127,9 @@ install: all
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...
@@ -274,5 +277,5 @@ include Dependencies
#
-# End of "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $".
+# End of "$Id: Makefile 5736 2006-07-13 19:59:36Z mike $".
#
diff --git a/scheduler/client.c b/scheduler/client.c
index 23a74e50e..c3c236f78 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -1,5 +1,5 @@
/*
- * "$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.
*
@@ -83,9 +83,9 @@ static http_status_t install_conf_file(cupsd_client_t *con);
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,
@@ -2528,6 +2528,20 @@ encrypt_client(cupsd_client_t *con) /* I - Client to encrypt */
/*
+ * 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...
*/
@@ -2579,7 +2593,8 @@ encrypt_client(cupsd_client_t *con) /* I - Client to encrypt */
* Nope, make a self-signed certificate...
*/
- make_certificate();
+ if (!make_certificate())
+ return (0);
}
/*
@@ -2654,6 +2669,16 @@ encrypt_client(cupsd_client_t *con) /* I - Client to encrypt */
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,
"EncryptClient: Could not find signing key in keychain "
"\"%s\"", ServerCertificate);
@@ -3316,14 +3341,92 @@ is_path_absolute(const char *path) /* I - Input path */
}
-#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 */
@@ -3339,7 +3442,7 @@ make_certificate(void)
* 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);
@@ -3353,33 +3456,33 @@ make_certificate(void)
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);
@@ -3432,7 +3535,7 @@ make_certificate(void)
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)
{
@@ -3440,12 +3543,12 @@ make_certificate(void)
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));
/*
@@ -3454,8 +3557,83 @@ make_certificate(void)
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 */
/*
@@ -3833,5 +4011,5 @@ write_file(cupsd_client_t *con, /* I - Client connection */
/*
- * 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 $".
*/
diff --git a/scheduler/conf.c b/scheduler/conf.c
index 29a5b7d13..42acaf083 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -468,6 +468,14 @@ cupsdReadConfiguration(void)
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...
*/
@@ -785,6 +793,24 @@ cupsdReadConfiguration(void)
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...
*/
@@ -2572,7 +2598,7 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
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 ++;
}
@@ -2961,7 +2987,12 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
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;
@@ -3249,5 +3280,5 @@ read_policy(cups_file_t *fp, /* I - Configuration file */
/*
- * 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 $".
*/
diff --git a/scheduler/conf.h b/scheduler/conf.h
index 7b6eea95c..6320f9d19 100644
--- a/scheduler/conf.h
+++ b/scheduler/conf.h
@@ -1,5 +1,5 @@
/*
- * "$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.
@@ -74,6 +74,7 @@ VAR char *ConfigurationFile VALUE(NULL),
/* 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];
@@ -210,5 +211,5 @@ extern int cupsdLogPage(cupsd_job_t *job, const char *page);
/*
- * 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 $".
*/
diff --git a/scheduler/cups-polld.c b/scheduler/cups-polld.c
index 0a8b4c12a..259361d5b 100644
--- a/scheduler/cups-polld.c
+++ b/scheduler/cups-polld.c
@@ -1,9 +1,9 @@
/*
- * "$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
@@ -24,6 +24,7 @@
* 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.
*/
@@ -43,8 +44,8 @@
* 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);
@@ -53,18 +54,17 @@ static int poll_server(http_t *http, cups_lang_t *language, ipp_op_t op,
*/
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 */
/*
@@ -128,25 +128,22 @@ main(int argc, /* I - Number of command-line arguments */
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;
/*
@@ -160,13 +157,41 @@ main(int argc, /* I - Number of command-line arguments */
/*
+ * '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 */
@@ -178,10 +203,12 @@ poll_server(http_t *http, /* I - HTTP connection */
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 */
@@ -189,6 +216,7 @@ poll_server(http_t *http, /* I - HTTP connection */
char packet[1540]; /* Data packet */
static const char * const attrs[] = /* Requested attributes */
{
+ "job-sheets-default",
"printer-info",
"printer-is-accepting-jobs",
"printer-location",
@@ -210,20 +238,12 @@ poll_server(http_t *http, /* I - HTTP connection */
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]),
@@ -240,17 +260,18 @@ poll_server(http_t *http, /* I - HTTP connection */
* 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...
*/
@@ -261,8 +282,7 @@ poll_server(http_t *http, /* I - HTTP connection */
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);
@@ -272,58 +292,65 @@ poll_server(http_t *http, /* I - HTTP connection */
* 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;
@@ -350,8 +377,10 @@ poll_server(http_t *http, /* I - HTTP connection */
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);
@@ -376,22 +405,16 @@ poll_server(http_t *http, /* I - HTTP connection */
*/
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...
@@ -402,5 +425,5 @@ poll_server(http_t *http, /* I - HTTP connection */
/*
- * 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 $".
*/
diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c
index e26d20db7..c2e19a970 100644
--- a/scheduler/dirsvc.c
+++ b/scheduler/dirsvc.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -212,10 +212,11 @@ cupsdLoadRemoteCache(void)
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...
@@ -252,10 +253,11 @@ cupsdLoadRemoteCache(void)
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...
@@ -416,8 +418,8 @@ cupsdLoadRemoteCache(void)
{
time_t t = atoi(value);
- if (t > (now + BrowseInterval))
- p->browse_time = t;
+ if (t > p->browse_expire)
+ p->browse_expire = t;
}
else
{
@@ -591,7 +593,7 @@ cupsdSaveRemoteCache(void)
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);
@@ -906,14 +908,21 @@ cupsdStartBrowsing(void)
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;
@@ -1885,7 +1894,7 @@ process_browse_data(
hptr = strchr(host, '.');
sptr = strchr(ServerName, '.');
- if (sptr != NULL && hptr != NULL)
+ if (!ServerNameIsIP && sptr != NULL && hptr != NULL)
{
/*
* Strip the common domain name components...
@@ -3149,5 +3158,5 @@ slp_url_callback(
/*
- * 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 $".
*/
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index 7ed169a44..28115133d 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -1,5 +1,5 @@
/*
- * "$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.
*
@@ -4334,7 +4334,8 @@ copy_printer_attrs(
{
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\"",
@@ -4822,9 +4823,10 @@ create_subscription(
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);
@@ -8808,19 +8810,11 @@ start_printer(cupsd_client_t *con, /* I - Client connection */
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();
@@ -8904,19 +8898,11 @@ stop_printer(cupsd_client_t *con, /* I - Client connection */
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...
@@ -9214,5 +9200,5 @@ validate_user(cupsd_job_t *job, /* I - Job */
/*
- * 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 $".
*/
diff --git a/scheduler/job.c b/scheduler/job.c
index 6c21ed07b..967f9ac67 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -1764,8 +1764,8 @@ compare_active_jobs(void *first, /* I - First job */
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);
@@ -3022,7 +3022,7 @@ start_job(cupsd_job_t *job, /* I - Job 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;
}
@@ -3433,5 +3433,5 @@ unload_job(cupsd_job_t *job) /* I - Job */
/*
- * 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 $".
*/
diff --git a/scheduler/listen.c b/scheduler/listen.c
index 467dcfdc8..098705842 100644
--- a/scheduler/listen.c
+++ b/scheduler/listen.c
@@ -1,5 +1,5 @@
/*
- * "$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.
@@ -331,7 +331,7 @@ cupsdStartListening(void)
* "any" address...
*/
- if (!LocalPort && p > 0 &&
+ if ((!LocalPort || LocalEncryption == HTTP_ENCRYPT_ALWAYS) && p > 0 &&
(httpAddrLocalhost(&(lis->address)) ||
httpAddrAny(&(lis->address))))
{
@@ -373,6 +373,8 @@ cupsdStartListening(void)
*/
cupsdSetEnv("CUPS_SERVER", have_domain);
+
+ LocalEncryption = HTTP_ENCRYPT_IF_REQUESTED;
}
else
{
@@ -439,5 +441,5 @@ cupsdStopListening(void)
/*
- * 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 $".
*/
diff --git a/scheduler/printers.c b/scheduler/printers.c
index c987f1605..f1cb56352 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -546,6 +546,7 @@ cupsdCreateCommonData(void)
}
cupsArrayDelete(notifiers);
+ cupsDirClose(dir);
}
/* number-up-supported */
@@ -645,6 +646,9 @@ cupsdDeletePrinter(
cupsArrayRemove(Printers, p);
+ if (p->type & CUPS_PRINTER_IMPLICIT)
+ cupsArrayRemove(ImplicitPrinters, p);
+
/*
* Remove the dummy interface/icon/option files under IRIX...
*/
@@ -1260,6 +1264,7 @@ cupsdRenamePrinter(
*/
cupsArrayAdd(Printers, p);
+
if (p->type & CUPS_PRINTER_IMPLICIT)
cupsArrayAdd(ImplicitPrinters, p);
}
@@ -3307,5 +3312,5 @@ write_irix_state(cupsd_printer_t *p) /* I - Printer to update */
/*
- * 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 $".
*/
diff --git a/scheduler/subscriptions.c b/scheduler/subscriptions.c
index 428841306..f27c48ff4 100644
--- a/scheduler/subscriptions.c
+++ b/scheduler/subscriptions.c
@@ -1,5 +1,5 @@
/*
- * "$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.
*
@@ -89,6 +89,11 @@ cupsdAddEvent(
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...
*/
@@ -284,13 +289,13 @@ cupsdAddEvent(
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);
}
}
@@ -1379,7 +1384,7 @@ cupsd_send_notification(
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));
@@ -1435,13 +1440,16 @@ cupsd_send_notification(
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)
@@ -1449,9 +1457,34 @@ cupsd_send_notification(
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;
}
}
@@ -1591,5 +1624,5 @@ cupsd_start_notifier(
/*
- * 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 $".
*/
diff --git a/systemv/cancel.c b/systemv/cancel.c
index 63c92fcfa..f6d4aed0a 100644
--- a/systemv/cancel.c
+++ b/systemv/cancel.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -121,7 +121,10 @@ main(int argc, /* I - Number of command-line arguments */
case 'h' : /* Connect to host */
if (http != NULL)
+ {
httpClose(http);
+ http = NULL;
+ }
if (argv[i][2] != '\0')
cupsSetServer(argv[i] + 2);
@@ -387,5 +390,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * 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 $".
*/
diff --git a/systemv/cupsaddsmb.c b/systemv/cupsaddsmb.c
index a69e113f1..0c74fbff0 100644
--- a/systemv/cupsaddsmb.c
+++ b/systemv/cupsaddsmb.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -249,7 +249,9 @@ export_dest(http_t *http, /* I - Connection to server */
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)
@@ -290,5 +292,5 @@ usage(void)
/*
- * 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 $".
*/
diff --git a/systemv/lpoptions.c b/systemv/lpoptions.c
index 8e6441d8a..30d57aa48 100644
--- a/systemv/lpoptions.c
+++ b/systemv/lpoptions.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -164,6 +164,21 @@ main(int argc, /* I - Number of command-line arguments */
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
@@ -219,6 +234,21 @@ main(int argc, /* I - Number of command-line arguments */
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
@@ -231,7 +261,7 @@ main(int argc, /* I - Number of command-line arguments */
}
for (j = 0; j < num_options; j ++)
- if (strcasecmp(options[j].name, option) == 0)
+ if (!strcasecmp(options[j].name, option))
{
/*
* Remove this option...
@@ -452,5 +482,5 @@ usage(void)
/*
- * 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 $".
*/
diff --git a/templates/de/add-class.tmpl b/templates/de/add-class.tmpl
new file mode 100644
index 000000000..c5bd8e451
--- /dev/null
+++ b/templates/de/add-class.tmpl
@@ -0,0 +1,33 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Klasse hinzuf&uuml;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&uuml;gen"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/de/add-printer.tmpl b/templates/de/add-printer.tmpl
new file mode 100644
index 000000000..db60277f9
--- /dev/null
+++ b/templates/de/add-printer.tmpl
@@ -0,0 +1,28 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Neuen Drucker hinzuf&uuml;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&szlig;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&uuml;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&uuml;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>
diff --git a/templates/de/admin.tmpl b/templates/de/admin.tmpl
new file mode 100644
index 000000000..9bf668631
--- /dev/null
+++ b/templates/de/admin.tmpl
@@ -0,0 +1,77 @@
+<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&uuml;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&uuml;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&amp;{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&uuml;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&auml;ge</H2>
+
+<P>
+<A HREF="/jobs/"><IMG SRC="/images/button-manage-jobs.gif" ALT="Auftr&auml;ge
+verwalten" CLASS="button"></A>
+</P>
+
+</TD><TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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&uuml;r Fehlersuche</P>
+
+<P><INPUT TYPE="IMAGE" SRC="/images/button-change-settings.gif" ALT="Einstellungen &auml;ndern"></P>
+
+</FORM>}
+
+</TD></TR>
+</TABLE>
diff --git a/templates/de/choose-device.tmpl b/templates/de/choose-device.tmpl
new file mode 100644
index 000000000..a45c9ba70
--- /dev/null
+++ b/templates/de/choose-device.tmpl
@@ -0,0 +1,26 @@
+<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&auml;t f&uuml;r {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Ger&auml;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>
diff --git a/templates/de/choose-make.tmpl b/templates/de/choose-make.tmpl
new file mode 100644
index 000000000..db8211792
--- /dev/null
+++ b/templates/de/choose-make.tmpl
@@ -0,0 +1,42 @@
+<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&uuml;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>&nbsp;</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>
diff --git a/templates/de/choose-model.tmpl b/templates/de/choose-model.tmpl
new file mode 100644
index 000000000..17d94b42a
--- /dev/null
+++ b/templates/de/choose-model.tmpl
@@ -0,0 +1,34 @@
+<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&uuml;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>
diff --git a/templates/de/choose-serial.tmpl b/templates/de/choose-serial.tmpl
new file mode 100644
index 000000000..73cca51fc
--- /dev/null
+++ b/templates/de/choose-serial.tmpl
@@ -0,0 +1,47 @@
+<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&uuml;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&auml;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&szlig;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>
diff --git a/templates/de/choose-uri.tmpl b/templates/de/choose-uri.tmpl
new file mode 100644
index 000000000..b4068be5a
--- /dev/null
+++ b/templates/de/choose-uri.tmpl
@@ -0,0 +1,42 @@
+<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&auml;te URI f&uuml;r {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Ger&auml;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&uuml;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>
diff --git a/templates/de/class-added.tmpl b/templates/de/class-added.tmpl
new file mode 100644
index 000000000..abce91799
--- /dev/null
+++ b/templates/de/class-added.tmpl
@@ -0,0 +1,2 @@
+<P>Class <A HREF="/classes/{printer_name}">{printer_name}</A> wurde erfolgreich
+hinzugef&uuml;gt.
diff --git a/templates/de/class-confirm.tmpl b/templates/de/class-confirm.tmpl
new file mode 100644
index 000000000..3da201fbc
--- /dev/null
+++ b/templates/de/class-confirm.tmpl
@@ -0,0 +1,7 @@
+<P><B>Warning:</B> Sind Sie sicher, da&szlig; Sie die Klasse
+{printer_name} l&ouml;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&ouml;schen"
+CLASS="button"></A></P>
diff --git a/templates/de/class-deleted.tmpl b/templates/de/class-deleted.tmpl
new file mode 100644
index 000000000..c75fab4e5
--- /dev/null
+++ b/templates/de/class-deleted.tmpl
@@ -0,0 +1 @@
+<P>Klasse {printer_name} wurde erfolgreich gel&ouml;scht.
diff --git a/templates/de/class-jobs-header.tmpl b/templates/de/class-jobs-header.tmpl
new file mode 100644
index 000000000..e5b9e08eb
--- /dev/null
+++ b/templates/de/class-jobs-header.tmpl
@@ -0,0 +1 @@
+<H3 CLASS="title">Auftr&auml;ge</H3>
diff --git a/templates/de/class-modified.tmpl b/templates/de/class-modified.tmpl
new file mode 100644
index 000000000..944b766af
--- /dev/null
+++ b/templates/de/class-modified.tmpl
@@ -0,0 +1,2 @@
+<P>Klasse <A HREF="/classes/{printer_name}">{printer_name}</A> wurde
+erfolgreich ge&auml;ndert.
diff --git a/templates/de/classes-header.tmpl b/templates/de/classes-header.tmpl
new file mode 100644
index 000000000..f07d47d2c
--- /dev/null
+++ b/templates/de/classes-header.tmpl
@@ -0,0 +1 @@
+<P ALIGN="CENTER">{total=0?Keine Klassen gefunden:Zeige {#printer_name} von {total} Klasse{total=1?:n}}.</P>
diff --git a/templates/de/classes.tmpl b/templates/de/classes.tmpl
new file mode 100644
index 000000000..ef599ad9b
--- /dev/null
+++ b/templates/de/classes.tmpl
@@ -0,0 +1,54 @@
+{#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&auml;ge ablehnen:Auftr&auml;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&amp;printer_name={%printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-start-class.gif" ALT="Klasse starten" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-class&amp;printer_name={%printer_name}&amp;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&amp;printer_name={%printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-accept-jobs.gif" ALT="Auftr&auml;ge akzeptieren" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&amp;printer_name={%printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="Auftr&auml;ge ablehnen" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=purge-jobs&amp;printer_name={%printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Alle Auftr&auml;ge abbrechen" CLASS="button"></A>
+{printer_is_shared=0?
+<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={%printer_name}&amp;shared=1&amp;is_class=Y">
+<IMG SRC="/images/button-publish-printer.gif" ALT="Drucker publizieren" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={%printer_name}&amp;shared=0&amp;is_class=Y">
+<IMG SRC="/images/button-unpublish-printer.gif" ALT="Druckerpublikation aufheben" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-class&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-modify-class.gif" ALT="Klasse &auml;ndern" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-class&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-delete-class.gif" ALT="Klasse l&ouml;schen" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-as-default&amp;printer_name={%printer_name}&amp;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&amp;printer_name={%printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-set-allowed-users.gif" ALT="Erlaubte Benutzer festlegen" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
diff --git a/templates/de/edit-config.tmpl.in b/templates/de/edit-config.tmpl.in
new file mode 100644
index 000000000..4cfcad1a8
--- /dev/null
+++ b/templates/de/edit-config.tmpl.in
@@ -0,0 +1,91 @@
+<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="&Auml;nderungen speichern"> <A
+HREF="javascript:reset_config();"><IMG
+SRC="/images/button-use-default-config.gif" CLASS="button"
+ALT="Standard Konfigurationsdatei verwenden"></A></P>
+
+</FORM>
diff --git a/templates/de/error-op.tmpl b/templates/de/error-op.tmpl
new file mode 100644
index 000000000..9e1236c85
--- /dev/null
+++ b/templates/de/error-op.tmpl
@@ -0,0 +1,3 @@
+<P>Fehler:</P>
+
+<BLOCKQUOTE>Unbekannte Operation "{op}"!</BLOCKQUOTE>
diff --git a/templates/de/error.tmpl b/templates/de/error.tmpl
new file mode 100644
index 000000000..4653d8ba7
--- /dev/null
+++ b/templates/de/error.tmpl
@@ -0,0 +1,3 @@
+<P>{?message?{message}:Fehler:}</P>
+
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
diff --git a/templates/de/header.tmpl.in b/templates/de/header.tmpl.in
new file mode 100644
index 000000000..6ece4d7b1
--- /dev/null
+++ b/templates/de/header.tmpl.in
@@ -0,0 +1,63 @@
+<!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="">&nbsp;&nbsp;Startseite&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=admin?:un}sel" HREF="/admin"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Verwaltung&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=classes?:un}sel" HREF="/classes/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Klassen&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=help?:un}sel" HREF="/help/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Dokumentation/Hilfe&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=jobs?:un}sel" HREF="/jobs/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Auftr&auml;ge&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=printers?:un}sel" HREF="/printers/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Drucker&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+</TD></TR>
+<TR CLASS="page">
+<TD WIDTH="15">&nbsp;</TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="height: 100%;" VALIGN="TOP" CLASS="page">
diff --git a/templates/de/help-header.tmpl b/templates/de/help-header.tmpl
new file mode 100644
index 000000000..80655cd89
--- /dev/null
+++ b/templates/de/help-header.tmpl
@@ -0,0 +1,46 @@
+<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 &Uuml;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 &Uuml;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&auml;ufig gestellte Fragen, und ein Formular für
+Fehlerberichte und W&uuml;nsche.</P>}
diff --git a/templates/de/help-printable.tmpl b/templates/de/help-printable.tmpl
new file mode 100644
index 000000000..305112a33
--- /dev/null
+++ b/templates/de/help-printable.tmpl
@@ -0,0 +1,11 @@
+<!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>
diff --git a/templates/de/job-cancel.tmpl b/templates/de/job-cancel.tmpl
new file mode 100644
index 000000000..06b305c6f
--- /dev/null
+++ b/templates/de/job-cancel.tmpl
@@ -0,0 +1 @@
+<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde abgebrochen.
diff --git a/templates/de/job-hold.tmpl b/templates/de/job-hold.tmpl
new file mode 100644
index 000000000..7e4c4778c
--- /dev/null
+++ b/templates/de/job-hold.tmpl
@@ -0,0 +1 @@
+<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde angehalten.
diff --git a/templates/de/job-move.tmpl b/templates/de/job-move.tmpl
new file mode 100644
index 000000000..f48f25189
--- /dev/null
+++ b/templates/de/job-move.tmpl
@@ -0,0 +1,22 @@
+<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&auml;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&auml;ge}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/de/job-moved.tmpl b/templates/de/job-moved.tmpl
new file mode 100644
index 000000000..2d2b28789
--- /dev/null
+++ b/templates/de/job-moved.tmpl
@@ -0,0 +1,2 @@
+<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>
diff --git a/templates/de/job-release.tmpl b/templates/de/job-release.tmpl
new file mode 100644
index 000000000..34279d6f8
--- /dev/null
+++ b/templates/de/job-release.tmpl
@@ -0,0 +1 @@
+<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde f&uuml;r Druck freigegeben.
diff --git a/templates/de/job-restart.tmpl b/templates/de/job-restart.tmpl
new file mode 100644
index 000000000..940611763
--- /dev/null
+++ b/templates/de/job-restart.tmpl
@@ -0,0 +1 @@
+<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde neu gestartet.
diff --git a/templates/de/jobs-header.tmpl b/templates/de/jobs-header.tmpl
new file mode 100644
index 000000000..419c77910
--- /dev/null
+++ b/templates/de/jobs-header.tmpl
@@ -0,0 +1,15 @@
+<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&auml;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&auml;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&auml;ge anzeigen"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="Aktive Auftr&auml;ge anzeigen">:<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="Aktive Auftr&auml;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&auml;ge anzeigen">}}</A></P>
+
+<P ALIGN="CENTER">{total=0?Keine Auftr&auml;ge gefunden:Zeige {#job_id} von {total} {?which_jobs=?active:{which_jobs=all?:fertigen}} {total=1?Auftrag:Auftr&auml;gen}}.</P>
diff --git a/templates/de/jobs.tmpl b/templates/de/jobs.tmpl
new file mode 100644
index 000000000..0553eb700
--- /dev/null
+++ b/templates/de/jobs.tmpl
@@ -0,0 +1,42 @@
+{#job_id=0?:
+<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%" SUMMARY="Auftragsliste">
+<TR CLASS="data">
+<TH>ID&nbsp;</TH>
+<TH>Name&nbsp;</TH>
+<TH>Benutzer&nbsp;</TH>
+<TH>Gr&ouml;&szlig;e&nbsp;</TH>
+<TH>Seiten&nbsp;</TH>
+<TH>Status&nbsp;</TH>
+<TH>Kontrolle&nbsp;</TH>
+</TR>
+
+{[job_id]
+<TR CLASS="data" VALIGN="TOP">
+<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id}&nbsp;</TD>
+<TD>{?job_name=?Unbekannt:{job_name}}&nbsp;</TD>
+<TD>{job_originating_user_name}&nbsp;</TD>
+<TD>{job_k_octets}k&nbsp;</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}}}}}}}&nbsp;</TD>
+<TD>
+{job_preserved>0?
+<A HREF="/jobs/?op=restart-job&amp;job_id={job_id}&amp;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&amp;job_id={job_id}&amp;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&amp;job_id={job_id}&amp;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&amp;job_id={job_id}&amp;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&amp;job_id={job_id}"><IMG
+SRC="/images/button-move-job.gif" ALT="Auftrag verschieben" CLASS="button"></A>:}
+&nbsp;</TD>
+</TR>
+}
+</TABLE>
+}
diff --git a/templates/de/maintenance.tmpl b/templates/de/maintenance.tmpl
new file mode 100644
index 000000000..811c40107
--- /dev/null
+++ b/templates/de/maintenance.tmpl
@@ -0,0 +1,2 @@
+<P>Wartungskommando gesendet; Auftrags ID ist <A HREF="/printers/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
diff --git a/templates/de/modify-class.tmpl b/templates/de/modify-class.tmpl
new file mode 100644
index 000000000..779891359
--- /dev/null
+++ b/templates/de/modify-class.tmpl
@@ -0,0 +1,34 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Klasse {printer_name} &auml;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 &auml;ndern"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/de/modify-printer.tmpl b/templates/de/modify-printer.tmpl
new file mode 100644
index 000000000..54323dfa5
--- /dev/null
+++ b/templates/de/modify-printer.tmpl
@@ -0,0 +1,29 @@
+<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} &auml;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&uuml;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&uuml;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>
diff --git a/templates/de/option-boolean.tmpl b/templates/de/option-boolean.tmpl
new file mode 100644
index 000000000..72c85189a
--- /dev/null
+++ b/templates/de/option-boolean.tmpl
@@ -0,0 +1,6 @@
+<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>
diff --git a/templates/de/option-conflict.tmpl b/templates/de/option-conflict.tmpl
new file mode 100644
index 000000000..95b69f721
--- /dev/null
+++ b/templates/de/option-conflict.tmpl
@@ -0,0 +1,7 @@
+<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>
diff --git a/templates/de/option-header.tmpl b/templates/de/option-header.tmpl
new file mode 100644
index 000000000..cafc9f9fe
--- /dev/null
+++ b/templates/de/option-header.tmpl
@@ -0,0 +1,3 @@
+<H2 CLASS="title">{printer_name}: {group}</H2>
+
+<TABLE>
diff --git a/templates/de/option-pickmany.tmpl b/templates/de/option-pickmany.tmpl
new file mode 100644
index 000000000..d2534af75
--- /dev/null
+++ b/templates/de/option-pickmany.tmpl
@@ -0,0 +1,6 @@
+<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>
diff --git a/templates/de/option-pickone.tmpl b/templates/de/option-pickone.tmpl
new file mode 100644
index 000000000..08342d06e
--- /dev/null
+++ b/templates/de/option-pickone.tmpl
@@ -0,0 +1,6 @@
+<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>
diff --git a/templates/de/option-trailer.tmpl b/templates/de/option-trailer.tmpl
new file mode 100644
index 000000000..02c7a962c
--- /dev/null
+++ b/templates/de/option-trailer.tmpl
@@ -0,0 +1,5 @@
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-set-printer-options.gif" ALT="Druckereinstellungen festlegen"></TD>
+</TR>
+</TABLE>
diff --git a/templates/de/pager.tmpl b/templates/de/pager.tmpl
new file mode 100644
index 000000000..fc602f78a
--- /dev/null
+++ b/templates/de/pager.tmpl
@@ -0,0 +1,7 @@
+<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>:&nbsp;}</TD>
+ <TD WIDTH="34%" ALIGN="CENTER">{ORDER=dec?<A HREF="{THISURL}&amp;ORDER=asc"><IMG SRC="/images/button-sort-ascending.gif" ALT="Aufsteigend sortieren" CLASS="button"></A>:<A HREF="{THISURL}&amp;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&auml;chste anzeigen" CLASS="button"></A>:&nbsp;}</TD>
+</TR>
+</TABLE>
diff --git a/templates/de/printer-accept.tmpl b/templates/de/printer-accept.tmpl
new file mode 100644
index 000000000..5980e5bf0
--- /dev/null
+++ b/templates/de/printer-accept.tmpl
@@ -0,0 +1,3 @@
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+akzeptiert jetzt Auftr&auml;ge.</P>
diff --git a/templates/de/printer-added.tmpl b/templates/de/printer-added.tmpl
new file mode 100644
index 000000000..0ce8e8c4f
--- /dev/null
+++ b/templates/de/printer-added.tmpl
@@ -0,0 +1,2 @@
+<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde erfolgreich
+hinzugef&uuml;gt.
diff --git a/templates/de/printer-configured.tmpl b/templates/de/printer-configured.tmpl
new file mode 100644
index 000000000..a0469e61e
--- /dev/null
+++ b/templates/de/printer-configured.tmpl
@@ -0,0 +1,2 @@
+<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde
+erfolgreich konfiguriert.
diff --git a/templates/de/printer-confirm.tmpl b/templates/de/printer-confirm.tmpl
new file mode 100644
index 000000000..311cd11ae
--- /dev/null
+++ b/templates/de/printer-confirm.tmpl
@@ -0,0 +1,7 @@
+<P><B>Warnung:</B> Sind Sie sicher, da&szlig; Sie den Drucker
+{printer_name} l&ouml;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&ouml;schen"
+CLASS="button"></A></P>
diff --git a/templates/de/printer-default.tmpl b/templates/de/printer-default.tmpl
new file mode 100644
index 000000000..d04a326d4
--- /dev/null
+++ b/templates/de/printer-default.tmpl
@@ -0,0 +1,7 @@
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+wurde zum Standarddrucker f&uuml;r diesen Server bestimmt.</P>
+
+<BLOCKQUOTE><B>Notiz:</B> Jede benutzerspezifische Standardeinstellung welche
+mit dem Befehl <TT>lpoptions</TT> gemacht wird &uuml;berschreibt diese
+Standardeinstellung.</BLOCKQUOTE>
diff --git a/templates/de/printer-deleted.tmpl b/templates/de/printer-deleted.tmpl
new file mode 100644
index 000000000..4489a7306
--- /dev/null
+++ b/templates/de/printer-deleted.tmpl
@@ -0,0 +1 @@
+<P>Drucker {printer_name} wurde erfolgreich gel&ouml;scht.
diff --git a/templates/de/printer-jobs-header.tmpl b/templates/de/printer-jobs-header.tmpl
new file mode 100644
index 000000000..e5b9e08eb
--- /dev/null
+++ b/templates/de/printer-jobs-header.tmpl
@@ -0,0 +1 @@
+<H3 CLASS="title">Auftr&auml;ge</H3>
diff --git a/templates/de/printer-modified.tmpl b/templates/de/printer-modified.tmpl
new file mode 100644
index 000000000..dc1c104bf
--- /dev/null
+++ b/templates/de/printer-modified.tmpl
@@ -0,0 +1,2 @@
+<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde
+erfolgreich ge&auml;ndert.
diff --git a/templates/de/printer-purge.tmpl b/templates/de/printer-purge.tmpl
new file mode 100644
index 000000000..cafa5e819
--- /dev/null
+++ b/templates/de/printer-purge.tmpl
@@ -0,0 +1,3 @@
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+wurde aus allen Auftr&auml;gen eliminiert.</P>
diff --git a/templates/de/printer-reject.tmpl b/templates/de/printer-reject.tmpl
new file mode 100644
index 000000000..513bba1bf
--- /dev/null
+++ b/templates/de/printer-reject.tmpl
@@ -0,0 +1,3 @@
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+akzeptiert ab sofort keine Auftr&auml;ge mehr.</P>
diff --git a/templates/de/printer-start.tmpl b/templates/de/printer-start.tmpl
new file mode 100644
index 000000000..e6836c783
--- /dev/null
+++ b/templates/de/printer-start.tmpl
@@ -0,0 +1,3 @@
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+wurde gestartet.</P>
diff --git a/templates/de/printer-stop.tmpl b/templates/de/printer-stop.tmpl
new file mode 100644
index 000000000..64cbd7294
--- /dev/null
+++ b/templates/de/printer-stop.tmpl
@@ -0,0 +1,3 @@
+<P>{is_class?Klasse:Drucker} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+wurde gestoppt.</P>
diff --git a/templates/de/printers-header.tmpl b/templates/de/printers-header.tmpl
new file mode 100644
index 000000000..b247590d9
--- /dev/null
+++ b/templates/de/printers-header.tmpl
@@ -0,0 +1 @@
+<P ALIGN="CENTER">{total=0?Keine Drucker gefunden:Zeige {#printer_name} von {total} Drucker{total=1?:n}}.</P>
diff --git a/templates/de/printers.tmpl b/templates/de/printers.tmpl
new file mode 100644
index 000000000..7ddde77b7
--- /dev/null
+++ b/templates/de/printers.tmpl
@@ -0,0 +1,64 @@
+{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&auml;ge ablehnen:Auftr&auml;ge akzeptieren}, {printer_is_shared=0?nicht:} publiziert.
+{?device_uri=?:<BR><B>Ger&auml;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&ouml;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&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-start-printer.gif" ALT="Drucker starten" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-printer&amp;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&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-accept-jobs.gif" ALT="Auftr&auml;ge akzeptieren" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="Auftr&auml;ge ablehnen" CLASS="button"></A>
+}
+<A HREF="{printer_uri_supported}?op=move-jobs&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-move-jobs.gif" ALT="Alle Auftr&auml;ge verschieben" CLASS="button"></A>
+<A HREF="{admin_uri}?op=purge-jobs&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Auftr&auml;ge abbrechen" CLASS="button"></A>
+{printer_is_shared=0?
+<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={%printer_name}&amp;shared=1">
+<IMG SRC="/images/button-publish-printer.gif" ALT="Drucker publizieren" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={%printer_name}&amp;shared=0">
+<IMG SRC="/images/button-unpublish-printer.gif" ALT="Druckerpublikation aufheben" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-printer&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-modify-printer.gif" ALT="Drucker &auml;ndern" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-printer-options&amp;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&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-delete-printer.gif" ALT="Drucker l&ouml;schen" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-as-default&amp;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&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-set-allowed-users.gif" ALT="Erlaubte Benutzer festlegen" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
diff --git a/templates/de/restart.tmpl b/templates/de/restart.tmpl
new file mode 100644
index 000000000..28f93bd50
--- /dev/null
+++ b/templates/de/restart.tmpl
@@ -0,0 +1 @@
+<p>Bitte warten Sie w&auml;hrend der Server neu startet...</p>
diff --git a/templates/de/samba-export.tmpl b/templates/de/samba-export.tmpl
new file mode 100644
index 000000000..d76d40118
--- /dev/null
+++ b/templates/de/samba-export.tmpl
@@ -0,0 +1,55 @@
+<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&uuml;r Samba</H2>
+
+{error?<P>Kann Drucker nicht f&uuml;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&uuml;r Samba bereitzustellen
+damit auf diese mittels Windows Clients &uuml;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&uuml;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&uuml;r Samba"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/de/samba-exported.tmpl b/templates/de/samba-exported.tmpl
new file mode 100644
index 000000000..ff032b124
--- /dev/null
+++ b/templates/de/samba-exported.tmpl
@@ -0,0 +1 @@
+<P>Drucker wurden f&uuml; Samba erfolgreich exportiert.</P>
diff --git a/templates/de/search.tmpl b/templates/de/search.tmpl
new file mode 100644
index 000000000..fa5313491
--- /dev/null
+++ b/templates/de/search.tmpl
@@ -0,0 +1,13 @@
+<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&auml;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?&amp;ORDER={ORDER}:}:{ORDER??ORDER={ORDER}:}}"><IMG
+SRC="/images/button-clear.gif" ALT="Leeren" CLASS="button"></A></P>
+
+</FORM>
diff --git a/templates/de/set-printer-options-header.tmpl b/templates/de/set-printer-options-header.tmpl
new file mode 100644
index 000000000..864f9f0ce
--- /dev/null
+++ b/templates/de/set-printer-options-header.tmpl
@@ -0,0 +1,3 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
diff --git a/templates/de/set-printer-options-trailer.tmpl b/templates/de/set-printer-options-trailer.tmpl
new file mode 100644
index 000000000..a3d1e1ffa
--- /dev/null
+++ b/templates/de/set-printer-options-trailer.tmpl
@@ -0,0 +1 @@
+</FORM>
diff --git a/templates/de/test-page.tmpl b/templates/de/test-page.tmpl
new file mode 100644
index 000000000..a9a4bbd8a
--- /dev/null
+++ b/templates/de/test-page.tmpl
@@ -0,0 +1,2 @@
+<P>Testseite gesendet; Auftrags ID ist <A HREF="/{SECTION}/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
diff --git a/templates/de/trailer.tmpl b/templates/de/trailer.tmpl
new file mode 100644
index 000000000..f2f9bb9fa
--- /dev/null
+++ b/templates/de/trailer.tmpl
@@ -0,0 +1,21 @@
+</TD>
+<TD WIDTH="15">&nbsp;</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>
diff --git a/templates/de/users.tmpl b/templates/de/users.tmpl
new file mode 100644
index 000000000..d2c9ba86f
--- /dev/null
+++ b/templates/de/users.tmpl
@@ -0,0 +1,26 @@
+<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&uuml;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>
diff --git a/templates/ja/printers.tmpl b/templates/ja/printers.tmpl
index 457f12152..716e159fd 100644
--- a/templates/ja/printers.tmpl
+++ b/templates/ja/printers.tmpl
@@ -12,7 +12,7 @@
<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>
diff --git a/test/ipptest.c b/test/ipptest.c
index 98843ff6c..8a294e9a0 100644
--- a/test/ipptest.c
+++ b/test/ipptest.c
@@ -1,5 +1,5 @@
/*
- * "$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).
*
@@ -122,6 +122,7 @@ main(int argc, /* I - Number of command-line arguments */
int status; /* Status of tests... */
const char *uri; /* URI to use */
const char *testfile; /* Test file to use */
+ int interval; /* Test interval */
/*
@@ -133,6 +134,7 @@ main(int argc, /* I - Number of command-line arguments */
uri = NULL;
testfile = NULL;
status = 0;
+ interval = 0;
for (i = 1; i < argc; i ++)
{
@@ -140,6 +142,15 @@ main(int argc, /* I - Number of command-line arguments */
{
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]);
}
@@ -174,6 +185,19 @@ main(int argc, /* I - Number of command-line arguments */
usage(NULL);
/*
+ * Loop if the interval is set...
+ */
+
+ if (interval)
+ {
+ for (;;)
+ {
+ sleep(interval);
+ do_tests(uri, testfile);
+ }
+ }
+
+ /*
* Exit...
*/
@@ -890,12 +914,13 @@ usage(const char *option) /* I - Option string or NULL */
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 $".
*/