]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Load cups into easysw/current.
authorjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>
Thu, 16 Nov 2006 17:01:30 +0000 (17:01 +0000)
committerjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>
Thu, 16 Nov 2006 17:01:30 +0000 (17:01 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@245 a1ca3aef-8c08-0410-bb20-df032aa958be

145 files changed:
CHANGES.txt
CREDITS.txt
INSTALL.txt
README.txt
backend/pap.c
backend/snmp.c
backend/usb-darwin.c
backend/usb-unix.c
config-scripts/cups-common.m4
config-scripts/cups-defaults.m4
cups/cups.h
cups/http-private.h
cups/http.c
cups/libcups_s.exp
cups/transcode.c
desktop/cups.desktop
doc/help/spec-ppd.html
doc/it/images/button-accept-jobs.gif [new file with mode: 0644]
doc/it/images/button-add-class.gif [new file with mode: 0644]
doc/it/images/button-add-printer.gif [new file with mode: 0644]
doc/it/images/button-add-this-printer.gif [new file with mode: 0644]
doc/it/images/button-cancel-all-jobs.gif [new file with mode: 0644]
doc/it/images/button-cancel-job.gif [new file with mode: 0644]
doc/it/images/button-change-settings.gif [new file with mode: 0644]
doc/it/images/button-clean-print-heads.gif [new file with mode: 0644]
doc/it/images/button-clear.gif [new file with mode: 0644]
doc/it/images/button-continue.gif [new file with mode: 0644]
doc/it/images/button-delete-class.gif [new file with mode: 0644]
doc/it/images/button-delete-printer.gif [new file with mode: 0644]
doc/it/images/button-edit-configuration-file.gif [new file with mode: 0644]
doc/it/images/button-export-samba.gif [new file with mode: 0644]
doc/it/images/button-help.gif [new file with mode: 0644]
doc/it/images/button-hold-job.gif [new file with mode: 0644]
doc/it/images/button-manage-classes.gif [new file with mode: 0644]
doc/it/images/button-manage-jobs.gif [new file with mode: 0644]
doc/it/images/button-manage-printers.gif [new file with mode: 0644]
doc/it/images/button-manage-server.gif [new file with mode: 0644]
doc/it/images/button-modify-class.gif [new file with mode: 0644]
doc/it/images/button-modify-printer.gif [new file with mode: 0644]
doc/it/images/button-move-job.gif [new file with mode: 0644]
doc/it/images/button-move-jobs.gif [new file with mode: 0644]
doc/it/images/button-print-self-test-page.gif [new file with mode: 0644]
doc/it/images/button-print-test-page.gif [new file with mode: 0644]
doc/it/images/button-publish-printer.gif [new file with mode: 0644]
doc/it/images/button-reject-jobs.gif [new file with mode: 0644]
doc/it/images/button-release-job.gif [new file with mode: 0644]
doc/it/images/button-restart-job.gif [new file with mode: 0644]
doc/it/images/button-save-changes.gif [new file with mode: 0644]
doc/it/images/button-search.gif [new file with mode: 0644]
doc/it/images/button-set-allowed-users.gif [new file with mode: 0644]
doc/it/images/button-set-as-default.gif [new file with mode: 0644]
doc/it/images/button-set-printer-options.gif [new file with mode: 0644]
doc/it/images/button-show-active.gif [new file with mode: 0644]
doc/it/images/button-show-all.gif [new file with mode: 0644]
doc/it/images/button-show-completed.gif [new file with mode: 0644]
doc/it/images/button-show-next.gif [new file with mode: 0644]
doc/it/images/button-show-previous.gif [new file with mode: 0644]
doc/it/images/button-sort-ascending.gif [new file with mode: 0644]
doc/it/images/button-sort-descending.gif [new file with mode: 0644]
doc/it/images/button-start-class.gif [new file with mode: 0644]
doc/it/images/button-start-printer.gif [new file with mode: 0644]
doc/it/images/button-stop-class.gif [new file with mode: 0644]
doc/it/images/button-stop-printer.gif [new file with mode: 0644]
doc/it/images/button-unpublish-printer.gif [new file with mode: 0644]
doc/it/images/button-use-default-config.gif [new file with mode: 0644]
doc/it/images/button-view-access-log.gif [new file with mode: 0644]
doc/it/images/button-view-error-log.gif [new file with mode: 0644]
doc/it/images/button-view-page-log.gif [new file with mode: 0644]
doc/it/images/button-view-printable-version.gif [new file with mode: 0644]
doc/it/index.html.in [new file with mode: 0644]
filter/pstops.c
locale/cups_it.po [new file with mode: 0644]
packaging/cups.list.in
packaging/cups.spec.in
scheduler/client.c
scheduler/dirsvc.c
scheduler/main.c
scheduler/network.c
scheduler/network.h
scheduler/sysman.c
systemv/lpstat.c
templates/it/add-class.tmpl [new file with mode: 0644]
templates/it/add-printer.tmpl [new file with mode: 0644]
templates/it/admin.tmpl [new file with mode: 0644]
templates/it/choose-device.tmpl [new file with mode: 0644]
templates/it/choose-make.tmpl [new file with mode: 0644]
templates/it/choose-model.tmpl [new file with mode: 0644]
templates/it/choose-serial.tmpl [new file with mode: 0644]
templates/it/choose-uri.tmpl [new file with mode: 0644]
templates/it/class-added.tmpl [new file with mode: 0644]
templates/it/class-confirm.tmpl [new file with mode: 0644]
templates/it/class-deleted.tmpl [new file with mode: 0644]
templates/it/class-jobs-header.tmpl [new file with mode: 0644]
templates/it/class-modified.tmpl [new file with mode: 0644]
templates/it/classes-header.tmpl [new file with mode: 0644]
templates/it/classes.tmpl [new file with mode: 0644]
templates/it/edit-config.tmpl.in [new file with mode: 0644]
templates/it/error-op.tmpl [new file with mode: 0644]
templates/it/error.tmpl [new file with mode: 0644]
templates/it/header.tmpl.in [new file with mode: 0644]
templates/it/help-header.tmpl [new file with mode: 0644]
templates/it/help-printable.tmpl [new file with mode: 0644]
templates/it/job-cancel.tmpl [new file with mode: 0644]
templates/it/job-hold.tmpl [new file with mode: 0644]
templates/it/job-move.tmpl [new file with mode: 0644]
templates/it/job-moved.tmpl [new file with mode: 0644]
templates/it/job-release.tmpl [new file with mode: 0644]
templates/it/job-restart.tmpl [new file with mode: 0644]
templates/it/jobs-header.tmpl [new file with mode: 0644]
templates/it/jobs.tmpl [new file with mode: 0644]
templates/it/maintenance.tmpl [new file with mode: 0644]
templates/it/modify-class.tmpl [new file with mode: 0644]
templates/it/modify-printer.tmpl [new file with mode: 0644]
templates/it/norestart.tmpl [new file with mode: 0644]
templates/it/option-boolean.tmpl [new file with mode: 0644]
templates/it/option-conflict.tmpl [new file with mode: 0644]
templates/it/option-header.tmpl [new file with mode: 0644]
templates/it/option-pickmany.tmpl [new file with mode: 0644]
templates/it/option-pickone.tmpl [new file with mode: 0644]
templates/it/option-trailer.tmpl [new file with mode: 0644]
templates/it/pager.tmpl [new file with mode: 0644]
templates/it/printer-accept.tmpl [new file with mode: 0644]
templates/it/printer-added.tmpl [new file with mode: 0644]
templates/it/printer-configured.tmpl [new file with mode: 0644]
templates/it/printer-confirm.tmpl [new file with mode: 0644]
templates/it/printer-default.tmpl [new file with mode: 0644]
templates/it/printer-deleted.tmpl [new file with mode: 0644]
templates/it/printer-jobs-header.tmpl [new file with mode: 0644]
templates/it/printer-modified.tmpl [new file with mode: 0644]
templates/it/printer-purge.tmpl [new file with mode: 0644]
templates/it/printer-reject.tmpl [new file with mode: 0644]
templates/it/printer-start.tmpl [new file with mode: 0644]
templates/it/printer-stop.tmpl [new file with mode: 0644]
templates/it/printers-header.tmpl [new file with mode: 0644]
templates/it/printers.tmpl [new file with mode: 0644]
templates/it/restart.tmpl [new file with mode: 0644]
templates/it/samba-export.tmpl [new file with mode: 0644]
templates/it/samba-exported.tmpl [new file with mode: 0644]
templates/it/search.tmpl [new file with mode: 0644]
templates/it/set-printer-options-header.tmpl [new file with mode: 0644]
templates/it/set-printer-options-trailer.tmpl [new file with mode: 0644]
templates/it/test-page.tmpl [new file with mode: 0644]
templates/it/trailer.tmpl [new file with mode: 0644]
templates/it/users.tmpl [new file with mode: 0644]
test/run-stp-tests.sh

index 9fa60c3d9a645d36c048bb043cf547c6205f3c84..49fe7d702e0a08a130ab1f4826dafa786f9b61ee 100644 (file)
@@ -1,6 +1,27 @@
-CHANGES.txt - 2006-11-02
+CHANGES.txt - 2006-11-16
 ------------------------
 
+CHANGES IN CUPS V1.2.7
+
+       - Documentation updates (STR #2089)
+       - Added an Italian translation (STR #2105)
+       - The PostScript filter now rotates the bounding box
+         values as needed (STR #2079)
+       - The scheduler no longer loads the remote printer cache
+         when browsing is disabled (STR #2084)
+       - The scheduler no longer writes a new launchd
+         configuration file if it doesn't have to (STR #2083)
+       - Updated the USB and PAP backends for Mac OS X (STR
+         #2086)
+       - The scheduler now picks up on changes to IPv6 and DNS
+         configuration on Mac OS X (STR #2085)
+       - The lpstat program could still hang (STR #2098)
+       - Fixed an inefficiency in the SNMP IPP detection code
+         (STR #2100)
+       - The SSL negotiation code did not implement short
+         timeouts (STR #2091)
+
+
 CHANGES IN CUPS V1.2.6
 
        - The web interface was not localized on Mac OS X (STR
index 09db1ccb759906576f8308606245262624677d68..cfd4fcd333fc7b99718065d33317dd10131ef121 100644 (file)
@@ -29,8 +29,9 @@ like to thank the following individuals for their contributions:
     Giulio Orsero                  - Bug fixes and testing.
     Michal Osowiecki               - Polish localization.
     Kurt Pfeifle                   - Bug fixes, beta testing, evangelism.
+    Vincenzo Reale                 - Italian localization.
     Petter Reinholdtsen            - HP-UX compiler stuff.
-    Juan Pablo GonzĂ¡lez Riopedre   - Spanish localization
+    Juan Pablo GonzĂ¡lez Riopedre   - Spanish localization.
     Stuart Stevens                 - HP JetDirect IPP information.
     Andrea Suatoni                 - IRIX desktop integration and testing.
     Tomohiro Kato                  - Japanese localization.
index 7a36940818b7ddf8d24103fe593c116a32c73ad5..d6f9a01794ea0bfca0b693721dfa79f54419be67 100644 (file)
@@ -1,4 +1,4 @@
-INSTALL - CUPS v1.2.6 - 2006-11-06
+INSTALL - CUPS v1.2.7 - 2006-11-16
 ----------------------------------
 
 This file describes how to compile and install CUPS from source
index 0d312bca94dc7524c027fba762d6bc2f1ab8c87d..d8b6b0fb0d60e88dc1572bffe6b83ec1226d590a 100644 (file)
@@ -1,4 +1,4 @@
-README - CUPS v1.2.6 - 2006-11-06
+README - CUPS v1.2.7 - 2006-11-16
 ---------------------------------
 
 Looking for compile instructions?  Read the file "INSTALL.txt"
index f5eadae33efda5cd06f7e2623ef078ce9e2317cd..dd599f83fcfa2b81e3adc7f241a283e9d82d9e0f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-* "$Id: pap.c 5480 2006-05-02 15:17:04Z mike $"
+* "$Id: pap.c 6090 2006-11-14 16:35:27Z mike $"
 *
 * Â© Copyright 2004 Apple Computer, Inc. All rights reserved.
 * 
 * POSSIBILITY OF SUCH DAMAGE.
 *
 *
-* This program implements the Printer Access Protocol (PAP) on top of AppleTalk Transaction
-* Protocol (ATP). If it were to use the blocking pap functions of the AppleTalk library it 
-* would need seperate threads for reading, writing and status.
+* This program implements the Printer Access Protocol (PAP) on top of AppleTalk 
+* Transaction Protocol (ATP). If it were to use the blocking pap functions of 
+* the AppleTalk library it would need seperate threads for reading, writing
+* and status.
 *
 * Contents:
 *
 *  main()              - Send a file to the specified Appletalk printer.
 *  listDevices()       - List all LaserWriter printers in the local zone.
-*  printFile()         - Print from a file descriptor to an NBP specified printer.
+*  printFile()         - Print file.
 *  papOpen()           - Open a pap session to a printer.
-*  papClose()          - Close a pap session after cleaning up pending transactions.
+*  papClose()          - Close a pap session.
 *  papWrite()          - Write bytes to a printer.
-*  papCloseResp()      - Send a pap close response in the rare case we receive a close connection request.
+*  papCloseResp()      - Send a pap close response.
 *  papSendRequest()    - Fomrat and send a pap packet.
 *  papCancelRequest()  - Cancel a pending pap request.
 *  statusUpdate()      - Print printer status to stderr.
 *  parseUri()          - Extract the print name and zone from a uri.
 *  addPercentEscapes() - Encode a string with percent escapes.
-*  removePercentEscapes        - Returns a string with any percent escape sequences replaced with their equivalent.
+*  removePercentEscapes        - Remove percent escape sequences from a string.
 *  nbptuple_compare()  - Compare routine for qsort.
 *  okayToUseAppleTalk() - Returns true if AppleTalk is available and enabled.
+*  packet_name()       - Returns packet name string.
 *  connectTimeout()    - Returns the connect timeout preference value.
 *  signalHandler()     - handle SIGINT to close the session before quiting.
 */
 
+#include <config.h>
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
@@ -86,7 +90,8 @@
 #include <netat/nbp.h>
 #include <netat/pap.h>
 
-#include <cups/http.h>
+#include <cups/cups.h>
+#include <cups/backend.h>
 
 #include <libkern/OSByteOrder.h>
 
 #else
 /* These definitions come from at_proto.h... */
 #  define ZIP_DEF_INTERFACE NULL
-enum { RUNNING, NOTLOADED, LOADED, OTHERERROR };       /* Appletalk Stack status Function. */
+enum { RUNNING, NOTLOADED, LOADED, OTHERERROR };
 
 extern int atp_abort(int fd, at_inet_t *dest, u_short tid);
 extern int atp_close(int fd);
-extern int atp_getreq(int fd, at_inet_t *src, char *buf, int *len, int *userdata, int *xo, u_short *tid, u_char *bitmap, int nowait);
+extern int atp_getreq(int fd, at_inet_t *src, char *buf, int *len, int *userdata, 
+                     int *xo, u_short *tid, u_char *bitmap, int nowait);
 extern int atp_getresp(int fd, u_short *tid, at_resp_t *resp);
 extern int atp_look(int fd);
 extern int atp_open(at_socket *sock);
-extern int atp_sendreq(int fd, at_inet_t *dest, char *buf, int len, int userdata, int xo, int xo_relt, u_short *tid, at_resp_t *resp, at_retry_t *retry, int nowait);
-extern int atp_sendrsp(int fd, at_inet_t *dest, int xo, u_short tid, at_resp_t *resp);
+extern int atp_sendreq(int fd, at_inet_t *dest, char *buf, int len, 
+                      int userdata, int xo, int xo_relt, u_short *tid, 
+                      at_resp_t *resp, at_retry_t *retry, int nowait);
+extern int atp_sendrsp(int fd, at_inet_t *dest, int xo, u_short tid, 
+                      at_resp_t *resp);
 extern int checkATStack();
-extern int nbp_lookup(at_entity_t *entity, at_nbptuple_t *buf, int max, at_retry_t *retry);
-extern int nbp_make_entity(at_entity_t *entity, char *obj, char *type, char *zone);
+extern int nbp_lookup(at_entity_t *entity, at_nbptuple_t *buf, int max, 
+                     at_retry_t *retry);
+extern int nbp_make_entity(at_entity_t *entity, char *obj, char *type, 
+                          char *zone);
 extern int zip_getmyzone(char *ifName, at_nvestr_t *zone);
 #endif /* HAVE_APPLETALK_AT_PROTO_H */
 
@@ -116,7 +127,7 @@ extern int zip_getmyzone(char *ifName,      at_nvestr_t *zone);
 #include <CoreFoundation/CFPreferences.h>
 
 /* Defines */
-#define MAX_PRINTERS   500        /* Max number of printers we can lookup in listDevices */
+#define MAX_PRINTERS   500        /* Max number of printers we can lookup */
 #define PAP_CONNID     0
 #define PAP_TYPE       1
 #define PAP_EOF                2
@@ -126,43 +137,35 @@ extern int zip_getmyzone(char *ifName,    at_nvestr_t *zone);
 #define SEQUENCE_NUM(p)        (((u_char *)&p)[2])
 #define IS_PAP_EOF(p)  (((u_char *)&p)[2])
 
-#define  PAPPacketStr(x) \
-  ((x) == AT_PAP_TYPE_OPEN_CONN)       ? "PAP_OPEN_CONN"        : \
-  ((x) == AT_PAP_TYPE_OPEN_CONN_REPLY) ? "PAP_OPEN_CONN_REPLY"  : \
-  ((x) == AT_PAP_TYPE_SEND_DATA)       ? "PAP_SEND_DATA"        : \
-  ((x) == AT_PAP_TYPE_DATA)            ? "PAP_DATA"             : \
-  ((x) == AT_PAP_TYPE_TICKLE)          ? "PAP_TICKLE"           : \
-  ((x) == AT_PAP_TYPE_CLOSE_CONN)      ? "PAP_CLOSE_CONN"       : \
-  ((x) == AT_PAP_TYPE_CLOSE_CONN_REPLY)        ? "PAP_CLOSE_CONN_REPLY" : \
-  ((x) == AT_PAP_TYPE_SEND_STATUS)     ? "PAP_SEND_STATUS"      : \
-  ((x) == AT_PAP_TYPE_SEND_STS_REPLY)  ? "PAP_SEND_STS_REPLY"   : \
-  ((x) == AT_PAP_TYPE_READ_LW)         ? "PAP_READ_LW"          : \
-  "<Unknown>"
-
 #ifndef true
 #define true   1
 #define false  0
 #endif
 
 /* Globals */
-int       gSockfd      = 0;            /* Socket descriptor                */
-at_inet_t gSessionAddr = { 0 };        /* Address of the session responding socket    */
-u_char    gConnID      = 0;            /* PAP session connection id            */
-u_short   gSendDataID  = 0;            /* Transaction id of our pending send-data request  */
-u_short   gTickleID    = 0;            /* Transaction id of our outstanding tickle request*/
-int       gWaitEOF     = false;        /* Option: causes us to wait for a remote's EOF  */
+int       gSockfd      = 0;            /* Socket descriptor */
+at_inet_t gSessionAddr = { 0 };        /* Address of the session responding socket */
+u_char    gConnID      = 0;            /* PAP session connection id */
+u_short   gSendDataID  = 0;            /* Transaction id of pending send-data request  */
+u_short   gTickleID    = 0;            /* Transaction id of outstanding tickle request*/
+int       gWaitEOF     = false;        /* Option: wait for a remote's EOF  */
 int       gStatusInterval= 5;          /* Option: 0=off else seconds between status requests*/
 int       gErrorlogged  = false;       /* If an error was logged don't send any more INFO messages */
-int       gDebug       = 0;            /* Option: causes us to emit debugging info    */
+int       gDebug       = 0;            /* Option: emit debugging info    */
 
 /* Local functions */
 static int listDevices(void);
-static int printFile(char* name, char* type, char* zone, int fdin, int fdout, int fderr, int copies, int argc);
-static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd, at_inet_t* pap_to, u_char* flowQuantum);
-static int papClose(int abortflag);
-static int papWrite(int sockfd, at_inet_t* dest, u_short tid, u_char connID, u_char flowQuantum, char* data, int len, int eof);
-static int papCloseResp(int sockfd, at_inet_t* dest, int xo, u_short tid, u_char connID);
-static int papSendRequest(int sockfd, at_inet_t* dest, u_char connID, int function, u_char bitmap, int xo, int seqno);
+static int printFile(char* name, char* type, char* zone, int fdin, int fdout, 
+                    int fderr, int copies, int argc);
+static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd, 
+                  at_inet_t* pap_to, u_char* flowQuantum);
+static int papClose();
+static int papWrite(int sockfd, at_inet_t* dest, u_short tid, u_char connID, 
+                   u_char flowQuantum, char* data, int len, int eof);
+static int papCloseResp(int sockfd, at_inet_t* dest, int xo, u_short tid, 
+                       u_char connID);
+static int papSendRequest(int sockfd, at_inet_t* dest, u_char connID, 
+                         int function, u_char bitmap, int xo, int seqno);
 static int papCancelRequest(int sockfd, u_short tid);
 static void statusUpdate(char* status, u_char statusLen);
 static int parseUri(const char* argv0, char* name, char* type, char* zone);
@@ -170,6 +173,7 @@ static int addPercentEscapes(const char* src, char* dst, int dstMax);
 static int removePercentEscapes(const char* src, char* dst, int dstMax);
 static int nbptuple_compare(const void *p1, const void *p2);
 static int okayToUseAppleTalk(void);
+static const char *packet_name(u_char x);
 static int connectTimeout(void);
 static void signalHandler(int sigraised);
 
@@ -199,10 +203,13 @@ int main (int argc, const char * argv[])
 
   if (argc == 1 || (argc == 2 && strcmp(argv[1], "-discover") == 0))
   {
-    /* Ignore errors returned by listDevices - they may be transitory 
-    *  and we don't want cupsd to think that pap is forever unusable.
+    /* If listDevices() didn't find any devices or returns an error output a 
+    *  legacy style announcement.
+    *  
     */
-    listDevices();
+    if (listDevices() <= 0)
+      puts("network pap \"Unknown\" \"AppleTalk Printer Access Protocol (pap)\"");
+
     return 0;
   }
 
@@ -239,9 +246,9 @@ int main (int argc, const char * argv[])
   }
 
   /* Extract the device name and options from the URI... */
-  parseUri(argv[0], name, type, zone);
+  parseUri(cupsBackendDeviceURI((char **)argv), name, type, zone);
 
-  err = printFile(name, type, zone, fileno(fp), 3, STDERR_FILENO, copies, argc);
+  err = printFile(name, type, zone, fileno(fp), STDOUT_FILENO, STDERR_FILENO, copies, argc);
 
   if (fp != stdin)
     fclose(fp);
@@ -263,7 +270,7 @@ int main (int argc, const char * argv[])
 static int listDevices(void)
 {
   int  err = noErr;
-  int  ind;
+  int  i;
   int  numberFound;
 
   at_nvestr_t   at_zone;
@@ -287,10 +294,13 @@ static int listDevices(void)
     perror("ERROR: Unable to get default AppleTalk zone");
     return -2;
   }
+
   memcpy(zone, at_zone.str, MIN(at_zone.len, sizeof(zone)-1));
   zone[MIN(at_zone.len, sizeof(zone)-1)] = '\0';
 
-  err = addPercentEscapes(zone, encodedZone, sizeof(encodedZone));
+  fprintf(stderr, "INFO: Using default AppleTalk zone \"%s\"\n", zone);
+
+  addPercentEscapes(zone, encodedZone, sizeof(encodedZone));
 
   /* Look up all the printers in our zone */
   nbp_make_entity(&entity, "=", "LaserWriter", zone);
@@ -310,10 +320,10 @@ static int listDevices(void)
   /* Not required but sort them so they look nice */
   qsort(buf, numberFound, sizeof(at_nbptuple_t), nbptuple_compare);
 
-  for (ind = 0; ind < numberFound; ind++) 
+  for (i = 0; i < numberFound; i++) 
   {
-    memcpy(name, buf[ind].enu_entity.object.str, MIN(buf[ind].enu_entity.object.len, sizeof(name)-1));
-    name[MIN(buf[ind].enu_entity.object.len, sizeof(name)-1)] = '\0';
+    memcpy(name, buf[i].enu_entity.object.str, MIN(buf[i].enu_entity.object.len, sizeof(name)-1));
+    name[MIN(buf[i].enu_entity.object.len, sizeof(name)-1)] = '\0';
 
     if (addPercentEscapes(name, encodedName, sizeof(encodedName)) == 0)
     {
@@ -371,7 +381,7 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
   int  err;
   int  rc;
   int  val;
-  int  len, ind;
+  int  len, i;
 
   char fileBuffer[4096];    /* File buffer */
   int  fileBufferNbytes;
@@ -390,20 +400,19 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
   int          userdata, xo, reqlen;
   u_short      tid;
   u_char       bitmap;
-  int          maxfdp1;
+  int          maxfdp1,
+               nbp_failures = 0;
   struct timeval timeout, *timeoutPtr;
   u_char       flowQuantum = 1;
   u_short      recvSequence = 0;
   time_t       now,
-               connect_time,
+               start_time,
                elasped_time, 
                sleep_time,
                connect_timeout = -1,
                nextStatusTime = 0;
   at_entity_t  entity;
   at_retry_t   retry;
-  Boolean      recoverableErrShown = false;
-
 
 #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
   struct sigaction action;  /* Actions for POSIX signals */
@@ -420,51 +429,60 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
   * Remember when we started looking for the printer.
   */
 
-  connect_time = time(NULL);
+  start_time = time(NULL);
 
   retry.interval = 1;
   retry.retries  = 5;
   retry.backoff  = 0;
 
+  fprintf(stderr, "STATE: +connecting-to-device\n");
+
   /* Loop forever trying to get an open session with the printer.  */
   for (;;)
   {
     /* Make sure it's okay to use appletalk */
     if (okayToUseAppleTalk())
     {
+      /* Clear this printer-state-reason in case we've set it */
+      fprintf(stderr, "STATE: -apple-appletalk-disabled-warning\n");
+
       /* Resolve the name into an address. Returns the number found or an error */
       if ((err = nbp_lookup(&entity, &tuple, 1, &retry)) > 0)
       {
         if (err > 1)
           fprintf(stderr, "DEBUG: Found more than one printer with the name \"%s\"\n", name);
 
-       if (recoverableErrShown)
-       {
-         fprintf(stderr, "INFO: recovered: \n");
-         sleep(5);
-         recoverableErrShown = false;
+        if (nbp_failures)
+        {
+         fprintf(stderr, "STATE: -apple-nbp-lookup-warning\n");
+         nbp_failures = 0;
        }
 
         /* Open a connection to the device */
         if ((err = papOpen(&tuple, &gConnID, &gSockfd, &gSessionAddr, &flowQuantum)) == 0)
           break;
 
-        fprintf(stderr, "WARNING: Unable to open \"%s:%s\": %s\n", name, zone, strerror(errno));
+        fprintf(stderr, "WARNING: Unable to open \"%s:%s\": %s\n", name, zone, strerror(err));
       }
       else
       {
-       fprintf(stderr, "WARNING: recoverable: Printer not responding\n");
-       recoverableErrShown = true;
+       /* It's not unusual to have to call nbp_lookup() twice before it's sucessful... */
+        if (++nbp_failures > 2)
+        {
+         retry.interval = 2;
+         retry.retries = 3;
+         fprintf(stderr, "STATE: +apple-nbp-lookup-warning\n");
+         fprintf(stderr, "WARNING: Printer not responding\n");
+       }
       }
     }
     else
     {
-      fprintf(stderr, "WARNING: recoverable: AppleTalk disabled in System Preferences.\n");
-      recoverableErrShown = true;
+      fprintf(stderr, "STATE: +apple-appletalk-disabled-warning\n");
+      fprintf(stderr, "INFO: AppleTalk disabled in System Preferences.\n");
     }
 
-    retry.retries = 3;
-    elasped_time = time(NULL) - connect_time;
+    elasped_time = time(NULL) - start_time;
 
     if (connect_timeout == -1)
       connect_timeout = connectTimeout();
@@ -475,9 +493,9 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
       err = ETIMEDOUT;
       goto Exit;                                               /* Waiting too long... */
     }
-    else if (elasped_time < 30 /*(30 * 60)*/)
+    else if (elasped_time < (30 * 60))
       sleep_time = 10;                                 /* Waiting < 30 minutes */
-    else if (elasped_time < 60 /*(24 * 60 * 60)*/)
+    else if (elasped_time < (24 * 60 * 60))
       sleep_time = 30;                                 /* Waiting < 24 hours */
     else
       sleep_time = 60;                                 /* Waiting > 24 hours */
@@ -486,6 +504,8 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
     sleep(sleep_time);
   }
 
+  fprintf(stderr, "STATE: -connecting-to-device\n");
+
   /*
   * Now that we are connected to the printer ignore SIGTERM so that we
   * can finish out any page data the driver sends (e.g. to eject the
@@ -536,21 +556,6 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
   val = fcntl(fdin, F_GETFL, 0);
   fcntl(fdin, F_SETFL, val | O_NONBLOCK);
 
-  /* Set non-blocking mode on our data destination descriptor */
-  val = fcntl(fdout, F_GETFL, 0);
-  if (val < 0)
-  {
-   /*
-    * Map output to stdout if we don't have the backchannel pipe
-    * available on file descriptor 3...
-    */
-
-    if (fdout == 3 && errno == EBADF)
-      fdout = 1;
-  }
-  else
-    fcntl(fdout, F_SETFL, val | O_NONBLOCK);
-
   fileBufferNbytes = 0;
   fileTbytes = 0;
   fileEOFRead = fileEOFSent = false;
@@ -666,7 +671,7 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
         }
       }
 
-      fprintf(stderr, "DEBUG: <- %s\n", PAPPacketStr(TYPE_OF(userdata)));
+      fprintf(stderr, "DEBUG: <- %s\n", packet_name(TYPE_OF(userdata)));
 
       switch (TYPE_OF(userdata))
       {
@@ -707,10 +712,10 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
         break;
     
       case AT_PAP_TYPE_DATA:              /* Data packet */
-        for (len=0, ind=0; ind < ATP_TRESP_MAX; ind++)
+        for (len=0, i=0; i < ATP_TRESP_MAX; i++)
         {
-          if (resp.bitmap & (1 << ind))
-            len += resp.resp[ind].iov_len;
+          if (resp.bitmap & (1 << i))
+            len += resp.resp[i].iov_len;
         }
 
         fprintf(stderr, "DEBUG: <- PAP_DATA %d bytes %s\n", len, IS_PAP_EOF(userdata) ? "with EOF" : "");
@@ -722,7 +727,7 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
           char logstr[512];
           int  logstrlen;
           
-         write(fdout, sockBuffer, len);
+         cupsBackChannelWrite(sockBuffer, len, 1.0);
           
           sockBuffer[len] = '\0';     /* We always reserve room for the nul so we can use strstr() below*/
           pLineBegin = sockBuffer;
@@ -835,7 +840,7 @@ Exit:
   /*
   * Close the socket and return...
   */
-  papClose(false);
+  papClose();
 
   return err;
 }
@@ -854,37 +859,35 @@ Exit:
  *
  * @result    A non-zero return value for errors
  */
-static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd, at_inet_t* sessionAddr, u_char* flowQuantum)
+static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd, 
+                  at_inet_t* sessionAddr, u_char* flowQuantum)
 {
   int          result,
-               openResult;
-  long         tm;
-  char         data[10], rdata[ATP_DATA_SIZE];
-  int          userdata;
-  u_char       *puserdata = (u_char *)&userdata;
-  at_socket    sock = 0;
-  u_short      waitTime;
-  int          status;
+               open_result,
+               userdata,
+               atp_err;
+  time_t       tm,
+               waitTime;
+  char         data[10], 
+               rdata[ATP_DATA_SIZE];
+  u_char       *puserdata;
+  at_socket    socketfd;
   at_resp_t    resp;
   at_retry_t   retry;
 
-  if (tuple == NULL)
-  {
-    errno = EINVAL;
-    return -1;
-  }
+  result    = 0;
+  socketfd  = 0;
+  puserdata = (u_char *)&userdata;
 
   fprintf(stderr, "INFO: Opening connection\n");
 
-  errno  = 0;
-  result  = 0;
-
-  *fd = atp_open(&sock);
-  if (*fd < 0)
+  if ((*fd = atp_open(&socketfd)) < 0)
     return -1;
 
-  /* Build the open connection request packet.
+ /* 
+  * Build the open connection request packet.
   */
+
   tm = time(NULL);
   srand(tm);
 
@@ -901,64 +904,67 @@ static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd, at_inet_t* ses
   resp.resp[0].iov_base = rdata;
   resp.resp[0].iov_len = sizeof(rdata);
 
-  data[0] = sock;
+  data[0] = socketfd;
   data[1] = 8;
 
   for (;;)
   {
-    waitTime = (u_short)(time(NULL) - tm);
-    OSWriteBigInt16(&data[2], 0, waitTime);
-
-    fprintf(stderr, "DEBUG: -> %s\n", PAPPacketStr(AT_PAP_TYPE_OPEN_CONN));
+    waitTime = time(NULL) - tm;
+    OSWriteBigInt16(&data[2], 0, (u_short)waitTime);
 
-    status = atp_sendreq(*fd, &tuple->enu_addr, data, 4, userdata, 1, 0, 0, &resp, &retry, 0);
+    fprintf(stderr, "DEBUG: -> %s\n", packet_name(AT_PAP_TYPE_OPEN_CONN));
 
-    if (status < 0)
+    if ((atp_err = atp_sendreq(*fd, &tuple->enu_addr, data, 4, userdata, 1, 0, 
+                              0, &resp, &retry, 0)) < 0)
     {
       statusUpdate("Destination unreachable", 23);
       result = EHOSTUNREACH;
-      errno = EHOSTUNREACH;
-      sleep(1);
-      goto Exit;
+      break;
     }
-    else
-    {
-      puserdata = (u_char *)&resp.userdata[0];
-      openResult = OSReadBigInt16(&rdata[2], 0);
 
-      fprintf(stderr, "DEBUG: <- %s, status %d\n", PAPPacketStr(puserdata[1]), openResult);
+    puserdata = (u_char *)&resp.userdata[0];
+    open_result = OSReadBigInt16(&rdata[2], 0);
 
-      /* Just for the sake of our sanity check the other fields in the packet
-      */
-      if (puserdata[1] != AT_PAP_TYPE_OPEN_CONN_REPLY ||
-        (openResult == 0 && (puserdata[0] & 0xff) != *connID))
-      {
-       result = EINVAL;
-       errno = EINVAL;
-       goto Exit;
-      }
-  
-      statusUpdate(&rdata[5], rdata[4] & 0xff);
+    fprintf(stderr, "DEBUG: <- %s, status %d\n", packet_name(puserdata[1]), 
+           open_result);
+
+   /*
+    * Just for the sake of our sanity check the other fields in the packet
+    */
 
-      if (openResult == 0)
-       break;        /* Connection established okay, exit from the loop */
+    if (puserdata[1] != AT_PAP_TYPE_OPEN_CONN_REPLY ||
+       (open_result == 0 && (puserdata[0] & 0xff) != *connID))
+    {
+      result = EINVAL;
+      break;
     }
 
+    statusUpdate(&rdata[5], rdata[4] & 0xff);
+
+   /*
+    * if the connection established okay exit from the loop
+    */
+
+    if (open_result == 0)
+      break;
+
     sleep(1);
   }
 
-  /* Update the session address
-  */
-  sessionAddr->net  = tuple->enu_addr.net;
-  sessionAddr->node  = tuple->enu_addr.node;
-  sessionAddr->socket  = rdata[0];
-  *flowQuantum    = rdata[1];
-
-Exit:
-  if (result != 0)
+  if (result == 0)
+  {
+    /* Update the session address
+    */
+    sessionAddr->net  = tuple->enu_addr.net;
+    sessionAddr->node  = tuple->enu_addr.node;
+    sessionAddr->socket  = rdata[0];
+    *flowQuantum    = rdata[1];
+  }
+  else
   {
     atp_close(*fd);
     *fd = 0;
+    sleep(1);
   }
 
   return result;
@@ -970,12 +976,9 @@ Exit:
  * @abstract  End a PAP session by canceling outstanding send-data & tickle 
  *            transactions and sending a PAP close request.
  *
- * @param  abort  If we're aborting then send the close request 
- *               with 0 retries (not yet implemented)
- *
  * @result  A non-zero return value for errors
  */
-static int papClose(int abortflag)
+static int papClose()
 {
   int          fd;
   u_short      tmpID;
@@ -1018,7 +1021,7 @@ static int papClose(int abortflag)
     if (gWaitEOF == false)
       sleep(2);
 
-    fprintf(stderr, "DEBUG: -> %s\n", PAPPacketStr(AT_PAP_TYPE_CLOSE_CONN));
+    fprintf(stderr, "DEBUG: -> %s\n", packet_name(AT_PAP_TYPE_CLOSE_CONN));
   
     puserdata[0] = gConnID;
     puserdata[1] = AT_PAP_TYPE_CLOSE_CONN;
@@ -1058,7 +1061,7 @@ static int papClose(int abortflag)
 static int papWrite(int sockfd, at_inet_t* dest, u_short tid, u_char connID, u_char flowQuantum, char* data, int len, int eof)
 {
   int          result;
-  int          ind;
+  int          i;
   u_char*      puserdata;
   at_resp_t    resp;
 
@@ -1076,26 +1079,26 @@ static int papWrite(int sockfd, at_inet_t* dest, u_short tid, u_char connID, u_c
   * response packets to reply to an incoming
   * PAP 'SENDDATA' request
   */
-  for (ind = 0; ind < flowQuantum; ind++)
+  for (i = 0; i < flowQuantum; i++)
   {
-    resp.userdata[ind] = 0;
-    puserdata = (u_char *)&resp.userdata[ind];
+    resp.userdata[i] = 0;
+    puserdata = (u_char *)&resp.userdata[i];
 
     puserdata[PAP_CONNID]  = connID;
     puserdata[PAP_TYPE]    = AT_PAP_TYPE_DATA;
     puserdata[PAP_EOF]    = eof ? 1 : 0;
 
-    resp.resp[ind].iov_base = (caddr_t)data;
+    resp.resp[i].iov_base = (caddr_t)data;
 
     if (data)
       data += AT_PAP_DATA_SIZE;
 
-    resp.resp[ind].iov_len = MIN((int)len, (int)AT_PAP_DATA_SIZE);
-    len -= resp.resp[ind].iov_len;
+    resp.resp[i].iov_len = MIN((int)len, (int)AT_PAP_DATA_SIZE);
+    len -= resp.resp[i].iov_len;
     if (len == 0)
       break;
   }
-  resp.bitmap = (1 << (ind + 1)) - 1;
+  resp.bitmap = (1 << (i + 1)) - 1;
 
   /*
   *  Write out the data as a PAP 'DATA' response
@@ -1168,7 +1171,7 @@ static int papSendRequest(int sockfd, at_inet_t* dest, u_char connID, int functi
   at_resp_t    resp;
   static u_short pap_send_count = 0;
 
-  fprintf(stderr, "DEBUG: -> %s\n", PAPPacketStr(function));
+  fprintf(stderr, "DEBUG: -> %s\n", packet_name(function));
 
   puserdata[0] = connID;
   puserdata[1] = function;
@@ -1274,7 +1277,7 @@ void statusUpdate(char* status, u_char statusLen)
  */
 static int parseUri(const char* argv0, char* name, char* type, char* zone)
 {
-  char  scheme[255],           /* Scheme in URI */
+  char  method[255],           /* Method in URI */
         hostname[1024],                /* Hostname */
         username[255],         /* Username info (not used) */
         resource[1024],                /* Resource info (device and options) */
@@ -1290,8 +1293,10 @@ static int parseUri(const char* argv0, char* name, char* type, char* zone)
   /*
   * Extract the device name and options from the URI...
   */
+  method[0] = username[0] = hostname[0] = resource[0] = '\0';
+  port = 0;
 
-  httpSeparateURI(HTTP_URI_CODING_NONE, argv0, scheme, sizeof(scheme), 
+  httpSeparateURI(HTTP_URI_CODING_NONE, argv0, method, sizeof(method), 
                  username, sizeof(username),
                  hostname, sizeof(hostname), &port,
                  resource, sizeof(resource));
@@ -1527,6 +1532,31 @@ static int okayToUseAppleTalk()
 }
 
 
+/*!
+ * @function  packet_name
+ * @abstract  Returns packet name string.
+ *
+ * @result    A string
+ */
+static const char *packet_name(u_char x)
+{
+  switch (x)
+  {
+  case AT_PAP_TYPE_OPEN_CONN:          return "PAP_OPEN_CONN";
+  case AT_PAP_TYPE_OPEN_CONN_REPLY:    return "PAP_OPEN_CONN_REPLY";
+  case AT_PAP_TYPE_SEND_DATA:          return "PAP_SEND_DATA";
+  case AT_PAP_TYPE_DATA:               return "PAP_DATA";
+  case AT_PAP_TYPE_TICKLE:             return "PAP_TICKLE";
+  case AT_PAP_TYPE_CLOSE_CONN:         return "PAP_CLOSE_CONN";
+  case AT_PAP_TYPE_CLOSE_CONN_REPLY:   return "PAP_CLOSE_CONN_REPLY";
+  case AT_PAP_TYPE_SEND_STATUS:                return "PAP_SEND_STATUS";
+  case AT_PAP_TYPE_SEND_STS_REPLY:     return "PAP_SEND_STS_REPLY";
+  case AT_PAP_TYPE_READ_LW:            return "PAP_READ_LW";
+  }
+  return "<Unknown>";
+}
+
+
 /*!
  * @function  connectTimeout
  * @abstract  Returns the connect timeout preference value.
@@ -1562,7 +1592,7 @@ static void signalHandler(int sigraised)
 {
   fprintf(stderr, "ERROR: There was a timeout error while sending data to the printer\n");
 
-  papClose(true);
+  papClose();
 
   _exit(1);
 }
index f2a2b893f378ff6cb84178abfe124980a1eb3a2b..b76283aa2e161187f68209e04201684bda56c494 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: snmp.c 6049 2006-10-20 15:07:21Z mike $"
+ * "$Id: snmp.c 6090 2006-11-14 16:35:27Z mike $"
  *
  *   SNMP discovery backend for the Common UNIX Printing System (CUPS).
  *
@@ -1126,7 +1126,7 @@ asn1_set_packed(unsigned char **buffer,   /* IO - Pointer in buffer */
 {
   if (integer > 0xfffffff)
   {
-    **buffer = (integer >> 14) & 0x7f;
+    **buffer = (integer >> 28) & 0x7f;
     (*buffer) ++;
   }
 
@@ -1752,7 +1752,7 @@ probe_device(snmp_cache_t *device)        /* I - Device */
     alarm(0);
   }
 
-  if (http);
+  if (http)
   {
    /*
     * IPP is supported...
@@ -2455,5 +2455,5 @@ update_cache(snmp_cache_t *device,        /* I - Device */
 
 
 /*
- * End of "$Id: snmp.c 6049 2006-10-20 15:07:21Z mike $".
+ * End of "$Id: snmp.c 6090 2006-11-14 16:35:27Z mike $".
  */
index 03e0373ff7033f0f6b6734b6c3315eefe5a44a10..d1da59b9be42de268718657143cdd14da66378c9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: usb-darwin.c 5630 2006-06-05 18:42:53Z mike $"
+ * "$Id: usb-darwin.c 6090 2006-11-14 16:35:27Z mike $"
  *
  * Â© Copyright 2005-2006 Apple Computer, Inc. All rights reserved.
  *
@@ -198,12 +198,13 @@ static void copy_deviceinfo(CFStringRef deviceIDString, CFStringRef *make, CFStr
 static void release_deviceinfo(CFStringRef *make, CFStringRef *model, CFStringRef *serial);
 static kern_return_t load_classdriver(CFStringRef driverPath, printer_interface_t intf, classdriver_context_t ***driver);
 static kern_return_t unload_classdriver(classdriver_context_t ***classDriver);
-static kern_return_t load_printerdriver(printer_data_t *printer);
-static kern_return_t registry_open(printer_data_t *printer);
+static kern_return_t load_printerdriver(printer_data_t *printer, CFStringRef *driverBundlePath);
+static kern_return_t registry_open(printer_data_t *printer, CFStringRef *driverBundlePath);
 static kern_return_t registry_close(printer_data_t *printer);
 static OSStatus copy_deviceid(classdriver_context_t **printer, CFStringRef *deviceID);
 static void copy_devicestring(io_service_t usbInterface, CFStringRef *deviceID, UInt32 *deviceLocation);
 static CFStringRef copy_value_for_key(CFStringRef deviceID, CFStringRef *keys);
+static CFStringRef cfstr_create_and_trim(const char *cstr);
 static void parse_options(const char *options, char *serial, UInt32 *location, Boolean *waitEOF);
 static void setup_cfLanguage(void);
 static void *read_thread(void *reference);
@@ -255,6 +256,7 @@ print_device(const char *uri,               /* I - Device URI */
   int            countdown = INITIAL_LOG_INTERVAL;     /* Logging interval */
   pthread_cond_t  *readCompleteConditionPtr = NULL;    /* Read complete condition */
   pthread_mutex_t *readMutexPtr = NULL;                        /* Read mutex */
+  CFStringRef    driverBundlePath;                     /* Class driver path */
 
   setup_cfLanguage();
   parse_options(options, serial, &printer_data.location, &printer_data.waitEOF);
@@ -263,9 +265,10 @@ print_device(const char *uri,              /* I - Device URI */
     resource++;
 
   printer_data.uri = uri;
-  printer_data.make   = CFStringCreateWithCString(NULL, hostname, kCFStringEncodingUTF8);
-  printer_data.model  = CFStringCreateWithCString(NULL, resource, kCFStringEncodingUTF8);
-  printer_data.serial = CFStringCreateWithCString(NULL, serial, kCFStringEncodingUTF8);
+  
+  printer_data.make   = cfstr_create_and_trim(hostname);
+  printer_data.model  = cfstr_create_and_trim(resource);
+  printer_data.serial = cfstr_create_and_trim(serial);
 
   fputs("STATE: +connecting-to-device\n", stderr);
 
@@ -281,7 +284,9 @@ print_device(const char *uri,               /* I - Device URI */
     iterate_printers(find_device_callback, &printer_data);             
 
     fprintf(stderr, "INFO: Opening Connection\n");
-    status = registry_open(&printer_data);
+
+    driverBundlePath = NULL;
+    status = registry_open(&printer_data, &driverBundlePath);
 #if defined(__i386__)
     /*
      * If we were unable to load the class drivers for this printer it's probably because they're ppc-only.
@@ -292,6 +297,26 @@ print_device(const char *uri,              /* I - Device URI */
       /* Never returns here */
     }
 #endif /* __i386__ */
+    if (status ==  -2) {
+     /*
+      * If we still were unable to load the class drivers for this printer log
+      * the error and stop the queue...
+      */
+
+      if (driverBundlePath == NULL || !CFStringGetCString(driverBundlePath, buffer, sizeof(buffer), kCFStringEncodingUTF8))
+        strlcpy(buffer, "USB class driver", sizeof(buffer));
+
+      fprintf(stderr, "STATE: +apple-missing-usbclassdriver-error\n" \
+                     "FATAL: Could not load %s\n", buffer);
+
+      if (driverBundlePath)
+       CFRelease(driverBundlePath);
+
+      return CUPS_BACKEND_STOP;
+    }
+
+    if (driverBundlePath)
+      CFRelease(driverBundlePath);
 
     if (status != noErr) {
       sleep( PRINTER_POLLING_INTERVAL );
@@ -508,7 +533,7 @@ static Boolean find_device_callback(void *refcon, io_service_t obj)
       if (CFStringCompare(make, userData->make, kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
        if (CFStringCompare(model, userData->model, kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
          if (userData->serial != NULL) {
-           if (serial != NULL && CFStringCompare(model, userData->model, kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
+           if (serial != NULL && CFStringCompare(serial, userData->serial, kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
              IOObjectRetain(obj);
              userData->printerObj = obj;
              keepLooking = false;
@@ -728,9 +753,11 @@ static kern_return_t unload_classdriver(classdriver_context_t ***classDriver)
 
 /*
  * 'load_printerdriver()' - Load a vendor's (or generic) classdriver.
+ *
+ * If driverBundlePath is not NULL on return it is the callers responsbility to release it!
  */
 
-static kern_return_t load_printerdriver(printer_data_t *printer)
+static kern_return_t load_printerdriver(printer_data_t *printer, CFStringRef *driverBundlePath)
 {
   IOCFPlugInInterface **iodev = NULL;
   SInt32 score;
@@ -744,11 +771,10 @@ static kern_return_t load_printerdriver(printer_data_t *printer)
 
       kr = IORegistryEntryCreateCFProperties(printer->printerObj, &properties, NULL, kNilOptions);
       if (kr == kIOReturnSuccess) {
-       CFStringRef driverBundlePath = NULL;
        if (properties != NULL) {
-         driverBundlePath = (CFStringRef) CFDictionaryGetValue(properties, kUSBClassDriverProperty);
+         *driverBundlePath = (CFStringRef) CFDictionaryGetValue(properties, kUSBClassDriverProperty);
        }
-       kr = load_classdriver(driverBundlePath, intf, &printer->printerDriver);
+       kr = load_classdriver(*driverBundlePath, intf, &printer->printerDriver);
       }
 
       if (kr != kIOReturnSuccess)
@@ -764,9 +790,9 @@ static kern_return_t load_printerdriver(printer_data_t *printer)
  * 'registry_open()' - Open a connection to the printer.
  */
 
-static kern_return_t registry_open(printer_data_t *printer)
+static kern_return_t registry_open(printer_data_t *printer, CFStringRef *driverBundlePath)
 {
-  kern_return_t kr = load_printerdriver(printer);
+  kern_return_t kr = load_printerdriver(printer, driverBundlePath);
   if (kr != kIOReturnSuccess) {
     kr = -2;
   }
@@ -975,6 +1001,27 @@ static CFStringRef copy_value_for_key(CFStringRef deviceID, CFStringRef *keys)
 }
 
 
+/*
+ * 'cfstr_create_and_trim()' - Create a CFString from a c-string and 
+ *                            trim it's whitespace characters.
+ */
+
+CFStringRef cfstr_create_and_trim(const char *cstr)
+{
+  CFStringRef          cfstr;
+  CFMutableStringRef   cfmutablestr = NULL;
+  
+  if ((cfstr = CFStringCreateWithCString(NULL, cstr, kCFStringEncodingUTF8)) != NULL)
+  {
+    if ((cfmutablestr = CFStringCreateMutableCopy(NULL, 1024, cfstr)) != NULL)
+      CFStringTrimWhitespace(cfmutablestr);
+
+    CFRelease(cfstr);
+  }
+  return (CFStringRef) cfmutablestr;
+}
+
+
 #pragma mark -
 /*
  * 'parse_options()' - Parse uri options.
@@ -1344,7 +1391,6 @@ static void *read_thread(void *reference)
   return NULL;
 }
 
-
 /*
- * End of "$Id: usb-darwin.c 5630 2006-06-05 18:42:53Z mike $".
+ * End of "$Id: usb-darwin.c 6090 2006-11-14 16:35:27Z mike $".
  */
index 47b2cf1f08e737ec67577a97f583fb5211f93608..4a4cbe259609cf4d70d62cd308aa0d4fb8b48369 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: usb-unix.c 6032 2006-10-12 19:19:47Z mike $"
+ * "$Id: usb-unix.c 6111 2006-11-15 20:28:39Z mike $"
  *
  *   USB port backend for the Common UNIX Printing System (CUPS).
  *
@@ -84,8 +84,7 @@ print_device(const char *uri,         /* I - Device URI */
     * device ID over and over and over when they get a read request...
     */
 
-    use_bc = strcasecmp(hostname, "Canon") != 0 ||
-             strstr(hostname, "Minolta") != NULL;
+    use_bc = strcasecmp(hostname, "Canon") && !strstr(hostname, "Minolta");
 
     if ((device_fd = open_device(uri, &use_bc)) == -1)
     {
@@ -525,5 +524,5 @@ open_device(const char *uri,                /* I - Device URI */
 
 
 /*
- * End of "$Id: usb-unix.c 6032 2006-10-12 19:19:47Z mike $".
+ * End of "$Id: usb-unix.c 6111 2006-11-15 20:28:39Z mike $".
  */
index 257f70933995b23c31a37a23e50beb6a24c900fc..7e54767fe37bce10711fc7f17e6e66af453f57c8 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-common.m4 6052 2006-10-20 20:35:41Z mike $"
+dnl "$Id: cups-common.m4 6092 2006-11-14 16:36:36Z mike $"
 dnl
 dnl   Common configuration stuff for the Common UNIX Printing System (CUPS).
 dnl
@@ -28,12 +28,9 @@ AC_PREREQ(2.50)
 dnl Set the name of the config header file...
 AC_CONFIG_HEADER(config.h)
 
-dnl Versio number information...
-CUPS_VERSION="1.2.6"
+dnl Version number information...
+CUPS_VERSION="1.2.7"
 CUPS_REVISION=""
-if test -z "$CUPS_REVISION" -a -d .svn; then
-       CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
-fi
 
 AC_SUBST(CUPS_VERSION)
 AC_SUBST(CUPS_REVISION)
@@ -267,5 +264,5 @@ AC_SUBST(DEFAULT_IPP_PORT)
 AC_DEFINE_UNQUOTED(CUPS_DEFAULT_IPP_PORT,$DEFAULT_IPP_PORT)
 
 dnl
-dnl End of "$Id: cups-common.m4 6052 2006-10-20 20:35:41Z mike $".
+dnl End of "$Id: cups-common.m4 6092 2006-11-14 16:36:36Z mike $".
 dnl
index 78641168098be19b46f91acc49f8a7f8785d4f77..66810f9e5d5877526f615e6e5319e27568e387be 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-defaults.m4 6003 2006-10-02 16:26:04Z mike $"
+dnl "$Id: cups-defaults.m4 6118 2006-11-16 13:34:44Z mike $"
 dnl
 dnl   Default cupsd configuration settings for the Common UNIX Printing System
 dnl   (CUPS).
@@ -28,7 +28,7 @@ AC_ARG_WITH(languages, [  --with-languages        set installed languages, defau
        if test "x$withval" != xno; then
                LANGUAGES="$withval"
        fi,
-       LANGUAGES="de es et ja pl sv")
+       LANGUAGES="de es et it ja pl sv")
 AC_SUBST(LANGUAGES)
 
 dnl Default ConfigFilePerm
@@ -252,5 +252,5 @@ fi
 AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTCAP, "$CUPS_DEFAULT_PRINTCAP")
 
 dnl
-dnl End of "$Id: cups-defaults.m4 6003 2006-10-02 16:26:04Z mike $".
+dnl End of "$Id: cups-defaults.m4 6118 2006-11-16 13:34:44Z mike $".
 dnl
index bca22de82e0a09ead5b89d5e4a2c9104f32ab92a..9ae3662989b1d75d6fb98f842684fd90f243cda8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cups.h 6052 2006-10-20 20:35:41Z mike $"
+ * "$Id: cups.h 6092 2006-11-14 16:36:36Z mike $"
  *
  *   API definitions for the Common UNIX Printing System (CUPS).
  *
@@ -61,10 +61,10 @@ extern "C" {
  * Constants...
  */
 
-#  define CUPS_VERSION         1.0206
+#  define CUPS_VERSION         1.0207
 #  define CUPS_VERSION_MAJOR   1
 #  define CUPS_VERSION_MINOR   2
-#  define CUPS_VERSION_PATCH   6
+#  define CUPS_VERSION_PATCH   7
 #  define CUPS_DATE_ANY                -1
 
 
@@ -244,5 +244,5 @@ extern cups_file_t  *cupsTempFile2(char *filename, int len);
 #endif /* !_CUPS_CUPS_H_ */
 
 /*
- * End of "$Id: cups.h 6052 2006-10-20 20:35:41Z mike $".
+ * End of "$Id: cups.h 6092 2006-11-14 16:36:36Z mike $".
  */
index bef934ed92e2cbed8cccd2dec17b113425360c45..d5b030d280c60fb6650bdb359d32b5e552e45188 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: http-private.h 5504 2006-05-10 18:57:46Z mike $"
+ * "$Id: http-private.h 6111 2006-11-15 20:28:39Z mike $"
  *
  *   Private HTTP definitions for the Common UNIX Printing System (CUPS).
  *
@@ -70,7 +70,8 @@ typedef int socklen_t;
 #  if defined HAVE_LIBSSL
 /*
  * The OpenSSL library provides its own SSL/TLS context structure for its
- * IO and protocol management...
+ * IO and protocol management.  However, we need to provide our own BIO
+ * (basic IO) implementation to do timeouts...
  */
 
 #    include <openssl/err.h>
@@ -79,6 +80,8 @@ typedef int socklen_t;
 
 typedef SSL http_tls_t;
 
+extern BIO_METHOD *_httpBIOMethods(void);
+
 #  elif defined HAVE_GNUTLS
 /*
  * The GNU TLS library is more of a "bare metal" SSL/TLS library...
@@ -91,6 +94,11 @@ typedef struct
   void                 *credentials;   /* GNU TLS credentials object */
 } http_tls_t;
 
+extern ssize_t _httpReadGNUTLS(gnutls_transport_ptr ptr, void *data,
+                               size_t length);
+extern ssize_t _httpWriteGNUTLS(gnutls_transport_ptr ptr, const void *data,
+                                size_t length);
+
 #  elif defined(HAVE_CDSASSL)
 /*
  * Darwin's Security framework provides its own SSL/TLS context structure
@@ -105,15 +113,6 @@ typedef struct                             /**** CDSA connection information ****/
   CFArrayRef           certsArray;     /* Certificates array */
 } http_tls_t;
 
-typedef union _cdsa_conn_ref_u         /**** CDSA Connection reference union
-                                        **** used to resolve 64-bit casting
-                                        **** warnings.
-                                        ****/
-{
-  SSLConnectionRef connection;         /* SSL connection pointer */
-  int             sock;                /* Socket */
-} cdsa_conn_ref_t;
-
 extern OSStatus        _httpReadCDSA(SSLConnectionRef connection, void *data,
                              size_t *dataLength);
 extern OSStatus        _httpWriteCDSA(SSLConnectionRef connection, const void *data,
@@ -187,5 +186,5 @@ extern void _cups_freeifaddrs(struct ifaddrs *addrs);
 #endif /* !_CUPS_HTTP_PRIVATE_H_ */
 
 /*
- * End of "$Id: http-private.h 5504 2006-05-10 18:57:46Z mike $".
+ * End of "$Id: http-private.h 6111 2006-11-15 20:28:39Z mike $".
  */
index 169aece66da39d11ebe998eda610e74c38ee20e4..3e0fef0eddec16343c21fd2c01690d44790ffe12 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: http.c 5961 2006-09-16 19:08:36Z mike $"
+ * "$Id: http.c 6111 2006-11-15 20:28:39Z mike $"
  *
  *   HTTP routines for the Common UNIX Printing System (CUPS).
  *
@@ -25,6 +25,7 @@
  *
  * Contents:
  *
+ *   _httpBIOMethods()    - Get the OpenSSL BIO methods for HTTP connections.
  *   httpBlocking()       - Set blocking/non-blocking behavior on a connection.
  *   httpCheck()          - Check to see if there is a pending response from
  *                          the server.
@@ -60,7 +61,8 @@
  *   httpPut()            - Send a PUT request to the server.
  *   httpRead()           - Read data from a HTTP connection.
  *   httpRead2()          - Read data from a HTTP connection.
- *   _httpReadCDSA()      - Read function for CDSA decryption code.
+ *   _httpReadCDSA()      - Read function for the CDSA library.
+ *   _httpReadGNUTLS()    - Read function for the GNU TLS library.
  *   httpReconnect()      - Reconnect to a HTTP server...
  *   httpSetCookie()      - Set the cookie value(s)...
  *   httpSetExpect()      - Set the Expect: header in a request.
  *   httpWait()           - Wait for data available on a connection.
  *   httpWrite()          - Write data to a HTTP connection.
  *   httpWrite2()         - Write data to a HTTP connection.
- *   _httpWriteCDSA()     - Write function for CDSA encryption code.
+ *   _httpWriteCDSA()     - Write function for the CDSA library.
+ *   _httpWriteGNUTLS()   - Write function for the GNU TLS library.
+ *   http_bio_ctrl()      - Control the HTTP connection.
+ *   http_bio_free()      - Free OpenSSL data.
+ *   http_bio_new()       - Initialize an OpenSSL BIO structure.
+ *   http_bio_puts()      - Send a string for OpenSSL.
+ *   http_bio_read()      - Read data for OpenSSL.
+ *   http_bio_write()     - Write data for OpenSSL.
  *   http_field()         - Return the field index for a field name.
  *   http_read_ssl()      - Read from a SSL/TLS connection.
  *   http_send()          - Send a request with all fields and the trailing
 static http_field_t    http_field(const char *name);
 static int             http_send(http_t *http, http_state_t request,
                                  const char *uri);
-static int             http_wait(http_t *http, int msec);
+static int             http_wait(http_t *http, int msec, int usessl);
 static int             http_write(http_t *http, const char *buffer,
                                   int length);
 static int             http_write_chunk(http_t *http, const char *buffer,
@@ -168,6 +177,45 @@ static const char * const http_fields[] =
                        };
 
 
+#if defined(HAVE_SSL) && defined(HAVE_LIBSSL)
+/*
+ * BIO methods for OpenSSL...
+ */
+
+static int             http_bio_write(BIO *h, const char *buf, int num);
+static int             http_bio_read(BIO *h, char *buf, int size);
+static int             http_bio_puts(BIO *h, const char *str);
+static long            http_bio_ctrl(BIO *h, int cmd, long arg1, void *arg2);
+static int             http_bio_new(BIO *h);
+static int             http_bio_free(BIO *data);
+
+static BIO_METHOD      http_bio_methods =
+                       {
+                         BIO_TYPE_SOCKET,
+                         "http",
+                         http_bio_write,
+                         http_bio_read,
+                         http_bio_puts,
+                         NULL, /* http_bio_gets, */
+                         http_bio_ctrl,
+                         http_bio_new,
+                         http_bio_free,
+                         NULL,
+                       };
+
+
+/*
+ * '_httpBIOMethods()' - Get the OpenSSL BIO methods for HTTP connections.
+ */
+
+BIO_METHOD *                           /* O - BIO methods for OpenSSL */
+_httpBIOMethods(void)
+{
+  return (&http_bio_methods);
+}
+#endif /* HAVE_SSL && HAVE_LIBSSL */
+
+
 /*
  * 'httpBlocking()' - Set blocking/non-blocking behavior on a connection.
  */
@@ -869,7 +917,7 @@ httpGets(char   *line,                      /* I - Line to read into */
       * No newline; see if there is more data to be read...
       */
 
-      if (!http->blocking && !http_wait(http, 10000))
+      if (!http->blocking && !http_wait(http, 10000, 1))
       {
         DEBUG_puts("httpGets: Timed out!");
         http->error = ETIMEDOUT;
@@ -1391,7 +1439,7 @@ httpRead2(http_t *http,                   /* I - HTTP connection */
 
 #if defined(HAVE_SSL) && defined(HAVE_CDSASSL)
 /*
- * '_httpReadCDSA()' - Read function for CDSA decryption code.
+ * '_httpReadCDSA()' - Read function for the CDSA library.
  */
 
 OSStatus                               /* O  - -1 on error, 0 on success */
@@ -1400,19 +1448,36 @@ _httpReadCDSA(
     void             *data,            /* I  - Data buffer */
     size_t           *dataLength)      /* IO - Number of bytes */
 {
-  OSStatus       result;               /* Return value */
-  ssize_t        bytes;                /* Number of bytes read */
-  cdsa_conn_ref_t u;                   /* Connection reference union */
+  OSStatus     result;                 /* Return value */
+  ssize_t      bytes;                  /* Number of bytes read */
+  http_t       *http;                  /* HTTP connection */
+
+
+  http = (http_t *)connection;
 
+  if (!http->blocking)
+  {
+   /*
+    * Make sure we have data before we read...
+    */
 
-  u.connection = connection;
+    if (!http_wait(http, 10000, 0))
+    {
+      http->error = ETIMEDOUT;
+      return (-1);
+    }
+  }
 
   do
-    bytes = recv(u.sock, data, *dataLength, 0);
+  {
+    bytes = recv(http->fd, data, *dataLength, 0);
+  }
   while (bytes == -1 && errno == EINTR);
 
   if (bytes == *dataLength)
+  {
     result = 0;
+  }
   else if (bytes > 0)
   {
     *dataLength = bytes;
@@ -1430,11 +1495,45 @@ _httpReadCDSA(
       result = errSSLClosedAbort;
   }
 
-  return result;
+  return (result);
 }
 #endif /* HAVE_SSL && HAVE_CDSASSL */
 
 
+#if defined(HAVE_SSL) && defined(HAVE_GNUTLS)
+/*
+ * '_httpReadGNUTLS()' - Read function for the GNU TLS library.
+ */
+
+ssize_t                                        /* O - Number of bytes read or -1 on error */
+_httpReadGNUTLS(
+    gnutls_transport_ptr ptr,          /* I - HTTP connection */
+    void                 *data,                /* I - Buffer */
+    size_t               length)       /* I - Number of bytes to read */
+{
+  http_t       *http;                  /* HTTP connection */
+
+
+  http = (http_t *)ptr;
+
+  if (!http->blocking)
+  {
+   /*
+    * Make sure we have data before we read...
+    */
+
+    if (!http_wait(http, 10000, 0))
+    {
+      http->error = ETIMEDOUT;
+      return (-1);
+    }
+  }
+
+  return (recv(http->fd, data, length, 0));
+}
+#endif /* HAVE_SSL && HAVE_GNUTLS */
+
+
 /*
  * 'httpReconnect()' - Reconnect to a HTTP server.
  */
@@ -1830,7 +1929,7 @@ httpWait(http_t *http,                    /* I - HTTP connection */
   * If not, check the SSL/TLS buffers and do a select() on the connection...
   */
 
-  return (http_wait(http, msec));
+  return (http_wait(http, msec, 1));
 }
 
 
@@ -1977,7 +2076,7 @@ httpWrite2(http_t     *http,              /* I - HTTP connection */
 
 #if defined(HAVE_SSL) && defined(HAVE_CDSASSL)
 /*
- * '_httpWriteCDSA()' - Write function for CDSA encryption code.
+ * '_httpWriteCDSA()' - Write function for the CDSA library.
  */
 
 OSStatus                               /* O  - -1 on error, 0 on success */
@@ -1986,19 +2085,23 @@ _httpWriteCDSA(
     const void       *data,            /* I  - Data buffer */
     size_t           *dataLength)      /* IO - Number of bytes */
 {
-  OSStatus       result;               /* Return value */
-  ssize_t        bytes;                /* Number of bytes read */
-  cdsa_conn_ref_t u;                   /* Connection reference union */
+  OSStatus     result;                 /* Return value */
+  ssize_t      bytes;                  /* Number of bytes read */
+  http_t       *http;                  /* HTTP connection */
 
 
-  u.connection = connection;
+  http = (http_t *)connection;
 
   do
-    bytes = write(u.sock, data, *dataLength);
+  {
+    bytes = write(http->fd, data, *dataLength);
+  }
   while (bytes == -1 && errno == EINTR);
 
   if (bytes == *dataLength)
+  {
     result = 0;
+  }
   else if (bytes >= 0)
   {
     *dataLength = bytes;
@@ -2014,11 +2117,164 @@ _httpWriteCDSA(
       result = errSSLClosedAbort;
   }
 
-  return result;
+  return (result);
 }
 #endif /* HAVE_SSL && HAVE_CDSASSL */
 
 
+#if defined(HAVE_SSL) && defined(HAVE_GNUTLS)
+/*
+ * '_httpWriteGNUTLS()' - Write function for the GNU TLS library.
+ */
+
+ssize_t                                        /* O - Number of bytes written or -1 on error */
+_httpWriteGNUTLS(
+    gnutls_transport_ptr ptr,          /* I - HTTP connection */
+    const void           *data,                /* I - Data buffer */
+    size_t               length)       /* I - Number of bytes to write */
+{
+  return (send(((http_t *)ptr)->fd, data, length, 0));
+}
+#endif /* HAVE_SSL && HAVE_GNUTLS */
+
+
+#if defined(HAVE_SSL) && defined(HAVE_LIBSSL)
+/*
+ * 'http_bio_ctrl()' - Control the HTTP connection.
+ */
+
+static long                            /* O - Result/data */
+http_bio_ctrl(BIO  *h,                 /* I - BIO data */
+              int  cmd,                        /* I - Control command */
+             long arg1,                /* I - First argument */
+             void *arg2)               /* I - Second argument */
+{
+  switch (cmd)
+  {
+    default :
+        return (0);
+
+    case BIO_CTRL_RESET :
+        h->ptr = NULL;
+       return (0);
+
+    case BIO_C_SET_FILE_PTR :
+        h->ptr  = arg2;
+       h->init = 1;
+       return (1);
+
+    case BIO_C_GET_FILE_PTR :
+        if (arg2)
+       {
+         *((void **)arg2) = h->ptr;
+         return (1);
+       }
+       else
+         return (0);
+        
+    case BIO_CTRL_DUP :
+    case BIO_CTRL_FLUSH :
+        return (1);
+  }
+}
+
+
+/*
+ * 'http_bio_free()' - Free OpenSSL data.
+ */
+
+static int                             /* O - 1 on success, 0 on failure */
+http_bio_free(BIO *h)                  /* I - BIO data */
+{
+  if (!h)
+    return (0);
+
+  if (h->shutdown)
+  {
+    h->init  = 0;
+    h->flags = 0;
+  }
+
+  return (1);
+}
+
+
+/*
+ * 'http_bio_new()' - Initialize an OpenSSL BIO structure.
+ */
+
+static int                             /* O - 1 on success, 0 on failure */
+http_bio_new(BIO *h)                   /* I - BIO data */
+{
+  if (!h)
+    return (0);
+
+  h->init  = 0;
+  h->num   = 0;
+  h->ptr   = NULL;
+  h->flags = 0;
+
+  return (1);
+}
+
+
+/*
+ * 'http_bio_puts()' - Send a string for OpenSSL.
+ */
+
+static int                             /* O - Bytes written */
+http_bio_puts(BIO        *h,           /* I - BIO data */
+              const char *str)         /* I - String to write */
+{
+  return (send(((http_t *)h->ptr)->fd, str, strlen(str), 0));
+}
+
+
+/*
+ * 'http_bio_read()' - Read data for OpenSSL.
+ */
+
+static int                             /* O - Bytes read */
+http_bio_read(BIO  *h,                 /* I - BIO data */
+              char *buf,               /* I - Buffer */
+             int  size)                /* I - Number of bytes to read */
+{
+  http_t       *http;                  /* HTTP connection */
+
+
+  http = (http_t *)h->ptr;
+
+  if (!http->blocking)
+  {
+   /*
+    * Make sure we have data before we read...
+    */
+
+    if (!http_wait(http, 10000, 0))
+    {
+      http->error = ETIMEDOUT;
+      return (-1);
+    }
+  }
+
+  return (recv(http->fd, buf, size, 0));
+}
+
+
+/*
+ * 'http_bio_write()' - Write data for OpenSSL.
+ */
+
+static int                             /* O - Bytes written */
+http_bio_write(BIO        *h,          /* I - BIO data */
+               const char *buf,                /* I - Buffer to write */
+              int        num)          /* I - Number of bytes to write */
+{
+  return (send(((http_t *)h->ptr)->fd, buf, num, 0));
+}
+#endif /* HAVE_SSL && HAVE_LIBSSL */
+
+
 /*
  * 'http_field()' - Return the field index for a field name.
  */
@@ -2247,6 +2503,7 @@ http_setup_ssl(http_t *http)              /* I - HTTP connection */
 #  ifdef HAVE_LIBSSL
   SSL_CTX      *context;               /* Context for encryption */
   SSL          *conn;                  /* Connection for encryption */
+  BIO          *bio;                   /* BIO data */
 #  elif defined(HAVE_GNUTLS)
   http_tls_t   *conn;                  /* TLS session object */
   gnutls_certificate_client_credentials *credentials;
@@ -2254,7 +2511,6 @@ http_setup_ssl(http_t *http)              /* I - HTTP connection */
 #  elif defined(HAVE_CDSASSL)
   OSStatus     error;                  /* Error code */
   http_tls_t   *conn;                  /* CDSA connection information */
-  cdsa_conn_ref_t u;                   /* Connection reference union */
 #  endif /* HAVE_LIBSSL */
 
 
@@ -2265,9 +2521,12 @@ http_setup_ssl(http_t *http)             /* I - HTTP connection */
 
   SSL_CTX_set_options(context, SSL_OP_NO_SSLv2); /* Only use SSLv3 or TLS */
 
+  bio = BIO_new(_httpBIOMethods());
+  BIO_ctrl(bio, BIO_C_SET_FILE_PTR, 0, (char *)http);
+
   conn = SSL_new(context);
+  SSL_set_bio(conn, bio, bio);
 
-  SSL_set_fd(conn, http->fd);
   if (SSL_connect(conn) != 1)
   {
 #    ifdef DEBUG
@@ -2316,8 +2575,9 @@ http_setup_ssl(http_t *http)              /* I - HTTP connection */
   gnutls_init(&(conn->session), GNUTLS_CLIENT);
   gnutls_set_default_priority(conn->session);
   gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials);
-  gnutls_transport_set_ptr(conn->session,
-                           (gnutls_transport_ptr)((long)http->fd));
+  gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr)http);
+  gnutls_transport_set_pull_function(conn->session, _httpReadGNUTLS);
+  gnutls_transport_set_push_function(conn->session, _httpWriteGNUTLS);
 
   if ((gnutls_handshake(conn->session)) != GNUTLS_E_SUCCESS)
   {
@@ -2348,9 +2608,7 @@ http_setup_ssl(http_t *http)              /* I - HTTP connection */
   * Use a union to resolve warnings about int/pointer size mismatches...
   */
 
-  u.connection = NULL;
-  u.sock       = http->fd;
-  error        = SSLSetConnection(conn->session, u.connection);
+  error = SSLSetConnection(conn->session, http);
 
   if (!error)
     error = SSLSetIOFuncs(conn->session, _httpReadCDSA, _httpWriteCDSA);
@@ -2544,7 +2802,8 @@ http_upgrade(http_t *http)                /* I - HTTP connection */
 
 static int                             /* O - 1 if data is available, 0 otherwise */
 http_wait(http_t *http,                        /* I - HTTP connection */
-          int    msec)                 /* I - Milliseconds to wait */
+          int    msec,                 /* I - Milliseconds to wait */
+         int    usessl)                /* I - Use SSL context? */
 {
 #ifndef WIN32
   struct rlimit                limit;          /* Runtime limit */
@@ -2564,7 +2823,7 @@ http_wait(http_t *http,                   /* I - HTTP connection */
   */
 
 #ifdef HAVE_SSL
-  if (http->tls)
+  if (http->tls && usessl)
   {
 #  ifdef HAVE_LIBSSL
     if (SSL_pending((SSL *)(http->tls)))
@@ -2829,5 +3088,5 @@ http_write_ssl(http_t     *http,  /* I - HTTP connection */
 
 
 /*
- * End of "$Id: http.c 5961 2006-09-16 19:08:36Z mike $".
+ * End of "$Id: http.c 6111 2006-11-15 20:28:39Z mike $".
  */
index cad2f10af38dd480c1df786653ae5ca14112c0d6..71f9c7e69afcdcacc1c0674713f44f6605eb66e0 100644 (file)
@@ -28,6 +28,7 @@ _cups_freeifaddrs
 _cups_strcpy
 _cups_strlcat
 _cups_strlcpy
+_httpBIOMethods
 _ippAddAttr
 _ippFreeAttr
 _ppdGetEncoding
index b0b5166fcce7d05c3e347d5d3a3659acf12a37f8..dc9d4dcb1216593055c068eea1e002484e8d9b02 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: transcode.c 6038 2006-10-14 15:53:10Z mike $"
+ * "$Id: transcode.c 6115 2006-11-15 22:21:18Z mike $"
  *
  *   Transcoding support for the Common UNIX Printing System (CUPS).
  *
@@ -295,6 +295,38 @@ cupsCharsetToUTF8(
     return (strlen((char *)dest));
   }
 
+ /*
+  * Handle ISO-8859-1 to UTF-8 directly...
+  */
+
+  if (encoding == CUPS_ISO8859_1)
+  {
+    int                ch;                     /* Character from string */
+    cups_utf8_t        *destptr,               /* Pointer into UTF-8 buffer */
+               *destend;               /* End of UTF-8 buffer */
+
+
+    destptr = dest;
+    destend = dest + maxout - 2;
+
+    while (*src && destptr < destend)
+    {
+      ch = *src++ & 255;
+
+      if (ch & 128)
+      {
+       *destptr++ = 0xc0 | (ch >> 6);
+       *destptr++ = 0x80 | (ch & 0x3f);
+      }
+      else
+       *destptr++ = ch;
+    }
+
+    *destptr = '\0';
+
+    return (destptr - dest);
+  }
+
  /*
   * Convert input legacy charset to UTF-8...
   */
@@ -363,6 +395,45 @@ cupsUTF8ToCharset(
     return (strlen(dest));
   }
 
+ /*
+  * Handle UTF-8 to ISO-8859-1 directly...
+  */
+
+  if (encoding == CUPS_ISO8859_1)
+  {
+    int                ch;                     /* Character from string */
+    char       *destptr,               /* Pointer into ISO-8859-1 buffer */
+               *destend;               /* End of ISO-8859-1 buffer */
+
+
+    destptr = dest;
+    destend = dest + maxout - 1;
+
+    while (*src && destptr < destend)
+    {
+      ch = *src++;
+
+      if ((ch & 0xe0) == 0xc0)
+      {
+       ch = ((ch & 0x1f) << 6) | (*src++ & 0x3f);
+
+       if (ch < 256)
+          *destptr++ = ch;
+       else
+          *destptr++ = '?';
+      }
+      else if ((ch & 0xf0) == 0xe0 ||
+               (ch & 0xf8) == 0xf0)
+        *destptr++ = '?';
+      else if (!(ch & 0x80))
+       *destptr++ = ch;
+    }
+
+    *destptr = '\0';
+
+    return (destptr - dest);
+  }
+
  /*
   * Convert input UTF-8 to legacy charset...
   */
@@ -1584,5 +1655,5 @@ get_vbcs_charmap(
 
 
 /*
- * End of "$Id: transcode.c 6038 2006-10-14 15:53:10Z mike $"
+ * End of "$Id: transcode.c 6115 2006-11-15 22:21:18Z mike $"
  */
index 48ac645bbaf2b4df658ef82c65abbd150feb348f..0bb1c4620a798f58c80182f75006cb0075f2ad0c 100644 (file)
@@ -23,3 +23,5 @@ Name[et]=TrĂ¼kkimise haldur
 Comment[et]=CUPS-i veebiliides
 Name[pl]=ZarzÄ…dzanie drukowaniem
 Comment[pl]=Interfejs WWW CUPS
+Name[it]=Gestione stampa
+Comment[it]=Interfaccia web di CUPS
\ No newline at end of file
index 621fbcc1a93750f6b752aeab1c0ff49bd5a1be72..089aef83dc1fc701f5cc46dea787c79ac4405e29 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <!--
-  "$Id: spec-ppd.html 6025 2006-10-11 14:59:20Z mike $"
+  "$Id: spec-ppd.html 6096 2006-11-14 17:06:28Z mike $"
 
   CUPS PPD extensions specification for the Common UNIX Printing System (CUPS).
 
@@ -95,11 +95,14 @@ for this printer driver.</p>
 <p>This boolean attribute notifies the RIP filters that the
 destination printer does not require the top and bottom margins
 of the <tt>ImageableArea</tt> swapped for the back page. The
-default value is <code>true</code>.</p>
+default is <tt>true</tt> when <tt>cupsFlipDuplex</tt>  is <tt>true</tt> and <tt>false</tt> otherwise.</p>
 
 <p>Example:</p>
 
 <pre class='command'>
+<em>*% Flip the back side images</em>
+*cupsFlipDuplex: true
+
 <em>*% Don't swap the top and bottom margins for the back side</em> 
 *APDuplexRequiresFlippedMargin: false
 </pre>
diff --git a/doc/it/images/button-accept-jobs.gif b/doc/it/images/button-accept-jobs.gif
new file mode 100644 (file)
index 0000000..394ae93
Binary files /dev/null and b/doc/it/images/button-accept-jobs.gif differ
diff --git a/doc/it/images/button-add-class.gif b/doc/it/images/button-add-class.gif
new file mode 100644 (file)
index 0000000..46de12b
Binary files /dev/null and b/doc/it/images/button-add-class.gif differ
diff --git a/doc/it/images/button-add-printer.gif b/doc/it/images/button-add-printer.gif
new file mode 100644 (file)
index 0000000..ad53491
Binary files /dev/null and b/doc/it/images/button-add-printer.gif differ
diff --git a/doc/it/images/button-add-this-printer.gif b/doc/it/images/button-add-this-printer.gif
new file mode 100644 (file)
index 0000000..6a526bb
Binary files /dev/null and b/doc/it/images/button-add-this-printer.gif differ
diff --git a/doc/it/images/button-cancel-all-jobs.gif b/doc/it/images/button-cancel-all-jobs.gif
new file mode 100644 (file)
index 0000000..3bad563
Binary files /dev/null and b/doc/it/images/button-cancel-all-jobs.gif differ
diff --git a/doc/it/images/button-cancel-job.gif b/doc/it/images/button-cancel-job.gif
new file mode 100644 (file)
index 0000000..cb12f3a
Binary files /dev/null and b/doc/it/images/button-cancel-job.gif differ
diff --git a/doc/it/images/button-change-settings.gif b/doc/it/images/button-change-settings.gif
new file mode 100644 (file)
index 0000000..4aefa00
Binary files /dev/null and b/doc/it/images/button-change-settings.gif differ
diff --git a/doc/it/images/button-clean-print-heads.gif b/doc/it/images/button-clean-print-heads.gif
new file mode 100644 (file)
index 0000000..0ee6b67
Binary files /dev/null and b/doc/it/images/button-clean-print-heads.gif differ
diff --git a/doc/it/images/button-clear.gif b/doc/it/images/button-clear.gif
new file mode 100644 (file)
index 0000000..c5e0c76
Binary files /dev/null and b/doc/it/images/button-clear.gif differ
diff --git a/doc/it/images/button-continue.gif b/doc/it/images/button-continue.gif
new file mode 100644 (file)
index 0000000..5287aa6
Binary files /dev/null and b/doc/it/images/button-continue.gif differ
diff --git a/doc/it/images/button-delete-class.gif b/doc/it/images/button-delete-class.gif
new file mode 100644 (file)
index 0000000..d5c5a9a
Binary files /dev/null and b/doc/it/images/button-delete-class.gif differ
diff --git a/doc/it/images/button-delete-printer.gif b/doc/it/images/button-delete-printer.gif
new file mode 100644 (file)
index 0000000..a6f3d63
Binary files /dev/null and b/doc/it/images/button-delete-printer.gif differ
diff --git a/doc/it/images/button-edit-configuration-file.gif b/doc/it/images/button-edit-configuration-file.gif
new file mode 100644 (file)
index 0000000..27dd668
Binary files /dev/null and b/doc/it/images/button-edit-configuration-file.gif differ
diff --git a/doc/it/images/button-export-samba.gif b/doc/it/images/button-export-samba.gif
new file mode 100644 (file)
index 0000000..28011fe
Binary files /dev/null and b/doc/it/images/button-export-samba.gif differ
diff --git a/doc/it/images/button-help.gif b/doc/it/images/button-help.gif
new file mode 100644 (file)
index 0000000..729e469
Binary files /dev/null and b/doc/it/images/button-help.gif differ
diff --git a/doc/it/images/button-hold-job.gif b/doc/it/images/button-hold-job.gif
new file mode 100644 (file)
index 0000000..4f39dd9
Binary files /dev/null and b/doc/it/images/button-hold-job.gif differ
diff --git a/doc/it/images/button-manage-classes.gif b/doc/it/images/button-manage-classes.gif
new file mode 100644 (file)
index 0000000..5ced7e0
Binary files /dev/null and b/doc/it/images/button-manage-classes.gif differ
diff --git a/doc/it/images/button-manage-jobs.gif b/doc/it/images/button-manage-jobs.gif
new file mode 100644 (file)
index 0000000..0746c1a
Binary files /dev/null and b/doc/it/images/button-manage-jobs.gif differ
diff --git a/doc/it/images/button-manage-printers.gif b/doc/it/images/button-manage-printers.gif
new file mode 100644 (file)
index 0000000..f9fc252
Binary files /dev/null and b/doc/it/images/button-manage-printers.gif differ
diff --git a/doc/it/images/button-manage-server.gif b/doc/it/images/button-manage-server.gif
new file mode 100644 (file)
index 0000000..e3bd612
Binary files /dev/null and b/doc/it/images/button-manage-server.gif differ
diff --git a/doc/it/images/button-modify-class.gif b/doc/it/images/button-modify-class.gif
new file mode 100644 (file)
index 0000000..1623871
Binary files /dev/null and b/doc/it/images/button-modify-class.gif differ
diff --git a/doc/it/images/button-modify-printer.gif b/doc/it/images/button-modify-printer.gif
new file mode 100644 (file)
index 0000000..0d1faac
Binary files /dev/null and b/doc/it/images/button-modify-printer.gif differ
diff --git a/doc/it/images/button-move-job.gif b/doc/it/images/button-move-job.gif
new file mode 100644 (file)
index 0000000..cfd1a7a
Binary files /dev/null and b/doc/it/images/button-move-job.gif differ
diff --git a/doc/it/images/button-move-jobs.gif b/doc/it/images/button-move-jobs.gif
new file mode 100644 (file)
index 0000000..9629190
Binary files /dev/null and b/doc/it/images/button-move-jobs.gif differ
diff --git a/doc/it/images/button-print-self-test-page.gif b/doc/it/images/button-print-self-test-page.gif
new file mode 100644 (file)
index 0000000..fac427d
Binary files /dev/null and b/doc/it/images/button-print-self-test-page.gif differ
diff --git a/doc/it/images/button-print-test-page.gif b/doc/it/images/button-print-test-page.gif
new file mode 100644 (file)
index 0000000..f443cc6
Binary files /dev/null and b/doc/it/images/button-print-test-page.gif differ
diff --git a/doc/it/images/button-publish-printer.gif b/doc/it/images/button-publish-printer.gif
new file mode 100644 (file)
index 0000000..a4c17ba
Binary files /dev/null and b/doc/it/images/button-publish-printer.gif differ
diff --git a/doc/it/images/button-reject-jobs.gif b/doc/it/images/button-reject-jobs.gif
new file mode 100644 (file)
index 0000000..4d624de
Binary files /dev/null and b/doc/it/images/button-reject-jobs.gif differ
diff --git a/doc/it/images/button-release-job.gif b/doc/it/images/button-release-job.gif
new file mode 100644 (file)
index 0000000..eba16c7
Binary files /dev/null and b/doc/it/images/button-release-job.gif differ
diff --git a/doc/it/images/button-restart-job.gif b/doc/it/images/button-restart-job.gif
new file mode 100644 (file)
index 0000000..f096697
Binary files /dev/null and b/doc/it/images/button-restart-job.gif differ
diff --git a/doc/it/images/button-save-changes.gif b/doc/it/images/button-save-changes.gif
new file mode 100644 (file)
index 0000000..8253933
Binary files /dev/null and b/doc/it/images/button-save-changes.gif differ
diff --git a/doc/it/images/button-search.gif b/doc/it/images/button-search.gif
new file mode 100644 (file)
index 0000000..2e71d39
Binary files /dev/null and b/doc/it/images/button-search.gif differ
diff --git a/doc/it/images/button-set-allowed-users.gif b/doc/it/images/button-set-allowed-users.gif
new file mode 100644 (file)
index 0000000..2a436c0
Binary files /dev/null and b/doc/it/images/button-set-allowed-users.gif differ
diff --git a/doc/it/images/button-set-as-default.gif b/doc/it/images/button-set-as-default.gif
new file mode 100644 (file)
index 0000000..96365a1
Binary files /dev/null and b/doc/it/images/button-set-as-default.gif differ
diff --git a/doc/it/images/button-set-printer-options.gif b/doc/it/images/button-set-printer-options.gif
new file mode 100644 (file)
index 0000000..b7246a6
Binary files /dev/null and b/doc/it/images/button-set-printer-options.gif differ
diff --git a/doc/it/images/button-show-active.gif b/doc/it/images/button-show-active.gif
new file mode 100644 (file)
index 0000000..27f1b1b
Binary files /dev/null and b/doc/it/images/button-show-active.gif differ
diff --git a/doc/it/images/button-show-all.gif b/doc/it/images/button-show-all.gif
new file mode 100644 (file)
index 0000000..a3062db
Binary files /dev/null and b/doc/it/images/button-show-all.gif differ
diff --git a/doc/it/images/button-show-completed.gif b/doc/it/images/button-show-completed.gif
new file mode 100644 (file)
index 0000000..19c8b75
Binary files /dev/null and b/doc/it/images/button-show-completed.gif differ
diff --git a/doc/it/images/button-show-next.gif b/doc/it/images/button-show-next.gif
new file mode 100644 (file)
index 0000000..0acf764
Binary files /dev/null and b/doc/it/images/button-show-next.gif differ
diff --git a/doc/it/images/button-show-previous.gif b/doc/it/images/button-show-previous.gif
new file mode 100644 (file)
index 0000000..c07ccec
Binary files /dev/null and b/doc/it/images/button-show-previous.gif differ
diff --git a/doc/it/images/button-sort-ascending.gif b/doc/it/images/button-sort-ascending.gif
new file mode 100644 (file)
index 0000000..5999f57
Binary files /dev/null and b/doc/it/images/button-sort-ascending.gif differ
diff --git a/doc/it/images/button-sort-descending.gif b/doc/it/images/button-sort-descending.gif
new file mode 100644 (file)
index 0000000..87379e1
Binary files /dev/null and b/doc/it/images/button-sort-descending.gif differ
diff --git a/doc/it/images/button-start-class.gif b/doc/it/images/button-start-class.gif
new file mode 100644 (file)
index 0000000..1c6d28a
Binary files /dev/null and b/doc/it/images/button-start-class.gif differ
diff --git a/doc/it/images/button-start-printer.gif b/doc/it/images/button-start-printer.gif
new file mode 100644 (file)
index 0000000..8e48a07
Binary files /dev/null and b/doc/it/images/button-start-printer.gif differ
diff --git a/doc/it/images/button-stop-class.gif b/doc/it/images/button-stop-class.gif
new file mode 100644 (file)
index 0000000..94577a1
Binary files /dev/null and b/doc/it/images/button-stop-class.gif differ
diff --git a/doc/it/images/button-stop-printer.gif b/doc/it/images/button-stop-printer.gif
new file mode 100644 (file)
index 0000000..ae1d088
Binary files /dev/null and b/doc/it/images/button-stop-printer.gif differ
diff --git a/doc/it/images/button-unpublish-printer.gif b/doc/it/images/button-unpublish-printer.gif
new file mode 100644 (file)
index 0000000..797f227
Binary files /dev/null and b/doc/it/images/button-unpublish-printer.gif differ
diff --git a/doc/it/images/button-use-default-config.gif b/doc/it/images/button-use-default-config.gif
new file mode 100644 (file)
index 0000000..fd86222
Binary files /dev/null and b/doc/it/images/button-use-default-config.gif differ
diff --git a/doc/it/images/button-view-access-log.gif b/doc/it/images/button-view-access-log.gif
new file mode 100644 (file)
index 0000000..1d67c85
Binary files /dev/null and b/doc/it/images/button-view-access-log.gif differ
diff --git a/doc/it/images/button-view-error-log.gif b/doc/it/images/button-view-error-log.gif
new file mode 100644 (file)
index 0000000..edcc05b
Binary files /dev/null and b/doc/it/images/button-view-error-log.gif differ
diff --git a/doc/it/images/button-view-page-log.gif b/doc/it/images/button-view-page-log.gif
new file mode 100644 (file)
index 0000000..d48d772
Binary files /dev/null and b/doc/it/images/button-view-page-log.gif differ
diff --git a/doc/it/images/button-view-printable-version.gif b/doc/it/images/button-view-printable-version.gif
new file mode 100644 (file)
index 0000000..f01d634
Binary files /dev/null and b/doc/it/images/button-view-printable-version.gif differ
diff --git a/doc/it/index.html.in b/doc/it/index.html.in
new file mode 100644 (file)
index 0000000..a501ee4
--- /dev/null
@@ -0,0 +1,138 @@
+<!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>Home - 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;Principale&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;Amministrazione&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;Classi&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;Documentazione/Guida&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;Operazioni&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;Stampanti&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">Benvenuto!</H2>
+
+<P>Queste pagine web ti consentono di controllare le stampanti e le operazioni di stampa nonch&eacute; eseguire operazioni di amministrazione del sistema. Fai clic su ognuna delle schede in alto o sui pulsanti seguenti per effettuare un'operazione.</P>
+
+<P>
+<A HREF="/help/"><IMG SRC="/images/button-help.gif" CLASS="button" ALT="Guida"></A>
+<A HREF="/admin?OP=add-class"><IMG SRC="/images/button-add-class.gif" CLASS="button" ALT="Aggiungi classe"></A>
+<A HREF="/admin?OP=add-printer"><IMG SRC="/images/button-add-printer.gif" CLASS="button" ALT="Aggiungi stampante"></A>
+<A HREF="/classes"><IMG SRC="/images/button-manage-classes.gif" CLASS="button" ALT="Gestione classi"></A>
+<A HREF="/jobs"><IMG SRC="/images/button-manage-jobs.gif" CLASS="button" ALT="Gestione operazioni"></A>
+<A HREF="/printers"><IMG SRC="/images/button-manage-printers.gif" CLASS="button" ALT="Gestione stampanti"></A>
+<A HREF="/admin"><IMG SRC="/images/button-manage-server.gif" CLASS="button" ALT="Gestione server"></A>
+</P>
+
+<P><I>Se ti viene richiesto un nome utente o una password, inserisci il nome utente
+e la password di accesso o il nome utente e la password dell'utente "root".</I></P>
+
+<H2 CLASS="title">Informazioni su CUPS</H2>
+
+<P>
+<IMG SRC="/images/happy.gif" ALIGN="LEFT" WIDTH="196" HEIGHT="144"
+STYLE="padding-right: 10px;" ALT="Computer felice e stampante">
+
+<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 fornisce un sottosistema di stampa portabile per
+i sistemi operativi basati su UNIX<SUP>&reg;</SUP>. Sviluppato e
+gestito da <A HREF="http://www.easysw.com">Easy Software
+Products</a> per promuovere una soluzione di stampa standard. CUPS &egrave; il
+sistema di stampa standard utilizzato su MacOS<SUP>&reg;</SUP> X e sulla
+maggior parte delle distribuzioni Linux<SUP>&reg;</SUP>.</P>
+
+<P>CUPS utilizza l'<A HREF="http://www.pwg.org/ipp/"
+TARGET="_blank">Internet Printing Protocol ("IPP")</A> come base per la
+gestione delle operazioni di stampa e delle code e aggiunge la navigazione delle 
+stampanti di rete e opzioni di stampa basate su PostScript Printer
+Description ("PPD") per supportare tutte le necessit&agrave; di stampa.<BR CLEAR="ALL"></P>
+
+<H2 CLASS="title">Driver di stampa e assistenza</H2>
+
+<P>Visita il sito ufficiale di CUPS per i driver di stampa e assistenza:</P>
+
+<PRE>
+    <A HREF="http://www.cups.org/" TARGET="_blank">www.cups.org</A>
+</PRE>
+
+<P>Supporto commerciale e una versione migliorata di CUPS chiamata <A
+HREF="http://www.easysw.com/printpro/">ESP Print Pro</A> 
+disponibili presso:</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>Common UNIX Printing System, CUPS, e il logo CUPS sono
+marchi registrati da <A HREF="http://www.easysw.com">Easy Software
+Products</A>. CUPS &egrave; un copyright 1997-2006 di Easy Software Products,
+Tutti i diritti sono riservati.</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>
index 7126c5e0eee195e3dcdf03d31e7dbd407fbc86df..69dce4f5463799007a9b397fedf4388c1359675f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: pstops.c 6025 2006-10-11 14:59:20Z mike $"
+ * "$Id: pstops.c 6094 2006-11-14 16:54:50Z mike $"
  *
  *   PostScript filter for the Common UNIX Printing System (CUPS).
  *
@@ -949,7 +949,7 @@ copy_dsc(cups_file_t  *fp,          /* I - File to read from */
        }
        else
        {
-         printf("%%%%Page: %s %d\n", pageinfo->label, number);
+          printf("%%%%Page: %s %d\n", pageinfo->label, number);
          printf("%%%%PageBoundingBox: %d %d %d %d\n",
                 pageinfo->bounding_box[0], pageinfo->bounding_box[1],
                 pageinfo->bounding_box[2], pageinfo->bounding_box[3]);
@@ -1263,6 +1263,44 @@ copy_page(cups_file_t  *fp,              /* I - File to read from */
         memcpy(bounding_box, doc->bounding_box,
               sizeof(bounding_box));
       }
+      else if (doc->number_up == 1 && !doc->fitplot)
+      {
+        int    temp_bbox[4];           /* Temporary bounding box */
+
+
+        switch (Orientation)
+       {
+         case 0 : /* Portrait */
+              break;
+
+         case 1 : /* Landscape */
+             temp_bbox[0] = PageWidth - bounding_box[3];
+             temp_bbox[1] = bounding_box[0];
+             temp_bbox[2] = PageWidth - bounding_box[1];
+             temp_bbox[3] = bounding_box[2];
+
+             memcpy(bounding_box, temp_bbox, sizeof(bounding_box));
+              break;
+
+         case 2 : /* Reverse Portrait */
+             temp_bbox[0] = PageWidth - bounding_box[0];
+             temp_bbox[1] = PageLength - bounding_box[1];
+             temp_bbox[2] = PageWidth - bounding_box[2];
+             temp_bbox[3] = PageLength - bounding_box[3];
+
+             memcpy(bounding_box, temp_bbox, sizeof(bounding_box));
+              break;
+
+         case 3 : /* Reverse Landscape */
+             temp_bbox[0] = bounding_box[1];
+             temp_bbox[1] = PageLength - bounding_box[2];
+             temp_bbox[2] = bounding_box[3];
+             temp_bbox[3] = PageLength - bounding_box[0];
+
+             memcpy(bounding_box, temp_bbox, sizeof(bounding_box));
+              break;
+       }
+      }
     }
 #if 0
     else if (!strncmp(line, "%%PageCustomColors:", 19) ||
@@ -3068,5 +3106,5 @@ write_labels(pstops_doc_t *doc,           /* I - Document information */
 
 
 /*
- * End of "$Id: pstops.c 6025 2006-10-11 14:59:20Z mike $".
+ * End of "$Id: pstops.c 6094 2006-11-14 16:54:50Z mike $".
  */
diff --git a/locale/cups_it.po b/locale/cups_it.po
new file mode 100644 (file)
index 0000000..4ea69f0
--- /dev/null
@@ -0,0 +1,2819 @@
+# translation of cups_it.po to Italian
+#
+# "$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
+#
+# Vincenzo Reale <smart2128@baslug.org>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: cups_it\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-11-16 00:34+0100\n"
+"Last-Translator: Vincenzo Reale <smart2128@baslug.org>\n"
+"Language-Team: Italian <kde-i18n-it@mail.kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+msgid "Options Installed"
+msgstr "Opzioni installate"
+
+msgid "Class"
+msgstr "Classe"
+
+msgid "Printer"
+msgstr "Stampante"
+
+msgid "Extra"
+msgstr "Extra"
+
+msgid "General"
+msgstr "Generale"
+
+msgid "Media Size"
+msgstr "Dimensione supporto"
+
+msgid "Media Type"
+msgstr "Tipo supporto"
+
+msgid "Media Source"
+msgstr "Sorgente supporto"
+
+msgid "Output Mode"
+msgstr "ModalitĂ  di uscita"
+
+msgid "Resolution"
+msgstr "Risoluzione"
+
+msgid "Variable"
+msgstr "Variabile"
+
+msgid "Yes"
+msgstr "Sì"
+
+msgid "No"
+msgstr "No"
+
+msgid "Auto"
+msgstr "Auto"
+
+msgid "Enter your username and password or the root username and password to access this page."
+msgstr "Inserisci il tuo nome utente e la tua password o il nome utente e la password di root per accedere a questa pagina."
+
+msgid "You must use a https: URL to access this page."
+msgstr "Devi usare un URL https: per accedere a questa pagina."
+
+#, c-format
+msgid "Bad request version number %d.%d!"
+msgstr "Richiesta errata del numero di versione %d.%d!"
+
+msgid "No attributes in request!"
+msgstr "Nessun attributo nella richiesta!"
+
+#, c-format
+msgid "Attribute groups are out of order (%x < %x)!"
+msgstr "I gruppi di attributi non sono ordinati (%x < %x)!"
+
+msgid "Missing required attributes!"
+msgstr "Attributi richiesti mancanti!"
+
+#, c-format
+msgid "%s not supported!"
+msgstr "%s non supportato!"
+
+msgid "The printer or class was not found."
+msgstr "La stampante o la classe non Ă¨ stata trovata."
+
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+msgstr "printer-uri deve essere nella forma \"ipp://NOMEHOST/classes/NOMECLASSE\"."
+
+#, c-format
+msgid "The printer-uri \"%s\" contains invalid characters."
+msgstr "printer-uri \"%s\" contiene caratteri non validi."
+
+#, c-format
+msgid "A printer named \"%s\" already exists!"
+msgstr "Una stampante con nome \"%s\" giĂ  esiste!"
+
+#, c-format
+msgid "Attempt to set %s printer-state to bad value %d!"
+msgstr "Tentativo di impostare printer-state %s a un valore errato %d!"
+
+#, c-format
+msgid "add_class: Unknown printer-op-policy \"%s\"."
+msgstr "add_class: printer-op-policy \"%s\" sconosciuto."
+
+#, c-format
+msgid "add_class: Unknown printer-error-policy \"%s\"."
+msgstr "add_class: printer-error-policy \"%s\" sconosciuto."
+
+msgid "Unable to allocate memory for file types!"
+msgstr "Impossibile allocare memoria per questo i tipi di file!"
+
+#, c-format
+msgid "Character set \"%s\" not supported!"
+msgstr "Set di caratteri \"%s\" non supportato!"
+
+#, c-format
+msgid "Language \"%s\" not supported!"
+msgstr "Lingua \"%s\" non supportata!"
+
+#, c-format
+msgid "The notify-user-data value is too large (%d > 63 octets)!"
+msgstr "Il valore notify-user-data Ă¨ troppo grande (%d > 63 ottetti)!"
+
+msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
+msgstr "L'attributo notify-lease-duration non puĂ² essere usato con le sottoscrizioni delle operazioni."
+
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+msgstr "printer-uri deve essere nella forma \"ipp://NOMEHOST/printers/NOMESTAMPANTE\"."
+
+#, c-format
+msgid "A class named \"%s\" already exists!"
+msgstr "Una classe con nome \"%s\" giĂ  esiste!"
+
+#, c-format
+msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
+msgstr "Gli URI del file di dispositivo sono stati disabilitati! Per abilitarli, vedere la direttiva FileDevice in \"%s/cupsd.conf\"."
+
+#, c-format
+msgid "Bad device-uri \"%s\"!"
+msgstr "device-uri \"%s\" errato!"
+
+#, c-format
+msgid "Bad port-monitor \"%s\"!"
+msgstr "port-monitor \"%s\" errato!"
+
+#, c-format
+msgid "Bad printer-state value %d!"
+msgstr "Valore printer-state %d errato!"
+
+#, c-format
+msgid "Unknown printer-op-policy \"%s\"."
+msgstr "printer-op-policy \"%s\" sconosciuto."
+
+#, c-format
+msgid "Unknown printer-error-policy \"%s\"."
+msgstr "printer-error-policy \"%s\" sconosciuto."
+
+#, c-format
+msgid "Unable to copy interface script - %s!"
+msgstr "Impossibile copiare lo script di interfaccia - %s!"
+
+#, c-format
+msgid "Unable to copy PPD file - %s!"
+msgstr "Impossibile copiare il file PPD - %s!"
+
+msgid "Unable to copy PPD file!"
+msgstr "Impossibile copiare il file PPD!"
+
+msgid "Got a printer-uri attribute but no job-id!"
+msgstr "Ottenuto un attributo printer-uri, ma nessun job-id!"
+
+#, c-format
+msgid "Bad job-uri attribute \"%s\"!"
+msgstr "Attributo job-uri \"%s\" errato!"
+
+#, c-format
+msgid "Job #%d doesn't exist!"
+msgstr "L'operazione #%d non esiste!"
+
+#, c-format
+msgid "Job #%d is not held for authentication!"
+msgstr "L'operazione #%d non Ă¨ bloccata per l'autenticazione!"
+
+#, c-format
+msgid "You are not authorized to authenticate job #%d owned by \"%s\"!"
+msgstr "Non sei autorizzato ad autenticare l'operazione #%d di proprietĂ  di \"%s\"!"
+
+msgid "The printer-uri attribute is required!"
+msgstr "L'attributo printer-uri Ă¨ richiesto!"
+
+msgid "Missing requesting-user-name attribute!"
+msgstr "Attributo requesting-user-name mancante!"
+
+#, c-format
+msgid "The printer-uri \"%s\" is not valid."
+msgstr "printer-uri \"%s\" non valido."
+
+#, c-format
+msgid "No active jobs on %s!"
+msgstr "Nessuna operazione attiva su %s!"
+
+#, c-format
+msgid "You are not authorized to delete job #%d owned by \"%s\"!"
+msgstr "Non sei autorizzato ad eliminare l'operazione #%d di proprietĂ  di \"%s\"!"
+
+#, c-format
+msgid "Job #%d is already %s - can't cancel."
+msgstr "L'operazione #%d Ă¨ giĂ  %s - impossibile annullare."
+
+msgid "The printer or class is not shared!"
+msgstr "La stampante o la classe non Ă¨ condivisa!"
+
+#, c-format
+msgid "Destination \"%s\" is not accepting jobs."
+msgstr "La destinazione \"%s\" non accetta operazioni."
+
+#, c-format
+msgid "Bad copies value %d."
+msgstr "Numero di copie %d errato."
+
+#, c-format
+msgid "Bad page-ranges values %d-%d."
+msgstr "Valori page-ranges %d-%d errati."
+
+msgid "Too many active jobs."
+msgstr "Troppe operazioni attive."
+
+msgid "Quota limit reached."
+msgstr "Limite di quota raggiunto."
+
+#, c-format
+msgid "Unable to add job for destination \"%s\"!"
+msgstr "Impossibile aggiungere operazioni per la destinazione \"%s\"!"
+
+msgid "No subscription attributes in request!"
+msgstr "Nessun attributo di sottoscrizione nella richiesta!"
+
+msgid "notify-events not specified!"
+msgstr "notify-events non specificato!"
+
+#, c-format
+msgid "Job %d not found!"
+msgstr "Operazione %d non trovata!"
+
+msgid "No default printer"
+msgstr "Nessuna stampante predefinita"
+
+msgid "cups-deviced failed to execute."
+msgstr "esecuzione di cups-deviced fallita."
+
+msgid "cups-driverd failed to execute."
+msgstr "esecuzione di cups-driverd fallita."
+
+msgid "No destinations added."
+msgstr "Nessuna destinazione aggiunta."
+
+#, c-format
+msgid "notify-subscription-id %d no good!"
+msgstr "notify-subscription-id %d non corretto!"
+
+#, c-format
+msgid "Job #%s does not exist!"
+msgstr "L'operazione #%s non esiste!"
+
+#, c-format
+msgid "Job #%d does not exist!"
+msgstr "L'operazione #%d non esiste!"
+
+msgid "No subscriptions found."
+msgstr "Nessuna sottoscrizione trovata."
+
+#, c-format
+msgid "Not authorized to hold job #%d owned by \"%s\"!"
+msgstr "Non autorizzato a bloccare l'operazione #%d di proprietĂ  di \"%s\"!"
+
+#, c-format
+msgid "Job #%d is finished and cannot be altered!"
+msgstr "L'operazione #%d Ă¨ terminata e non puĂ² essere modificata!"
+
+#, c-format
+msgid "You are not authorized to move job #%d owned by \"%s\"!"
+msgstr "Non sei autorizzato a spostare l'operazione #%d di proprietĂ  di \"%s\"!"
+
+msgid "job-printer-uri attribute missing!"
+msgstr "attributo job-printer-uri mancante!"
+
+#, c-format
+msgid "Unsupported compression \"%s\"!"
+msgstr "Compressione \"%s\" non supportata!"
+
+msgid "No file!?!"
+msgstr "Nessun file!?!"
+
+#, c-format
+msgid "Could not scan type \"%s\"!"
+msgstr "Impossibile analizzare il tipo \"%s\"!"
+
+#, c-format
+msgid "Unsupported format '%s/%s'!"
+msgstr "Formato '%s/%s' non supportato!"
+
+msgid "Printer not shared!"
+msgstr "Stampante non condivisa!"
+
+#, c-format
+msgid "Too many jobs - %d jobs, max jobs is %d."
+msgstr "Troppe operazioni - %d operazioni, il massimo Ă¨ %d."
+
+#, c-format
+msgid "Job #%d is not held!"
+msgstr "L'operazione #%d non Ă¨ bloccata!"
+
+#, c-format
+msgid "You are not authorized to release job id %d owned by \"%s\"!"
+msgstr "Non sei autorizzata a rilasciare l'operazione con id %d di proprietĂ  di \"%s\"!"
+
+#, c-format
+msgid "Job #%d is not complete!"
+msgstr "L'operazione %d non Ă¨ completa!"
+
+#, c-format
+msgid "Job #%d cannot be restarted - no files!"
+msgstr "L'operazione #%d non puĂ² essere riavviata - nessun file!"
+
+#, c-format
+msgid "You are not authorized to restart job id %d owned by \"%s\"!"
+msgstr "Non sei autorizzato a riavviare l'operazione con id %d di proprietĂ  di \"%s\"!"
+
+#, c-format
+msgid "You are not authorized to send document for job #%d owned by \"%s\"!"
+msgstr "Non sei autorizzato a inviare il documento per l'operazione #%d di proprietĂ  di \"%s\"!"
+
+#, c-format
+msgid "Bad document-format \"%s\"!"
+msgstr "document-format \"%s\" errato!"
+
+#, c-format
+msgid "You are not authorized to alter job id %d owned by \"%s\"!"
+msgstr "Non sei autorizzato a modificare l'operazione con id %d di proprietĂ  di \"%s\"!"
+
+#, c-format
+msgid "%s cannot be changed."
+msgstr "%s non puĂ² essere cambiato."
+
+msgid "Bad job-priority value!"
+msgstr "Valore job-priority errato!"
+
+msgid "Job is completed and cannot be changed."
+msgstr "L'operazione Ă¨ completata e non puĂ² essere cambiata."
+
+msgid "Bad job-state value!"
+msgstr "Valore job-state errato!"
+
+msgid "Job state cannot be changed."
+msgstr "Lo stato dell'operazione non puĂ² essere cambiato."
+
+#, c-format
+msgid "Unsupported compression attribute %s!"
+msgstr "Attributo di compressione %s non supportato!"
+
+#, c-format
+msgid "Unsupported format \"%s\"!"
+msgstr "Formato \"%s\" non supportato!"
+
+#, c-format
+msgid "%s is not implemented by the CUPS version of lpc.\n"
+msgstr "%s non Ă¨ implementato dalla versione CUPS di lpc.\n"
+
+msgid ""
+"Commands may be abbreviated.  Commands are:\n"
+"\n"
+"exit    help    quit    status  ?\n"
+msgstr ""
+"I comandi possono essere abbreviati.  I comandi sono:\n"
+"\n"
+"exit    help    quit    status  ?\n"
+
+msgid "help\t\tget help on commands\n"
+msgstr "help\t\tguida dei comandi\n"
+
+msgid "status\t\tshow status of daemon and queue\n"
+msgstr "status\t\tmostra lo stato del demone e della coda\n"
+
+msgid "?Invalid help command unknown\n"
+msgstr "Comando sconosciuto - guida non disponibile\n"
+
+#, c-format
+msgid "\tprinter is on device '%s' speed -1\n"
+msgstr "\tla stampante Ă¨ sul dispositivo '%s' velocitĂ  -1\n"
+
+msgid "\tqueuing is enabled\n"
+msgstr "\tla coda Ă¨ abilitata\n"
+
+msgid "\tqueuing is disabled\n"
+msgstr "\tla coda Ă¨ disabilitata\n"
+
+msgid "\tprinting is enabled\n"
+msgstr "\tla stampa Ă¨ abilitata\n"
+
+msgid "\tprinting is disabled\n"
+msgstr "\tla stampa Ă¨ disabilitata\n"
+
+msgid "\tno entries\n"
+msgstr "\tnessuna voce\n"
+
+#, c-format
+msgid "\t%d entries\n"
+msgstr "\t%d voci\n"
+
+msgid "\tdaemon present\n"
+msgstr "\tdemone presente\n"
+
+msgid "lpq: Unable to contact server!\n"
+msgstr "lpq: Impossibile contattare il server!\n"
+
+#, c-format
+msgid "%s: Sorry, no encryption support compiled in!\n"
+msgstr "%s: Spiacente, nessun supporto di cifratura compilato!\n"
+
+#, c-format
+msgid "lpq: Unknown destination \"%s/%s\"!\n"
+msgstr "lpq: Destinazione \"%s/%s\" sconosciuta!\n"
+
+#, c-format
+msgid "lpq: Unknown destination \"%s\"!\n"
+msgstr "lpq: Destinazione \"%s\" sconosciuta!\n"
+
+#, c-format
+msgid "lp: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lp: errore - i nomi della variabile d'ambiente %s non esistono nella destinazione \"%s\"!\n"
+
+msgid "lpq: error - no default destination available.\n"
+msgstr "lpq: errore - nessuna destinazione predefinita disponibile.\n"
+
+#, c-format
+msgid "lpq: get-jobs failed: %s\n"
+msgstr "lpq: get-jobs fallito: %s\n"
+
+msgid "Rank   Owner      Pri  Job        Files                       Total Size\n"
+msgstr "Posiz.   Proprietario  Stamp.  Operaz.   File         Dim. totali\n"
+
+msgid "Rank    Owner   Job     File(s)                         Total Size\n"
+msgstr "Posiz.   Proprietario    Operaz.   File             Dim. totali\n"
+
+#, c-format
+msgid "%s: %-33.33s [job %d localhost]\n"
+msgstr "%s: %-33.33s [operazione %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 "nessuna voce\n"
+
+#, c-format
+msgid "lpq: get-printer-attributes failed: %s\n"
+msgstr "lpq: get-printer-attributes fallito: %s\n"
+
+#, c-format
+msgid "%s is ready\n"
+msgstr "%s Ă¨ pronta\n"
+
+#, c-format
+msgid "%s is ready and printing\n"
+msgstr "%s Ă¨ pronta e stampa\n"
+
+#, c-format
+msgid "%s is not ready\n"
+msgstr "%s non Ă¨ pronta\n"
+
+msgid "Usage: lpq [-P dest] [-l] [+interval]\n"
+msgstr "Uso: lpq [-P dest] [-l] [+intervallo]\n"
+
+#, c-format
+msgid "lpr: error - expected value after -%c option!\n"
+msgstr "lpr: errore - valore atteso dopo l'opzione -%c!\n"
+
+#, c-format
+msgid "lpr: warning - '%c' format modifier not supported - output may not be correct!\n"
+msgstr "lpr: attenzione - il modificatore di formato '%c' non Ă¨ supportato - il risultato potrebbe non essere corretto!\n"
+
+msgid "lpr: error - expected option=value after -o option!\n"
+msgstr "lpr: errore - attesa opzione=valore dopo l'opzione -o !\n"
+
+msgid "lpr: warning - email notification is not currently supported!\n"
+msgstr "lpr: attenzione - le notifiche via email non sono al momento supportate!\n"
+
+msgid "lpr: error - expected destination after -P option!\n"
+msgstr "lpr: errore - destinazione attesa dopo l'opzione -P!\n"
+
+msgid "lpr: error - expected copy count after -# option!\n"
+msgstr "lpr: errore - numero di copie atteso dopo l'opzione -#!\n"
+
+#, c-format
+msgid "lpr: error - expected name after -%c option!\n"
+msgstr "lpr: errore - nome atteso dopo l'opzione -%c!\n"
+
+msgid "lpr: error - expected username after -U option!\n"
+msgstr "lpr: errore - nome utente atteso dopo l'opzione -U!\n"
+
+#, c-format
+msgid "lpr: error - unknown option '%c'!\n"
+msgstr "lpr: errore - opzione'%c' sconosciuta!\n"
+
+#, c-format
+msgid "lpr: error - unable to access \"%s\" - %s\n"
+msgstr "lpr: errore - impossibile accedere a \"%s\" - %s\n"
+
+#, c-format
+msgid "lpr: error - too many files - \"%s\"\n"
+msgstr "lpr: errore - troppi file - \"%s\"\n"
+
+#, c-format
+msgid "lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lpr: errore - i nomi della variabile d'ambiente %s non esistono nella destinazione \"%s\"!\n"
+
+msgid "lpr: error - no default destination available.\n"
+msgstr "lpr: errore - nessuna destinazione predefinita disponibile.\n"
+
+msgid "lpr: error - scheduler not responding!\n"
+msgstr "lpr: errore - il pianificatore di operazioni non risponde!\n"
+
+#, c-format
+msgid "lpr: error - unable to create temporary file \"%s\" - %s\n"
+msgstr "lpr: errore - impossible creare il file temporaneo \"%s\" - %s\n"
+
+#, c-format
+msgid "lpr: error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "lpr: errore - impossible scrivere il file temporaneo \"%s\" - %s\n"
+
+msgid "lpr: error - stdin is empty, so no job has been sent.\n"
+msgstr "lpr: errore - stdin Ă¨ vuoto, nessuna operazione puĂ² essere inviata.\n"
+
+#, c-format
+msgid "lpr: error - unable to print file: %s\n"
+msgstr "lpr: errore - impossibile stampare il file: %s\n"
+
+msgid "lprm: Unable to contact server!\n"
+msgstr "lprm: Impossibile contattare il server!\n"
+
+#, c-format
+msgid "lprm: Unknown destination \"%s\"!\n"
+msgstr "lprm: Destinazione \"%s\" sconosciuta!\n"
+
+#, c-format
+msgid "lprm: Unknown option '%c'!\n"
+msgstr "lprm: Opzione '%c' sconosciuta!\n"
+
+msgid "lprm: Job or printer not found!\n"
+msgstr "lprm: Operazione o stampante non trovata!\n"
+
+msgid "lprm: Not authorized to lprm job(s)!\n"
+msgstr "lprm: Non autorizzato a operazioni lprm!\n"
+
+#, c-format
+msgid "lprm: You don't own job ID %d!\n"
+msgstr "lprm: Non sei il proprietario dell'operazione con ID %d!\n"
+
+msgid "lprm: Unable to lprm job(s)!\n"
+msgstr "lprm: Impossibile eseguire operazioni lprm!\n"
+
+msgid "lprm: Unable to cancel job(s)!\n"
+msgstr "lprm: Impossibile annullare operazioni!\n"
+
+#, c-format
+msgid "%s: Don't know what to do!\n"
+msgstr "%s: Non so cosa fare!\n"
+
+#, c-format
+msgid "%s: Expected server name after -h!\n"
+msgstr "%s: Nome server atteso dopo -h!\n"
+
+#, c-format
+msgid "%s: Expected reason text after -r!\n"
+msgstr "%s: Atteso testo di motivazione dopo -r!\n"
+
+#, c-format
+msgid "%s: Unknown option '%c'!\n"
+msgstr "%s: Opzione '%c' sconosciuta!\n"
+
+#, c-format
+msgid "%s: Unable to connect to server: %s\n"
+msgstr "%s: Impossibile connettersi al server: %s\n"
+
+#, c-format
+msgid "%s: Operation failed: %s\n"
+msgstr "%s: Operazione fallita: %s\n"
+
+msgid "cancel: Error - expected hostname after '-h' option!\n"
+msgstr "cancel: Errore - nome host atteso dopo l'opzione '-h'!\n"
+
+msgid "cancel: Error - expected username after '-u' option!\n"
+msgstr "cancel: Errore - nome utente atteso dopo l'opzione '-u'!\n"
+
+#, c-format
+msgid "cancel: Unknown option '%c'!\n"
+msgstr "cancel: Opzione '%c' sconosciuta!\n"
+
+#, c-format
+msgid "cancel: Unknown destination \"%s\"!\n"
+msgstr "cancel: Destinazione \"%s\" sconosciuta!\n"
+
+msgid "cancel: Unable to contact server!\n"
+msgstr "cancel: Impossibile contattare il server!\n"
+
+#, c-format
+msgid "cancel: %s failed: %s\n"
+msgstr "cancel: %s fallito: %s\n"
+
+#, c-format
+msgid "cupsaddsmb: Missing value on line %d!\n"
+msgstr "cupsaddsmb: Valore mancante alla riga %d!\n"
+
+#, c-format
+msgid "cupsaddsmb: Missing double quote on line %d!\n"
+msgstr "cupsaddsmb: Doppi apici mancanti alla riga %d!\n"
+
+#, c-format
+msgid "cupsaddsmb: Bad option + choice on line %d!\n"
+msgstr "cupsaddsmb: Opzione + scelta errata alla riga %d!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to connect to server \"%s\" for %s - %s\n"
+msgstr "cupsaddsmb: Impossibile connettersi al server \"%s\" per %s - %s\n"
+
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - skipping!\n"
+msgstr "cupsaddsmb: Nessun file PPD per la stampante \"%s\" - omesso!\n"
+
+#, c-format
+msgid "cupsaddsmb: get-printer-attributes failed for \"%s\": %s\n"
+msgstr "cupsaddsmb: get-printer-attributes fallito per \"%s\": %s\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to convert PPD file for %s - %s\n"
+msgstr "cupsaddsmb: Impossibile convertire il file PPD per %s - %s\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy Windows 2000 printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Impossibile copiare i file del driver di stampa di Windows 2000 (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy CUPS printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Impossibile copiare i file del driver di stampa di CUPS (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to install Windows 2000 printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Impossibile installare i file del driver di stampa di Windows 2000 (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy Windows 9x printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Impossibile copiare i file del driver di stampa di Windows 9x (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to install Windows 9x printer driver files (%d)!\n"
+msgstr "cupsaddsmb: Impossibile installare i file del driver di stampa di Windows 9x (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to set Windows printer driver (%d)!\n"
+msgstr "cupsaddsmb: Impossibile configurare i file del driver di stampa di Windows (%d)!\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 ""
+"Uso: cupsaddsmb [opzioni] stampante1 ... stampanteN\n"
+"       cupsaddsmb [opzioni] -a\n"
+"\n"
+"Opzioni:\n"
+"  -H samba-server  Usa il server SAMBA specificato\n"
+"  -U samba-user    Autenticazione usando l'utente SAMBA specificato\n"
+"  -a               Esporta tutte le stampanti\n"
+"  -h cups-server   Usa il server CUPS specificato\n"
+"  -v               Prolisso (mostra i comandi)\n"
+
+msgid "cupstestppd: The -q option is incompatible with the -v option.\n"
+msgstr "cupstestppd: L'opzione -q Ă¨ incompatibile con l'opzione -v.\n"
+
+msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
+msgstr "cupstestppd: L'opzione -v Ă¨ incompatibile con l'opzione -q.\n"
+
+#, c-format
+msgid ""
+" FAIL\n"
+"      **FAIL**  Unable to open PPD file - %s\n"
+msgstr ""
+" FAIL\n"
+"      **FAIL**  Impossibile aprire il file PPD - %s\n"
+
+#, c-format
+msgid ""
+" FAIL\n"
+"      **FAIL**  Unable to open PPD file - %s on line %d.\n"
+msgstr ""
+" FAIL\n"
+"      **FAIL**  Impossibile aprire il file PPD - %s alla riga %d.\n"
+
+msgid "                REF: Page 42, section 5.2.\n"
+msgstr "                RIF: Pagina 42, sezione 5.2.\n"
+
+msgid "                REF: Page 20, section 3.4.\n"
+msgstr "                RIF: Pagina 20, sezione 3.4.\n"
+
+msgid "                REF: Pages 45-46, section 5.2.\n"
+msgstr "                RIF: Pagine 45-46, sezione 5.2.\n"
+
+msgid "                REF: Pages 42-45, section 5.2.\n"
+msgstr "                RIF: Pagine 42-45, sezione 5.2.\n"
+
+msgid "                REF: Pages 48-49, section 5.2.\n"
+msgstr "                RIF: Pagine 48-49, sezione 5.2.\n"
+
+msgid "                REF: Pages 52-54, section 5.2.\n"
+msgstr "                RIF: Pagine 52-54, sezione 5.2.\n"
+
+msgid "                REF: Page 15, section 3.2.\n"
+msgstr "                RIF: Pagina 15, sezione 3.2.\n"
+
+msgid "                REF: Page 15, section 3.1.\n"
+msgstr "                RIF: Pagina 15, sezione 3.1.\n"
+
+msgid "                REF: Pages 16-17, section 3.2.\n"
+msgstr "                RIF: Pagine 16-17, sezione 3.2.\n"
+
+msgid "                REF: Page 19, section 3.3.\n"
+msgstr "                RIF: Pagina 19, sezione 3.3.\n"
+
+msgid "                REF: Page 27, section 3.5.\n"
+msgstr "                RIF: Pagina 27, sezione 3.5.\n"
+
+msgid ""
+"\n"
+"    DETAILED CONFORMANCE TEST RESULTS\n"
+msgstr ""
+"\n"
+"    RISULTATI DETTAGLIATI DEL TEST DI CONFORMITĂ€\n"
+
+#, c-format
+msgid "        WARN    %s has no corresponding options!\n"
+msgstr "        WARN    %s non ha opzioni corrispondenti!\n"
+
+msgid " FAIL\n"
+msgstr " FAIL\n"
+
+msgid ""
+"      **FAIL**  REQUIRED DefaultImageableArea\n"
+"                REF: Page 102, section 5.15.\n"
+msgstr ""
+"      **FAIL**  DefaultImageableArea RICHIESTO\n"
+"                RIF: Pagina 102, sezione 5.15.\n"
+
+#, c-format
+msgid ""
+"      **FAIL**  BAD DefaultImageableArea %s!\n"
+"                REF: Page 102, section 5.15.\n"
+msgstr ""
+"      **FAIL**  DefaultImageableArea %s ERRATO!\n"
+"                RIF: Pagina 102, sezione 5.15.\n"
+
+msgid "        PASS    DefaultImageableArea\n"
+msgstr "        PASS    DefaultImageableArea\n"
+
+msgid ""
+"      **FAIL**  REQUIRED DefaultPaperDimension\n"
+"                REF: Page 103, section 5.15.\n"
+msgstr ""
+"      **FAIL**  DefaultPaperDimension RICHIESTO\n"
+"                RIF: Pagina 103, sezione 5.15.\n"
+
+#, c-format
+msgid ""
+"      **FAIL**  BAD DefaultPaperDimension %s!\n"
+"                REF: Page 103, section 5.15.\n"
+msgstr ""
+"      **FAIL**  DefaultPaperDimension %s ERRATO!\n"
+"                RIF: Pagina 103, sezione 5.15.\n"
+
+msgid "        PASS    DefaultPaperDimension\n"
+msgstr "        PASS    DefaultPaperDimension\n"
+
+#, c-format
+msgid ""
+"      **FAIL**  BAD Default%s %s\n"
+"                REF: Page 40, section 4.5.\n"
+msgstr ""
+"      **FAIL**  Default%s %s ERRATO\n"
+"                RIF: Pagina 40, sezione 4.5.\n"
+
+#, c-format
+msgid "        PASS    Default%s\n"
+msgstr "        PASS    Default%s\n"
+
+#, c-format
+msgid ""
+"      **FAIL**  REQUIRED Default%s\n"
+"                REF: Page 40, section 4.5.\n"
+msgstr ""
+"      **FAIL**  Default%s RICHIESTO\n"
+"                RIF: Pagina 40, sezione 4.5.\n"
+
+msgid "        PASS    FileVersion\n"
+msgstr "        PASS    FileVersion\n"
+
+msgid ""
+"      **FAIL**  REQUIRED FileVersion\n"
+"                REF: Page 56, section 5.3.\n"
+msgstr ""
+"      **FAIL**  FileVersion RICHIESTO\n"
+"                RIF: Pagina 56, sezione 5.3.\n"
+
+msgid "        PASS    FormatVersion\n"
+msgstr "        PASS    FormatVersion\n"
+
+msgid ""
+"      **FAIL**  REQUIRED FormatVersion\n"
+"                REF: Page 56, section 5.3.\n"
+msgstr ""
+"      **FAIL**  FormatVersion RICHIESTO\n"
+"                RIF: Pagina 56, sezione 5.3.\n"
+
+msgid "        PASS    LanguageEncoding\n"
+msgstr "        PASS    LanguageEncoding\n"
+
+msgid ""
+"      **FAIL**  REQUIRED LanguageEncoding\n"
+"                REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+"      **FAIL**  LanguageEncoding RICHIESTO\n"
+"                RIF: Pagine 56-57, sezione 5.3.\n"
+
+msgid "        PASS    LanguageVersion\n"
+msgstr "        PASS    LanguageVersion\n"
+
+msgid ""
+"      **FAIL**  REQUIRED LanguageVersion\n"
+"                REF: Pages 57-58, section 5.3.\n"
+msgstr ""
+"      **FAIL**  LanguageVersion RICHIESTO\n"
+"                RIF: Pagine 57-58, sezione 5.3.\n"
+
+msgid ""
+"      **FAIL**  BAD Manufacturer (should be \"HP\")\n"
+"                REF: Page 211, table D.1.\n"
+msgstr ""
+"      **FAIL**  Manufacturer ERRATO (dovrebbe essere \"HP\")\n"
+"                RIF: Pagina 211, tabella D.1.\n"
+
+msgid "        PASS    Manufacturer\n"
+msgstr "        PASS    Manufacturer\n"
+
+msgid ""
+"      **FAIL**  REQUIRED Manufacturer\n"
+"                REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+"      **FAIL**  Manufacturer RICHIESTO\n"
+"                RIF: Pagine 58-59, sezione 5.3.\n"
+
+#, c-format
+msgid ""
+"      **FAIL**  BAD ModelName - \"%c\" not allowed in string.\n"
+"                REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+"      **FAIL**  ModelName ERRATO - \"%c\" non consentito nella stringa.\n"
+"                RIF: Pagine 59-60, sezione 5.3.\n"
+
+msgid "        PASS    ModelName\n"
+msgstr "        PASS    ModelName\n"
+
+msgid ""
+"      **FAIL**  REQUIRED ModelName\n"
+"                REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+"      **FAIL**  ModelName RICHIESTO\n"
+"                RIF: Pagine 59-60, sezione 5.3.\n"
+
+msgid "        PASS    NickName\n"
+msgstr "        PASS    NickName\n"
+
+msgid ""
+"      **FAIL**  REQUIRED NickName\n"
+"                REF: Page 60, section 5.3.\n"
+msgstr ""
+"      **FAIL**  NickName RICHIESTO\n"
+"                RIF: Pagina 60, sezione 5.3.\n"
+
+msgid "        PASS    PageSize\n"
+msgstr "        PASS    PageSize\n"
+
+msgid ""
+"      **FAIL**  REQUIRED PageSize\n"
+"                REF: Pages 99-100, section 5.14.\n"
+msgstr ""
+"      **FAIL**  PageSize RICHIESTO\n"
+"                RIF: Pagine 99-100, sezione 5.14.\n"
+
+msgid "        PASS    PageRegion\n"
+msgstr "        PASS    PageRegion\n"
+
+msgid ""
+"      **FAIL**  REQUIRED PageRegion\n"
+"                REF: Page 100, section 5.14.\n"
+msgstr ""
+"      **FAIL**  PageRegion RICHIESTO\n"
+"                RIF: Pagina 100, sezione 5.14.\n"
+
+msgid "        PASS    PCFileName\n"
+msgstr "        PASS    PCFileName\n"
+
+msgid ""
+"      **FAIL**  REQUIRED PCFileName\n"
+"                REF: Pages 61-62, section 5.3.\n"
+msgstr ""
+"      **FAIL**  PCFileName RICHIESTO\n"
+"                RIF: Pagine 61-62, sezione 5.3.\n"
+
+msgid ""
+"      **FAIL**  BAD Product - not \"(string)\".\n"
+"                REF: Page 62, section 5.3.\n"
+msgstr ""
+"      **FAIL**  Product ERRATO - non Ă¨ \"(string)\".\n"
+"                RIF: Pagina 62, sezione 5.3.\n"
+
+msgid "        PASS    Product\n"
+msgstr "        PASS    Product\n"
+
+msgid ""
+"      **FAIL**  REQUIRED Product\n"
+"                REF: Page 62, section 5.3.\n"
+msgstr ""
+"      **FAIL**  Product RICHIESTO\n"
+"                RIF: Pagina 62, sezione 5.3.\n"
+
+msgid ""
+"      **FAIL**  BAD PSVersion - not \"(string) int\".\n"
+"                REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+"      **FAIL**  PSVersion ERRATO - non Ă¨ \"(string) int\".\n"
+"                RIF: Pagine 62-64, sezione 5.3.\n"
+
+msgid "        PASS    PSVersion\n"
+msgstr "        PASS    PSVersion\n"
+
+msgid ""
+"      **FAIL**  REQUIRED PSVersion\n"
+"                REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+"      **FAIL**  PSVersion RICHIESTO\n"
+"                RIF: Pagine 62-64, sezione 5.3.\n"
+
+msgid ""
+"      **FAIL**  BAD ShortNickName - longer than 31 chars.\n"
+"                REF: Pages 64-65, section 5.3.\n"
+msgstr ""
+"      **FAIL**  ShortNickName ERRATO - maggiore di 31 caratteri.\n"
+"                RIF: Pagine 64-65, sezione 5.3.\n"
+
+msgid "        PASS    ShortNickName\n"
+msgstr "        PASS    ShortNickName\n"
+
+msgid ""
+"      **FAIL**  REQUIRED ShortNickName\n"
+"                REF: Page 64-65, section 5.3.\n"
+msgstr ""
+"      **FAIL**  ShortNickName RICHIESTO\n"
+"                RIF: Pagine 64-65, sezione 5.3.\n"
+
+msgid ""
+"      **FAIL**  BAD JobPatchFile attribute in file\n"
+"                REF: Page 24, section 3.4.\n"
+msgstr ""
+"      **FAIL**  Attributo JobPatchFile ERRATO nel file\n"
+"                RIF: Pagina 24, sezione 3.4.\n"
+
+msgid ""
+"      **FAIL**  REQUIRED PageSize\n"
+"                REF: Page 41, section 5.\n"
+"                REF: Page 99, section 5.14.\n"
+msgstr ""
+"      **FAIL**  PageSize RICHIESTO\n"
+"                RIF: Pagina 41, sezione 5.\n"
+"                RIF: Pagina 99, sezione 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 ""
+"      **FAIL**  ImageableArea RICHIESTO per PageSize %s\n"
+"                RIF: Pagina 41, sezione 5.\n"
+"                RIF: Pagina 102, sezione 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 ""
+"      **FAIL**  PaperDimension RICHIESTO per PageSize %s\n"
+"                RIF: Pagina 41, sezione 5.\n"
+"                RIF: Pagina 103, sezione 5.15.\n"
+
+#, c-format
+msgid ""
+"      **FAIL**  Bad %s choice %s!\n"
+"                REF: Page 84, section 5.9\n"
+msgstr ""
+"      **FAIL**  Scelta %s errata %s!\n"
+"                RIF: Pagina 84, sezione 5.9\n"
+
+#, c-format
+msgid ""
+"      **FAIL**  REQUIRED %s does not define choice None!\n"
+"                REF: Page 122, section 5.17\n"
+msgstr ""
+"      **FAIL**  %s RICHIESTO non definisce la scelta Nessuno!\n"
+"                RIF: Pagina 122, sezione 5.17\n"
+
+#, c-format
+msgid ""
+"      **FAIL**  Bad %s choice %s!\n"
+"                REF: Page 122, section 5.17\n"
+msgstr ""
+"      **FAIL**  Scelta %s errata %s!\n"
+"                RIF: Pagina 122, sezione 5.17\n"
+
+msgid " PASS\n"
+msgstr " PASS\n"
+
+#, c-format
+msgid ""
+"        WARN    Duplex option keyword %s should be named Duplex or JCLDuplex!\n"
+"                REF: Page 122, section 5.17\n"
+msgstr ""
+"        WARN    La parola chiave Duplex %s dovrebbe essere Duplex o JCLDuplex!\n"
+"                RIF: Pagina 122, sezione 5.17\n"
+
+msgid "        WARN    Default choices conflicting!\n"
+msgstr "        WARN    Conflitto tra le scelte predefinite!\n"
+
+#, c-format
+msgid ""
+"        WARN    Obsolete PPD version %.1f!\n"
+"                REF: Page 42, section 5.2.\n"
+msgstr ""
+"        WARN    Versione PPD %.1f obsoleta!\n"
+"                RIF: Pagina 42, sezione 5.2.\n"
+
+msgid ""
+"        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
+"                REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+"        WARN    LanguageEncoding richiesto dalla specifica PPD 4.3.\n"
+"                RIF: Pagine 56-57, sezione 5.3.\n"
+
+msgid ""
+"        WARN    Manufacturer required by PPD 4.3 spec.\n"
+"                REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+"        WARN    Manufacturer richiesto dalla specifica PPD 4.3.\n"
+"                RIF: Pagine 58-59, sezione 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 ""
+"        WARN    PCFileName maggiore di 8.3 in violazione della specifica PPD.\n"
+"                RIF: Pagine 61-62, sezione 5.3.\n"
+
+msgid ""
+"        WARN    ShortNickName required by PPD 4.3 spec.\n"
+"                REF: Pages 64-65, section 5.3.\n"
+msgstr ""
+"        WARN    ShortNickName richiesto dalla specifica PPD 4.3.\n"
+"                RIF: Pagine 64-65, sezione 5.3.\n"
+
+msgid ""
+"        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
+"                REF: Pages 78-79, section 5.7.\n"
+msgstr ""
+"        WARN    Protocols contiene sia PJL che BCP; atteso TBCP.\n"
+"                RIF: Pagine 78-79, sezione 5.7.\n"
+
+msgid ""
+"        WARN    Protocols contains PJL but JCL attributes are not set.\n"
+"                REF: Pages 78-79, section 5.7.\n"
+msgstr ""
+"        WARN    Protocols contiene PJL, ma gli attributi JCL non sono impostati.\n"
+"                RIF: Pagine 78-79, sezione 5.7.\n"
+
+#, c-format
+msgid ""
+"        WARN    %s shares a common prefix with %s\n"
+"                REF: Page 15, section 3.2.\n"
+msgstr ""
+"        WARN    %s condivide un prefisso comune con %s\n"
+"                RIF: Pagina 15, sezione 3.2.\n"
+
+#, c-format
+#, fuzzy
+msgid "    %d ERROR%s FOUND\n"
+msgstr "    %d ERROR%s TROVATI\n"
+
+msgid "    NO ERRORS FOUND\n"
+msgstr "    NESSUN ERRORE TROVATO\n"
+
+#, c-format
+msgid ""
+"        WARN    \"%s %s\" conflicts with \"%s %s\"\n"
+"                (constraint=\"%s %s %s %s\")\n"
+msgstr ""
+"        WARN    \"%s %s\"  Ă¨ in conflitto con \"%s %s\"\n"
+"                (restrizione=\"%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 ""
+"Uso: cupstestppd [-q] [-r] [-v[v]] nomefile1.ppd[.gz] [... nomefileN.ppd[.gz]]\n"
+"       programma | cupstestppd [-q] [-r] [-v[v]] -\n"
+
+msgid "lpstat: Need \"completed\" or \"not-completed\" after -W!\n"
+msgstr "lpstat: Usare \"completed\" o \"not-completed\" dopo -W!\n"
+
+msgid "lpstat: The -b option requires a destination argument.\n"
+msgstr "lpstat: L'opzione -b richiede un argomento di destinazione.\n"
+
+msgid "Error: need hostname after '-h' option!\n"
+msgstr "Errore: Ă¨ necessario un nome host dopo l'opzione '-h'!\n"
+
+#, c-format
+msgid "lpstat: Unknown option '%c'!\n"
+msgstr "lpstat: Opzione '%c' sconosciuta!\n"
+
+#, c-format
+msgid "lpstat: Invalid destination name in list \"%s\"!\n"
+msgstr "lpstat: Nome di destinazione non valido nell'elenco \"%s\"!\n"
+
+#, c-format
+msgid "lpstat: Unknown destination \"%s\"!\n"
+msgstr "lpstat: Destinazione \"%s\" sconosciuta!\n"
+
+#, c-format
+msgid "lpstat: Unable to connect to server %s on port %d: %s\n"
+msgstr "lpstat: Impossibile connettersi al server %s alla porta %d: %s\n"
+
+#, c-format
+msgid "lpstat: get-printers failed: %s\n"
+msgstr "lpstat: get-printers fallita: %s\n"
+
+#, c-format
+msgid "%s accepting requests since Jan 01 00:00\n"
+msgstr "%s accetta richieste da Gen 01 00:00\n"
+
+#, c-format
+msgid ""
+"%s not accepting requests since Jan 01 00:00 -\n"
+"\t%s\n"
+msgstr ""
+"%s non accetta richieste da Gen 01 00:00 -\n"
+"\t%s\n"
+
+#, c-format
+msgid "%s/%s accepting requests since Jan 01 00:00\n"
+msgstr "%s/%s accetta richieste da Gen 01 00:00\n"
+
+#, c-format
+msgid ""
+"%s/%s not accepting requests since Jan 01 00:00 -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s non accetta richieste da Gen 01 00:00 -\n"
+"\t%s\n"
+
+#, c-format
+msgid "lpstat: get-classes failed: %s\n"
+msgstr "lpstat: get-classes fallita: %s\n"
+
+#, c-format
+msgid "members of class %s:\n"
+msgstr "membri della classe %s:\n"
+
+#, c-format
+msgid "system default destination: %s/%s\n"
+msgstr "destinazione predefinita di sistema: %s/%s\n"
+
+#, c-format
+msgid "system default destination: %s\n"
+msgstr "destinazione predefinita di sistema: %s\n"
+
+#, c-format
+msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lpstat: errore - i nomi della variabile d'ambiente %s non esistono nella destinazione \"%s\"!\n"
+
+msgid "no system default destination\n"
+msgstr "nessuna destinazione predefinita di sistema\n"
+
+#, c-format
+msgid "Output for printer %s is sent to remote printer %s on %s\n"
+msgstr "L'uscita per la stampante %s Ă¨ inviata alla stampante remota %s su %s\n"
+
+#, c-format
+msgid "Output for printer %s is sent to %s\n"
+msgstr "L'uscita per la stampante %s Ă¨ inviata a %s\n"
+
+#, c-format
+msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
+msgstr "L'uscita per la stampante %s/%s Ă¨ inviata alla stampante remota %s su %s\n"
+
+#, c-format
+msgid "Output for printer %s/%s is sent to %s\n"
+msgstr "L'uscita per la stampante %s/%s Ă¨ inviata a %s\n"
+
+#, c-format
+msgid "device for %s: %s\n"
+msgstr "dispositivo per %s: %s\n"
+
+#, c-format
+msgid "device for %s/%s: %s\n"
+msgstr "dispositivo per %s/%s: %s\n"
+
+#, c-format
+msgid "lpstat: get-jobs failed: %s\n"
+msgstr "lpstat: get-jobs fallita: %s\n"
+
+#, c-format
+msgid "\tqueued for %s\n"
+msgstr "\tin coda per %s\n"
+
+#, c-format
+msgid "printer %s is idle.  enabled since %s\n"
+msgstr "la stampante %s Ă¨ in attesa.  abilitata da %s\n"
+
+#, c-format
+msgid "printer %s now printing %s-%d.  enabled since %s\n"
+msgstr "la stampante %s sta stampando %s-%d.  abilitata da %s\n"
+
+#, c-format
+msgid "printer %s disabled since %s -\n"
+msgstr "la stampante %s Ă¨ disabilitata da %s -\n"
+
+msgid "\treason unknown\n"
+msgstr "\tmotivo sconosciuto\n"
+
+msgid ""
+"\tForm mounted:\n"
+"\tContent types: any\n"
+"\tPrinter types: unknown\n"
+msgstr ""
+"\tModulo montato:\n"
+"\tTipi di contenuto: qualsiasi\n"
+"\tTipi di stampante: sconosciuti\n"
+
+#, c-format
+msgid "\tDescription: %s\n"
+msgstr "\tDescrizione: %s\n"
+
+msgid "\tAlerts:"
+msgstr "\tAvvisi:"
+
+#, c-format
+msgid "\tLocation: %s\n"
+msgstr "\tPosizione: %s\n"
+
+msgid "\tConnection: remote\n"
+msgstr "\tConnessione: remota\n"
+
+#, c-format
+msgid "\tInterface: %s.ppd\n"
+msgstr "\tInterfaccia: %s.ppd\n"
+
+msgid "\tConnection: direct\n"
+msgstr "\tConnessione: diretta\n"
+
+#, c-format
+msgid "\tInterface: %s/interfaces/%s\n"
+msgstr "\tInterfaccia: %s/interfacce/%s\n"
+
+#, c-format
+msgid "\tInterface: %s/ppd/%s.ppd\n"
+msgstr "\tInterfaccia: %s/ppd/%s.ppd\n"
+
+msgid "\tOn fault: no alert\n"
+msgstr "\tIn caso di fallimento: nessun segnale\n"
+
+msgid "\tAfter fault: continue\n"
+msgstr "\tDopo il fallimento: continua\n"
+
+msgid "\tUsers allowed:\n"
+msgstr "\tUtenti autorizzati:\n"
+
+msgid "\tUsers denied:\n"
+msgstr "\tUtenti non autorizzati:\n"
+
+msgid "\t\t(all)\n"
+msgstr "\t\t(tutti)\n"
+
+msgid "\tForms allowed:\n"
+msgstr "\tModuli consentiti:\n"
+
+msgid "\t\t(none)\n"
+msgstr "\t\t(nessuno)\n"
+
+msgid "\tBanner required\n"
+msgstr "\tBanner richiesto\n"
+
+msgid "\tCharset sets:\n"
+msgstr "\tSet di caratteri:\n"
+
+msgid "\tDefault pitch:\n"
+msgstr "\tPasso predefinito:\n"
+
+msgid "\tDefault page size:\n"
+msgstr "\tDimensiona predefinita pagina:\n"
+
+msgid "\tDefault port settings:\n"
+msgstr "\tImpostazioni predefinite porta:\n"
+
+#, c-format
+msgid "printer %s/%s is idle.  enabled since %s\n"
+msgstr "la stampante %s/%s Ă¨ in attesa.  abilitata da %s\n"
+
+#, c-format
+msgid "printer %s/%s now printing %s-%d.  enabled since %s\n"
+msgstr "la stampante %s/%s sta stampando %s-%d.  abilitata da %s\n"
+
+#, c-format
+msgid "printer %s/%s disabled since %s -\n"
+msgstr "la stampante %s/%s Ă¨ disabilitata da %s -\n"
+
+msgid "scheduler is running\n"
+msgstr "il pianificatore Ă¨ in esecuzione\n"
+
+msgid "scheduler is not running\n"
+msgstr "il pianificatore non Ă¨ in esecuzione\n"
+
+#, c-format
+msgid "lpadmin: Unable to connect to server: %s\n"
+msgstr "lpadmin: Impossibile connettersi al server: %s\n"
+
+msgid ""
+"lpadmin: Unable to add a printer to the class:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile aggiungere una stampante alla classe:\n"
+"         Devi specificare prima un nome di stampante!\n"
+
+msgid "lpadmin: Expected class name after '-c' option!\n"
+msgstr "lpadmin: Atteso nome classe dopo l'opzione '-c'!\n"
+
+msgid "lpadmin: Class name can only contain printable characters!\n"
+msgstr "lpadmin: Il nome della classe puĂ² contenere solo caratteri stampabili!\n"
+
+msgid "lpadmin: Expected printer name after '-d' option!\n"
+msgstr "lpadmin: Atteso nome stampante dopo l'opzione '-d'!\n"
+
+msgid "lpadmin: Printer name can only contain printable characters!\n"
+msgstr "lpadmin: Il nome della stampante puĂ² contenere solo caratteri stampabili!\n"
+
+msgid "lpadmin: Expected hostname after '-h' option!\n"
+msgstr "lpadmin: Atteso nome host dopo l'opzione '-h'!\n"
+
+msgid ""
+"lpadmin: Unable to set the interface script:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile impostare lo script di interfaccia:\n"
+"         Devi specificare prima un nome di stampante!\n"
+
+msgid "lpadmin: Expected interface after '-i' option!\n"
+msgstr "lpadmin: Attesa interfaccia dopo l'opzione '-i'!\n"
+
+msgid ""
+"lpadmin: Unable to set the interface script or PPD file:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile impostare lo script di interfaccia o il file PPD:\n"
+"         Devi specificare prima un nome di stampante!\n"
+
+msgid "lpadmin: Expected model after '-m' option!\n"
+msgstr "lpadmin: Atteso modello dopo l'opzione '-m'!\n"
+
+msgid "lpadmin: Expected name=value after '-o' option!\n"
+msgstr "lpadmin: Atteso nome=valore dopo l'opzione '-o'!\n"
+
+msgid "lpadmin: Expected printer after '-p' option!\n"
+msgstr "lpadmin: Attesa stampante dopo l'opzione '-p'!\n"
+
+msgid ""
+"lpadmin: Unable to remove a printer from the class:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile rimuovere una stampante dalla classe:\n"
+"         Devi specificare prima un nome di stampante!\n"
+
+msgid "lpadmin: Expected class after '-r' option!\n"
+msgstr "lpadmin: Attesa classe dopo l'opzione '-r'!\n"
+
+msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
+msgstr "lpadmin: Atteso allow/deny:userlist dopo l'opzione '-u'!\n"
+
+#, c-format
+msgid "lpadmin: Unknown allow/deny option \"%s\"!\n"
+msgstr "lpadmin: Opzione allow/deny \"%s\" sconosciuta!\n"
+
+msgid ""
+"lpadmin: Unable to set the device URI:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile impostare l'URI di dispositivo:\n"
+"         Devi specificare prima un nome di stampante!\n"
+
+msgid "lpadmin: Expected device URI after '-v' option!\n"
+msgstr "lpadmin: Atteso URI di dispositivo dopo l'opzione '-v'!\n"
+
+msgid "lpadmin: Expected printer or class after '-x' option!\n"
+msgstr "lpadmin: Attesa stampante o classe dopo l'opzione '-x'!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer description:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile impostare la descrizione della stampante:\n"
+"         Devi specificare prima un nome di stampante!\n"
+
+msgid "lpadmin: Expected description after '-D' option!\n"
+msgstr "lpadmin: Attesa descrizione dopo l'opzione '-D'!\n"
+
+msgid "lpadmin: Expected file type(s) after '-I' option!\n"
+msgstr "lpadmin: Attesi tipi di file dopo l'opzione '-I'!\n"
+
+msgid "lpadmin: Warning - content type list ignored!\n"
+msgstr "lpadmin: Attenzione - elenco dei tipi di contenuto ignorato!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer location:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile impostare la posizione della stampante:\n"
+"         Devi specificare prima un nome di stampante!\n"
+
+msgid "lpadmin: Expected location after '-L' option!\n"
+msgstr "lpadmin: Attesa posizione dopo l'opzione '-L'!\n"
+
+msgid ""
+"lpadmin: Unable to set the PPD file:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile impostare il file PPD:\n"
+"         Devi specificare prima un nome di stampante!\n"
+
+msgid "lpadmin: Expected PPD after '-P' option!\n"
+msgstr "lpadmin: Atteso PPD dopo l'opzione '-P'!\n"
+
+#, c-format
+msgid "lpadmin: Unknown option '%c'!\n"
+msgstr "lpadmin: Opzione '%c' sconosciuta!\n"
+
+#, c-format
+msgid "lpadmin: Unknown argument '%s'!\n"
+msgstr "lpadmin: Argomento '%s' sconosciuto!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer options:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: Impossibile impostare le opzioni della stampante:\n"
+"         Devi specificare prima un nome di stampante!\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 ""
+"Uso:\n"
+"\n"
+"    lpadmin [-h server] -d destinazione\n"
+"    lpadmin [-h server] -x destinazione\n"
+"    lpadmin [-h server] -p stampante [-c aggiungi-classe] [-i interfaccia] [-m modello]\n"
+"                       [-r rimuovi-classe] [-v dispositivo] [-D descrizione]\n"
+"                       [-P file-ppd] [-o nome=valore]\n"
+"                       [-u allow:user,user] [-u deny:user,user]\n"
+"\n"
+
+#, c-format
+msgid "lpadmin: Unable to create temporary file: %s\n"
+msgstr "lpadmin: Impossibile creare il file temporaneo: %s\n"
+
+#, c-format
+msgid "lpadmin: Unable to open file \"%s\": %s\n"
+msgstr "lpadmin: Impossibile aprire il file \"%s\": %s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set model) failed: %s\n"
+msgstr "lpadmin: add-printer (impostazione modello) fallito: %s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set description) failed: %s\n"
+msgstr "lpadmin: add-printer (impostazione descrizione) fallito: %s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set location) failed: %s\n"
+msgstr "lpadmin: add-printer (impostazione posizione) fallito: %s\n"
+
+#, c-format
+msgid "lpadmin: Unable to create temporary file - %s\n"
+msgstr "lpadmin: Impossibile creare il file temporaneo - %s\n"
+
+#, c-format
+msgid "lpadmin: Unable to open PPD file \"%s\" - %s\n"
+msgstr "lpadmin: Impossibile aprire il file PPD \"%s\" - %s\n"
+
+#, c-format
+msgid "lpadmin: %s failed: %s\n"
+msgstr "lpadmin: %s fallito: %s\n"
+
+msgid "lp: Expected destination after -d option!\n"
+msgstr "lp: Attesa destinazione dopo l'opzione -d\n"
+
+msgid "lp: Expected form after -f option!\n"
+msgstr "lp: Atteso modulo dopo l'opzione -f!\n"
+
+msgid "lp: Expected hostname after -h option!\n"
+msgstr "lp: Atteso nome host dopo l'opzione -h!\n"
+
+msgid "lp: Expected job ID after -i option!\n"
+msgstr "lp: Atteso ID dell'operazione dopo l'opzione -i!\n"
+
+msgid "lp: Error - cannot print files and alter jobs simultaneously!\n"
+msgstr "lp: Errore- impossibile stampare file e modificare operazioni simultaneamente!\n"
+
+msgid "lp: Error - bad job ID!\n"
+msgstr "lp: Errore - ID dell'operazione errato!\n"
+
+msgid "lp: Expected copies after -n option!\n"
+msgstr "lp: Attese copie dopo l'opzione -n!\n"
+
+msgid "lp: Expected option string after -o option!\n"
+msgstr "lp: Attesa stringa di opzione dopo l'opzione -o!\n"
+
+#, c-format
+msgid "lp: Expected priority after -%c option!\n"
+msgstr "lp: Attesa prioritĂ  dopo l'opzione -%c!\n"
+
+msgid "lp: Priority must be between 1 and 100.\n"
+msgstr "lp: La prioritĂ  deve essere tra 1 e 100.\n"
+
+msgid "lp: Expected title after -t option!\n"
+msgstr "lp: Atteso titolo dopo l'opzione -t!\n"
+
+msgid "lp: Expected mode list after -y option!\n"
+msgstr "lp: Atteso elenco modalitĂ  dopo l'opzione -y!\n"
+
+msgid "lp: Warning - mode option ignored!\n"
+msgstr "lp: Attenzione - opzione della modalitĂ  ignorata!\n"
+
+msgid "lp: Expected hold name after -H option!\n"
+msgstr "lp: Atteso nome di blocco dopo l'opzione -H!\n"
+
+msgid "lp: Need job ID (-i) before \"-H restart\"!\n"
+msgstr "lp: Usare l'ID dell'operazione (-i) prima di \"-H restart\"!\n"
+
+msgid "lp: Expected page list after -P option!\n"
+msgstr "lp: Atteso elenco pagine dopo l'opzione -P!\n"
+
+msgid "lp: Expected character set after -S option!\n"
+msgstr "lp: Atteso set di caratteri dopo l'opzione -S!\n"
+
+msgid "lp: Warning - character set option ignored!\n"
+msgstr "lp: Attenzione - opzione del set di caratteri ignorata!\n"
+
+msgid "lp: Expected content type after -T option!\n"
+msgstr "lp: Atteso tipo di contenuto dopo l'opzione -T!\n"
+
+msgid "lp: Warning - content type option ignored!\n"
+msgstr "lp: Attenzione - opzione del tipo di contenuto ignorata!\n"
+
+#, c-format
+msgid "lp: Unknown option '%c'!\n"
+msgstr "lp: Opzione '%c' sconosciuta!\n"
+
+msgid "lp: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "lp: Errore - impossibile stampare da stdin senza file o ID dell'operazione!\n"
+
+#, c-format
+msgid "lp: Unable to access \"%s\" - %s\n"
+msgstr "lp: Impossibile accedere a \"%s\" - %s\n"
+
+#, c-format
+msgid "lp: Too many files - \"%s\"\n"
+msgstr "lp: Troppi file - \"%s\"\n"
+
+msgid "lp: error - no default destination available.\n"
+msgstr "lp: errore - nessuna destinazione predefinita disponibile.\n"
+
+msgid "lp: error - scheduler not responding!\n"
+msgstr "lp: errore - il pianificatore di operazioni non risponde!\n"
+
+#, c-format
+msgid "lp: unable to create temporary file \"%s\" - %s\n"
+msgstr "lp: impossibile creare il file temporaneo \"%s\" - %s\n"
+
+#, c-format
+msgid "lp: error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "lp: errore - impossibile scrivere il file temporaneo \"%s\" - %s\n"
+
+msgid "lp: stdin is empty, so no job has been sent.\n"
+msgstr "lp: stdin Ă¨ vuoto, nessuna operazione Ă¨ stata inviata.\n"
+
+#, c-format
+msgid "lp: unable to print file: %s\n"
+msgstr "lp: impossibile stampare il file: %s\n"
+
+#, c-format
+msgid "request id is %s-%d (%d file(s))\n"
+msgstr "l'id richiesto Ă¨ %s-%d (%d file)\n"
+
+#, c-format
+msgid "lp: restart-job failed: %s\n"
+msgstr "lp: restart-job fallito: %s\n"
+
+#, c-format
+msgid "lp: set-job-attributes failed: %s\n"
+msgstr "lp: set-job-attributes fallito: %s\n"
+
+#, c-format
+msgid "lpinfo: Unable to connect to server: %s\n"
+msgstr "lpinfo: Impossibile connettersi al server: %s\n"
+
+#, c-format
+msgid "lpinfo: Unknown option '%c'!\n"
+msgstr "lpinfo: Opzione '%c' sconosciuta!\n"
+
+#, c-format
+msgid "lpinfo: Unknown argument '%s'!\n"
+msgstr "lpinfo: Argomento '%s' sconosciuto!\n"
+
+#, c-format
+msgid "lpinfo: cups-get-devices failed: %s\n"
+msgstr "lpinfo: cups-get-devices fallito: %s\n"
+
+#, c-format
+msgid ""
+"Device: uri = %s\n"
+"        class = %s\n"
+"        info = %s\n"
+"        make-and-model = %s\n"
+msgstr ""
+"Dispositivo: 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 fallito: %s\n"
+
+#, c-format
+msgid ""
+"Model:  name = %s\n"
+"        natural_language = %s\n"
+"        make-and-model = %s\n"
+msgstr ""
+"Modello:  name = %s\n"
+"        natural_language = %s\n"
+"        make-and-model = %s\n"
+
+#, c-format
+msgid "lpmove: Unknown option '%c'!\n"
+msgstr "lpmove: Opzione '%c' sconosciuta!\n"
+
+#, c-format
+msgid "lpmove: Unknown argument '%s'!\n"
+msgstr "lpmove: Argomento '%s' sconosciuto!\n"
+
+msgid "Usage: lpmove job dest\n"
+msgstr "Uso: lpmove operazione destinazione\n"
+
+#, c-format
+msgid "lpmove: Unable to connect to server: %s\n"
+msgstr "lpmove: Impossibile connettersi al server: %s\n"
+
+#, c-format
+msgid "lpmove: move-job failed: %s\n"
+msgstr "lpmove: move-job fallito: %s\n"
+
+msgid "lpoptions: Unknown printer or class!\n"
+msgstr "lpoptions: Stampante o classe sconosciuta!\n"
+
+msgid "lpoptions: No printers!?!\n"
+msgstr "lpoptions: Nessuna stampante!?!\n"
+
+#, c-format
+msgid "lpoptions: Unable to add printer or instance: %s\n"
+msgstr "lpoptions: Impossibile aggiungere una stampante o un'istanza: %s\n"
+
+#, c-format
+msgid "lpoptions: Destination %s has no PPD file!\n"
+msgstr "lpoptions: La destinazione %s non ha file PPD!\n"
+
+#, c-format
+msgid "lpoptions: Unable to open PPD file for %s!\n"
+msgstr "lpoptions: Impossibile aprire il file PPD per %s!\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 ""
+"Uso: lpoptions [-h server] [-E] -d stampante\n"
+"       lpoptions [-h server] [-E] [-p stampante] -l\n"
+"       lpoptions [-h server] [-E] -p stampante -o opzione[=valore] ...\n"
+"       lpoptions [-h server] [-E] -x stampante\n"
+
+msgid "lppasswd: Only root can add or delete passwords!\n"
+msgstr "lppasswd: Solo root puĂ² aggiungere o eliminare le password!\n"
+
+msgid "Enter old password:"
+msgstr "Inserisci la vecchia password:"
+
+#, c-format
+msgid "lppasswd: Unable to copy password string: %s\n"
+msgstr "lppasswd: Impossibile copiare la stringa della password: %s\n"
+
+msgid "Enter password:"
+msgstr "Inserisci la password:"
+
+msgid "Enter password again:"
+msgstr "Inserisci ancora la password:"
+
+msgid "lppasswd: Sorry, passwords don't match!\n"
+msgstr "lppasswd: Spiacente, le password non corrispondono!\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: Spiacente, password rifiutata.\n"
+"La password deve essere lunga almeno 6 caratteri, non puĂ² contenere\n"
+"il nome utente, e deve contenere almeno una lettera e un numero.\n"
+
+msgid "lppasswd: Password file busy!\n"
+msgstr "lppasswd: Il file delle password Ă¨ occupato!\n"
+
+#, c-format
+msgid "lppasswd: Unable to open password file: %s\n"
+msgstr "lppasswd: Impossibile aprire il file delle password: %s\n"
+
+#, c-format
+msgid "lppasswd: Unable to write to password file: %s\n"
+msgstr "lppasswd: Impossibile scrivere il file delle password: %s\n"
+
+#, c-format
+msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
+msgstr "lppasswd: l'utente \"%s\" e il gruppo \"%s\" non esistono.\n"
+
+msgid "lppasswd: Sorry, password doesn't match!\n"
+msgstr "lppasswd: Spiacente, la password non corrisponde!\n"
+
+msgid "lppasswd: Password file not updated!\n"
+msgstr "lppasswd: File delle password non aggiornato!\n"
+
+#, c-format
+msgid "lppasswd: failed to backup old password file: %s\n"
+msgstr "lppasswd: copia di sicurezza del vecchio file delle password fallita: %s\n"
+
+#, c-format
+msgid "lppasswd: failed to rename password file: %s\n"
+msgstr "lppasswd: rinomina del file delle password fallita: %s\n"
+
+msgid "Usage: lppasswd [-g groupname]\n"
+msgstr "Uso: lppasswd [-g nomegruppo]\n"
+
+msgid ""
+"Usage: lppasswd [-g groupname] [username]\n"
+"       lppasswd [-g groupname] -a [username]\n"
+"       lppasswd [-g groupname] -x [username]\n"
+msgstr ""
+"Uso: lppasswd [-g nomegruppo] [nomeutente]\n"
+"       lppasswd [-g nomegruppo] -a [nomeutente]\n"
+"       lppasswd [-g nomegruppo] -x [nomeutente]\n"
+
+msgid "Start Printer"
+msgstr "Avvia stampante"
+
+msgid "Stop Printer"
+msgstr "Ferma stampante"
+
+msgid "Start Class"
+msgstr "Avvia classe"
+
+msgid "Stop Class"
+msgstr "Ferma classe"
+
+msgid "Accept Jobs"
+msgstr "Accetta operazioni"
+
+msgid "Reject Jobs"
+msgstr "Scarta operazioni"
+
+msgid "Purge Jobs"
+msgstr "Elimina operazioni"
+
+msgid "Set As Default"
+msgstr "Imposta come predefinita"
+
+msgid "Administration"
+msgstr "Amministrazione"
+
+msgid "Modify Class"
+msgstr "Modifica classe"
+
+msgid "Add Class"
+msgstr "Aggiungi classe"
+
+msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "Il nome della classe puĂ² contenere fino a 127 caratteri stampabili e non puĂ² contenere spazi, barre (/), o cancelletti (#)."
+
+msgid "Unable to modify class:"
+msgstr "Impossibile modificare la classe:"
+
+msgid "Unable to add class:"
+msgstr "Impossibile aggiungere la classe:"
+
+msgid "Modify Printer"
+msgstr "Modifica stampante"
+
+msgid "Add Printer"
+msgstr "Aggiungi stampante"
+
+msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "Il nome della stampante puĂ² contenere fino a 127 caratteri stampabili e non puĂ² contenere spazi, barre (/), o cancelletti (#)."
+
+msgid "Unable to get list of printer drivers:"
+msgstr "Impossibile ottenere l'elenco dei driver della stampante:"
+
+msgid "Unable to modify printer:"
+msgstr "Impossibile modificare la stampante:"
+
+msgid "Unable to add printer:"
+msgstr "Impossibile aggiungere la stampante:"
+
+msgid "Set Printer Options"
+msgstr "Imposta opzioni stampante"
+
+msgid "Missing form variable!"
+msgstr "Variabile modulo mancante"
+
+msgid "Unable to get PPD file!"
+msgstr "Impossibile ottenete il file PPD!"
+
+msgid "Unable to open PPD file:"
+msgstr "Impossibile aprire il file PPD:"
+
+msgid "Banners"
+msgstr "Banner"
+
+msgid "Starting Banner"
+msgstr "Banner iniziale"
+
+msgid "Ending Banner"
+msgstr "Banner finale"
+
+msgid "Policies"
+msgstr "Regole"
+
+msgid "Error Policy"
+msgstr "Regola di errore"
+
+msgid "Operation Policy"
+msgstr "Regola operativa"
+
+msgid "PS Binary Protocol"
+msgstr "Protocollo binario PS"
+
+msgid "None"
+msgstr "Nessuno"
+
+msgid "Unable to set options:"
+msgstr "Impossibile impostare le opzioni:"
+
+msgid "Change Settings"
+msgstr "Modifica impostazioni"
+
+msgid "Unable to change server settings:"
+msgstr "Impossibile modificare le impostazioni del server:"
+
+msgid "Unable to upload cupsd.conf file:"
+msgstr "Impossibile caricare il file cupsd.conf:"
+
+msgid "Edit Configuration File"
+msgstr "Modifica file di configurazione"
+
+msgid "Unable to create temporary file:"
+msgstr "Impossibile creare il file temporaneo:"
+
+msgid "Unable to access cupsd.conf file:"
+msgstr "Impossibile accedere al file cupsd.conf:"
+
+msgid "Unable to edit cupsd.conf files larger than 1MB!"
+msgstr "Impossibile modificare file cupsd.conf piĂ¹ grandi di 1MB!"
+
+msgid "Delete Class"
+msgstr "Elimina classe"
+
+msgid "Unable to delete class:"
+msgstr "Impossibile eliminare la classe:"
+
+msgid "Delete Printer"
+msgstr "Elimina stampante"
+
+msgid "Unable to delete printer:"
+msgstr "Impossibile eliminare la stampante:"
+
+msgid "Export Printers to Samba"
+msgstr "Esporta stampanti a Samba"
+
+msgid "Unable to fork process!"
+msgstr "Impossibile biforcare il processo!"
+
+msgid "Unable to connect to server!"
+msgstr "Impossibile connettersi al server!"
+
+msgid "Unable to get printer attributes!"
+msgstr "Impossibile ottenere gli attributi della stampante!"
+
+msgid "Unable to convert PPD file!"
+msgstr "Impossibile convertire il file PPD!"
+
+msgid "Unable to copy Windows 2000 printer driver files!"
+msgstr "Impossibile copiare i file dei driver di stampa di Windows 2000!"
+
+msgid "Unable to install Windows 2000 printer driver files!"
+msgstr "Impossibile installare i file dei driver di stampa di Windows 2000!"
+
+msgid "Unable to copy Windows 9x printer driver files!"
+msgstr "Impossibile copiare i file dei driver di stampa di Windows 9x!"
+
+msgid "Unable to install Windows 9x printer driver files!"
+msgstr "Impossibile installare i file dei driver di stampa di Windows 9x!"
+
+msgid "Unable to set Windows printer driver!"
+msgstr "Impossibile configurare il driver di stampa di Windows!"
+
+msgid "No printer drivers found!"
+msgstr "Nessun driver di stampa trovato!"
+
+msgid "Unable to execute cupsaddsmb command!"
+msgstr "Impossibile eseguire il comando cupsaddsmb!"
+
+#, c-format
+msgid "cupsaddsmb failed with status %d"
+msgstr "cupsaddsmb fallito con stato %d"
+
+#, c-format
+msgid "cupsaddsmb crashed on signal %d"
+msgstr "cupsaddsmb Ă¨ andato in crash con segnale %d"
+
+msgid "A Samba username is required to export printer drivers!"
+msgstr "Ăˆ richiesto un nome utente Samba per esportare i driver di stampa!"
+
+msgid "A Samba password is required to export printer drivers!"
+msgstr "Ăˆ richiesta una password Samba per esportare i driver di stampa!"
+
+msgid "Unable to open cupsd.conf file:"
+msgstr "Impossibile aprire il file cupsd.conf:"
+
+msgid "Unable to change printer:"
+msgstr "Impossibile cambiare la stampante:"
+
+msgid "Set Allowed Users"
+msgstr "Imposta utenti autorizzati"
+
+msgid "Unable to get printer attributes:"
+msgstr "Impossibile ottenere gli attributi della stampante:"
+
+msgid "Set Publishing"
+msgstr "Imposta pubblicazione"
+
+msgid "Unable to change printer-is-shared attribute:"
+msgstr "Impossibile cambiare l'attributo printer-is-shared:"
+
+msgid "Classes"
+msgstr "Classi"
+
+msgid "Unable to get class list:"
+msgstr "Impossibile ottenere l'elenco delle classi:"
+
+msgid "Unable to get class status:"
+msgstr "Impossibile ottenere lo stato della classe:"
+
+msgid "Move Job"
+msgstr "Sposta operazione"
+
+msgid "Unable to find destination for job!"
+msgstr "Impossibile trovare una destinazione per l'operazione!"
+
+msgid "Move All Jobs"
+msgstr "Sposta tutte le operazioni"
+
+msgid "Unable to move job"
+msgstr "Impossibile spostare l'operazione"
+
+msgid "Unable to move jobs"
+msgstr "Impossibile spostare le operazioni"
+
+msgid "Print Test Page"
+msgstr "Stampa pagina di prova"
+
+msgid "Unable to print test page:"
+msgstr "Impossibile stampare la pagina di prova:"
+
+msgid "Jobs"
+msgstr "Operazioni"
+
+msgid "Job operation failed:"
+msgstr "Operazione fallita:"
+
+msgid "Printers"
+msgstr "Stampanti"
+
+msgid "Unable to get printer list:"
+msgstr "Impossibile ottenere l'elenco delle stampanti:"
+
+msgid "Unable to get printer status:"
+msgstr "Impossibile ottenere lo stato della stampante:"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Unable to open PPD file"
+msgstr "Impossibile aprire il file PPD"
+
+msgid "NULL PPD file pointer"
+msgstr "Puntatore NULL al file PPD"
+
+msgid "Memory allocation error"
+msgstr "Errore di allocazione della memoria"
+
+msgid "Missing PPD-Adobe-4.x header"
+msgstr "Intestazione PPD-Adobe-4.x mancante"
+
+msgid "Missing value string"
+msgstr "Stringa di valore mancante"
+
+msgid "Internal error"
+msgstr "Errore interno"
+
+msgid "Bad OpenGroup"
+msgstr "OpenGroup errato"
+
+msgid "OpenGroup without a CloseGroup first"
+msgstr "OpenGroup senza un precedente CloseGroup"
+
+msgid "Bad OpenUI/JCLOpenUI"
+msgstr "OpenUI/JCLOpenUI errato"
+
+msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
+msgstr "OpenUI/JCLOpenUI senza un precedente CloseUI/JCLCloseUI"
+
+msgid "Bad OrderDependency"
+msgstr "OrderDependency errato"
+
+msgid "Bad UIConstraints"
+msgstr "UIConstraints errato"
+
+msgid "Missing asterisk in column 1"
+msgstr "Asterisco mancante nella colonna 1"
+
+msgid "Line longer than the maximum allowed (255 characters)"
+msgstr "La riga eccede il massimo consentito (255 caratteri)"
+
+msgid "Illegal control character"
+msgstr "Carattere di controllo non consentito"
+
+msgid "Illegal main keyword string"
+msgstr "Stringa di parola chiave principale non consentita"
+
+msgid "Illegal option keyword string"
+msgstr "Stringa di parola chiave opzionale non consentita"
+
+msgid "Illegal translation string"
+msgstr "Stringa di traduzione non consentita"
+
+msgid "Illegal whitespace character"
+msgstr "Caratteri di spazio non consentito"
+
+msgid "Bad custom parameter"
+msgstr "Parametro personalizzato errato"
+
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+msgid "Custom"
+msgstr "Personalizzato "
+
+msgid "JCL"
+msgstr "JCL"
+
+msgid "No authentication information provided!"
+msgstr "Nessuna informazione di autenticazione fornita!"
+
+#, c-format
+msgid "Password for %s required to access %s via SAMBA: "
+msgstr "Password per %s richiesta per accedere a %s via SAMBA: "
+
+#, c-format
+msgid "Running command: %s %s -N -U '%s%%%s' -c '%s'\n"
+msgstr "Esecuzione comando: %s %s -N -U '%s%%%s' -c '%s'\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to run \"%s\": %s\n"
+msgstr "cupsaddsmb: Impossibile eseguire \"%s\": %s\n"
+
+msgid "cupsaddsmb: No Windows printer drivers are installed!\n"
+msgstr "cupsaddsmb: Nessun driver di stampa di Windows Ă¨ installato!\n"
+
+msgid "cupsaddsmb: Warning, no Windows 2000 printer drivers are installed!\n"
+msgstr "cupsaddsmb: Attenzione, nessun driver di stampa di Windows 2000 Ă¨ installato!\n"
+
+#, c-format
+msgid "lpadmin: Printer %s is already a member of class %s.\n"
+msgstr "lpadmin: La stampante %s Ă¨ giĂ  un membro della classe %s.\n"
+
+msgid "lpadmin: No member names were seen!\n"
+msgstr "lpadmin: Nessun nome di membri trovato!\n"
+
+#, c-format
+msgid "lpadmin: Printer %s is not a member of class %s.\n"
+msgstr "lpadmin: La stampante %s non Ă¨ un membro della classe %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 ""
+"Dispositivo: 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 ""
+"Modello:  name = %s\n"
+"        natural_language = %s\n"
+"        make-and-model = %s\n"
+"        device-id = %s\n"
+
+msgid "Usage: lpmove job/src dest\n"
+msgstr "Usage: lpmove operazione/fonte destinazione\n"
+
+msgid "lpstat: Need \"completed\", \"not-completed\", or \"all\" after -W!\n"
+msgstr "lpstat: Usare \"completed\", \"not-completed\", o \"all\" dopo -W!\n"
+
+#, c-format
+msgid "%s accepting requests since %s\n"
+msgstr "%s accetta richieste da %s\n"
+
+#, c-format
+msgid ""
+"%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s non accetta richieste da %s -\n"
+"\t%s\n"
+
+#, c-format
+msgid "%s/%s accepting requests since %s\n"
+msgstr "%s/%s accetta richieste da %s\n"
+
+#, c-format
+msgid ""
+"%s/%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s non accetta richieste da %s -\n"
+"\t%s\n"
+
+msgid "lpc> "
+msgstr "lpc> "
+
+#, c-format
+msgid "%s: Unable to contact server!\n"
+msgstr "%s: Impossibile contattare il server!\n"
+
+#, c-format
+msgid "%s: Error - expected username after '-U' option!\n"
+msgstr "%s: Errore - atteso nome utente dopo l'opzione '-U'!\n"
+
+#, c-format
+msgid "%s: Error - unknown destination \"%s/%s\"!\n"
+msgstr "%s: Errore - destinazione \"%s/%s\" sconosciuta!\n"
+
+#, c-format
+msgid "%s: Unknown destination \"%s\"!\n"
+msgstr "%s: Destinazione \"%s\" sconosciuta!\n"
+
+#, c-format
+msgid "%s: Error - expected hostname after '-h' option!\n"
+msgstr "%s: Errore - atteso nome host dopo l'opzione '-h'!\n"
+
+#, c-format
+msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "%s: errore - i nomi della variabile d'ambiente %s non esistono nella destinazione \"%s\"!\n"
+
+#, c-format
+msgid "%s: error - no default destination available.\n"
+msgstr "%s: errore - nessuna destinazione predefinita disponibile.\n"
+
+msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
+msgstr "Uso: lpq [-P dest] [-U nomeutente] [-h nomehost[:porta]] [-l] [+intervallo]\n"
+
+#, c-format
+msgid "%s: Error - expected hostname after '-H' option!\n"
+msgstr "%s: Errore - atteso nome host dopo l'opzione '-H'!\n"
+
+#, c-format
+msgid "%s: Error - expected value after '-%c' option!\n"
+msgstr "%s: Errore - atteso valore dopo l'opzione '-%c'!\n"
+
+#, c-format
+msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
+msgstr "%s: Attenzione - Modificatore di formato '%c' non supportato - il risultato potrebbe non essere corretto!\n"
+
+#, c-format
+msgid "%s: error - expected option=value after '-o' option!\n"
+msgstr "%s: errore - attesa opzione=valore dopo l'opzione '-o'!\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-P' option!\n"
+msgstr "%s: Errore - attesa destinazione dopo l'opzione '-P'!\n"
+
+#, c-format
+msgid "%s: Error - expected copy count after '-#' option!\n"
+msgstr "%s: Errore - atteso numero di copie dopo l'opzione '-#'!\n"
+
+#, c-format
+msgid "%s: Error - expected name after '-%c' option!\n"
+msgstr "%s: Errore - atteso nome dopo l'opzione '-%c'!\n"
+
+#, c-format
+msgid "%s: Error - unknown option '%c'!\n"
+msgstr "%s: Errore - opzione '%c' sconosciuta!\n"
+
+#, c-format
+msgid "%s: Error - unable to access \"%s\" - %s\n"
+msgstr "%s: Errore - impossibile accedere a \"%s\" - %s\n"
+
+#, c-format
+msgid "%s: Error - too many files - \"%s\"\n"
+msgstr "%s: Errore - troppi file - \"%s\"\n"
+
+#, c-format
+msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "%s: Errore - i nomi della variabile d'ambiente %s non esistono nella destinazione \"%s\"!\n"
+
+#, c-format
+msgid "%s: Error - no default destination available.\n"
+msgstr "%s: Errore - nessuna destinazione predefinita disponibile.\n"
+
+#, c-format
+msgid "%s: Error - scheduler not responding!\n"
+msgstr "%s: Errore - il pianificatore di operazioni non risponde!\n"
+
+#, c-format
+msgid "%s: Error - unable to create temporary file \"%s\" - %s\n"
+msgstr "%s: Errore - impossibile creare il file temporaneo \"%s\" - %s\n"
+
+#, c-format
+msgid "%s: Error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "%s: Errore - impossibile scrivere il file temporaneo \"%s\" - %s\n"
+
+#, c-format
+msgid "%s: Error - stdin is empty, so no job has been sent.\n"
+msgstr "%s: Errore - stdin Ă¨ vuoto, nessuna operazione puĂ² essere inviata.\n"
+
+#, c-format
+msgid "%s: Error - unknown destination \"%s\"!\n"
+msgstr "%s: Errore - destinazione \"%s\" sconosciuta!\n"
+
+#, c-format
+msgid "%s: Error - expected reason text after '-r' option!\n"
+msgstr "%s: Errore - atteso testo di motivazione dopo l'opzione '-r'!\n"
+
+#, c-format
+msgid "%s: Error - expected username after '-u' option!\n"
+msgstr "%s: Errore - atteso nome utente dopo l'opzione '-u'!\n"
+
+#, c-format
+msgid "%s: %s failed: %s\n"
+msgstr "%s: %s fallito: %s\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-d' option!\n"
+msgstr "%s: Errore - attesa destinazione dopo l'opzione '-d'!\n"
+
+#, c-format
+msgid "%s: Error - expected form after '-f' option!\n"
+msgstr "%s: Errore - atteso modulo dopo l'opzione '-f'!\n"
+
+#, c-format
+msgid "%s: Warning - form option ignored!\n"
+msgstr "%s: Attenzione - opzione del modulo ignorata!\n"
+
+#, c-format
+msgid "%s: Expected job ID after '-i' option!\n"
+msgstr "%s: Atteso ID dell'operazione dopo l'opzione '-i'!\n"
+
+#, c-format
+msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
+msgstr "%s: Errore - impossibile stampare file e modificare operazioni contemporaneamente!\n"
+
+#, c-format
+msgid "%s: Error - bad job ID!\n"
+msgstr "%s: Errore - ID dell'operazione errato!\n"
+
+#, c-format
+msgid "%s: Error - expected copies after '-n' option!\n"
+msgstr "%s: Errore - attese copie dopo l'opzione '-n'!\n"
+
+#, c-format
+msgid "%s: Error - expected option string after '-o' option!\n"
+msgstr "%s: Errore - attesa stringa di opzione dopo l'opzione '-o'!\n"
+
+#, c-format
+msgid "%s: Error - expected priority after '-%c' option!\n"
+msgstr "%s: Errore - attesa prioritĂ  dopo l'opzione '-%c'!\n"
+
+#, c-format
+msgid "%s: Error - priority must be between 1 and 100.\n"
+msgstr "%s: Errore - la prioritĂ  deve essere tra 1 e 100.\n"
+
+#, c-format
+msgid "%s: Error - expected title after '-t' option!\n"
+msgstr "%s: Errore - atteso titolo dopo l'opzione '-t'!\n"
+
+#, c-format
+msgid "%s: Error - expected mode list after '-y' option!\n"
+msgstr "%s: Error - atteso elenco modalitĂ  dopo l'opzione '-y'!\n"
+
+#, c-format
+msgid "%s: Warning - mode option ignored!\n"
+msgstr "%s: Attenzione - opzione della modalitĂ  ignorata!\n"
+
+#, c-format
+msgid "%s: Error - expected hold name after '-H' option!\n"
+msgstr "%s: Errore - atteso nome di blocco dopo l'opzione '-H'!\n"
+
+#, c-format
+msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
+msgstr "%s: Usare l'ID dell'operazione ('-i idoperazione') prima di '-H restart'!\n"
+
+#, c-format
+msgid "%s: Error - expected page list after '-P' option!\n"
+msgstr "%s: Errore - atteso elenco delle pagine dopo l'opzione '-P'!\n"
+
+#, c-format
+msgid "%s: Error - expected character set after '-S' option!\n"
+msgstr "%s: Errore - atteso set di caratteri dopo l'opzione '-S'!\n"
+
+#, c-format
+msgid "%s: Warning - character set option ignored!\n"
+msgstr "%s: Attenzione  - opzione del set di caratteri ignorata!\n"
+
+#, c-format
+msgid "%s: Error - expected content type after '-T' option!\n"
+msgstr "%s: Errore - atteso tipo di contenuto dopo l'opzione '-T'!\n"
+
+#, c-format
+msgid "%s: Warning - content type option ignored!\n"
+msgstr "%s: Attenzione - opzione del tipo di contenuto ignorata!\n"
+
+#, c-format
+msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "%s: Errore - impossibile stampare da stdin senza file o ID dell'operazione!\n"
+
+#, c-format
+msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
+msgstr "%s: Errore - usare \"completed\", \"not-completed\", o \"all\" dopo l'opzione '-W'!\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-b' option!\n"
+msgstr "%s: Errore - attesa destinazione dopo l'opzione '-b'!\n"
+
+#, c-format
+msgid "%s: Invalid destination name in list \"%s\"!\n"
+msgstr "%s: Nome di destinazione non valido nell'elenco \"%s\"!\n"
+
+#, c-format
+msgid "%s: Unable to connect to server\n"
+msgstr "%s: Impossibile connettersi al server\n"
+
+msgid "Print Job:"
+msgstr "Stampa operazione:"
+
+msgid "pending"
+msgstr "in sospeso"
+
+msgid "held"
+msgstr "bloccato"
+
+msgid "processing"
+msgstr "elaborazione in corso"
+
+msgid "stopped"
+msgstr "fermato"
+
+msgid "canceled"
+msgstr "annullato"
+
+msgid "aborted"
+msgstr "interrotto"
+
+msgid "completed"
+msgstr "completato"
+
+msgid "unknown"
+msgstr "sconosciuto"
+
+msgid "untitled"
+msgstr "senza titolo"
+
+msgid "Printer:"
+msgstr "Stampante:"
+
+msgid "idle"
+msgstr "in attesa"
+
+msgid "Missing notify-subscription-ids attribute!"
+msgstr "Attributo notify-subscription-ids mancante!"
+
+msgid "Job subscriptions cannot be renewed!"
+msgstr "Le sottoscrizioni delle operazioni non possono essere rinnovate!"
+
+msgid "cupsd: Expected config filename after \"-c\" option!\n"
+msgstr "cupsd: Atteso nome file di configurazione dopo l'opzione \"-c\"!\n"
+
+msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
+msgstr "cupsd: supporto launchd(8) non compilato, esecuzione in modalitĂ  normale.\n"
+
+#, c-format
+msgid "cupsd: Unknown option \"%c\" - aborting!\n"
+msgstr "cupsd: Opzione \"%c\" sconosciuta - interruzione!\n"
+
+#, c-format
+msgid "cupsd: Unknown argument \"%s\" - aborting!\n"
+msgstr "cupsd: Argomento \"%s\" sconosciuto - interruzione!\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 ""
+"Uso: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n"
+"\n"
+"-c config-file      Carica file di configurazione alternativo\n"
+"-f                  Esegui in primo piano\n"
+"-F                  Esegui in primo piano, ma sganciato\n"
+"-h                  Mostra questo messaggio di aiuto\n"
+"-l                  Esegui cupsd da launchd(8)\n"
+
+#, c-format
+msgid "        WARN    Line %d only contains whitespace!\n"
+msgstr "        WARN    La riga %d contiene solamente spazi bianchi!\n"
+
+msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
+msgstr "        WARN    Il file contiene un misto di interruzioni di riga CR, LF, e CR LF!\n"
+
+msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
+msgstr "        WARN    I file PPD per sistemi diversi da Windows dovrebbero usare solo interruzioni di riga LF, non CR LF!\n"
+
+msgid "Printer Maintenance"
+msgstr "Manutenzione stampanti"
+
+msgid "Unable to send maintenance job:"
+msgstr "Impossibile inviare il comando di manutenzione:"
+
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
+msgstr "cupsaddsmb: Nessun file PPD per la stampante \"%s\" - %s\n"
+
+#, c-format
+msgid "      **FAIL**  %s %s does not exist!\n"
+msgstr "      **FAIL**  %s %s non esiste!\n"
+
+#, c-format
+msgid "      **FAIL**  Bad language \"%s\"!\n"
+msgstr "      **FAIL**  Lingua \"%s\" errata!\n"
+
+#, c-format
+msgid "      **FAIL**  Missing \"%s\" translation string for option %s!\n"
+msgstr "      **FAIL**  Stringa di traduzione \"%s\" mancante per l'opzione %s!\n"
+
+#, c-format
+msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters!\n"
+msgstr "      **FAIL**  La stringa di traduzione predefinita per l'opzione %s contiene caratteri di 8-bit!\n"
+
+#, c-format
+msgid "      **FAIL**  Missing \"%s\" translation string for option %s, choice %s!\n"
+msgstr "      **FAIL**  Stringa di traduzione \"%s\" mancante per l'opzione %s, scelta %s!\n"
+
+#, c-format
+msgid "      **FAIL**  Default translation string for option %s choice %s contains 8-bit characters!\n"
+msgstr "      **FAIL**  La stringa di traduzione predefinita per l'opzione %s scelta %s contiene caratteri di 8-bit!\n"
+
+#, c-format
+msgid "      **FAIL**  Bad cupsFilter value \"%s\"!\n"
+msgstr "      **FAIL**  Valore cupsFilter \"%s\" errato!\n"
+
+msgid "Help"
+msgstr "Guida"
+
+#, c-format
+msgid "Missing value on line %d!\n"
+msgstr "Valore mancante alla riga %d!\n"
+
+#, c-format
+msgid "Missing double quote on line %d!\n"
+msgstr "Doppi apici mancanti alla riga %d!\n"
+
+#, c-format
+msgid "Bad option + choice on line %d!\n"
+msgstr "Opzione + scelta errata alla riga %d!\n"
+
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)!\n"
+msgstr "Impossibile copiare i file dei driver di stampa di Windows 2000 (%d)!\n"
+
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)!\n"
+msgstr "Impossibile copiare i file dei driver di stampa di CUPS (%d)!\n"
+
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)!\n"
+msgstr "Impossibile installare i file dei driver di stampa di Windows 2000 (%d)!\n"
+
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)!\n"
+msgstr "Impossibile copiare i file dei driver di stampa di Windows 9x (%d)!\n"
+
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)!\n"
+msgstr "Impossibile installare i file dei driver di stampa di Windows 9x (%d)!\n"
+
+msgid "No Windows printer drivers are installed!\n"
+msgstr "Nessun driver di stampa di Windows Ă¨ installato!\n"
+
+msgid "Warning, no Windows 2000 printer drivers are installed!\n"
+msgstr "Attenzione, nessun driver di stampa di Windows 2000 Ă¨ installato!\n"
+
+#, c-format
+msgid "Unable to set Windows printer driver (%d)!\n"
+msgstr "Impossibile configurare il driver di stampa di Windows (%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 ""
+"Uso: cupsaddsmb [opzioni] stampante1 ... stampanteN\n"
+"       cupsaddsmb [opzioni] -a\n"
+"\n"
+"Opzioni:\n"
+"  -E               Cifra la connessione al server\n"
+"  -H samba-server  Usa il server SAMBA specificato\n"
+"  -U samba-user    Autenticazione usando l'utente SAMBA specificato\n"
+"  -a               Esporta tutte le stampanti\n"
+"  -h cups-server   Usa il server CUPS specificato\n"
+"  -v               Prolisso (mostra comandi)\n"
+
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)!"
+msgstr "Impossibile copiare i file dei driver di stampa di Windows 2000 (%d)!"
+
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)!"
+msgstr "Impossibile copiare i file dei driver di stampa di CUPS (%d)!"
+
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)!"
+msgstr "Impossibile installare i file dei driver di stampa di Windows 2000 (%d)!"
+
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)!"
+msgstr "Impossibile copiare i file dei driver di stampa di Windows 9x (%d)!"
+
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)!"
+msgstr "Impossibile installare i file dei driver di stampa di Windows 9x (%d)!"
+
+msgid "No Windows printer drivers are installed!"
+msgstr "Nessun driver di stampa Windows Ă¨ installato!"
+
+msgid "Warning, no Windows 2000 printer drivers are installed!"
+msgstr "Attenzione, nessun driver di stampa Windows 2000 Ă¨ installato!"
+
+#, c-format
+msgid "open of %s failed: %s"
+msgstr "apertura di %s fallita: %s"
+
+#, c-format
+msgid "Running command: %s %s -N -A %s -c '%s'\n"
+msgstr "Esecuzione del comando: %s %s -N -A %s -c '%s'\n"
+
+#, c-format
+msgid "stat of %s failed: %s"
+msgstr "verifica di %s fallita: %s"
+
+#, c-format
+msgid "Job #%d is already cancelled - can't cancel."
+msgstr "L'operazione #%d Ă¨ giĂ  annullata - impossibile annullare."
+
+#, c-format
+msgid "Job #%d is already aborted - can't cancel."
+msgstr "L'operazione #%d Ă¨ giĂ  interrotta - impossibile annullare."
+
+#, c-format
+msgid "Job #%d is already completed - can't cancel."
+msgstr "L'operazione #%d Ă¨ giĂ  completata - impossibile annullare."
+
+#, c-format
+msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
+msgstr "Devi accedere a questa pagina usando l'URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
+
+#, c-format
+msgid "Unsupported format '%s'!"
+msgstr "Formato '%s' non supportato!"
+
+msgid "FAIL\n"
+msgstr "FAIL\n"
+
+#, c-format
+msgid ""
+"    Line %d is longer than 255 characters (%d)!\n"
+"        REF: Page 25, Line Length\n"
+msgstr ""
+"    La riga %d eccede i 255 caratteri (%d)!\n"
+"        RIF: Pagina 25, Lunghezza della riga\n"
+
+msgid ""
+"    Missing %!PS-Adobe-3.0 on first line!\n"
+"        REF: Page 17, 3.1 Conforming Documents\n"
+msgstr ""
+"    %!PS-Adobe-3.0 mancante alla prima riga!\n"
+"        RIF: Pagina 17, 3.1 Uniformare documenti\n"
+
+#, c-format
+msgid ""
+"    Bad %%%%Pages: on line %d!\n"
+"        REF: Page 43, %%%%Pages:\n"
+msgstr ""
+"    %%%%Pages: errato alla riga %d!\n"
+"        RIF: Pagina 43, %%%%Pages:\n"
+
+#, c-format
+msgid ""
+"    Bad %%%%BoundingBox: on line %d!\n"
+"        REF: Page 39, %%%%BoundingBox:\n"
+msgstr ""
+"    %%%%BoundingBox: errato alla riga %d!\n"
+"        RIF: Pagina 39, %%%%BoundingBox:\n"
+
+#, c-format
+msgid ""
+"    Bad %%%%Page: on line %d!\n"
+"        REF: Page 53, %%%%Page:\n"
+msgstr ""
+"    %%%%Page: errato alla riga %d!\n"
+"        RIF: Pagina 53, %%%%Page:\n"
+
+#, c-format
+msgid ""
+"    Missing or bad %%BoundingBox: comment!\n"
+"        REF: Page 39, %%BoundingBox:\n"
+msgstr ""
+"    Commento %%BoundingBox: mancante o errato!\n"
+"        RIF: Pagina 39, %%BoundingBox:\n"
+
+#, c-format
+msgid ""
+"    Missing or bad %%Pages: comment!\n"
+"        REF: Page 43, %%Pages:\n"
+msgstr ""
+"    Commento %%Pages: mancante o errato!\n"
+"        RIF: Pagina 43, %%Pages:\n"
+
+#, c-format
+msgid ""
+"    Missing %%EndComments comment!\n"
+"        REF: Page 41, %%EndComments\n"
+msgstr ""
+"    Commento %%EndComments mancante!\n"
+"        RIF: Pagina 41, %%EndComments\n"
+
+#, c-format
+msgid ""
+"    Missing or bad %%Page: comments!\n"
+"        REF: Page 53, %%Page:\n"
+msgstr ""
+"    Commento %%Page: mancante o errato!\n"
+"        RIF: Pagina 53, %%Page:\n"
+
+#, c-format
+msgid "    Too many %%EndDocument comments!\n"
+msgstr "    Troppi commenti %%EndDocument!\n"
+
+#, c-format
+msgid "    Too many %%BeginDocument comments!\n"
+msgstr "    Troppi commenti %%BeginDocument!\n"
+
+#, c-format
+msgid "    Saw %d lines that exceeded 255 characters!\n"
+msgstr "    Trovate %d righe che eccedono i 255 caratteri!\n"
+
+msgid "PASS\n"
+msgstr "PASS\n"
+
+msgid "    Warning: file contains binary data!\n"
+msgstr "    Attenzione: il file contiene dati binari!\n"
+
+#, c-format
+msgid "    Warning: obsolete DSC version %.1f in file!\n"
+msgstr "    Attenzione: versione DSC %.1f obsoleta nel file!\n"
+
+#, c-format
+msgid "    Warning: no %%EndComments comment in file!\n"
+msgstr "    Attenzione: nessun commento %%EndComments nel file!\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 ""
+"Uso: cupstestdsc [opzioni] nomefile.ps [... nomefile.ps]\n"
+"       cupstestdsc [opzioni] -\n"
+"\n"
+"Opzioni:\n"
+"\n"
+"    -h       Mostra l'utilizzo del programma\n"
+"\n"
+"    Nota: questo programma valida solo i commenti DSC, non il PostScript stesso.\n"
+
+#, c-format
+msgid "Password for %s on %s? "
+msgstr "Password per %s su %s? "
+
+msgid ""
+"      **FAIL**  1284DeviceId must be 1284DeviceID!\n"
+"                REF: Page 72, section 5.5\n"
+msgstr ""
+"      **FAIL**  1284DeviceId deve essere 1284DeviceID!\n"
+"                RIF: Pagina 72, sezione 5.5\n"
+
index a57f56484d1d7935a3893c225654def599db72b2..51d3158638b5175e9df8473d1e888c599f9a0f89 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: cups.list.in 6003 2006-10-02 16:26:04Z mike $"
+# "$Id: cups.list.in 6118 2006-11-16 13:34:44Z mike $"
 #
 #   ESP Package Manager (EPM) file list for the Common UNIX Printing
 #   System (CUPS).
 %subpackage et
 %description Estonian support
 
+%subpackage it
+%description Italian support
+
 %subpackage ja
 %description Japanese support
 
@@ -358,6 +361,8 @@ f 0644 root sys $LOCALEDIR/de/cups_de.po locale/cups_de.po
 f 0644 root sys $LOCALEDIR/es/cups_es.po locale/cups_es.po
 %subpackage et
 f 0644 root sys $LOCALEDIR/et/cups_et.po locale/cups_et.po
+%subpackage it
+f 0644 root sys $LOCALEDIR/it/cups_it.po locale/cups_it.po
 %subpackage ja
 f 0644 root sys $LOCALEDIR/ja/cups_ja.po locale/cups_ja.po
 %subpackage pl
@@ -430,6 +435,9 @@ f 0644 root sys $DATADIR/templates/es templates/es/*.tmpl
 %subpackage et
 d 0755 root sys $DATADIR/templates/et
 f 0644 root sys $DATADIR/templates/et templates/et/*.tmpl
+%subpackage it
+d 0755 root sys $DATADIR/templates/it
+f 0644 root sys $DATADIR/templates/it templates/it/*.tmpl
 %subpackage ja
 d 0755 root sys $DATADIR/templates/ja
 f 0644 root sys $DATADIR/templates/ja templates/ja/*.tmpl
@@ -525,6 +533,11 @@ d 0755 root sys $DOCDIR/et
 f 0644 root sys $DOCDIR/et doc/et/*.html
 d 0755 root sys $DOCDIR/et/images -
 f 0644 root sys $DOCDIR/et/images doc/et/images/*.gif
+%subpackage it
+d 0755 root sys $DOCDIR/it
+f 0644 root sys $DOCDIR/it doc/it/*.html
+d 0755 root sys $DOCDIR/it/images -
+f 0644 root sys $DOCDIR/it/images doc/it/images/*.gif
 %subpackage ja
 d 0755 root sys $DOCDIR/ja
 f 0644 root sys $DOCDIR/ja doc/ja/*.html
@@ -617,5 +630,5 @@ f 0644 root sys $XINETD/cups-lpd init/cups-lpd
 %subpackage
 
 #
-# End of "$Id: cups.list.in 6003 2006-10-02 16:26:04Z mike $".
+# End of "$Id: cups.list.in 6118 2006-11-16 13:34:44Z mike $".
 #
index 35efdd458c9f47367c3eb4c4bdaf9fdfdeba6466..db75b6bc555293d369022b1b02fe827ee5b2238e 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: cups.spec.in 6006 2006-10-02 17:56:40Z mike $"
+# "$Id: cups.spec.in 6118 2006-11-16 13:34:44Z mike $"
 #
 #   RPM "spec" file for the Common UNIX Printing System (CUPS).
 #
@@ -91,6 +91,11 @@ Summary: Common UNIX Printing System - Estonian support
 Group: System Environment/Daemons
 Requires: %{name} = %{epoch}:%{version}
 
+%package it
+Summary: Common UNIX Printing System - Italian support
+Group: System Environment/Daemons
+Requires: %{name} = %{epoch}:%{version}
+
 %package ja
 Summary: Common UNIX Printing System - Japanese support
 Group: System Environment/Daemons
@@ -144,6 +149,10 @@ UNIX
 The Common UNIX Printing System provides a portable printing layer for 
 UNIX® operating systems. This package provides Estonian support.
 
+%description it
+The Common UNIX Printing System provides a portable printing layer for 
+UNIX® operating systems. This package provides Italian support.
+
 %description ja
 The Common UNIX Printing System provides a portable printing layer for 
 UNIX® operating systems. This package provides Japanese support.
@@ -421,6 +430,16 @@ rm -rf $RPM_BUILD_ROOT
 /usr/share/cups/templates/et/*
 /usr/share/locale/et/cups_et.po
 
+%files it
+%defattr(-,root,root)
+%dir /usr/share/doc/cups/it
+/usr/share/doc/cups/it/index.html
+%dir /usr/share/doc/cups/it/images
+/usr/share/doc/cups/it/images/*
+%dir /usr/share/cups/templates/it
+/usr/share/cups/templates/it/*
+/usr/share/locale/it/cups_it.po
+
 %files ja
 %defattr(-,root,root)
 %dir /usr/share/doc/cups/ja
@@ -459,5 +478,5 @@ rm -rf $RPM_BUILD_ROOT
 
 
 #
-# End of "$Id: cups.spec.in 6006 2006-10-02 17:56:40Z mike $".
+# End of "$Id: cups.spec.in 6118 2006-11-16 13:34:44Z mike $".
 #
index 85e2ac2057347dce104636e40b0c08f5134aa499..8a338d412224a365e7980a47e16f92a3f0e19c79 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: client.c 6027 2006-10-11 21:04:58Z mike $"
+ * "$Id: client.c 6111 2006-11-15 20:28:39Z mike $"
  *
  *   Client routines for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -426,7 +426,8 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
 
     con->http.encryption = HTTP_ENCRYPT_ALWAYS;
 
-    encrypt_client(con);
+    if (!encrypt_client(con))
+      cupsdCloseClient(con);
   }
   else
     con->auto_ssl = 1;
@@ -745,7 +746,9 @@ cupsdReadClient(cupsd_client_t *con)        /* I - Client to read from */
                       "cupsdReadClient: Saw first byte %02X, auto-negotiating SSL/TLS session...",
                       buf[0] & 255);
 
-      encrypt_client(con);
+      if (!encrypt_client(con))
+        return (cupsdCloseClient(con));
+
       return (1);
     }
   }
@@ -1056,7 +1059,8 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
        if (cupsdFlushHeader(con) < 0)
          return (cupsdCloseClient(con));
 
-        encrypt_client(con);
+        if (!encrypt_client(con))
+         return (cupsdCloseClient(con));
 #else
        if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED))
          return (cupsdCloseClient(con));
@@ -1103,7 +1107,8 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
        if (cupsdFlushHeader(con) < 0)
          return (cupsdCloseClient(con));
 
-        encrypt_client(con);
+        if (!encrypt_client(con))
+         return (cupsdCloseClient(con));
 #else
        if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED))
          return (cupsdCloseClient(con));
@@ -2587,6 +2592,7 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
 #  ifdef HAVE_LIBSSL
   SSL_CTX      *context;               /* Context for encryption */
   SSL          *conn;                  /* Connection for encryption */
+  BIO          *bio;                   /* BIO data */
   unsigned long        error;                  /* Error code */
 
 
@@ -2614,9 +2620,12 @@ encrypt_client(cupsd_client_t *con)      /* I - Client to encrypt */
   SSL_CTX_use_PrivateKey_file(context, ServerKey, SSL_FILETYPE_PEM);
   SSL_CTX_use_certificate_file(context, ServerCertificate, SSL_FILETYPE_PEM);
 
+  bio = BIO_new(_httpBIOMethods());
+  BIO_ctrl(bio, BIO_C_SET_FILE_PTR, 0, (char *)HTTP(con));
+
   conn = SSL_new(context);
+  SSL_set_bio(conn, bio, bio);
 
-  SSL_set_fd(conn, con->http.fd);
   if (SSL_accept(conn) != 1)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
@@ -2689,8 +2698,9 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
   gnutls_init(&(conn->session), GNUTLS_SERVER);
   gnutls_set_default_priority(conn->session);
   gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials);
-  gnutls_transport_set_ptr(conn->session,
-                           (gnutls_transport_ptr)((long)con->http.fd));
+  gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr)HTTP(con));
+  gnutls_transport_set_pull_function(conn->session, _httpReadGNUTLS);
+  gnutls_transport_set_push_function(conn->session, _httpWriteGNUTLS);
 
   error = gnutls_handshake(conn->session);
 
@@ -2720,7 +2730,6 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
 #  elif defined(HAVE_CDSASSL)
   OSStatus     error;                  /* Error code */
   http_tls_t   *conn;                  /* CDSA connection information */
-  cdsa_conn_ref_t u;                   /* Connection reference union */
 
 
   if ((conn = (http_tls_t *)malloc(sizeof(http_tls_t))) == NULL)
@@ -2743,7 +2752,7 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
   if (!conn->certsArray)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "EncryptClient: Could not find signing key in keychain "
+                   "encrypt_client: Could not find signing key in keychain "
                    "\"%s\"", ServerCertificate);
     error = errSSLBadCert; /* errSSLBadConfiguration is a better choice, but not available on 10.2.x */
   }
@@ -2758,15 +2767,7 @@ encrypt_client(cupsd_client_t *con)      /* I - Client to encrypt */
     error = SSLSetProtocolVersionEnabled(conn->session, kSSLProtocol2, false);
 
   if (!error)
-  {
-   /*
-    * Use a union to resolve warnings about int/pointer size mismatches...
-    */
-
-    u.connection = NULL;
-    u.sock       = con->http.fd;
-    error        = SSLSetConnection(conn->session, u.connection);
-  }
+    error = SSLSetConnection(conn->session, HTTP(con));
 
   if (!error)
     error = SSLSetAllowsExpiredCerts(conn->session, true);
@@ -4200,5 +4201,5 @@ write_file(cupsd_client_t *con,           /* I - Client connection */
 
 
 /*
- * End of "$Id: client.c 6027 2006-10-11 21:04:58Z mike $".
+ * End of "$Id: client.c 6111 2006-11-15 20:28:39Z mike $".
  */
index 75b44a7eb8a1a845023b59d92e2d12328d50dd7c..4dff6f6348e8c3c85551965b869ac10ed7ad906c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: dirsvc.c 6003 2006-10-02 16:26:04Z mike $"
+ * "$Id: dirsvc.c 6090 2006-11-14 16:35:27Z mike $"
  *
  *   Directory services routines for the Common UNIX Printing System (CUPS).
  *
@@ -159,6 +159,17 @@ cupsdLoadRemoteCache(void)
   time_t               now;            /* Current time */
 
 
+ /*
+  * Don't load the cache if the CUPS remote protocol is disabled...
+  */
+
+  if (!(BrowseRemoteProtocols & BROWSE_CUPS))
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                    "cupsdLoadRemoteCache: Not loading remote cache.");
+    return;
+  }
+
  /*
   * Open the remote.cache file...
   */
@@ -3181,5 +3192,5 @@ slp_url_callback(
 
 
 /*
- * End of "$Id: dirsvc.c 6003 2006-10-02 16:26:04Z mike $".
+ * End of "$Id: dirsvc.c 6090 2006-11-14 16:35:27Z mike $".
  */
index 101f178de7a747e72e8a69011c1777d6a2ba58b8..434cacf89200fecc2de4643da9fb5f13a8e9ac1c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: main.c 5878 2006-08-24 15:55:42Z mike $"
+ * "$Id: main.c 6090 2006-11-14 16:35:27Z mike $"
  *
  *   Scheduler main loop for the Common UNIX Printing System (CUPS).
  *
  *   cupsdSetStringf()         - Set a formatted string value.
  *   launchd_checkin()         - Check-in with launchd and collect the
  *                               listening fds.
+ *   launchd_create_dict()     - Create a dictionary representing the launchd
+ *                              config file org.cups.cupsd.plist.
  *   launchd_reload()          - Tell launchd to reload the configuration
  *                               file to pick up the new listening directives.
- *   launchd_sync_conf()       - Re-write the launchd(8) config file
+ *   launchd_sync_conf()       - Re-write the launchd config file
  *                              org.cups.cupsd.plist based on cupsd.conf.
  *   parent_handler()          - Catch USR1/CHLD signals...
  *   process_children()        - Process all dead children...
  */
 
 #ifdef HAVE_LAUNCHD
-static void    launchd_checkin(void);
-static void    launchd_reload(void);
-static int     launchd_sync_conf(void);
+static void            launchd_checkin(void);
+static CFDictionaryRef launchd_create_dict(void);
+static void            launchd_reload(void);
+static int             launchd_sync_conf(void);
 #endif /* HAVE_LAUNCHD */
-
-static void    parent_handler(int sig);
-static void    process_children(void);
-static void    sigchld_handler(int sig);
-static void    sighup_handler(int sig);
-static void    sigterm_handler(int sig);
-static long    select_timeout(int fds);
-static void    usage(int status);
+static void            parent_handler(int sig);
+static void            process_children(void);
+static void            sigchld_handler(int sig);
+static void            sighup_handler(int sig);
+static void            sigterm_handler(int sig);
+static long            select_timeout(int fds);
+static void            usage(int status);
 
 
 /*
  * Local globals...
  */
 
-static int     parent_signal = 0;      /* Set to signal number from child */
-static int     holdcount = 0;          /* Number of times "hold" was called */
+static int             parent_signal = 0;
+                                       /* Set to signal number from child */
+static int             holdcount = 0;  /* Number of times "hold" was called */
 #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-static sigset_t        holdmask;               /* Old POSIX signal mask */
+static sigset_t                holdmask;       /* Old POSIX signal mask */
 #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-static int     dead_children = 0;      /* Dead children? */
-static int     stop_scheduler = 0;     /* Should the scheduler stop? */
+static int             dead_children = 0;
+                                       /* Dead children? */
+static int             stop_scheduler = 0;
+                                       /* Should the scheduler stop? */
+
+#ifdef HAVE_LAUNCHD
+static CFURLRef                launchd_conf_url = NULL;
+                                       /* org.cups.cupsd.plist url */
+static CFDictionaryRef launchd_conf_dict = NULL;
+                                       /* org.cups.cupsd.plist dict */
+#endif /* HAVE_LAUNCHD */
 
 
 /*
@@ -123,8 +135,11 @@ main(int  argc,                            /* I - Number of command-line args */
                        activity,       /* Client activity timer */
                        browse_time,    /* Next browse send time */
                        senddoc_time,   /* Send-Document time */
-                       expire_time;    /* Subscription expire time */
-  time_t               mallinfo_time;  /* Malloc information time */
+                       expire_time,    /* Subscription expire time */
+#ifndef __APPLE__
+                       netif_time,     /* Network interface poll time */
+#endif /* !__APPLE__ */
+                       mallinfo_time;  /* Malloc information time */
   size_t               string_count,   /* String count */
                        alloc_bytes,    /* Allocated string bytes */
                        total_bytes;    /* Total string bytes */
@@ -536,6 +551,9 @@ main(int  argc,                             /* I - Number of command-line args */
   senddoc_time  = time(NULL);
   expire_time   = time(NULL);
   fds           = 1;
+#ifndef __APPLE__
+  netif_time    = 0;
+#endif /* !__APPLE__ */
 
   while (!stop_scheduler)
   {
@@ -656,7 +674,7 @@ main(int  argc,                             /* I - Number of command-line args */
 #if HAVE_LAUNCHD
    /*
     * If no other work is scheduled and we're being controlled by
-    * launchd(8) then timeout after 'LaunchdTimeout' seconds of
+    * launchd then timeout after 'LaunchdTimeout' seconds of
     * inactivity...
     */
 
@@ -761,7 +779,7 @@ main(int  argc,                             /* I - Number of command-line args */
 
 #if HAVE_LAUNCHD
    /*
-    * If no other work was scheduled and we're being controlled by launchd(8)
+    * If no other work was scheduled and we're being controlled by launchd
     * then timeout after 'LaunchdTimeout' seconds of inactivity...
     */
 
@@ -810,8 +828,23 @@ main(int  argc,                            /* I - Number of command-line args */
     */
 
 #ifdef __APPLE__
+   /*
+    * Mac OS X provides the SystemConfiguration framework for system
+    * configuration change events...
+    */
+
     if (SysEventPipes[0] >= 0 && FD_ISSET(SysEventPipes[0], input))
       cupsdUpdateSystemMonitor();
+#else
+   /*
+    * All other operating systems need to poll for changes...
+    */
+
+    if ((current_time - netif_time) >= 60)
+    {
+      NetIFUpdate = 1;
+      netif_time  = current_time;
+    }
 #endif /* __APPLE__ */
 
    /*
@@ -1082,6 +1115,12 @@ main(int  argc,                          /* I - Number of command-line args */
   */
 
   launchd_sync_conf();
+
+  if (launchd_conf_url)
+    CFRelease(launchd_conf_url);
+
+  if (launchd_conf_dict)
+    CFRelease(launchd_conf_dict);
 #endif /* HAVE_LAUNCHD */
 
 #ifdef __sgi
@@ -1449,7 +1488,7 @@ launchd_checkin(void)
        {
          if (BrowseSocket != -1)
            close(BrowseSocket);
-  
+
          BrowseSocket = launch_data_get_fd(tmp);
        }
        else
@@ -1472,6 +1511,222 @@ launchd_checkin(void)
 }
 
 
+/*
+ * 'launchd_create_dict()' - Create a dictionary representing the launchd
+ *                          config file org.cups.cupsd.plist.
+ */
+
+static CFDictionaryRef                 /* O - CFDictionary */
+launchd_create_dict(void)
+{
+  int                    portnum;      /* Port number */
+  bool                   runatload;    /* Run at load? */
+  CFMutableDictionaryRef  cupsd_dict,  /* org.cups.cupsd.plist dictionary */
+                         sockets,      /* Sockets dictionary */
+                         listener;     /* Listener dictionary */
+  CFMutableArrayRef      array;        /* Array */
+  CFNumberRef            socket_mode;  /* Domain socket mode bits */
+  CFStringRef            socket_path;  /* Domain socket path */
+  CFTypeRef              value;        /* CF values */
+  cupsd_listener_t       *lis;         /* Current listening socket */
+  struct servent         *service;     /* Services data base entry */
+  char                   temp[1024];   /* Temporary buffer for value */
+
+
+  if ((cupsd_dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
+                               &kCFTypeDictionaryKeyCallBacks,
+                               &kCFTypeDictionaryValueCallBacks)) == NULL)
+    return NULL;
+
+  CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_LABEL),
+                      CFSTR("org.cups.cupsd"));
+  CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_ONDEMAND),
+                      kCFBooleanTrue);
+
+ /*
+  * Run-at-load if there are active jobs, polling or shared printers
+  * to advertise...
+  */
+  
+  runatload = (cupsArrayCount(ActiveJobs) || NumPolled || 
+              (Browsing && BrowseLocalProtocols && 
+               NumBrowsers && cupsArrayCount(Printers))) ? true : false;
+
+  CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_RUNATLOAD),
+                      runatload ? kCFBooleanTrue : kCFBooleanFalse);
+#  ifdef LAUNCH_JOBKEY_SERVICEIPC
+  CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_SERVICEIPC),
+                      kCFBooleanTrue);
+#  endif /* LAUNCH_JOBKEY_SERVICEIPC */
+
+  if ((array = CFArrayCreateMutable(kCFAllocatorDefault, 2,
+                                   &kCFTypeArrayCallBacks)) != NULL)
+  {
+    CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_PROGRAMARGUMENTS),
+                        array);
+    CFArrayAppendValue(array, CFSTR("/usr/sbin/cupsd"));
+    CFArrayAppendValue(array, CFSTR("-l"));
+    CFRelease(array);
+  }
+
+ /*
+  * Add a sockets dictionary...
+  */
+
+  if ((sockets = (CFMutableDictionaryRef)CFDictionaryCreateMutable(
+                             kCFAllocatorDefault, 0,
+                             &kCFTypeDictionaryKeyCallBacks,
+                             &kCFTypeDictionaryValueCallBacks)) != NULL)
+  {
+    CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_SOCKETS), sockets);
+
+   /*
+    * Add a Listeners array to the sockets dictionary...
+    */
+
+    if ((array = CFArrayCreateMutable(kCFAllocatorDefault, 0,
+                                     &kCFTypeArrayCallBacks)) != NULL)
+    {
+      CFDictionaryAddValue(sockets, CFSTR("Listeners"), array);
+
+     /*
+      * For each listener add a dictionary to the listeners array...
+      */
+
+      for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners);
+          lis;
+          lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
+      {
+       if ((listener = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
+                             &kCFTypeDictionaryKeyCallBacks,
+                             &kCFTypeDictionaryValueCallBacks)) != NULL)
+       {
+         CFArrayAppendValue(array, listener);
+
+#  ifdef AF_LOCAL
+         if (lis->address.addr.sa_family == AF_LOCAL)
+         {
+           if ((socket_path = CFStringCreateWithCString(kCFAllocatorDefault,
+                                     lis->address.un.sun_path,
+                                     kCFStringEncodingUTF8)))
+           {
+             CFDictionaryAddValue(listener,
+                                  CFSTR(LAUNCH_JOBSOCKETKEY_PATHNAME),
+                                  socket_path);
+             CFRelease(socket_path);
+           }
+           portnum = 0140777; /* (S_IFSOCK|S_IRWXU|S_IRWXG|S_IRWXO) or *
+                               * 49663d decimal                        */
+           if ((socket_mode = CFNumberCreate(kCFAllocatorDefault,
+                                             kCFNumberIntType, &portnum)))
+           {
+             CFDictionaryAddValue(listener, CFSTR("SockPathMode"),
+                                  socket_mode);
+             CFRelease(socket_mode);
+           }
+         }
+         else
+#  endif /* AF_LOCAL */
+         {
+#  ifdef AF_INET6
+           if (lis->address.addr.sa_family == AF_INET6)
+           {
+             CFDictionaryAddValue(listener,
+                                  CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
+                                  CFSTR("IPv6"));
+             portnum = lis->address.ipv6.sin6_port;
+           }
+           else
+#  endif /* AF_INET6 */
+           {
+             CFDictionaryAddValue(listener,
+                                  CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
+                                  CFSTR("IPv4"));
+             portnum = lis->address.ipv4.sin_port;
+           }
+
+           if ((service = getservbyport(portnum, NULL)))
+             value = CFStringCreateWithCString(kCFAllocatorDefault,
+                                               service->s_name,
+                                               kCFStringEncodingUTF8);
+           else
+             value = CFNumberCreate(kCFAllocatorDefault,
+                                    kCFNumberIntType, &portnum);
+
+           if (value)
+           {
+             CFDictionaryAddValue(listener,
+                                  CFSTR(LAUNCH_JOBSOCKETKEY_SERVICENAME),
+                                  value);
+             CFRelease(value);
+           }   
+
+           httpAddrString(&lis->address, temp, sizeof(temp));
+           if ((value = CFStringCreateWithCString(kCFAllocatorDefault, temp,
+                                                  kCFStringEncodingUTF8)))
+           {
+             CFDictionaryAddValue(listener,
+                                  CFSTR(LAUNCH_JOBSOCKETKEY_NODENAME),
+                                  value);
+             CFRelease(value);
+           }
+         }
+
+         CFRelease(listener);
+       }
+      }
+
+      CFRelease(array);
+    }
+
+   /*
+    * Add the BrowseSocket to the sockets dictionary...
+    */
+
+    if (Browsing && (BrowseRemoteProtocols & BROWSE_CUPS))
+    {
+      if ((array = CFArrayCreateMutable(kCFAllocatorDefault, 0,
+                                       &kCFTypeArrayCallBacks)) != NULL)
+      {
+       CFDictionaryAddValue(sockets, CFSTR("BrowseSockets"), array);
+
+       if ((listener = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
+                               &kCFTypeDictionaryKeyCallBacks,
+                               &kCFTypeDictionaryValueCallBacks)) != NULL)
+       {
+         CFArrayAppendValue(array, listener);
+
+         CFDictionaryAddValue(listener, CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
+                              CFSTR("IPv4"));
+         CFDictionaryAddValue(listener, CFSTR(LAUNCH_JOBSOCKETKEY_TYPE),
+                              CFSTR("dgram"));
+
+         if ((service = getservbyport(BrowsePort, NULL)))
+           value = CFStringCreateWithCString(kCFAllocatorDefault,
+                                             service->s_name,
+                                             kCFStringEncodingUTF8);
+         else
+           value = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType,
+                                  &BrowsePort);
+
+         CFDictionaryAddValue(listener,
+                              CFSTR(LAUNCH_JOBSOCKETKEY_SERVICENAME), value);
+         CFRelease(value);
+
+         CFRelease(listener);
+       }
+
+       CFRelease(array);
+      }
+    }
+
+    CFRelease(sockets);
+  }
+
+  return (cupsd_dict);
+}
+
+
 /*
  * 'launchd_reload()' - Tell launchd to reload the configuration file to pick
  *                      up the new listening directives.
@@ -1573,272 +1828,104 @@ launchd_reload(void)
 
 
 /*
- * 'launchd_sync_conf()' - Re-write the launchd(8) config file
+ * 'launchd_sync_conf()' - Rewrite the launchd config file
  *                        org.cups.cupsd.plist based on cupsd.conf.
  */
 
 static int                             /* O - 1 if the file was updated */
 launchd_sync_conf(void)
 {
-  int                    portnum;      /* Port number */
-  CFMutableDictionaryRef  cupsd_dict,  /* org.cups.cupsd.plist dictionary */
-                         sockets,      /* Sockets dictionary */
-                         listener;     /* Listener dictionary */
-  CFDataRef              resourceData; /* XML property list */
-  CFMutableArrayRef      array;        /* Array */
-  CFNumberRef            socket_mode;  /* Domain socket mode bits */
-  CFStringRef            socket_path;  /* Domain socket path */
-  CFTypeRef              value;        /* CF value */
-  CFURLRef               fileURL;      /* File URL */
-  SInt32                 errorCode;    /* Error code */
-  cupsd_listener_t       *lis;         /* Current listening socket */
-  struct servent         *service;     /* Services data base entry */
-  char                   temp[1024];   /* Temporary buffer for value */
-  struct stat            cupsd_sb,     /* File info for cupsd.conf */
-                         launchd_sb;   /* File info for org.cups.cupsd.plist */
+  SInt32               errorCode;      /* Error code */
+  CFDataRef            resourceData;   /* XML property list */
+  CFDictionaryRef      cupsd_dict;     /* New org.cups.cupsd.plist dict */
 
 
  /*
-  * If the launchd conf file modification time is newer than the cupsd.conf
-  * time then there's nothing to do...
+  * If needed reconstitute the existing org.cups.cupsd.plist...
   */
 
-  if (!stat(ConfigurationFile, &cupsd_sb) &&
-      !stat(LaunchdConf, &launchd_sb) &&
-      launchd_sb.st_mtimespec.tv_sec >= cupsd_sb.st_mtimespec.tv_sec)
+  if (!launchd_conf_url && 
+      !(launchd_conf_url = CFURLCreateFromFileSystemRepresentation(
+                               kCFAllocatorDefault,
+                               (const unsigned char *)LaunchdConf,
+                               strlen(LaunchdConf), false)))
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG,
-                    "launchd_sync_conf: Nothing to do, pid=%d.",
-                   (int)getpid());
+    cupsdLogMessage(CUPSD_LOG_ERROR, "launchd_sync_conf: "
+                   "Unable to create file URL for \"%s\"\n", LaunchdConf);
     return (0);
   }
 
- /*
-  * Time to write a new 'org.cups.cupsd.plist' file.
-  * Create the new dictionary and populate it with values...
-  */
-
-  if ((cupsd_dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
-                               &kCFTypeDictionaryKeyCallBacks,
-                               &kCFTypeDictionaryValueCallBacks)) != NULL)
+  if (!launchd_conf_dict)
   {
-    CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_LABEL),
-                         CFSTR("org.cups.cupsd"));
-    CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_ONDEMAND),
-                         kCFBooleanTrue);
-
-    if ((Browsing && BrowseLocalProtocols && cupsArrayCount(Printers)) ||
-        cupsArrayCount(ActiveJobs) || NumPolled)
-      CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_RUNATLOAD),
-                           kCFBooleanTrue);
-    else
-      CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_RUNATLOAD),
-                           kCFBooleanFalse);
-
-#ifdef LAUNCH_JOBKEY_SERVICEIPC
-    CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_SERVICEIPC),
-                        kCFBooleanTrue);
-#endif  /* LAUNCH_JOBKEY_SERVICEIPC */
+    if (CFURLCreateDataAndPropertiesFromResource(NULL, launchd_conf_url, 
+                               &resourceData, NULL, NULL, &errorCode))
+    {
+      launchd_conf_dict = CFPropertyListCreateFromXMLData(NULL, resourceData,
+                                             kCFPropertyListImmutable, NULL);
+      CFRelease(resourceData);
+    }
 
-    if ((array = CFArrayCreateMutable(kCFAllocatorDefault, 2,
-                                      &kCFTypeArrayCallBacks)) != NULL)
+    if (!launchd_conf_dict)
     {
-      CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_PROGRAMARGUMENTS),
-                           array);
-      CFArrayAppendValue(array, CFSTR("/usr/sbin/cupsd"));
-      CFArrayAppendValue(array, CFSTR("-l"));
-      CFRelease(array);
+      cupsdLogMessage(CUPSD_LOG_ERROR, "launchd_sync_conf: "
+                     "Unable to create dictionary for \"%s\"\n", LaunchdConf);
     }
+  }
 
  /*
-    * Add a sockets dictionary...
-    */
+ /*
+  * Create a new org.cups.cupsd.plist dictionary...
+  */
 
-    if ((sockets = (CFMutableDictionaryRef)CFDictionaryCreateMutable(
-                               kCFAllocatorDefault, 0,
-                               &kCFTypeDictionaryKeyCallBacks,
-                               &kCFTypeDictionaryValueCallBacks)) != NULL)
-    {
-      CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_SOCKETS), sockets);
+  if ((cupsd_dict = launchd_create_dict()) == NULL)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR, "launchd_sync_conf: "
+                   "Unable to create file URL for \"%s\"\n", LaunchdConf);
+    return (0);
+  }
 
    /*
-      * Add a Listeners array to the sockets dictionary...
-      */
+ /*
+  * If the dictionaries are different write a new org.cups.cupsd.plist...
+  */
 
-      if ((array = CFArrayCreateMutable(kCFAllocatorDefault, 0,
-                                        &kCFTypeArrayCallBacks)) != NULL)
+  if (!CFEqual(cupsd_dict, launchd_conf_dict))
+  {
+    if ((resourceData = CFPropertyListCreateXMLData(kCFAllocatorDefault,
+                                                 cupsd_dict)))
+    {
+      if (CFURLWriteDataAndPropertiesToResource(launchd_conf_url, resourceData,
+                                                NULL, &errorCode))
       {
-       CFDictionaryAddValue(sockets, CFSTR("Listeners"), array);
-
        /*
-       * For each listener add a dictionary to the listeners array...
-       */
-
-       for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners);
-            lis;
-            lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
-       {
-         if ((listener = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
-                               &kCFTypeDictionaryKeyCallBacks,
-                               &kCFTypeDictionaryValueCallBacks)) != NULL)
-         {
-           CFArrayAppendValue(array, listener);
-
-#  ifdef AF_LOCAL
-           if (lis->address.addr.sa_family == AF_LOCAL)
-           {
-             if ((socket_path = CFStringCreateWithCString(kCFAllocatorDefault,
-                                       lis->address.un.sun_path,
-                                       kCFStringEncodingUTF8)))
-             {
-               CFDictionaryAddValue(listener,
-                                    CFSTR(LAUNCH_JOBSOCKETKEY_PATHNAME),
-                                    socket_path);
-               CFRelease(socket_path);
-             }
-             portnum = 0140777; /* (S_IFSOCK|S_IRWXU|S_IRWXG|S_IRWXO) or *
-                                 * 49663d decimal                        */
-             if ((socket_mode = CFNumberCreate(kCFAllocatorDefault,
-                                               kCFNumberIntType, &portnum)))
-             {
-               CFDictionaryAddValue(listener, CFSTR("SockPathMode"),
-                                    socket_mode);
-               CFRelease(socket_mode);
-             }
-           }
-           else
-#  endif /* AF_LOCAL */
-           {
-#  ifdef AF_INET6
-             if (lis->address.addr.sa_family == AF_INET6)
-             {
-               CFDictionaryAddValue(listener,
-                                    CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
-                                    CFSTR("IPv6"));
-               portnum = lis->address.ipv6.sin6_port;
-             }
-             else
-#  endif /* AF_INET6 */
-             {
-               CFDictionaryAddValue(listener,
-                                    CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
-                                    CFSTR("IPv4"));
-               portnum = lis->address.ipv4.sin_port;
-             }
-
-             if ((service = getservbyport(portnum, NULL)))
-               value = CFStringCreateWithCString(kCFAllocatorDefault,
-                                                 service->s_name,
-                                                 kCFStringEncodingUTF8);
-             else
-               value = CFNumberCreate(kCFAllocatorDefault,
-                                      kCFNumberIntType, &portnum);
-
-             if (value)
-             {
-               CFDictionaryAddValue(listener,
-                                    CFSTR(LAUNCH_JOBSOCKETKEY_SERVICENAME),
-                                    value);
-               CFRelease(value);
-             } 
-
-             httpAddrString(&lis->address, temp, sizeof(temp));
-             if ((value = CFStringCreateWithCString(kCFAllocatorDefault, temp,
-                                                    kCFStringEncodingUTF8)))
-             {
-               CFDictionaryAddValue(listener,
-                                    CFSTR(LAUNCH_JOBSOCKETKEY_NODENAME),
-                                    value);
-               CFRelease(value);
-             }
-           }
+        * The new cupsd dictionary becomes the on-disk launchd dictionary...
+        */
 
-           CFRelease(listener);
-         }
-       }
+       if (launchd_conf_dict)
+         CFRelease(launchd_conf_dict);
 
-       CFRelease(array);
+       launchd_conf_dict = cupsd_dict;
       }
-
-     /*
-      * Add the BrowseSocket to the sockets dictionary...
-      */
-
-      if (Browsing && (BrowseRemoteProtocols & BROWSE_CUPS))
+      else
       {
-       if ((array = CFArrayCreateMutable(kCFAllocatorDefault, 0,
-                                         &kCFTypeArrayCallBacks)) != NULL)
-       {
-         CFDictionaryAddValue(sockets, CFSTR("BrowseSockets"), array);
-
-         if ((listener = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
-                                 &kCFTypeDictionaryKeyCallBacks,
-                                 &kCFTypeDictionaryValueCallBacks)) != NULL)
-         {
-           CFArrayAppendValue(array, listener);
-
-           CFDictionaryAddValue(listener, CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
-                                CFSTR("IPv4"));
-           CFDictionaryAddValue(listener, CFSTR(LAUNCH_JOBSOCKETKEY_TYPE),
-                                CFSTR("dgram"));
+       cupsdLogMessage(CUPSD_LOG_WARN,
+                       "launchd_sync_conf: "
+                       "CFURLWriteDataAndPropertiesToResource(\"%s\") "
+                       "failed: %d\n",
+                       LaunchdConf, (int)errorCode);
 
-           if ((service = getservbyport(BrowsePort, NULL)))
-             value = CFStringCreateWithCString(kCFAllocatorDefault,
-                                               service->s_name,
-                                               kCFStringEncodingUTF8);
-           else
-             value = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType,
-                                    &BrowsePort);
-
-           CFDictionaryAddValue(listener,
-                                CFSTR(LAUNCH_JOBSOCKETKEY_SERVICENAME), value);
-           CFRelease(value);
-
-           CFRelease(listener);
-         }
-
-         CFRelease(array);
-       }
+       CFRelease(cupsd_dict);
       }
-
-      CFRelease(sockets);
+  
+      CFRelease(resourceData);
     }
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG,
-                    "launchd_sync_conf: Updating \"%s\", pid=%d\n",
-                   LaunchdConf, (int)getpid());
-
-    if ((fileURL = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault,
-                               (const unsigned char *)LaunchdConf,
-                               strlen(LaunchdConf), false)))
-    {
-      if ((resourceData = CFPropertyListCreateXMLData(kCFAllocatorDefault,
-                                                      cupsd_dict)))
-      {
-       if (!CFURLWriteDataAndPropertiesToResource(fileURL, resourceData,
-                                                  NULL, &errorCode))
-       {
-         cupsdLogMessage(CUPSD_LOG_WARN,
-                         "launchd_sync_conf: "
-                         "CFURLWriteDataAndPropertiesToResource(\"%s\") "
-                         "failed: %d\n",
-                         LaunchdConf, (int)errorCode);
-        }
-
-       CFRelease(resourceData);
-      }
-
-      CFRelease(fileURL);
-    }
+   /*
+    * Let the caller know we updated the file...
+    */
 
-    CFRelease(cupsd_dict);
+    return (1);
   }
 
- /*
-  * Let the caller know we updated the file...
-  */
-
-  return (1);
+  return (0);
 }
 #endif /* HAVE_LAUNCHD */
 
@@ -2253,5 +2340,5 @@ usage(int status)                 /* O - Exit status */
 
 
 /*
- * End of "$Id: main.c 5878 2006-08-24 15:55:42Z mike $".
+ * End of "$Id: main.c 6090 2006-11-14 16:35:27Z mike $".
  */
index eb89b1217dcd40f0a5c036b96b4a005cf3011990..e63d4f44e78abdee5316e90e85482fd177a7155a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: network.c 5428 2006-04-18 20:45:30Z mike $"
+ * "$Id: network.c 6090 2006-11-14 16:35:27Z mike $"
  *
  *   Network interface functions for the Common UNIX Printing System
  *   (CUPS) scheduler.
@@ -60,7 +60,8 @@ cupsdNetIFFind(const char *name)      /* I - Name of interface */
   * Update the interface list as needed...
   */
 
-  cupsdNetIFUpdate();
+  if (NetIFUpdate)
+    cupsdNetIFUpdate();
 
  /*
   * Search for the named interface...
@@ -113,14 +114,13 @@ cupsdNetIFUpdate(void)
 
 
  /*
-  * Update the network interface list no more often than once a
-  * minute...
+  * Only update the list if we need to...
   */
 
-  if ((time(NULL) - NetIFTime) < 60)
+  if (!NetIFUpdate)
     return;
 
-  NetIFTime = time(NULL);
+  NetIFUpdate = 0;
 
  /*
   * Free the old interfaces...
@@ -314,5 +314,5 @@ compare_netif(cupsd_netif_t *a,             /* I - First network interface */
 
 
 /*
- * End of "$Id: network.c 5428 2006-04-18 20:45:30Z mike $".
+ * End of "$Id: network.c 6090 2006-11-14 16:35:27Z mike $".
  */
index 21e810c3c81a757eb8063078e52a31badc7f7007..5d8c83f8a4b3a97054400d074e1c88b74924daa7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: network.h 5043 2006-02-01 18:55:16Z mike $"
+ * "$Id: network.h 6090 2006-11-14 16:35:27Z mike $"
  *
  *   Network interface definitions for the Common UNIX Printing System
  *   (CUPS) scheduler.
@@ -43,8 +43,8 @@ typedef struct cupsd_netif_s          /**** Network interface data ****/
  * Globals...
  */
 
-VAR time_t             NetIFTime       VALUE(0);
-                                       /* Network interface list time */
+VAR int                        NetIFUpdate     VALUE(1);
+                                       /* Network interface list needs updating */
 VAR cups_array_t       *NetIFList      VALUE(NULL);
                                        /* Array of network interfaces */
 
@@ -57,5 +57,5 @@ extern void           cupsdNetIFUpdate(void);
 
 
 /*
- * End of "$Id: network.h 5043 2006-02-01 18:55:16Z mike $".
+ * End of "$Id: network.h 6090 2006-11-14 16:35:27Z mike $".
  */
index 853ff86c8d5396b357daed0594778e355f718273..61f342dcb92750a9ed0fda1a587f44d6d0e0b9bb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: sysman.c 5833 2006-08-16 20:05:58Z mike $"
+ * "$Id: sysman.c 6090 2006-11-14 16:35:27Z mike $"
  *
  *   System management definitions for the Common UNIX Printing System (CUPS).
  *
@@ -115,11 +115,17 @@ static CFRunLoopRef       SysEventRunloop = NULL;
                                        /* The runloop. Access must be protected! */
 static CFStringRef     ComputerNameKey = NULL,
                                        /* Computer name key */
-                       NetworkGlobalKey = NULL,
-                                       /* Network global key */
+                       NetworkGlobalKeyIPv4 = NULL,
+                                       /* Network global IPv4 key */
+                       NetworkGlobalKeyIPv6 = NULL,
+                                       /* Network global IPv6 key */
+                       NetworkGlobalKeyDNS = NULL,
+                                       /* Network global DNS key */
                        HostNamesKey = NULL,
                                        /* Host name key */
-                       NetworkInterfaceKey = NULL;
+                       NetworkInterfaceKeyIPv4 = NULL,
+                                       /* Netowrk interface key */
+                       NetworkInterfaceKeyIPv6 = NULL;
                                        /* Netowrk interface key */
 
 
@@ -306,7 +312,6 @@ cupsdUpdateSystemMonitor(void)
        }
        else
        {
-        /* TODO: Possibly update when MDNS support is added? */
          cupsdLogMessage(CUPSD_LOG_DEBUG,
                          "Deregistering local printer \"%s\"", p->name);
          cupsdSendBrowseDelete(p);
@@ -333,12 +338,6 @@ cupsdUpdateSystemMonitor(void)
         cupsdLogMessage(CUPSD_LOG_DEBUG,
                        "System network configuration changed");
 
-       /*
-        * Force an update of the list of network interfaces in 2 seconds.
-        */
-
-        NetIFTime = time(NULL) - 58;
-
        /*
         * Resetting browse_time before calling cupsdSendBrowseList causes
        * browse packets to be sent for local shared printers.
@@ -407,8 +406,8 @@ sysEventThreadEntry(void)
   SCDynamicStoreRef    store    = NULL;/* System Config dynamic store */
   CFRunLoopSourceRef   powerRLS = NULL,/* Power runloop source */
                        storeRLS = NULL;/* System Config runloop source */
-  CFStringRef          key[3],         /* System Config keys */
-                       pattern[1];     /* System Config patterns */
+  CFStringRef          key[5],         /* System Config keys */
+                       pattern[2];     /* System Config patterns */
   CFArrayRef           keys = NULL,    /* System Config key array*/
                        patterns = NULL;/* System Config pattern array */
   SCDynamicStoreContext        storeContext;   /* Dynamic store context */
@@ -449,33 +448,58 @@ sysEventThreadEntry(void)
   if (!ComputerNameKey)
     ComputerNameKey = SCDynamicStoreKeyCreateComputerName(NULL);
 
-  if (!NetworkGlobalKey)
-    NetworkGlobalKey =
+  if (!NetworkGlobalKeyIPv4)
+    NetworkGlobalKeyIPv4 =
         SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL,
                                                    kSCDynamicStoreDomainState,
                                                   kSCEntNetIPv4);
 
+  if (!NetworkGlobalKeyIPv6)
+    NetworkGlobalKeyIPv6 =
+        SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL,
+                                                   kSCDynamicStoreDomainState,
+                                                  kSCEntNetIPv6);
+
+  if (!NetworkGlobalKeyDNS)
+    NetworkGlobalKeyDNS = 
+       SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, 
+                                                  kSCDynamicStoreDomainState,
+                                                  kSCEntNetDNS);
+
   if (!HostNamesKey)
     HostNamesKey = SCDynamicStoreKeyCreateHostNames(NULL);
 
-  if (!NetworkInterfaceKey)
-    NetworkInterfaceKey =
+  if (!NetworkInterfaceKeyIPv4)
+    NetworkInterfaceKeyIPv4 =
         SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL,
                                                      kSCDynamicStoreDomainState,
                                                      kSCCompAnyRegex,
                                                      kSCEntNetIPv4);
 
-  if (store && ComputerNameKey && NetworkGlobalKey && HostNamesKey &&
-      NetworkInterfaceKey)
+  if (!NetworkInterfaceKeyIPv6)
+    NetworkInterfaceKeyIPv6 =
+        SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL,
+                                                     kSCDynamicStoreDomainState,
+                                                     kSCCompAnyRegex,
+                                                     kSCEntNetIPv6);
+
+  if (store && ComputerNameKey && HostNamesKey &&
+      NetworkGlobalKeyIPv4 && NetworkGlobalKeyIPv6 && NetworkGlobalKeyDNS &&
+      NetworkInterfaceKeyIPv4 && NetworkInterfaceKeyIPv6)
   {
     key[0]     = ComputerNameKey;
-    key[1]     = NetworkGlobalKey;
-    key[2]     = HostNamesKey;
-    pattern[0] = NetworkInterfaceKey;
+    key[1]     = NetworkGlobalKeyIPv4;
+    key[2]     = NetworkGlobalKeyIPv6;
+    key[3]     = NetworkGlobalKeyDNS;
+    key[4]     = HostNamesKey;
+
+    pattern[0] = NetworkInterfaceKeyIPv4;
+    pattern[1] = NetworkInterfaceKeyIPv6;
 
     keys     = CFArrayCreate(NULL, (const void **)key,
                                     sizeof(key) / sizeof(key[0]),
                                    &kCFTypeArrayCallBacks);
+
     patterns = CFArrayCreate(NULL, (const void **)pattern,
                              sizeof(pattern) / sizeof(pattern[0]),
                             &kCFTypeArrayCallBacks);
@@ -682,12 +706,17 @@ sysEventConfigurationNotifier(
 
   if (CFArrayContainsValue(changedKeys, range, ComputerNameKey))
     threadData->sysevent.event |= SYSEVENT_NAMECHANGED;
-
-  if (CFArrayContainsValue(changedKeys, range, NetworkGlobalKey) ||
-      CFArrayContainsValue(changedKeys, range, HostNamesKey) ||
-      CFArrayContainsValue(changedKeys, range, NetworkInterfaceKey))
+  else
+  {
     threadData->sysevent.event |= SYSEVENT_NETCHANGED;
 
+   /*
+    * Indicate the network interface list needs updating...
+    */
+
+    NetIFUpdate = 1;
+  }
+
  /*
   * Because we registered for several different kinds of change notifications 
   * this callback usually gets called several times in a row. We use a timer to 
@@ -695,7 +724,7 @@ sysEventConfigurationNotifier(
   */
 
   CFRunLoopTimerSetNextFireDate(threadData->timerRef, 
-                               CFAbsoluteTimeGetCurrent() + 2);
+                               CFAbsoluteTimeGetCurrent() + 5);
 }
 
 
@@ -728,5 +757,5 @@ sysEventTimerNotifier(
 
 
 /*
- * End of "$Id: sysman.c 5833 2006-08-16 20:05:58Z mike $".
+ * End of "$Id: sysman.c 6090 2006-11-14 16:35:27Z mike $".
  */
index 46d74c56f80dfd8cf2501cabfe692b4bc8f88aa5..27f0926e80f29969228a5b87415488e3df4be507 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: lpstat.c 6073 2006-11-02 20:01:54Z mike $"
+ * "$Id: lpstat.c 6090 2006-11-14 16:35:27Z mike $"
  *
  *   "lpstat" command for the Common UNIX Printing System (CUPS).
  *
@@ -2038,7 +2038,7 @@ show_printers(http_t      *http,  /* I - HTTP connection to server */
          if (reasons)
          {
            _cupsLangPuts(stdout, _("\tAlerts:"));
-           for (j = 0; j < reasons->num_values; i ++)
+           for (j = 0; j < reasons->num_values; j ++)
              _cupsLangPrintf(stdout, " %s",
                              reasons->values[j].string.text);
            _cupsLangPuts(stdout, "\n");
@@ -2248,5 +2248,5 @@ show_scheduler(http_t *http)      /* I - HTTP connection to server */
 
 
 /*
- * End of "$Id: lpstat.c 6073 2006-11-02 20:01:54Z mike $".
+ * End of "$Id: lpstat.c 6090 2006-11-14 16:35:27Z mike $".
  */
diff --git a/templates/it/add-class.tmpl b/templates/it/add-class.tmpl
new file mode 100644 (file)
index 0000000..92d5e77
--- /dev/null
@@ -0,0 +1,33 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Aggiungi classe</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nome:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Posizione:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Descrizione:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Membri:</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="Aggiungi classe"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/add-printer.tmpl b/templates/it/add-printer.tmpl
new file mode 100644 (file)
index 0000000..cff93eb
--- /dev/null
@@ -0,0 +1,28 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Add New Printer</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Name:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(May contain any printable characters except "/", "#", and space)</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Location:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Human-readable location such as "Lab 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Description:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Human-readable description such as "HP LaserJet with Duplexer")</SMALL></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Continue"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/admin.tmpl b/templates/it/admin.tmpl
new file mode 100644 (file)
index 0000000..ee10190
--- /dev/null
@@ -0,0 +1,77 @@
+<TABLE CELLPADDING="0" CELLSPACING="0" WIDTH="100%" SUMMARY="Administration Tasks">
+<TR><TD VALIGN="TOP" NOWRAP>
+
+<H2 CLASS="title">Stampanti</H2>
+
+<P>
+<A HREF="/admin?op=add-printer"><IMG
+SRC="/images/button-add-printer.gif" ALT="Aggiungi stampante" CLASS="button"></A>
+<A HREF="/printers/"><IMG SRC="/images/button-manage-printers.gif"
+ALT="Gestione stampanti" CLASS="button"></A>
+{have_samba?<A HREF="/admin/?op=export-samba"><IMG
+SRC="/images/button-export-samba.gif" ALT="Esporta stampanti su Samba"
+CLASS="button"></A>:}
+</P>
+
+{#device_uri=0?:<P><B>Nuove stampanti trovate:</B></P><UL>{[device_uri]
+<LI><A HREF="/admin?op=add-printer&amp;{device_options}"><IMG
+SRC="/images/button-add-this-printer.gif" ALT="Aggiungi questa stampante" CLASS="button"
+ALIGN="MIDDLE"></A>
+{device_make_and_model} ({device_info})</LI>
+}</UL>}
+
+<H2 CLASS="title">Classi</H2>
+
+<P>
+<A HREF="/admin?op=add-class"><IMG SRC="/images/button-add-class.gif"
+ALT="Aggiungi classe" CLASS="button"></A>
+<A HREF="/classes/"><IMG SRC="/images/button-manage-classes.gif"
+ALT="Gestione classi" CLASS="button"></A>
+</P>
+
+<H2 CLASS="title">Operazioni</H2>
+
+<P>
+<A HREF="/jobs/"><IMG SRC="/images/button-manage-jobs.gif" ALT="Gestione
+operazioni" 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="Modifica file di configurazione"
+CLASS="button"></A>
+<A HREF="/admin/log/access_log" TARGET="_blank"><IMG
+SRC="/images/button-view-access-log.gif" ALT="Mostra registro degli accessi"
+CLASS="button"></A>
+<A HREF="/admin/log/error_log" TARGET="_blank"><IMG
+SRC="/images/button-view-error-log.gif" ALT="Mostra registro degli errori"
+CLASS="button"></A>
+<A HREF="/admin/log/page_log" TARGET="_blank"><IMG
+SRC="/images/button-view-page-log.gif" ALT="Mostra registro delle pagine"
+CLASS="button"></A>
+</P>
+
+{SETTINGS_ERROR?<P>{SETTINGS_MESSAGE}</P>
+<BLOCKQUOTE>{SETTINGS_ERROR}</BLOCKQUOTE>:
+
+<FORM METHOD="POST" ACTION="/admin">
+
+<P><B>Impostazioni di base del server:</B></P>
+
+<P><INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_PRINTERS" {?remote_printers}> Mostra stampanti condivise da altri sistemi<BR>
+<INPUT TYPE="CHECKBOX" NAME="SHARE_PRINTERS" {?share_printers}> Condividi le stampanti pubblicate connesse a questo sistema<BR>
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_ADMIN" {?remote_admin}> Consenti amministrazione remota<BR>
+<INPUT TYPE="CHECKBOX" NAME="USER_CANCEL_ANY" {?user_cancel_any}> Consenti agli utenti di annullare qualunque operazione (non solo le proprie)<BR>
+<INPUT TYPE="CHECKBOX" NAME="DEBUG_LOGGING" {?debug_logging}> Salva le informazioni di debug per la risoluzione di problemi</P>
+
+<P><INPUT TYPE="IMAGE" SRC="/images/button-change-settings.gif" ALT="Modifica impostazioni"></P>
+
+</FORM>}
+
+</TD></TR>
+</TABLE>
diff --git a/templates/it/choose-device.tmpl b/templates/it/choose-device.tmpl
new file mode 100644 (file)
index 0000000..767c021
--- /dev/null
@@ -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">Dispositivo per {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Dispositivo:</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="Continua"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/choose-make.tmpl b/templates/it/choose-make.tmpl
new file mode 100644 (file)
index 0000000..7240ac5
--- /dev/null
@@ -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">Marca/Produttore per {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Marca:</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="Continua"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>&nbsp;</TD>
+</TR>
+<TR>
+<TH CLASS="label">O fornisci un file PPD:</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?Aggiungi stampante:Modifica stampante}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/choose-model.tmpl b/templates/it/choose-model.tmpl
new file mode 100644 (file)
index 0000000..3ab1dec
--- /dev/null
@@ -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">Modello/Driver per {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Modello:</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">O fornisci un file PPD:</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?Aggiungi stampante:Modifica stampante}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/choose-serial.tmpl b/templates/it/choose-serial.tmpl
new file mode 100644 (file)
index 0000000..dbcc12d
--- /dev/null
@@ -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">Impostazioni porta seriale per {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Velocit&agrave; di trasmissione:</TH>
+<TD><SELECT NAME="BAUDRATE">
+{[baudrates]<OPTION {?baudrate={baudrates}?SELECTED:}>{baudrates}}
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Parit&agrave;:</TH>
+<TD><SELECT NAME="PARITY">
+<OPTION VALUE="none" {?parity=none?SELECTED:}>Nessuna
+<OPTION VALUE="even" {?parity=even?SELECTED:}>Pari
+<OPTION VALUE="odd" {?parity=odd?SELECTED:}>Dispary
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Bit dati:</TH>
+<TD><SELECT NAME="BITS">
+<OPTION {?bits=8?SELECTED:}>8
+<OPTION {?bits=7?SELECTED:}>7
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Controllo di flusso:</TH>
+<TD><SELECT NAME="FLOW">
+<OPTION VALUE="none" {?flow=none?SELECTED:}>Nessuno
+<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="Continua"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/choose-uri.tmpl b/templates/it/choose-uri.tmpl
new file mode 100644 (file)
index 0000000..3837b2b
--- /dev/null
@@ -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">URI del dispositivo per {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">URI del dispositivo:</TH>
+<TD><INPUT TYPE="TEXT" SIZE="60" MAXLENGTH="1024" NAME="DEVICE_URI" VALUE="{device_uri}"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>Esempi:
+<PRE>
+    http://hostname:631/ipp/
+    http://hostname:631/ipp/port1
+
+    ipp://hostname/ipp/
+    ipp://hostname/ipp/port1
+
+    lpd://hostname/queue
+
+    socket://hostname
+    socket://hostname:9100
+</PRE>
+
+<P>Vedi <A HREF="/help/network.html" TARGET="_blank">"Stampanti di
+rete"</A> per il corretto URI da utilizzare con la tua stampante.</P>
+
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Continua"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/class-added.tmpl b/templates/it/class-added.tmpl
new file mode 100644 (file)
index 0000000..ef4fe49
--- /dev/null
@@ -0,0 +1,2 @@
+<P>La classe <A HREF="/classes/{printer_name}">{printer_name}</A> &egrave; stata aggiunta
+con successo.
diff --git a/templates/it/class-confirm.tmpl b/templates/it/class-confirm.tmpl
new file mode 100644 (file)
index 0000000..0a24833
--- /dev/null
@@ -0,0 +1,7 @@
+<P><B>Attenzione:</B> Sei sicuro di voler eliminare la classe
+{printer_name}?</P>
+
+<P ALIGN="CENTER"><A
+HREF="/admin?op=delete-class&printer_name={printer_name}&confirm=yes"><IMG
+SRC="/images/button-delete-class.gif" ALT="Elimina classe"
+CLASS="button"></A></P>
diff --git a/templates/it/class-deleted.tmpl b/templates/it/class-deleted.tmpl
new file mode 100644 (file)
index 0000000..3fc2ffa
--- /dev/null
@@ -0,0 +1 @@
+<P>La classe {printer_name} &egrave; stata eliminata con successo.
diff --git a/templates/it/class-jobs-header.tmpl b/templates/it/class-jobs-header.tmpl
new file mode 100644 (file)
index 0000000..2a0cadc
--- /dev/null
@@ -0,0 +1 @@
+<H3 CLASS="title">Operazioni</H3>
diff --git a/templates/it/class-modified.tmpl b/templates/it/class-modified.tmpl
new file mode 100644 (file)
index 0000000..27ebcd7
--- /dev/null
@@ -0,0 +1,2 @@
+<P>La classe <A HREF="/classes/{printer_name}">{printer_name}</A> &egrave; stata
+modificata con successo.
diff --git a/templates/it/classes-header.tmpl b/templates/it/classes-header.tmpl
new file mode 100644 (file)
index 0000000..1fe0f4f
--- /dev/null
@@ -0,0 +1 @@
+<P ALIGN="CENTER">{total=0?Nessuna classe:Mostrat{total=1?a:e} {#printer_name} di {total} class{total=1?e:i}}.</P>
diff --git a/templates/it/classes.tmpl b/templates/it/classes.tmpl
new file mode 100644 (file)
index 0000000..2882706
--- /dev/null
@@ -0,0 +1,54 @@
+{#printer_name=0?:
+{[printer_name]
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Stampante predefinita):}
+{?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>Descrizione:</B> {printer_info}<BR>
+<B>Posizione:</B> {printer_location}<BR>
+<B>Stato della classe:</B> {printer_state=3?in attesa:{printer_state=4?elaborazione in corso:fermata}},
+{printer_is_accepting_jobs=0?scarta operazioni:accetta operazioni}, {printer_is_shared=0?non:} pubblicata.
+{?member_uris=?:<BR>Membri: {member_uris}}
+
+<P>
+<A HREF="{printer_uri_supported}?op=print-test-page">
+<IMG SRC="/images/button-print-test-page.gif" ALT="Stampa pagina di prova" 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="Avvia classe" 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="Ferma classe" 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="Accetta operazioni" 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="Scarta operazioni" 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="Annulla tutte le operazioni" 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="Pubblica la stampante" 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="Non pubblicare la stampante" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-class&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-modify-class.gif" ALT="Modifica classe" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-class&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-delete-class.gif" ALT="Elimina classe" 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="Imposta come predefinita" 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="Imposta utenti autorizzati" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
diff --git a/templates/it/edit-config.tmpl.in b/templates/it/edit-config.tmpl.in
new file mode 100644 (file)
index 0000000..be2ed2b
--- /dev/null
@@ -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">File di configurazione del server</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="Salva le modifiche"> <A
+HREF="javascript:reset_config();"><IMG
+SRC="/images/button-use-default-config.gif" CLASS="button"
+ALT="Usa il file di configurazione predefinito"></A></P>
+
+</FORM>
diff --git a/templates/it/error-op.tmpl b/templates/it/error-op.tmpl
new file mode 100644 (file)
index 0000000..5e56a6c
--- /dev/null
@@ -0,0 +1,3 @@
+<P>Errore:</P>
+
+<BLOCKQUOTE>Operazione "{op}" sconosciuta!</BLOCKQUOTE>
diff --git a/templates/it/error.tmpl b/templates/it/error.tmpl
new file mode 100644 (file)
index 0000000..ad9f643
--- /dev/null
@@ -0,0 +1,3 @@
+<P>{?message?{message}:Errore:}</P>
+
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
diff --git a/templates/it/header.tmpl.in b/templates/it/header.tmpl.in
new file mode 100644 (file)
index 0000000..9256e81
--- /dev/null
@@ -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;Home&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;Amministrazione&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;Classi&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;Documentazione/Aiuto&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;Operazioni&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;Stampanti&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/it/help-header.tmpl b/templates/it/help-header.tmpl
new file mode 100644 (file)
index 0000000..2caf5d2
--- /dev/null
@@ -0,0 +1,47 @@
+<FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
+{TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
+
+<P ALIGN="CENTER"><B>Cerca in
+{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:Tutti i documenti}}:</B> <INPUT
+TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
+TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Cerca">
+<A HREF="/help/{?HELPFILE}{QUERY?{TOPIC??TOPIC={TOPIC}:}:}"><IMG
+SRC="/images/button-clear.gif" ALT="Pulisci" CLASS="button"></A></P>
+
+</FORM>
+
+<!-- Bookmarks -->
+<DIV CLASS="sidebar">
+<H3 CLASS="title">Guida in linea</H3>
+
+<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">Tutti i documenti</A></P>
+<HR>
+
+{[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
+}
+</DIV>
+
+{QUERY?<P>Cerca risultati in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:Tutti i documenti}}\:</P>
+{QTEXT?<UL>
+{[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
+{QTEXT?</UL>:}
+:<P>Nessuna corrispondenza trovata.</P>}
+<HR NOSHADE>:}
+{HELPTITLE?<H1>{HELPTITLE}
+<A HREF="/help/{HELPFILE}?PRINTABLE=YES" TARGET="_blank"><IMG
+SRC="/images/button-view-printable-version.gif" ALT="Mostra versione stampabile"
+CLASS="button"></A></H1>:<H1>Pagine della guida di CUPS</H1>
+
+<P>Questa &egrave; l'interfaccia di guida in linea di CUPS. Inserisci sopra i termini di
+ricerca o fai clic su ognuno dei collegamenti alla documentazione per visualizzare
+le informazioni.</P>
+
+<P>Se sei nuovo di CUPS, leggi la pagina "<a
+href="overview.html">Sommario di CUPS</a>". Gli utenti di vecchia data
+dovrebbero leggere la pagina "<a href="whatsnew.html">Cosa c'&egrave; di nuovo in CUPS
+1.2</a>".</P>
+
+<P>La <A HREF="http://www.cups.org/">pagina principale di CUPS</A> fornisce
+inoltre molte risorse tra cui forum di discussione per utenti, risposte
+alla domande frequenti, e un modulo per la segnalazione di bug
+e richieste di nuove funzionalit&agrave;.</P>}
diff --git a/templates/it/help-printable.tmpl b/templates/it/help-printable.tmpl
new file mode 100644 (file)
index 0000000..305112a
--- /dev/null
@@ -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/it/job-cancel.tmpl b/templates/it/job-cancel.tmpl
new file mode 100644 (file)
index 0000000..24054cf
--- /dev/null
@@ -0,0 +1 @@
+<P><A HREF="{job_printer_uri}">L'operazione {job_id}</A> &egrave; stata annullata.
diff --git a/templates/it/job-hold.tmpl b/templates/it/job-hold.tmpl
new file mode 100644 (file)
index 0000000..97df9d3
--- /dev/null
@@ -0,0 +1 @@
+<P><A HREF="{job_printer_uri}">L'operazione {job_id}</A> &egrave; stata bloccata.
diff --git a/templates/it/job-move.tmpl b/templates/it/job-move.tmpl
new file mode 100644 (file)
index 0000000..cc4a8a0
--- /dev/null
@@ -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?Sposta l'operazione {job_id}:Sposta tutte le operazioni}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nuova destinazione:</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="Sposta operazion{job_id?e:i}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/job-moved.tmpl b/templates/it/job-moved.tmpl
new file mode 100644 (file)
index 0000000..d14cc58
--- /dev/null
@@ -0,0 +1,2 @@
+<P>{job_id?<A HREF="/jobs/{job_id}">Operazione {job_id}</A>:Tutte le operazioni} spostat{job_id?a:e} su
+<A HREF="{job_printer_uri}">{job_printer_name}</A>.</P>
diff --git a/templates/it/job-release.tmpl b/templates/it/job-release.tmpl
new file mode 100644 (file)
index 0000000..fc82ff0
--- /dev/null
@@ -0,0 +1 @@
+<P><A HREF="{job_printer_uri}">L'operazione {job_id}</A> &egrave; stata rilasciata per la stampa.
diff --git a/templates/it/job-restart.tmpl b/templates/it/job-restart.tmpl
new file mode 100644 (file)
index 0000000..9f1b740
--- /dev/null
@@ -0,0 +1 @@
+<P><A HREF="{job_printer_uri}">L'operazione {job_id}</A> &egrave; stata riavviata.
diff --git a/templates/it/jobs-header.tmpl b/templates/it/jobs-header.tmpl
new file mode 100644 (file)
index 0000000..385534f
--- /dev/null
@@ -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="Mostra operazioni completate"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
+SRC="/images/button-show-all.gif" CLASS="button" ALT="Mostra tutte le operazioni">:{which_jobs=all?<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
+SRC="/images/button-show-completed.gif" CLASS="button" ALT="Mostra operazioni completate"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="Mostra operazioni attive">:<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="Mostra operazioni attive"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
+SRC="/images/button-show-all.gif" CLASS="button" ALT="Mostra tutte le operazioni">}}</A></P>
+
+<P ALIGN="CENTER">{total=0?Nessuna operazione:Mostrat{total=1?a:e} {#job_id} di {total} operazion{total=1?e:i} {?which_jobs=?attiva:{which_jobs=all?:completata}} }.</P>
diff --git a/templates/it/jobs.tmpl b/templates/it/jobs.tmpl
new file mode 100644 (file)
index 0000000..6f8f555
--- /dev/null
@@ -0,0 +1,42 @@
+{#job_id=0?:
+<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%" SUMMARY="Job List">
+<TR CLASS="data">
+<TH>ID&nbsp;</TH>
+<TH>Nome&nbsp;</TH>
+<TH>Utente&nbsp;</TH>
+<TH>Dimensione&nbsp;</TH>
+<TH>Pagine&nbsp;</TH>
+<TH>Stato&nbsp;</TH>
+<TH>Controllo&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=?Sconosciuto:{job_name}}&nbsp;</TD>
+<TD>{job_originating_user_name}&nbsp;</TD>
+<TD>{job_k_octets}k&nbsp;</TD>
+<TD>{job_media_sheets_completed=0?Sconosciuto:{?job_media_sheets_completed}}</TD>
+<TD>{job_state=3?in sospeso da<BR>{time_at_creation}:{job_state=4?bloccata da<BR>{time_at_creation}:
+{job_state=5?elaborazione in corso da<BR>{time_at_processing}:{job_state=6?fermata:
+{job_state=7?annullata a<BR>{time_at_completed}:{job_state=8?interrotta:completata a<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="Ristampa operazione" 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="Rilascia operazione" 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="Blocca operazione" 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="Annulla operazione" CLASS="button"></A>
+<A HREF="/jobs/?op=move-job&amp;job_id={job_id}"><IMG
+SRC="/images/button-move-job.gif" ALT="Sposta operazione" CLASS="button"></A>:}
+&nbsp;</TD>
+</TR>
+}
+</TABLE>
+}
diff --git a/templates/it/maintenance.tmpl b/templates/it/maintenance.tmpl
new file mode 100644 (file)
index 0000000..1b88d6c
--- /dev/null
@@ -0,0 +1,2 @@
+<P>comandi di manutenzione inviati; l'ID dell'operazione &egrave; <A HREF="/printers/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
diff --git a/templates/it/modify-class.tmpl b/templates/it/modify-class.tmpl
new file mode 100644 (file)
index 0000000..25d158a
--- /dev/null
@@ -0,0 +1,34 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Modifica classe {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nome:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+{printer_name}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Posizione:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Descrizione:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Membri:</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="Modifica classe"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/modify-printer.tmpl b/templates/it/modify-printer.tmpl
new file mode 100644 (file)
index 0000000..a9eafb1
--- /dev/null
@@ -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">Modifica stampante {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nome:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">{printer_name}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Posizione:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Posizione comprensibile del tipo "Laboratorio 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Descrizione:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Descrizione comprensibile del tipo "HP LaserJet con Duplexer")</SMALL></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Continua"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/norestart.tmpl b/templates/it/norestart.tmpl
new file mode 100644 (file)
index 0000000..780f766
--- /dev/null
@@ -0,0 +1,2 @@
+<p>Il server non &egrave; riavviato poich&eacute; non ci sono state modifiche
+della configurazione...</p>
diff --git a/templates/it/option-boolean.tmpl b/templates/it/option-boolean.tmpl
new file mode 100644 (file)
index 0000000..72c8518
--- /dev/null
@@ -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/it/option-conflict.tmpl b/templates/it/option-conflict.tmpl
new file mode 100644 (file)
index 0000000..c0e2031
--- /dev/null
@@ -0,0 +1,7 @@
+<P><B>Errore:</B> Le seguenti opzioni sono in conflitto:</P>
+
+<UL>
+{[ckeyword]<LI><A HREF="#{ckeyword}">{ckeytext}</A></LI>
+}</UL>
+
+<P>Modifica una o pi&ugrave; opzioni per risolvere il problema.</P>
diff --git a/templates/it/option-header.tmpl b/templates/it/option-header.tmpl
new file mode 100644 (file)
index 0000000..cafc9f9
--- /dev/null
@@ -0,0 +1,3 @@
+<H2 CLASS="title">{printer_name}: {group}</H2>
+
+<TABLE>
diff --git a/templates/it/option-pickmany.tmpl b/templates/it/option-pickmany.tmpl
new file mode 100644 (file)
index 0000000..d2534af
--- /dev/null
@@ -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/it/option-pickone.tmpl b/templates/it/option-pickone.tmpl
new file mode 100644 (file)
index 0000000..08342d0
--- /dev/null
@@ -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/it/option-trailer.tmpl b/templates/it/option-trailer.tmpl
new file mode 100644 (file)
index 0000000..25af378
--- /dev/null
@@ -0,0 +1,5 @@
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-set-printer-options.gif" ALT="Imposta opzioni stampante"></TD>
+</TR>
+</TABLE>
diff --git a/templates/it/pager.tmpl b/templates/it/pager.tmpl
new file mode 100644 (file)
index 0000000..e3dbd09
--- /dev/null
@@ -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="Mostra precedente" 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="Ordine crescente" CLASS="button"></A>:<A HREF="{THISURL}&amp;ORDER=dec"><IMG SRC="/images/button-sort-descending.gif" ALT="Ordine decrescente" CLASS="button"></A>}</TD>
+       <TD WIDTH="33%" ALIGN="RIGHT">{NEXTURL?<A HREF="{NEXTURL}"><IMG SRC="/images/button-show-next.gif" ALT="Mostra successivo" CLASS="button"></A>:&nbsp;}</TD>
+</TR>
+</TABLE>
diff --git a/templates/it/printer-accept.tmpl b/templates/it/printer-accept.tmpl
new file mode 100644 (file)
index 0000000..19de4a1
--- /dev/null
@@ -0,0 +1,3 @@
+<P>{is_class?La classe:La stampante} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+adesso accetta operazioni.</P>
diff --git a/templates/it/printer-added.tmpl b/templates/it/printer-added.tmpl
new file mode 100644 (file)
index 0000000..e45fb7f
--- /dev/null
@@ -0,0 +1,2 @@
+<P>La stampante <A HREF="/printers/{printer_name}">{printer_name}</A> &egrave; stata aggiunta
+con successo.
diff --git a/templates/it/printer-configured.tmpl b/templates/it/printer-configured.tmpl
new file mode 100644 (file)
index 0000000..c28b9d0
--- /dev/null
@@ -0,0 +1,2 @@
+<P>La stampante <A HREF="/printers/{printer_name}">{printer_name}</A> &egrave;
+stata configurata con successo.
diff --git a/templates/it/printer-confirm.tmpl b/templates/it/printer-confirm.tmpl
new file mode 100644 (file)
index 0000000..1f3e891
--- /dev/null
@@ -0,0 +1,7 @@
+<P><B>Attenzione:</B> Sei sicuro di voler eliminare la stampante
+{printer_name}?</P>
+
+<P ALIGN="CENTER"><A
+HREF="/admin?op=delete-printer&printer_name={printer_name}&confirm=yes"><IMG
+SRC="/images/button-delete-printer.gif" ALT="Elimina stampante"
+CLASS="button"></A></P>
diff --git a/templates/it/printer-default.tmpl b/templates/it/printer-default.tmpl
new file mode 100644 (file)
index 0000000..cab22c3
--- /dev/null
@@ -0,0 +1,7 @@
+<P>{is_class?La classe:La stampante} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+&egrave; stata impostata come predefinita sul server.</P>
+
+<BLOCKQUOTE><B>Nota:</B> Qualunque valore inserito dall'utente impostato con
+il comando <TT>lpoptions</TT> sarĂ  scavalcato da questa impostazione
+predefinita.</BLOCKQUOTE>
diff --git a/templates/it/printer-deleted.tmpl b/templates/it/printer-deleted.tmpl
new file mode 100644 (file)
index 0000000..fe498a5
--- /dev/null
@@ -0,0 +1 @@
+<P>La stampante {printer_name} &egrave; stata eliminata con successo.
diff --git a/templates/it/printer-jobs-header.tmpl b/templates/it/printer-jobs-header.tmpl
new file mode 100644 (file)
index 0000000..2a0cadc
--- /dev/null
@@ -0,0 +1 @@
+<H3 CLASS="title">Operazioni</H3>
diff --git a/templates/it/printer-modified.tmpl b/templates/it/printer-modified.tmpl
new file mode 100644 (file)
index 0000000..a36b81d
--- /dev/null
@@ -0,0 +1,2 @@
+<P>La stampante <A HREF="/printers/{printer_name}">{printer_name}</A> &egrave; stata
+modificata con successo.
diff --git a/templates/it/printer-purge.tmpl b/templates/it/printer-purge.tmpl
new file mode 100644 (file)
index 0000000..b196be0
--- /dev/null
@@ -0,0 +1,3 @@
+<P>{is_class?La classe:La stampante} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+&egrave; stata svuotata di tutte le operazioni.</P>
diff --git a/templates/it/printer-reject.tmpl b/templates/it/printer-reject.tmpl
new file mode 100644 (file)
index 0000000..225783f
--- /dev/null
@@ -0,0 +1,3 @@
+<P>{is_class?La classe:La stampante} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+non accetta altre operazioni.</P>
diff --git a/templates/it/printer-start.tmpl b/templates/it/printer-start.tmpl
new file mode 100644 (file)
index 0000000..b5abdc9
--- /dev/null
@@ -0,0 +1,3 @@
+<P>{is_class?La classe:La stampante} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+&egrave; stata avviata.</P>
diff --git a/templates/it/printer-stop.tmpl b/templates/it/printer-stop.tmpl
new file mode 100644 (file)
index 0000000..5af7bff
--- /dev/null
@@ -0,0 +1,3 @@
+<P>{is_class?La classe:La stampante} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+&egrave; stata fermata.</P>
diff --git a/templates/it/printers-header.tmpl b/templates/it/printers-header.tmpl
new file mode 100644 (file)
index 0000000..e10112d
--- /dev/null
@@ -0,0 +1 @@
+<P ALIGN="CENTER">{total=0?Nessuna stampante:Mostrat{total=1?a:e} {#printer_name} di {total} stampant{total=1?e:i}}.</P>
diff --git a/templates/it/printers.tmpl b/templates/it/printers.tmpl
new file mode 100644 (file)
index 0000000..1069744
--- /dev/null
@@ -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}? (Default Printer):}
+{?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?processing:stopped}}.gif" CLASS="button" ALT=""></A>
+</TD>
+<TD VALIGN="TOP"><B>Descrizione:</B> {printer_info}<BR>
+<B>Posizione:</B> {printer_location}<BR>
+<B>Marca e modello:</B> {printer_make_and_model}<BR>
+<B>Stato della stampante:</B> {printer_state=3?in attesa:{printer_state=4?elaborazione in corso:fermata}},
+{printer_is_accepting_jobs=0?scarta operazioni:accetta operazioni}, {printer_is_shared=0?non:} pubblicata.
+{?device_uri=?:<BR><B>URI del dispositivo:</B> {device_uri}}
+
+<P>
+<A HREF="{printer_uri_supported}?op=print-test-page">
+<IMG SRC="/images/button-print-test-page.gif" ALT="Stampa pagina di prova" CLASS="button"></A>
+{?cupscommand=1?<A HREF="{printer_uri_supported}?op=clean-print-heads">
+<IMG SRC="/images/button-clean-print-heads.gif" ALT="Pulizia delle testine" CLASS="button"></A>
+<A HREF="{printer_uri_supported}?op=print-self-test-page">
+<IMG SRC="/images/button-print-self-test-page.gif" ALT="Stampa pagina di prova predefinita" 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="Avvia stampante" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-printer&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-stop-printer.gif" ALT="Ferma stampante" 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="Accetta operazioni" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="Scarta operazioni" CLASS="button"></A>
+}
+<A HREF="{printer_uri_supported}?op=move-jobs&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-move-jobs.gif" ALT="Sposta tutte le operazioni" CLASS="button"></A>
+<A HREF="{admin_uri}?op=purge-jobs&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Annulla tutte le operazioni" 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="Pubblica stampante" 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="Non pubblicare stampante" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-printer&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-modify-printer.gif" ALT="Modifica stampante" 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="Imposta opzioni stampante" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-printer&amp;printer_name={%printer_name}">
+<IMG SRC="/images/button-delete-printer.gif" ALT="Elimina stampante" 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="Imposta come predefinita" 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="Imposta utenti autorizzati" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
diff --git a/templates/it/restart.tmpl b/templates/it/restart.tmpl
new file mode 100644 (file)
index 0000000..7ba2a58
--- /dev/null
@@ -0,0 +1 @@
+<p>Attendere il riavvio del server...</p>
diff --git a/templates/it/samba-export.tmpl b/templates/it/samba-export.tmpl
new file mode 100644 (file)
index 0000000..9339e8d
--- /dev/null
@@ -0,0 +1,54 @@
+<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">Esporta stampanti su Samba</H2>
+
+{error?<P>Impossibile esportare stampanti su Samba\:</P>
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
+<P>Consulta il file <A HREF="/admin/log/error_log"
+TARGET="_blank">error_log</A> per ulteriori informazioni.</P>:
+<P>Questa pagina ti consente di esportare stampanti su Samba in modo tale
+che i client Windows possano accedere ad esse dall'icona <VAR>Risorse di 
+rete</VAR> sui rispettivi desktop. Occorre installare previamente il driver 
+di stampa Windows PostScript come descritto nella pagina di manuale <A
+HREF="/help/man-cupsaddsmb.html"
+TARGET="_blank">cupsaddsmb(8)</A>.</P>}
+
+<TABLE>
+<TR>
+<TH CLASS="label">Stampanti:</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()"> Esporta tutte le stampanti
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">Nome utente Samba:</TH>
+<TD><INPUT TYPE="TEXT" NAME="USERNAME" VALUE="{?USERNAME}"> (richiesto)</TD>
+</TR>
+<TR>
+<TH CLASS="label">Password Samba:</TH>
+<TD><INPUT TYPE="PASSWORD" NAME="PASSWORD" VALUE=""> (richiesto)</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-export-samba.gif"
+ALT="Esporta stampanti su Samba"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/it/samba-exported.tmpl b/templates/it/samba-exported.tmpl
new file mode 100644 (file)
index 0000000..78ee85e
--- /dev/null
@@ -0,0 +1 @@
+<P>Stampanti esportate su Samba con successo.</P>
diff --git a/templates/it/search.tmpl b/templates/it/search.tmpl
new file mode 100644 (file)
index 0000000..d69e934
--- /dev/null
@@ -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>Cerca in
+{SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?Classi:{SECTION=jobs?Operazioni:Stampanti}}}:</B>
+<INPUT TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
+TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Cerca">
+<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="Pulisci" CLASS="button"></A></P>
+
+</FORM>
diff --git a/templates/it/set-printer-options-header.tmpl b/templates/it/set-printer-options-header.tmpl
new file mode 100644 (file)
index 0000000..864f9f0
--- /dev/null
@@ -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/it/set-printer-options-trailer.tmpl b/templates/it/set-printer-options-trailer.tmpl
new file mode 100644 (file)
index 0000000..a3d1e1f
--- /dev/null
@@ -0,0 +1 @@
+</FORM>
diff --git a/templates/it/test-page.tmpl b/templates/it/test-page.tmpl
new file mode 100644 (file)
index 0000000..a2718c8
--- /dev/null
@@ -0,0 +1,2 @@
+<P>Pagina di prova inviata; l'ID dell'operazione &egrave; <A HREF="/{SECTION}/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
diff --git a/templates/it/trailer.tmpl b/templates/it/trailer.tmpl
new file mode 100644 (file)
index 0000000..b598b6f
--- /dev/null
@@ -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>Common UNIX Printing System, CUPS, e il logo CUPS sono marchi
+registrati da <A HREF="http://www.easysw.com">Easy Software
+Products</A>. CUPS &egrave; un copyright 1997-2006 di Easy Software Products,
+Tutti i diritti sono riservati.</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/it/users.tmpl b/templates/it/users.tmpl
new file mode 100644 (file)
index 0000000..3d5222f
--- /dev/null
@@ -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">Utenti autorizzati per {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Utenti:</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:}>Consenti a questi utenti a stampare
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-denied' {requesting_user_name_denied?checked:}>Impedisci a questi utenti di stampare
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>
+<INPUT TYPE="IMAGE" SRC="/images/button-set-allowed-users.gif" ALT="Imposta utenti autorizzati">
+</TD>
+</TR>
+</TABLE>
+
+</FORM>
index fe169ecda2376ce220370fb66ebdf019ce15e9ab..ae38459e9003e85cc7b8b31d5d1d4d92400121a9 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id: run-stp-tests.sh 5493 2006-05-05 16:33:57Z mike $"
+# "$Id: run-stp-tests.sh 6113 2006-11-15 20:37:45Z mike $"
 #
 #   Perform the complete set of IPP compliance tests specified in the
 #   CUPS Software Test Plan.
@@ -120,8 +120,8 @@ echo "certificate for testing; these tests currently require the OpenSSL"
 echo "tools:"
 echo ""
 echo "0 - Do not do SSL/TLS encryption tests"
-echo "1 - Create a SSL/TLS certificate and key, but do not require encryption"
-echo "2 - Create a SSL/TLS certificate and key and require encryption"
+echo "1 - Test but do not require encryption"
+echo "2 - Test and require encryption"
 echo ""
 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
 
@@ -134,25 +134,14 @@ fi
 echo ""
 
 case "$ssltype" in
-       1 | 2)
-               if test -f server.key; then
-                       echo "Using existing SSL/TLS certificate and key..."
-               else
-                       echo "Generating SSL/TLS certificate and key..."
-                       openssl req -new -x509 -keyout server.key -out server.crt -days 3650 -nodes >/dev/null <<EOF
-ZZ
-Testland
-Testville
-Test Company
-
-`hostname`
-test@domain.com
-EOF
-               fi
+       1)
+               echo "Will test but not require encryption (1)"
+               ;;
+       2)
+               echo "Will test and require encryption (2)"
                ;;
-
        *)
-               echo "Not using SSL/TLS..."
+               echo "Not using SSL/TLS (0)"
                ssltype=0
                ;;
 esac
@@ -595,5 +584,5 @@ echo "A HTML report was created in test/$strfile."
 echo ""
 
 #
-# End of "$Id: run-stp-tests.sh 5493 2006-05-05 16:33:57Z mike $"
+# End of "$Id: run-stp-tests.sh 6113 2006-11-15 20:37:45Z mike $"
 #