diff options
145 files changed, 5205 insertions, 601 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 9fa60c3d9..49fe7d702 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -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 diff --git a/CREDITS.txt b/CREDITS.txt index 09db1ccb7..cfd4fcd33 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -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. diff --git a/INSTALL.txt b/INSTALL.txt index 7a3694081..d6f9a0179 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -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 diff --git a/README.txt b/README.txt index 0d312bca9..d8b6b0fb0 100644 --- a/README.txt +++ b/README.txt @@ -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" diff --git a/backend/pap.c b/backend/pap.c index f5eadae33..dd599f83f 100644 --- a/backend/pap.c +++ b/backend/pap.c @@ -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. * @@ -42,31 +42,35 @@ * 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> @@ -95,19 +100,25 @@ #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)); @@ -1528,6 +1533,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); } diff --git a/backend/snmp.c b/backend/snmp.c index f2a2b893f..b76283aa2 100644 --- a/backend/snmp.c +++ b/backend/snmp.c @@ -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 $". */ diff --git a/backend/usb-darwin.c b/backend/usb-darwin.c index 03e0373ff..d1da59b9b 100644 --- a/backend/usb-darwin.c +++ b/backend/usb-darwin.c @@ -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 $". */ diff --git a/backend/usb-unix.c b/backend/usb-unix.c index 47b2cf1f0..4a4cbe259 100644 --- a/backend/usb-unix.c +++ b/backend/usb-unix.c @@ -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 $". */ diff --git a/config-scripts/cups-common.m4 b/config-scripts/cups-common.m4 index 257f70933..7e54767fe 100644 --- a/config-scripts/cups-common.m4 +++ b/config-scripts/cups-common.m4 @@ -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 diff --git a/config-scripts/cups-defaults.m4 b/config-scripts/cups-defaults.m4 index 786411680..66810f9e5 100644 --- a/config-scripts/cups-defaults.m4 +++ b/config-scripts/cups-defaults.m4 @@ -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 diff --git a/cups/cups.h b/cups/cups.h index bca22de82..9ae366298 100644 --- a/cups/cups.h +++ b/cups/cups.h @@ -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 $". */ diff --git a/cups/http-private.h b/cups/http-private.h index bef934ed9..d5b030d28 100644 --- a/cups/http-private.h +++ b/cups/http-private.h @@ -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 $". */ diff --git a/cups/http.c b/cups/http.c index 169aece66..3e0fef0ed 100644 --- a/cups/http.c +++ b/cups/http.c @@ -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. @@ -71,7 +73,14 @@ * 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 @@ -118,7 +127,7 @@ 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 $". */ diff --git a/cups/libcups_s.exp b/cups/libcups_s.exp index cad2f10af..71f9c7e69 100644 --- a/cups/libcups_s.exp +++ b/cups/libcups_s.exp @@ -28,6 +28,7 @@ _cups_freeifaddrs _cups_strcpy _cups_strlcat _cups_strlcpy +_httpBIOMethods _ippAddAttr _ippFreeAttr _ppdGetEncoding diff --git a/cups/transcode.c b/cups/transcode.c index b0b5166fc..dc9d4dcb1 100644 --- a/cups/transcode.c +++ b/cups/transcode.c @@ -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). * @@ -296,6 +296,38 @@ cupsCharsetToUTF8( } /* + * 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... */ @@ -364,6 +396,45 @@ cupsUTF8ToCharset( } /* + * 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 $" */ diff --git a/desktop/cups.desktop b/desktop/cups.desktop index 48ac645bb..0bb1c4620 100644 --- a/desktop/cups.desktop +++ b/desktop/cups.desktop @@ -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 diff --git a/doc/help/spec-ppd.html b/doc/help/spec-ppd.html index 621fbcc1a..089aef83d 100644 --- a/doc/help/spec-ppd.html +++ b/doc/help/spec-ppd.html @@ -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 Binary files differnew file mode 100644 index 000000000..394ae9362 --- /dev/null +++ b/doc/it/images/button-accept-jobs.gif diff --git a/doc/it/images/button-add-class.gif b/doc/it/images/button-add-class.gif Binary files differnew file mode 100644 index 000000000..46de12b99 --- /dev/null +++ b/doc/it/images/button-add-class.gif diff --git a/doc/it/images/button-add-printer.gif b/doc/it/images/button-add-printer.gif Binary files differnew file mode 100644 index 000000000..ad5349124 --- /dev/null +++ b/doc/it/images/button-add-printer.gif diff --git a/doc/it/images/button-add-this-printer.gif b/doc/it/images/button-add-this-printer.gif Binary files differnew file mode 100644 index 000000000..6a526bb66 --- /dev/null +++ b/doc/it/images/button-add-this-printer.gif diff --git a/doc/it/images/button-cancel-all-jobs.gif b/doc/it/images/button-cancel-all-jobs.gif Binary files differnew file mode 100644 index 000000000..3bad563cf --- /dev/null +++ b/doc/it/images/button-cancel-all-jobs.gif diff --git a/doc/it/images/button-cancel-job.gif b/doc/it/images/button-cancel-job.gif Binary files differnew file mode 100644 index 000000000..cb12f3a8a --- /dev/null +++ b/doc/it/images/button-cancel-job.gif diff --git a/doc/it/images/button-change-settings.gif b/doc/it/images/button-change-settings.gif Binary files differnew file mode 100644 index 000000000..4aefa0024 --- /dev/null +++ b/doc/it/images/button-change-settings.gif diff --git a/doc/it/images/button-clean-print-heads.gif b/doc/it/images/button-clean-print-heads.gif Binary files differnew file mode 100644 index 000000000..0ee6b674c --- /dev/null +++ b/doc/it/images/button-clean-print-heads.gif diff --git a/doc/it/images/button-clear.gif b/doc/it/images/button-clear.gif Binary files differnew file mode 100644 index 000000000..c5e0c76b8 --- /dev/null +++ b/doc/it/images/button-clear.gif diff --git a/doc/it/images/button-continue.gif b/doc/it/images/button-continue.gif Binary files differnew file mode 100644 index 000000000..5287aa69b --- /dev/null +++ b/doc/it/images/button-continue.gif diff --git a/doc/it/images/button-delete-class.gif b/doc/it/images/button-delete-class.gif Binary files differnew file mode 100644 index 000000000..d5c5a9ac9 --- /dev/null +++ b/doc/it/images/button-delete-class.gif diff --git a/doc/it/images/button-delete-printer.gif b/doc/it/images/button-delete-printer.gif Binary files differnew file mode 100644 index 000000000..a6f3d635d --- /dev/null +++ b/doc/it/images/button-delete-printer.gif diff --git a/doc/it/images/button-edit-configuration-file.gif b/doc/it/images/button-edit-configuration-file.gif Binary files differnew file mode 100644 index 000000000..27dd66813 --- /dev/null +++ b/doc/it/images/button-edit-configuration-file.gif diff --git a/doc/it/images/button-export-samba.gif b/doc/it/images/button-export-samba.gif Binary files differnew file mode 100644 index 000000000..28011fe0e --- /dev/null +++ b/doc/it/images/button-export-samba.gif diff --git a/doc/it/images/button-help.gif b/doc/it/images/button-help.gif Binary files differnew file mode 100644 index 000000000..729e4690b --- /dev/null +++ b/doc/it/images/button-help.gif diff --git a/doc/it/images/button-hold-job.gif b/doc/it/images/button-hold-job.gif Binary files differnew file mode 100644 index 000000000..4f39dd9d2 --- /dev/null +++ b/doc/it/images/button-hold-job.gif diff --git a/doc/it/images/button-manage-classes.gif b/doc/it/images/button-manage-classes.gif Binary files differnew file mode 100644 index 000000000..5ced7e0d1 --- /dev/null +++ b/doc/it/images/button-manage-classes.gif diff --git a/doc/it/images/button-manage-jobs.gif b/doc/it/images/button-manage-jobs.gif Binary files differnew file mode 100644 index 000000000..0746c1a89 --- /dev/null +++ b/doc/it/images/button-manage-jobs.gif diff --git a/doc/it/images/button-manage-printers.gif b/doc/it/images/button-manage-printers.gif Binary files differnew file mode 100644 index 000000000..f9fc252b1 --- /dev/null +++ b/doc/it/images/button-manage-printers.gif diff --git a/doc/it/images/button-manage-server.gif b/doc/it/images/button-manage-server.gif Binary files differnew file mode 100644 index 000000000..e3bd6123b --- /dev/null +++ b/doc/it/images/button-manage-server.gif diff --git a/doc/it/images/button-modify-class.gif b/doc/it/images/button-modify-class.gif Binary files differnew file mode 100644 index 000000000..162387158 --- /dev/null +++ b/doc/it/images/button-modify-class.gif diff --git a/doc/it/images/button-modify-printer.gif b/doc/it/images/button-modify-printer.gif Binary files differnew file mode 100644 index 000000000..0d1faace5 --- /dev/null +++ b/doc/it/images/button-modify-printer.gif diff --git a/doc/it/images/button-move-job.gif b/doc/it/images/button-move-job.gif Binary files differnew file mode 100644 index 000000000..cfd1a7a1f --- /dev/null +++ b/doc/it/images/button-move-job.gif diff --git a/doc/it/images/button-move-jobs.gif b/doc/it/images/button-move-jobs.gif Binary files differnew file mode 100644 index 000000000..962919037 --- /dev/null +++ b/doc/it/images/button-move-jobs.gif diff --git a/doc/it/images/button-print-self-test-page.gif b/doc/it/images/button-print-self-test-page.gif Binary files differnew file mode 100644 index 000000000..fac427dea --- /dev/null +++ b/doc/it/images/button-print-self-test-page.gif diff --git a/doc/it/images/button-print-test-page.gif b/doc/it/images/button-print-test-page.gif Binary files differnew file mode 100644 index 000000000..f443cc63b --- /dev/null +++ b/doc/it/images/button-print-test-page.gif diff --git a/doc/it/images/button-publish-printer.gif b/doc/it/images/button-publish-printer.gif Binary files differnew file mode 100644 index 000000000..a4c17ba86 --- /dev/null +++ b/doc/it/images/button-publish-printer.gif diff --git a/doc/it/images/button-reject-jobs.gif b/doc/it/images/button-reject-jobs.gif Binary files differnew file mode 100644 index 000000000..4d624de03 --- /dev/null +++ b/doc/it/images/button-reject-jobs.gif diff --git a/doc/it/images/button-release-job.gif b/doc/it/images/button-release-job.gif Binary files differnew file mode 100644 index 000000000..eba16c715 --- /dev/null +++ b/doc/it/images/button-release-job.gif diff --git a/doc/it/images/button-restart-job.gif b/doc/it/images/button-restart-job.gif Binary files differnew file mode 100644 index 000000000..f0966978e --- /dev/null +++ b/doc/it/images/button-restart-job.gif diff --git a/doc/it/images/button-save-changes.gif b/doc/it/images/button-save-changes.gif Binary files differnew file mode 100644 index 000000000..825393326 --- /dev/null +++ b/doc/it/images/button-save-changes.gif diff --git a/doc/it/images/button-search.gif b/doc/it/images/button-search.gif Binary files differnew file mode 100644 index 000000000..2e71d39cc --- /dev/null +++ b/doc/it/images/button-search.gif diff --git a/doc/it/images/button-set-allowed-users.gif b/doc/it/images/button-set-allowed-users.gif Binary files differnew file mode 100644 index 000000000..2a436c066 --- /dev/null +++ b/doc/it/images/button-set-allowed-users.gif diff --git a/doc/it/images/button-set-as-default.gif b/doc/it/images/button-set-as-default.gif Binary files differnew file mode 100644 index 000000000..96365a12e --- /dev/null +++ b/doc/it/images/button-set-as-default.gif diff --git a/doc/it/images/button-set-printer-options.gif b/doc/it/images/button-set-printer-options.gif Binary files differnew file mode 100644 index 000000000..b7246a6ea --- /dev/null +++ b/doc/it/images/button-set-printer-options.gif diff --git a/doc/it/images/button-show-active.gif b/doc/it/images/button-show-active.gif Binary files differnew file mode 100644 index 000000000..27f1b1b42 --- /dev/null +++ b/doc/it/images/button-show-active.gif diff --git a/doc/it/images/button-show-all.gif b/doc/it/images/button-show-all.gif Binary files differnew file mode 100644 index 000000000..a3062db8f --- /dev/null +++ b/doc/it/images/button-show-all.gif diff --git a/doc/it/images/button-show-completed.gif b/doc/it/images/button-show-completed.gif Binary files differnew file mode 100644 index 000000000..19c8b75f3 --- /dev/null +++ b/doc/it/images/button-show-completed.gif diff --git a/doc/it/images/button-show-next.gif b/doc/it/images/button-show-next.gif Binary files differnew file mode 100644 index 000000000..0acf7644e --- /dev/null +++ b/doc/it/images/button-show-next.gif diff --git a/doc/it/images/button-show-previous.gif b/doc/it/images/button-show-previous.gif Binary files differnew file mode 100644 index 000000000..c07ccecc5 --- /dev/null +++ b/doc/it/images/button-show-previous.gif diff --git a/doc/it/images/button-sort-ascending.gif b/doc/it/images/button-sort-ascending.gif Binary files differnew file mode 100644 index 000000000..5999f5726 --- /dev/null +++ b/doc/it/images/button-sort-ascending.gif diff --git a/doc/it/images/button-sort-descending.gif b/doc/it/images/button-sort-descending.gif Binary files differnew file mode 100644 index 000000000..87379e11c --- /dev/null +++ b/doc/it/images/button-sort-descending.gif diff --git a/doc/it/images/button-start-class.gif b/doc/it/images/button-start-class.gif Binary files differnew file mode 100644 index 000000000..1c6d28a86 --- /dev/null +++ b/doc/it/images/button-start-class.gif diff --git a/doc/it/images/button-start-printer.gif b/doc/it/images/button-start-printer.gif Binary files differnew file mode 100644 index 000000000..8e48a07bd --- /dev/null +++ b/doc/it/images/button-start-printer.gif diff --git a/doc/it/images/button-stop-class.gif b/doc/it/images/button-stop-class.gif Binary files differnew file mode 100644 index 000000000..94577a157 --- /dev/null +++ b/doc/it/images/button-stop-class.gif diff --git a/doc/it/images/button-stop-printer.gif b/doc/it/images/button-stop-printer.gif Binary files differnew file mode 100644 index 000000000..ae1d08858 --- /dev/null +++ b/doc/it/images/button-stop-printer.gif diff --git a/doc/it/images/button-unpublish-printer.gif b/doc/it/images/button-unpublish-printer.gif Binary files differnew file mode 100644 index 000000000..797f22794 --- /dev/null +++ b/doc/it/images/button-unpublish-printer.gif diff --git a/doc/it/images/button-use-default-config.gif b/doc/it/images/button-use-default-config.gif Binary files differnew file mode 100644 index 000000000..fd8622226 --- /dev/null +++ b/doc/it/images/button-use-default-config.gif diff --git a/doc/it/images/button-view-access-log.gif b/doc/it/images/button-view-access-log.gif Binary files differnew file mode 100644 index 000000000..1d67c85fb --- /dev/null +++ b/doc/it/images/button-view-access-log.gif diff --git a/doc/it/images/button-view-error-log.gif b/doc/it/images/button-view-error-log.gif Binary files differnew file mode 100644 index 000000000..edcc05b08 --- /dev/null +++ b/doc/it/images/button-view-error-log.gif diff --git a/doc/it/images/button-view-page-log.gif b/doc/it/images/button-view-page-log.gif Binary files differnew file mode 100644 index 000000000..d48d7721e --- /dev/null +++ b/doc/it/images/button-view-page-log.gif diff --git a/doc/it/images/button-view-printable-version.gif b/doc/it/images/button-view-printable-version.gif Binary files differnew file mode 100644 index 000000000..f01d634bf --- /dev/null +++ b/doc/it/images/button-view-printable-version.gif diff --git a/doc/it/index.html.in b/doc/it/index.html.in new file mode 100644 index 000000000..a501ee4d1 --- /dev/null +++ b/doc/it/index.html.in @@ -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=""> Principale <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="unsel" HREF="/admin/"><IMG SRC="/images/tab-left.gif" WIDTH="4" +HEIGHT="4" ALIGN="TOP" BORDER="0" +ALT=""> Amministrazione <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="unsel" HREF="/classes/"><IMG SRC="/images/tab-left.gif" WIDTH="4" +HEIGHT="4" ALIGN="TOP" BORDER="0" +ALT=""> Classi <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="unsel" HREF="/help/"><IMG SRC="/images/tab-left.gif" WIDTH="4" +HEIGHT="4" ALIGN="TOP" BORDER="0" +ALT=""> Documentazione/Guida <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="unsel" HREF="/jobs/"><IMG SRC="/images/tab-left.gif" WIDTH="4" +HEIGHT="4" ALIGN="TOP" BORDER="0" +ALT=""> Operazioni <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="unsel" HREF="/printers/"><IMG SRC="/images/tab-left.gif" WIDTH="4" +HEIGHT="4" ALIGN="TOP" BORDER="0" +ALT=""> Stampanti <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + +</TD></TR> +<TR CLASS="page"> +<TD WIDTH="15"> </TD> +<TD COLSPAN="2" WIDTH="100%" VALIGN="TOP" CLASS="page"> + +<H2 CLASS="title">Benvenuto!</H2> + +<P>Queste pagine web ti consentono di controllare le stampanti e le operazioni di stampa nonché 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>®</SUP>. Sviluppato e +gestito da <A HREF="http://www.easysw.com">Easy Software +Products</a> per promuovere una soluzione di stampa standard. CUPS è il +sistema di stampa standard utilizzato su MacOS<SUP>®</SUP> X e sulla +maggior parte delle distribuzioni Linux<SUP>®</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à 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"> </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 è 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/filter/pstops.c b/filter/pstops.c index 7126c5e0e..69dce4f54 100644 --- a/filter/pstops.c +++ b/filter/pstops.c @@ -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 index 000000000..4ea69f070 --- /dev/null +++ b/locale/cups_it.po @@ -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" + diff --git a/packaging/cups.list.in b/packaging/cups.list.in index a57f56484..51d315863 100644 --- a/packaging/cups.list.in +++ b/packaging/cups.list.in @@ -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). @@ -113,6 +113,9 @@ %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 $". # diff --git a/packaging/cups.spec.in b/packaging/cups.spec.in index 35efdd458..db75b6bc5 100644 --- a/packaging/cups.spec.in +++ b/packaging/cups.spec.in @@ -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® operating systems. This package provides Spanish support. 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 $". # diff --git a/scheduler/client.c b/scheduler/client.c index 85e2ac205..8a338d412 100644 --- a/scheduler/client.c +++ b/scheduler/client.c @@ -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 $". */ diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c index 75b44a7eb..4dff6f634 100644 --- a/scheduler/dirsvc.c +++ b/scheduler/dirsvc.c @@ -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). * @@ -160,6 +160,17 @@ cupsdLoadRemoteCache(void) /* + * 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 $". */ diff --git a/scheduler/main.c b/scheduler/main.c index 101f178de..434cacf89 100644 --- a/scheduler/main.c +++ b/scheduler/main.c @@ -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). * @@ -32,9 +32,11 @@ * 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... @@ -75,31 +77,41 @@ */ #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 @@ -1473,6 +1512,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 $". */ diff --git a/scheduler/network.c b/scheduler/network.c index eb89b1217..e63d4f44e 100644 --- a/scheduler/network.c +++ b/scheduler/network.c @@ -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 $". */ diff --git a/scheduler/network.h b/scheduler/network.h index 21e810c3c..5d8c83f8a 100644 --- a/scheduler/network.h +++ b/scheduler/network.h @@ -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 $". */ diff --git a/scheduler/sysman.c b/scheduler/sysman.c index 853ff86c8..61f342dcb 100644 --- a/scheduler/sysman.c +++ b/scheduler/sysman.c @@ -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); @@ -334,12 +339,6 @@ cupsdUpdateSystemMonitor(void) "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 $". */ diff --git a/systemv/lpstat.c b/systemv/lpstat.c index 46d74c56f..27f0926e8 100644 --- a/systemv/lpstat.c +++ b/systemv/lpstat.c @@ -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 index 000000000..92d5e77bc --- /dev/null +++ b/templates/it/add-class.tmpl @@ -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 index 000000000..cff93eb29 --- /dev/null +++ b/templates/it/add-printer.tmpl @@ -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 index 000000000..ee1019025 --- /dev/null +++ b/templates/it/admin.tmpl @@ -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&{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> </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 index 000000000..767c0212f --- /dev/null +++ b/templates/it/choose-device.tmpl @@ -0,0 +1,26 @@ +<FORM METHOD="POST" ACTION="/admin"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}"> +<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}"> + +<H2 CLASS="title">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 index 000000000..7240ac59a --- /dev/null +++ b/templates/it/choose-make.tmpl @@ -0,0 +1,42 @@ +<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}"> +<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}"> +<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}"> +<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}"> +<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}"> +<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}"> + +<H2 CLASS="title">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> </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 index 000000000..3ab1dec4a --- /dev/null +++ b/templates/it/choose-model.tmpl @@ -0,0 +1,34 @@ +<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}"> +<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}"> +<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}"> +<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}"> +<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}"> +<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}"> + +<H2 CLASS="title">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 index 000000000..dbcc12dd7 --- /dev/null +++ b/templates/it/choose-serial.tmpl @@ -0,0 +1,47 @@ +<FORM METHOD="POST" ACTION="/admin"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}"> +<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}"> + +<H2 CLASS="title">Impostazioni porta seriale per {printer_name}</H2> + +<TABLE> +<TR> +<TH CLASS="label">Velocità di trasmissione:</TH> +<TD><SELECT NAME="BAUDRATE"> +{[baudrates]<OPTION {?baudrate={baudrates}?SELECTED:}>{baudrates}} +</SELECT></TD> +</TR> +<TR> +<TH CLASS="label">Parità:</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 index 000000000..3837b2b9e --- /dev/null +++ b/templates/it/choose-uri.tmpl @@ -0,0 +1,42 @@ +<FORM METHOD="POST" ACTION="/admin"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}"> +<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}"> + +<H2 CLASS="title">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 index 000000000..ef4fe496e --- /dev/null +++ b/templates/it/class-added.tmpl @@ -0,0 +1,2 @@ +<P>La classe <A HREF="/classes/{printer_name}">{printer_name}</A> è stata aggiunta +con successo. diff --git a/templates/it/class-confirm.tmpl b/templates/it/class-confirm.tmpl new file mode 100644 index 000000000..0a248336c --- /dev/null +++ b/templates/it/class-confirm.tmpl @@ -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 index 000000000..3fc2ffa1e --- /dev/null +++ b/templates/it/class-deleted.tmpl @@ -0,0 +1 @@ +<P>La classe {printer_name} è stata eliminata con successo. diff --git a/templates/it/class-jobs-header.tmpl b/templates/it/class-jobs-header.tmpl new file mode 100644 index 000000000..2a0cadc33 --- /dev/null +++ b/templates/it/class-jobs-header.tmpl @@ -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 index 000000000..27ebcd7ea --- /dev/null +++ b/templates/it/class-modified.tmpl @@ -0,0 +1,2 @@ +<P>La classe <A HREF="/classes/{printer_name}">{printer_name}</A> è stata +modificata con successo. diff --git a/templates/it/classes-header.tmpl b/templates/it/classes-header.tmpl new file mode 100644 index 000000000..1fe0f4fa0 --- /dev/null +++ b/templates/it/classes-header.tmpl @@ -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 index 000000000..288270642 --- /dev/null +++ b/templates/it/classes.tmpl @@ -0,0 +1,54 @@ +{#printer_name=0?: +{[printer_name] +<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (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&printer_name={%printer_name}&is_class=Y"> +<IMG SRC="/images/button-start-class.gif" ALT="Avvia classe" CLASS="button"></A> +: +<A HREF="{admin_uri}?op=stop-class&printer_name={%printer_name}&is_class=Y"> +<IMG SRC="/images/button-stop-class.gif" ALT="Ferma classe" CLASS="button"></A> +} +{printer_is_accepting_jobs=0? +<A HREF="{admin_uri}?op=accept-jobs&printer_name={%printer_name}&is_class=Y"> +<IMG SRC="/images/button-accept-jobs.gif" ALT="Accetta operazioni" CLASS="button"></A> +: +<A HREF="{admin_uri}?op=reject-jobs&printer_name={%printer_name}&is_class=Y"> +<IMG SRC="/images/button-reject-jobs.gif" ALT="Scarta operazioni" CLASS="button"></A> +} +<A HREF="{admin_uri}?op=purge-jobs&printer_name={%printer_name}&is_class=Y"> +<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Annulla tutte le operazioni" CLASS="button"></A> +{printer_is_shared=0? +<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=1&is_class=Y"> +<IMG SRC="/images/button-publish-printer.gif" ALT="Pubblica la stampante" CLASS="button"></A> +: +<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=0&is_class=Y"> +<IMG SRC="/images/button-unpublish-printer.gif" ALT="Non pubblicare la stampante" CLASS="button"></A> +} +<A HREF="{admin_uri}?op=modify-class&printer_name={%printer_name}"> +<IMG SRC="/images/button-modify-class.gif" ALT="Modifica classe" CLASS="button"></A> +<A HREF="{admin_uri}?op=delete-class&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&printer_name={%printer_name}&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&printer_name={%printer_name}&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 index 000000000..be2ed2ba4 --- /dev/null +++ b/templates/it/edit-config.tmpl.in @@ -0,0 +1,91 @@ +<SCRIPT TYPE="text/javascript"> +function reset_config() +{ + document.cups.CUPSDCONF.value = +"# Log general information in error_log - change \\"info\\" to \\"debug\\" for\\n" + +"# troubleshooting...\\n" + +"LogLevel info\\n" + +"\\n" + +"\\n" + +"# Administrator user group...\\n" + +"SystemGroup @CUPS_SYSTEM_GROUPS@\\n" + +"\\n" + +"\\n" + +"# Only listen for connections from the local machine.\\n" + +"Listen 127.0.0.1:@DEFAULT_IPP_PORT@\\n" + +"@CUPS_LISTEN_DOMAINSOCKET@\\n" + +"\\n" + +"\\n" + +"# Show shared printers on the local network.\\n" + +"Browsing On\\n" + +"BrowseOrder allow,deny\\n" + +"BrowseAllow @LOCAL\\n" + +"\\n" + +"\\n" + +"# Authenticate against system accounts by default...\\n" + +"DefaultAuthType Basic\\n" + +"\\n" + +"# Restrict access to the server...\\n" + +"<Location />\\n" + +" Order allow,deny\\n" + +" Allow localhost\\n" + +"</Location>\\n" + +"\\n" + +"# Restrict access to the admin pages...\\n" + +"<Location /admin>\\n" + +"@ENCRYPTION_REQUIRED@\\n" + +" Order allow,deny\\n" + +" Allow localhost\\n" + +"</Location>\\n" + +"\\n" + +"# Restrict access to configuration files...\\n" + +"<Location /admin/conf>\\n" + +" AuthType Basic\\n" + +" Require user @SYSTEM\\n" + +" Order allow,deny\\n" + +" Allow localhost\\n" + +"</Location>\\n" + +"\\n" + +"# Set the default printer/job policies...\\n" + +"<Policy default>\\n" + +" # Job-related operations must be done by the owner or an adminstrator...\\n" + +" <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>\\n" + +" Require user @OWNER @SYSTEM\\n" + +" Order deny,allow\\n" + +" </Limit>\\n" + +"\\n" + +" # All administration operations require an adminstrator to authenticate...\\n" + +" <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\\n" + +" AuthType Basic\\n" + +" Require user @SYSTEM\\n" + +" Order deny,allow\\n" + +" </Limit>\\n" + +"\\n" + +" # Only the owner or an administrator can cancel or authenticate a job...\\n" + +" <Limit Cancel-Job CUPS-Authenticate-Job>\\n" + +" Require user @OWNER @SYSTEM\\n" + +" Order deny,allow\\n" + +" </Limit>\\n" + +"\\n" + +" <Limit All>\\n" + +" Order deny,allow\\n" + +" </Limit>\\n" + +"</Policy>\\n"; +} +</SCRIPT> + +<H2 CLASS="title">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 index 000000000..5e56a6c77 --- /dev/null +++ b/templates/it/error-op.tmpl @@ -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 index 000000000..ad9f643e9 --- /dev/null +++ b/templates/it/error.tmpl @@ -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 index 000000000..9256e8130 --- /dev/null +++ b/templates/it/header.tmpl.in @@ -0,0 +1,63 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<HTML> +<HEAD> + <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> + <TITLE>{title} - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE> + <!-- Prevent caching of CGI content --> + <META HTTP-EQUIV="Expires" CONTENT="now"> + <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> + {refresh_page?<META HTTP-EQUIV="Refresh" CONTENT="{refresh_page}">:} + <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css"> + <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon"> +</HEAD> +<BODY> +<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="{title}"> +<TR CLASS="HEADER"> +<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD> +<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD> +<TD WIDTH="100%" HEIGHT="60"><H1>{title}</H1></TD> +<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG +SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD> +</TR> +<TR CLASS="HEADER"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP> + +<A CLASS="unsel" HREF="/"><IMG SRC="/images/tab-left.gif" +WIDTH="4" HEIGHT="4" ALIGN="TOP" BORDER="0" +ALT=""> Home <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="{SECTION=admin?:un}sel" HREF="/admin"><IMG +SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""> Amministrazione <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="{SECTION=classes?:un}sel" HREF="/classes/"><IMG +SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""> Classi <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="{SECTION=help?:un}sel" HREF="/help/"><IMG +SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""> Documentazione/Aiuto <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="{SECTION=jobs?:un}sel" HREF="/jobs/"><IMG +SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""> Operazioni <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + + <A CLASS="{SECTION=printers?:un}sel" HREF="/printers/"><IMG +SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""> Stampanti <IMG +SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP" +BORDER="0" ALT=""></A> + +</TD></TR> +<TR CLASS="page"> +<TD WIDTH="15"> </TD> +<TD COLSPAN="2" WIDTH="100%" STYLE="height: 100%;" VALIGN="TOP" CLASS="page"> diff --git a/templates/it/help-header.tmpl b/templates/it/help-header.tmpl new file mode 100644 index 000000000..2caf5d2c7 --- /dev/null +++ b/templates/it/help-header.tmpl @@ -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 è 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'è 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à.</P>} diff --git a/templates/it/help-printable.tmpl b/templates/it/help-printable.tmpl new file mode 100644 index 000000000..305112a33 --- /dev/null +++ b/templates/it/help-printable.tmpl @@ -0,0 +1,11 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<HTML> +<HEAD> + <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> + <TITLE>{HELPTITLE}</TITLE> + <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups-printable.css"> + <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon"> +</HEAD> +<BODY> + +<H1>{HELPTITLE}</H1> diff --git a/templates/it/job-cancel.tmpl b/templates/it/job-cancel.tmpl new file mode 100644 index 000000000..24054cff4 --- /dev/null +++ b/templates/it/job-cancel.tmpl @@ -0,0 +1 @@ +<P><A HREF="{job_printer_uri}">L'operazione {job_id}</A> è stata annullata. diff --git a/templates/it/job-hold.tmpl b/templates/it/job-hold.tmpl new file mode 100644 index 000000000..97df9d34a --- /dev/null +++ b/templates/it/job-hold.tmpl @@ -0,0 +1 @@ +<P><A HREF="{job_printer_uri}">L'operazione {job_id}</A> è stata bloccata. diff --git a/templates/it/job-move.tmpl b/templates/it/job-move.tmpl new file mode 100644 index 000000000..cc4a8a07d --- /dev/null +++ b/templates/it/job-move.tmpl @@ -0,0 +1,22 @@ +<FORM METHOD="POST" ACTION="/{SECTION}/{job_id?:{printer_name}}"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}"> +{job_id?<INPUT TYPE="HIDDEN" NAME="JOB_ID" VALUE="{job_id}">:} + +<H2 CLASS="title">{job_id?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 index 000000000..d14cc58e9 --- /dev/null +++ b/templates/it/job-moved.tmpl @@ -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 index 000000000..fc82ff0bf --- /dev/null +++ b/templates/it/job-release.tmpl @@ -0,0 +1 @@ +<P><A HREF="{job_printer_uri}">L'operazione {job_id}</A> è stata rilasciata per la stampa. diff --git a/templates/it/job-restart.tmpl b/templates/it/job-restart.tmpl new file mode 100644 index 000000000..9f1b74061 --- /dev/null +++ b/templates/it/job-restart.tmpl @@ -0,0 +1 @@ +<P><A HREF="{job_printer_uri}">L'operazione {job_id}</A> è stata riavviata. diff --git a/templates/it/jobs-header.tmpl b/templates/it/jobs-header.tmpl new file mode 100644 index 000000000..385534fa2 --- /dev/null +++ b/templates/it/jobs-header.tmpl @@ -0,0 +1,15 @@ +<P>{?which_jobs=?<A +HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG +SRC="/images/button-show-completed.gif" CLASS="button" ALT="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 index 000000000..6f8f555ec --- /dev/null +++ b/templates/it/jobs.tmpl @@ -0,0 +1,42 @@ +{#job_id=0?: +<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%" SUMMARY="Job List"> +<TR CLASS="data"> +<TH>ID </TH> +<TH>Nome </TH> +<TH>Utente </TH> +<TH>Dimensione </TH> +<TH>Pagine </TH> +<TH>Stato </TH> +<TH>Controllo </TH> +</TR> + +{[job_id] +<TR CLASS="data" VALIGN="TOP"> +<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id} </TD> +<TD>{?job_name=?Sconosciuto:{job_name}} </TD> +<TD>{job_originating_user_name} </TD> +<TD>{job_k_octets}k </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}}}}}}} </TD> +<TD> +{job_preserved>0? +<A HREF="/jobs/?op=restart-job&job_id={job_id}&job_printer_uri={job_printer_uri}"> +<IMG SRC="/images/button-restart-job.gif" ALT="Ristampa operazione" CLASS="button"></A>:} +{job_state=4? +<A HREF="/jobs/?op=release-job&job_id={job_id}&job_printer_uri={job_printer_uri}"> +<IMG SRC="/images/button-release-job.gif" ALT="Rilascia operazione" CLASS="button"></A>:} +{job_state=3? +<A HREF="/jobs/?op=hold-job&job_id={job_id}&job_printer_uri={job_printer_uri}"> +<IMG SRC="/images/button-hold-job.gif" ALT="Blocca operazione" CLASS="button"></A>:} +{job_state<7? +<A HREF="/jobs/?op=cancel-job&job_id={job_id}&job_printer_uri={job_printer_uri}"> +<IMG SRC="/images/button-cancel-job.gif" ALT="Annulla operazione" CLASS="button"></A> +<A HREF="/jobs/?op=move-job&job_id={job_id}"><IMG +SRC="/images/button-move-job.gif" ALT="Sposta operazione" CLASS="button"></A>:} + </TD> +</TR> +} +</TABLE> +} diff --git a/templates/it/maintenance.tmpl b/templates/it/maintenance.tmpl new file mode 100644 index 000000000..1b88d6c78 --- /dev/null +++ b/templates/it/maintenance.tmpl @@ -0,0 +1,2 @@ +<P>comandi di manutenzione inviati; l'ID dell'operazione è <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 index 000000000..25d158a2d --- /dev/null +++ b/templates/it/modify-class.tmpl @@ -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 index 000000000..a9eafb130 --- /dev/null +++ b/templates/it/modify-printer.tmpl @@ -0,0 +1,29 @@ +<FORM METHOD="POST" ACTION="/admin"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}"> +{?device_uri=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_DEVICE_URI" VALUE="{device_uri}">} +{?printer_make_and_model=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{printer_make_and_model}">} + +<H2 CLASS="title">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 index 000000000..780f7661c --- /dev/null +++ b/templates/it/norestart.tmpl @@ -0,0 +1,2 @@ +<p>Il server non è riavviato poiché 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 index 000000000..72c85189a --- /dev/null +++ b/templates/it/option-boolean.tmpl @@ -0,0 +1,6 @@ +<TR> +<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH> +<TD> +{[choices]<INPUT TYPE="RADIO" NAME="{keyword}" {choices={defchoice}?CHECKED:} VALUE="{choices}">{text}} +</TD> +</TR> diff --git a/templates/it/option-conflict.tmpl b/templates/it/option-conflict.tmpl new file mode 100644 index 000000000..c0e20317d --- /dev/null +++ b/templates/it/option-conflict.tmpl @@ -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ù opzioni per risolvere il problema.</P> diff --git a/templates/it/option-header.tmpl b/templates/it/option-header.tmpl new file mode 100644 index 000000000..cafc9f9fe --- /dev/null +++ b/templates/it/option-header.tmpl @@ -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 index 000000000..d2534af75 --- /dev/null +++ b/templates/it/option-pickmany.tmpl @@ -0,0 +1,6 @@ +<TR> +<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH> +<TD><SELECT NAME="{keyword}" MULTIPLE SIZE="10"> +{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}} +</SELECT></TD> +</TR> diff --git a/templates/it/option-pickone.tmpl b/templates/it/option-pickone.tmpl new file mode 100644 index 000000000..08342d06e --- /dev/null +++ b/templates/it/option-pickone.tmpl @@ -0,0 +1,6 @@ +<TR> +<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH> +<TD><SELECT NAME="{keyword}"> +{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}} +</SELECT></TD> +</TR> diff --git a/templates/it/option-trailer.tmpl b/templates/it/option-trailer.tmpl new file mode 100644 index 000000000..25af37874 --- /dev/null +++ b/templates/it/option-trailer.tmpl @@ -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 index 000000000..e3dbd099a --- /dev/null +++ b/templates/it/pager.tmpl @@ -0,0 +1,7 @@ +<TABLE WIDTH="100%" CLASS="pager" SUMMARY="Paging Bar"> +<TR> + <TD WIDTH="33%">{PREVURL?<A HREF="{PREVURL}"><IMG SRC="/images/button-show-previous.gif" ALT="Mostra precedente" CLASS="button"></A>: }</TD> + <TD WIDTH="34%" ALIGN="CENTER">{ORDER=dec?<A HREF="{THISURL}&ORDER=asc"><IMG SRC="/images/button-sort-ascending.gif" ALT="Ordine crescente" CLASS="button"></A>:<A HREF="{THISURL}&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>: }</TD> +</TR> +</TABLE> diff --git a/templates/it/printer-accept.tmpl b/templates/it/printer-accept.tmpl new file mode 100644 index 000000000..19de4a1d4 --- /dev/null +++ b/templates/it/printer-accept.tmpl @@ -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 index 000000000..e45fb7fd6 --- /dev/null +++ b/templates/it/printer-added.tmpl @@ -0,0 +1,2 @@ +<P>La stampante <A HREF="/printers/{printer_name}">{printer_name}</A> è stata aggiunta +con successo. diff --git a/templates/it/printer-configured.tmpl b/templates/it/printer-configured.tmpl new file mode 100644 index 000000000..c28b9d09d --- /dev/null +++ b/templates/it/printer-configured.tmpl @@ -0,0 +1,2 @@ +<P>La stampante <A HREF="/printers/{printer_name}">{printer_name}</A> è +stata configurata con successo. diff --git a/templates/it/printer-confirm.tmpl b/templates/it/printer-confirm.tmpl new file mode 100644 index 000000000..1f3e891a2 --- /dev/null +++ b/templates/it/printer-confirm.tmpl @@ -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 index 000000000..cab22c3b6 --- /dev/null +++ b/templates/it/printer-default.tmpl @@ -0,0 +1,7 @@ +<P>{is_class?La classe:La stampante} <A +HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A> +è 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 index 000000000..fe498a50c --- /dev/null +++ b/templates/it/printer-deleted.tmpl @@ -0,0 +1 @@ +<P>La stampante {printer_name} è stata eliminata con successo. diff --git a/templates/it/printer-jobs-header.tmpl b/templates/it/printer-jobs-header.tmpl new file mode 100644 index 000000000..2a0cadc33 --- /dev/null +++ b/templates/it/printer-jobs-header.tmpl @@ -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 index 000000000..a36b81d85 --- /dev/null +++ b/templates/it/printer-modified.tmpl @@ -0,0 +1,2 @@ +<P>La stampante <A HREF="/printers/{printer_name}">{printer_name}</A> è stata +modificata con successo. diff --git a/templates/it/printer-purge.tmpl b/templates/it/printer-purge.tmpl new file mode 100644 index 000000000..b196be041 --- /dev/null +++ b/templates/it/printer-purge.tmpl @@ -0,0 +1,3 @@ +<P>{is_class?La classe:La stampante} <A +HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A> +è 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 index 000000000..225783f9e --- /dev/null +++ b/templates/it/printer-reject.tmpl @@ -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 index 000000000..b5abdc97a --- /dev/null +++ b/templates/it/printer-start.tmpl @@ -0,0 +1,3 @@ +<P>{is_class?La classe:La stampante} <A +HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A> +è stata avviata.</P> diff --git a/templates/it/printer-stop.tmpl b/templates/it/printer-stop.tmpl new file mode 100644 index 000000000..5af7bffb4 --- /dev/null +++ b/templates/it/printer-stop.tmpl @@ -0,0 +1,3 @@ +<P>{is_class?La classe:La stampante} <A +HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A> +è stata fermata.</P> diff --git a/templates/it/printers-header.tmpl b/templates/it/printers-header.tmpl new file mode 100644 index 000000000..e10112df7 --- /dev/null +++ b/templates/it/printers-header.tmpl @@ -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 index 000000000..106974498 --- /dev/null +++ b/templates/it/printers.tmpl @@ -0,0 +1,64 @@ +{printer_type?:}{#printer_name=0?: +{[printer_name] +<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (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&printer_name={%printer_name}"> +<IMG SRC="/images/button-start-printer.gif" ALT="Avvia stampante" CLASS="button"></A> +: +<A HREF="{admin_uri}?op=stop-printer&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&printer_name={%printer_name}"> +<IMG SRC="/images/button-accept-jobs.gif" ALT="Accetta operazioni" CLASS="button"></A> +: +<A HREF="{admin_uri}?op=reject-jobs&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&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&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&printer_name={%printer_name}&shared=1"> +<IMG SRC="/images/button-publish-printer.gif" ALT="Pubblica stampante" CLASS="button"></A> +: +<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=0"> +<IMG SRC="/images/button-unpublish-printer.gif" ALT="Non pubblicare stampante" CLASS="button"></A> +} +<A HREF="{admin_uri}?op=modify-printer&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&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&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&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&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 index 000000000..7ba2a5817 --- /dev/null +++ b/templates/it/restart.tmpl @@ -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 index 000000000..9339e8db9 --- /dev/null +++ b/templates/it/samba-export.tmpl @@ -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 index 000000000..78ee85e39 --- /dev/null +++ b/templates/it/samba-exported.tmpl @@ -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 index 000000000..d69e9345d --- /dev/null +++ b/templates/it/search.tmpl @@ -0,0 +1,13 @@ +<FORM ACTION="/{SECTION}/{?SEARCH_DEST}" METHOD="GET"> +{WHICH_JOBS?<INPUT TYPE="HIDDEN" NAME="WHICH_JOBS" VALUE="{WHICH_JOBS}">:} +{ORDER?<INPUT TYPE="HIDDEN" NAME="ORDER" VALUE="{ORDER}">:} + +<P ALIGN="CENTER"><B>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?&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 index 000000000..864f9f0ce --- /dev/null +++ b/templates/it/set-printer-options-header.tmpl @@ -0,0 +1,3 @@ +<FORM METHOD="POST" ACTION="/admin"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}"> diff --git a/templates/it/set-printer-options-trailer.tmpl b/templates/it/set-printer-options-trailer.tmpl new file mode 100644 index 000000000..a3d1e1ffa --- /dev/null +++ b/templates/it/set-printer-options-trailer.tmpl @@ -0,0 +1 @@ +</FORM> diff --git a/templates/it/test-page.tmpl b/templates/it/test-page.tmpl new file mode 100644 index 000000000..a2718c8d2 --- /dev/null +++ b/templates/it/test-page.tmpl @@ -0,0 +1,2 @@ +<P>Pagina di prova inviata; l'ID dell'operazione è <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 index 000000000..b598b6fd2 --- /dev/null +++ b/templates/it/trailer.tmpl @@ -0,0 +1,21 @@ +</TD> +<TD WIDTH="15"> </TD> +</TR> +<TR CLASS="trailer"> +<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif" +WIDTH="15" HEIGHT="15" ALT=""></TD> +<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;"> + +<P><SMALL>Common UNIX Printing System, CUPS, e il logo CUPS sono marchi +registrati da <A HREF="http://www.easysw.com">Easy Software +Products</A>. CUPS è 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 index 000000000..3d5222f00 --- /dev/null +++ b/templates/it/users.tmpl @@ -0,0 +1,26 @@ +<FORM METHOD="POST" ACTION="/admin"> +<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{OP}"> +<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}"> +{IS_CLASS?<INPUT TYPE="HIDDEN" NAME="IS_CLASS" VALUE="{IS_CLASS}">:} + +<H2 CLASS="title">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> diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh index fe169ecda..ae38459e9 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh @@ -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 $" # |