Comparar commits

..

1 Commits

Autor SHA1 Mensagem Data
msweet d35c99205a Import cups.org releases
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.4.2@4306 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 18:56:23 +00:00
289 arquivos alterados com 17991 adições e 4087 exclusões
+8
Ver Arquivo
@@ -3,6 +3,14 @@ CHANGES-1.3.txt
CHANGES IN CUPS V1.3.11
- The scheduler did not prevent nested classes (STR #3211)
- The scheduler did not reprint processing jobs that were moved to
another destination (STR #3222)
- The scheduler did not reset the current job file when stopping a
printer (STR #3226)
- The scheduler did not handle POSTs to custom CGIs properly (STR #3221)
- The pdftops filter did not print landscape PDF pages properly
(STR #2881)
- The scheduler did not handle partial header lines properly from CGI
programs (STR #3194)
- The web interface could hang on OpenBSD (STR #3176, STR #3196)
+140 -1
Ver Arquivo
@@ -1,6 +1,145 @@
CHANGES.txt - 2009-05-16
CHANGES.txt - 2009-11-09
------------------------
CHANGES IN CUPS V1.4.2
- SECURITY: The CUPS web interface was vulnerable to several XSS and
HTTP header/body attacks via attribute injection (STR #3367,
STR #3401)
- Fixed localization errors (STR #3359, STR #3372, STR #3380, STR #3387)
- The documentation for classes.conf and printers.conf did not provide
the correct instructions for manual changes (STR #3351)
- The scheduler did not always rebuild printer cache files when the
driver was changed (STR #3356)
- The documentation makefile failed to install localizations when using
newer versions of Bash (STR #3360)
- The configure script did not use the --with-xinetd value for the
default LPD configuration path (STR #3347)
- The configure script incorrectly required glib for DBUS support
(STR #3346)
- The cupstestppd program incorrectly reported filters with bad
permisssions as missing (STR #3363)
- The cups.desktop file used the wrong locale names (STR #3358)
- cupsSideChannelRead() did not return an error for short reads.
- The installed PAM configuration file did not use the correct options
with the pam_unix2 module (STR #3313)
- The scheduler did not preserve default options that contained special
characters (STR #3340)
- The scheduler did not remove old pre-filters when updating a printer
driver (STR #3342)
- The HP/GL-2 filter did not check for early end-of-file (STR #3319)
- The USB backend did not compile on some platforms (STR #3332)
- cupsSideChannelSNMPWalk() could go into an infinite loop with broken
SNMP implementations.
CHANGES IN CUPS V1.4.1
- Documention fixes (STR #3296)
- SNMP supply levels and states were wrong for some printers.
- The IPP backend did not update the auth-info-required value.
- The libusb-based USB backend would hang at the end of the job
(STR #3315, STR #3318)
- DNS-SD registrations for raw queues had an empty "ty" key (STR #3299)
- The JPEG and BMP MIME type rules were broken (STR #3284)
- cupsGetNamedDest returned the default printer when the named
destination did not exist (STR #3285)
- The JobKillDelay was not triggered for canceled jobs (STR #3292)
- The PPD compiler could get in an infinite loop (STR #3293)
- The configure check for dns-sd.h was broken (STR #3297)
- The "Query Printer for Default Options" page did not go away if the
query job was held (STR #3302)
- Boolean options did not show up as selected in the web interface
(STR #3303)
- The scheduler did not cache or report driver information files
correctly, leading to a variety of issues (STR #3283, STR #3297,
STR #3305)
- cupsDoIORequest() did not abort on permanent errors (STR #3311)
- Modifying a class in the web interface did not work (STR #3312)
- BrowseLocalProtocols could be cleared when changing the sharing
setting (STR #3287)
- The scheduler could return an empty supported document format
(STR #3308)
- The PPD compiler generated invalid PPD files when the locale used
something other than "." for the decimal point (STR #3300)
- The IPP backend did not handle some non-comforming IPP printer
implementations (STR #3262)
- The scheduler leaked three file descriptors to each job filter
(STR #3263)
- The scheduler now uses a default CUPS-Get-Devices timeout of 15
seconds (STR #3307)
CHANGES IN CUPS V1.4.0
- Localization updates (STR #3223, STR #3246, STR #3248, STR #3250)
- Documentation updates (STR #3225, STR #3230, STR #3242, STR #3260)
- The --with-pdftops configure option did not accept a full path to the
filter (STR #3278)
- The banner filter did not position the back side image correctly
(STR #3277)
- The dnssd backend could crash (STR #3272)
- The 1284 device ID sometimes contained trailing garbage (STR #3266)
- The USB backend returned different URIs for some printers than in
CUPS 1.3 (STR #3259)
- The scheduler did not do local job-hold-until processing for remote
queues (STR #3258)
- The scheduler did not try all possible SSL certificates on Mac OS X.
- The scheduler did not always remove a file descriptor when using the
kqueue interface (STR #3256)
- The scheduler did not protect against bad job control files in all
cases (STR #3253)
- The scheduler did not encode "+" in model names (STR #3254)
- The web interface didn't show the default options (STR #3244)
- The IPP and LPD backends needed print data before they would do an
SNMP query.
- Fixed a GNU TLS compatibility issue (STR #3231)
- Fixed a HTML error in the add and modify printer web interface
templates (STR #3229)
- The scheduler did not minimize the number of printer state events that
were generated by filter STATE: messages, which could lead to poor
performance.
- The USB backend on Mac OS X did not cleanly cancel a job.
- The network backends now set the connecting-to-device printer-state-
reasons value when looking up the address and copying the print data
for consistency.
- The scheduler now supports the com.apple.print.recoverable-warning
reason on all platforms.
CHANGES IN CUPS V1.4rc1
- The PPD compiler documentation was missing information on localization
(STR #3212)
- The IPP backend now reconnects after every request when talking to
printers that claim IPP support but only use HTTP/1.0.
- The PPD compiler crashed when both "Resolution" and "Group foo Option
Resolution" were specified in the .drv file.
- The PPD compiler's #if/#elif/#else/#endif did not work for undefined
variables (STR #3210)
- Static libraries could not be installed by a non-root user on systems
needing a ranlib program (STR #3209)
- The scheduler incorrectly always tried to copy Kerberos credentials
for print jobs.
- Updated the Spanish localization (STR #3204)
- The scheduler crashed when getting the default paper size from
libpaper (STR #3205, STR #3206)
- The PPD compiler now defines six variables: CUPS_VERSION,
CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, CUPS_VERSION_PATCH,
PLATFORM_NAME, and PLATFORM_ARCH (STR #3203)
- Fixed a whitespace skipping bug in cupsRasterInterpretPPD.
- The scheduler did not return HTTP 403 (Forbidden) for authenticated
users that were not authorized to do IPP operations (STR #3193)
- The scheduler did not report more than 8 Product strings from a PPD
file. Some PPD files have as many as 24.
- ppdOpen*() could crash if a keyword had no value string (something
that cupstestppd looks for...)
- cupsLangDefault() did not return the correct language on Mac OS X.
- The Mac OS X USB backend did not handle aborted or stalled pipe
conditions properly, which prevented drivers from ejecting partial
pages when a job was canceled or held.
CHANGES IN CUPS V1.4b3
- Documentation fixes (STR #3044, STR #3057, STR #3153, STR #3158,
+3 -1
Ver Arquivo
@@ -1,4 +1,4 @@
CREDITS.txt - 2008-12-08
CREDITS.txt - 2009-07-07
------------------------
Few projects are completed by one person, and CUPS is no exception. We'd
@@ -17,6 +17,7 @@ like to thank the following individuals for their contributions:
Wang Jian - CUPS RPM corrections.
Roderick Johnstone - Beta tester of the millenium.
Till Kamppeter - Bug fixes, beta testing, evangelism.
I–aki Larra–aga - Basque localization.
Kenshi Muto - Japanese localization, patches, and
testing.
Tomohiro Kato - Japanese localization.
@@ -28,6 +29,7 @@ like to thank the following individuals for their contributions:
Jason McMullan - Original CUPS RPM distributions.
Wes Morgan - *BSD fixes.
Daniel Nylander - Swedish localization.
Niklas 'Nille' kerstršm - Swedish localization.
Giulio Orsero - Bug fixes and testing.
Michal Osowiecki - Polish localization.
Citra Paska - Indonesian localization.
+2 -2
Ver Arquivo
@@ -1,4 +1,4 @@
INSTALL - CUPS v1.4b3 - 2009-05-19
INSTALL - CUPS v1.4.0 - 2009-06-26
----------------------------------
This file describes how to compile and install CUPS from source code. For more
@@ -43,7 +43,7 @@ COMPILING THE SUBVERSION REPOSITORY CODE
configure script. You'll need to run the GNU autoconf software (2.60 or
higher) to create it:
autoconf -f
autoconf
CONFIGURATION
+1
Ver Arquivo
@@ -20,6 +20,7 @@
AR = @AR@
AWK = @AWK@
CC = @LIBTOOL@ @CC@
CHMOD = @CHMOD@
CXX = @LIBTOOL@ @CXX@
DSO = @DSO@
DSOXX = @DSOXX@
+2 -1
Ver Arquivo
@@ -392,6 +392,7 @@ docset: apihelp
echo Indexing docset...
/Developer/usr/bin/docsetutil index org.cups.docset
echo Generating docset archive and feed...
$(RM) org.cups.docset.atom
/Developer/usr/bin/docsetutil package --output org.cups.docset.xar \
--atom org.cups.docset.atom \
--download-url http://www.cups.org/org.cups.docset.xar \
@@ -424,7 +425,7 @@ dist: all
*BSD*) $(MAKE) $(MFLAGS) bsd;; \
Darwin*) $(MAKE) $(MFLAGS) osx;; \
IRIX*) $(MAKE) $(MFLAGS) tardist;; \
Linux*) $(MAKE) $(MFLAGS) rpm;; \
Linux*) test ! -x /usr/bin/rpm || $(MAKE) $(MFLAGS) rpm;; \
SunOS*) $(MAKE) $(MFLAGS) pkg;; \
esac
+1 -14
Ver Arquivo
@@ -1,19 +1,6 @@
README - CUPS v1.4b3 - 2009-05-19
README - CUPS v1.4.0 - 2009-06-26
---------------------------------
**********************************************************************
**********************************************************************
********** **********
********** THIS IS BETA-RELEASE SOFTWARE. DO NOT USE ON **********
********** PRODUCTION SYSTEMS! REPORT PROBLEMS TO THE **********
********** CUPS FORUMS OR BUG REPORTING PAGES: **********
********** **********
********** http://www.cups.org/newsgroups.php (FORUMS) **********
********** http://www.cups.org/str.php (BUGS) **********
********** **********
**********************************************************************
**********************************************************************
Looking for compile instructions? Read the file "INSTALL.txt"
instead...
+6 -6
Ver Arquivo
@@ -276,16 +276,16 @@ extern int backendGetDeviceID(int fd, char *device_id,
extern int backendGetMakeModel(const char *device_id,
char *make_model,
int make_model_size);
extern void backendNetworkSideCB(int print_fd, int device_fd,
extern int backendNetworkSideCB(int print_fd, int device_fd,
int snmp_fd, http_addr_t *addr,
int use_bc);
extern ssize_t backendRunLoop(int print_fd, int device_fd, int snmp_fd,
http_addr_t *addr, int use_bc,
void (*side_cb)(int print_fd,
int device_fd,
int snmp_fd,
http_addr_t *addr,
int use_bc));
int (*side_cb)(int print_fd,
int device_fd,
int snmp_fd,
http_addr_t *addr,
int use_bc));
extern int backendSNMPSupplies(int snmp_fd, http_addr_t *addr,
int *page_count,
int *printer_state);
+2 -2
Ver Arquivo
@@ -153,8 +153,8 @@ main(int argc, /* I - Number of command-line args */
memset(&action, 0, sizeof(action));
sigemptyset(&action.sa_mask);
action.sa_handler = SIG_IGN;
sigaction(SIGTERM, &action, sigterm_handler);
action.sa_handler = sigterm_handler;
sigaction(SIGTERM, &action, NULL);
#else
signal(SIGTERM, sigterm_handler);
#endif /* HAVE_SIGSET */
+18 -3
Ver Arquivo
@@ -196,12 +196,19 @@ backendGetDeviceID(
* and then limit the length to the size of our buffer...
*/
if (length > (device_id_size - 2))
if (length > device_id_size)
length = (((unsigned)device_id[1] & 255) << 8) +
((unsigned)device_id[0] & 255);
if (length > (device_id_size - 2))
length = device_id_size - 2;
if (length > device_id_size)
length = device_id_size;
/*
* The length field counts the number of bytes in the string
* including the length field itself (2 bytes).
*/
length -= 2;
/*
* Copy the device ID text to the beginning of the buffer and
@@ -306,6 +313,14 @@ backendGetDeviceID(
mfg = temp;
}
if (!strncasecmp(mdl, mfg, strlen(mfg)))
{
mdl += strlen(mfg);
while (isspace(*mdl & 255))
mdl ++;
}
/*
* Generate the device URI from the manufacturer, make_model, and
* serial number strings.
+76 -57
Ver Arquivo
@@ -45,6 +45,8 @@
static char *password = NULL; /* Password for device URI */
static int password_tries = 0; /* Password tries */
static const char *auth_info_required = "none";
/* New auth-info-required value */
#ifdef __APPLE__
static char pstmpname[1024] = ""; /* Temporary PostScript file name */
#endif /* __APPLE__ */
@@ -91,7 +93,7 @@ main(int argc, /* I - Number of command-line args */
int num_options; /* Number of printer options */
cups_option_t *options; /* Printer options */
const char *device_uri; /* Device URI */
char method[255], /* Method in URI */
char scheme[255], /* Scheme in URI */
hostname[1024], /* Hostname */
username[255], /* Username info */
resource[1024], /* Resource info (printer name) */
@@ -236,21 +238,14 @@ main(int argc, /* I - Number of command-line args */
if ((device_uri = cupsBackendDeviceURI(argv)) == NULL)
return (CUPS_BACKEND_FAILED);
if (httpSeparateURI(HTTP_URI_CODING_ALL, device_uri,
method, sizeof(method), username, sizeof(username),
hostname, sizeof(hostname), &port,
resource, sizeof(resource)) < HTTP_URI_OK)
{
_cupsLangPuts(stderr,
_("ERROR: Missing device URI on command-line and no "
"DEVICE_URI environment variable!\n"));
return (CUPS_BACKEND_STOP);
}
httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme),
username, sizeof(username), hostname, sizeof(hostname), &port,
resource, sizeof(resource));
if (!port)
port = IPP_PORT; /* Default to port 631 */
if (!strcmp(method, "https"))
if (!strcmp(scheme, "https"))
cupsSetEncryption(HTTP_ENCRYPT_ALWAYS);
else
cupsSetEncryption(HTTP_ENCRYPT_IF_REQUESTED);
@@ -416,11 +411,12 @@ main(int argc, /* I - Number of command-line args */
int fd; /* File descriptor */
http_addrlist_t *addrlist; /* Address list */
char buffer[8192]; /* Buffer for copying */
int bytes; /* Number of bytes read */
off_t tbytes; /* Total bytes copied */
fputs("STATE: +connecting-to-device\n", stderr);
fprintf(stderr, "DEBUG: Looking up \"%s\"...\n", hostname);
if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, "1")) == NULL)
{
_cupsLangPrintf(stderr, _("ERROR: Unable to locate printer \'%s\'!\n"),
@@ -438,23 +434,8 @@ main(int argc, /* I - Number of command-line args */
_cupsLangPuts(stderr, _("INFO: Copying print data...\n"));
tbytes = 0;
while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
{
if (write(fd, buffer, bytes) < bytes)
{
_cupsLangPrintError(_("ERROR: Unable to write to temporary file"));
close(fd);
unlink(tmpfilename);
return (CUPS_BACKEND_FAILED);
}
else
tbytes += bytes;
if (snmp_fd >= 0)
backendCheckSideChannel(snmp_fd, &(addrlist->addr));
}
tbytes = backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0,
backendNetworkSideCB);
if (snmp_fd >= 0)
_cupsSNMPClose(snmp_fd);
@@ -544,8 +525,7 @@ main(int argc, /* I - Number of command-line args */
do
{
fprintf(stderr, "DEBUG: Connecting to %s:%d\n",
hostname, port);
fprintf(stderr, "DEBUG: Connecting to %s:%d\n", hostname, port);
_cupsLangPuts(stderr, _("INFO: Connecting to printer...\n"));
if ((http = httpConnectEncrypt(hostname, port, cupsEncryption())) == NULL)
@@ -661,7 +641,8 @@ main(int argc, /* I - Number of command-line args */
* might contain username:password information...
*/
snprintf(uri, sizeof(uri), "%s://%s:%d%s", method, hostname, port, resource);
httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), scheme, NULL, hostname,
port, resource);
/*
* First validate the destination and see if the device supports multiple
@@ -702,6 +683,9 @@ main(int argc, /* I - Number of command-line args */
fputs("DEBUG: Getting supported attributes...\n", stderr);
if (http->version < HTTP_1_1)
httpReconnect(http);
if ((supported = cupsDoRequest(http, request, resource)) == NULL)
ipp_status = cupsLastError();
else
@@ -1021,6 +1005,9 @@ main(int argc, /* I - Number of command-line args */
* Do the request...
*/
if (http->version < HTTP_1_1)
httpReconnect(http);
if (num_files > 1)
response = cupsDoRequest(http, request, resource);
else
@@ -1064,16 +1051,21 @@ main(int argc, /* I - Number of command-line args */
_cupsLangPrintf(stderr, _("ERROR: Print file was not accepted (%s)!\n"),
cupsLastErrorString());
if (ipp_status == IPP_NOT_AUTHORIZED)
if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
{
fprintf(stderr, "DEBUG: WWW-Authenticate=\"%s\"\n",
httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE));
/*
* Normal authentication goes through the password callback, which sets
* auth_info_required to "username,password". Kerberos goes directly
* through GSSAPI, so look for Negotiate in the WWW-Authenticate header
* here and set auth_info_required as needed...
*/
if (!strncmp(httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE),
"Negotiate", 9))
fputs("ATTR: auth-info-required=negotiate\n", stderr);
else
fputs("ATTR: auth-info-required=username,password\n", stderr);
auth_info_required = "negotiate";
}
}
}
@@ -1130,6 +1122,9 @@ main(int argc, /* I - Number of command-line args */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE,
"document-format", NULL, content_type);
if (http->version < HTTP_1_1)
httpReconnect(http);
ippDelete(cupsDoFileRequest(http, request, resource, files[i]));
if (cupsLastError() > IPP_OK_CONFLICT)
@@ -1198,7 +1193,7 @@ main(int argc, /* I - Number of command-line args */
* Do the request...
*/
if (!copies_sup)
if (!copies_sup || http->version < HTTP_1_1)
httpReconnect(http);
response = cupsDoRequest(http, request, resource);
@@ -1251,6 +1246,19 @@ main(int argc, /* I - Number of command-line args */
break;
}
}
else
{
/*
* If the printer does not return a job-state attribute, it does not
* conform to the IPP specification - break out immediately and fail
* the job...
*/
fputs("DEBUG: No job-state available from printer - stopping queue.\n",
stderr);
ipp_status = IPP_INTERNAL_ERROR;
break;
}
}
ippDelete(response);
@@ -1295,6 +1303,15 @@ main(int argc, /* I - Number of command-line args */
page_count > start_count)
fprintf(stderr, "PAGE: total %d\n", page_count - start_count);
#ifdef HAVE_GSSAPI
/*
* See if we used Kerberos at all...
*/
if (http->gssctx)
auth_info_required = "negotiate";
#endif /* HAVE_GSSAPI */
/*
* Free memory...
*/
@@ -1327,8 +1344,12 @@ main(int argc, /* I - Number of command-line args */
* Return the queue status...
*/
if (ipp_status == IPP_NOT_AUTHORIZED)
fprintf(stderr, "ATTR: auth-info-required=%s\n", auth_info_required);
if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
return (CUPS_BACKEND_AUTH_REQUIRED);
else if (ipp_status == IPP_INTERNAL_ERROR)
return (CUPS_BACKEND_STOP);
else if (ipp_status > IPP_OK_CONFLICT)
return (CUPS_BACKEND_FAILED);
else
@@ -1369,6 +1390,9 @@ cancel_job(http_t *http, /* I - HTTP connection */
* Do the request...
*/
if (http->version < HTTP_1_1)
httpReconnect(http);
ippDelete(cupsDoRequest(http, request, resource));
if (cupsLastError() > IPP_OK_CONFLICT)
@@ -1428,6 +1452,9 @@ check_printer_state(
* Do the request...
*/
if (http->version < HTTP_1_1)
httpReconnect(http);
if ((response = cupsDoRequest(http, request, resource)) != NULL)
{
report_printer_state(response, job_id);
@@ -1523,6 +1550,12 @@ password_cb(const char *prompt) /* I - Prompt (not used) */
{
(void)prompt;
/*
* Remember that we need to authenticate...
*/
auth_info_required = "username,password";
if (password && *password && password_tries < 3)
{
password_tries ++;
@@ -1532,23 +1565,10 @@ password_cb(const char *prompt) /* I - Prompt (not used) */
else
{
/*
* If there is no password set in the device URI, return the
* "authentication required" exit code...
* Give up after 3 tries or if we don't have a password to begin with...
*/
if (tmpfilename[0])
unlink(tmpfilename);
#ifdef __APPLE__
if (pstmpname[0])
unlink(pstmpname);
#endif /* __APPLE__ */
fputs("ATTR: auth-info-required=username,password\n", stderr);
exit(CUPS_BACKEND_AUTH_REQUIRED);
return (NULL); /* Eliminate compiler warning */
return (NULL);
}
}
@@ -1802,8 +1822,7 @@ run_pictwps_filter(char **argv, /* I - Command-line arguments */
* file...
*/
close(1);
dup(fd);
dup2(fd, 1);
close(fd);
if (!getuid())
+10 -22
Ver Arquivo
@@ -113,7 +113,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
const char *device_uri; /* Device URI */
char method[255], /* Method in URI */
char scheme[255], /* Scheme in URI */
hostname[1024], /* Hostname */
username[255], /* Username info */
resource[1024], /* Resource info (printer name) */
@@ -193,9 +193,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if ((device_uri = cupsBackendDeviceURI(argv)) == NULL)
return (CUPS_BACKEND_FAILED);
httpSeparateURI(HTTP_URI_CODING_ALL, device_uri,
method, sizeof(method), username, sizeof(username),
hostname, sizeof(hostname), &port,
httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme),
username, sizeof(username), hostname, sizeof(hostname), &port,
resource, sizeof(resource));
if (!port)
@@ -426,10 +425,11 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
http_addrlist_t *addrlist; /* Address list */
int snmp_fd; /* SNMP socket */
char buffer[8192]; /* Buffer for copying */
int bytes; /* Number of bytes read */
fputs("STATE: +connecting-to-device\n", stderr);
fprintf(stderr, "DEBUG: Looking up \"%s\"...\n", hostname);
if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, "1")) == NULL)
{
_cupsLangPrintf(stderr, _("ERROR: Unable to locate printer \'%s\'!\n"),
@@ -447,19 +447,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
_cupsLangPuts(stderr, _("INFO: Copying print data...\n"));
while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
{
if (write(fd, buffer, bytes) < bytes)
{
_cupsLangPrintError(_("ERROR: Unable to write to temporary file"));
close(fd);
unlink(tmpfilename);
return (CUPS_BACKEND_FAILED);
}
if (snmp_fd >= 0)
backendCheckSideChannel(snmp_fd, &(addrlist->addr));
}
backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0, backendNetworkSideCB);
if (snmp_fd >= 0)
_cupsSNMPClose(snmp_fd);
@@ -695,6 +683,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
sprintf(portname, "%d", port);
fputs("STATE: +connecting-to-device\n", stderr);
fprintf(stderr, "DEBUG: Looking up \"%s\"...\n", hostname);
if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, portname)) == NULL)
@@ -721,9 +710,8 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
* First try to reserve a port for this connection...
*/
fputs("STATE: +connecting-to-device\n", stderr);
fprintf(stderr, "DEBUG: Connecting to %s:%d for printer %s\n",
hostname, port, printer);
fprintf(stderr, "DEBUG: Connecting to %s:%d for printer %s\n", hostname,
port, printer);
_cupsLangPuts(stderr, _("INFO: Connecting to printer...\n"));
for (lport = reserve == RESERVE_RFC1179 ? 732 : 1024, addr = addrlist,
+3 -6
Ver Arquivo
@@ -61,7 +61,7 @@ backendCheckSideChannel(
* 'backendNetworkSideCB()' - Handle common network side-channel commands.
*/
void
int /* O - -1 on error, 0 on success */
backendNetworkSideCB(
int print_fd, /* I - Print file or -1 */
int device_fd, /* I - Device file or -1 */
@@ -79,10 +79,7 @@ backendNetworkSideCB(
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
{
_cupsLangPuts(stderr, _("WARNING: Failed to read side-channel request!\n"));
return;
}
return (-1);
switch (command)
{
@@ -284,7 +281,7 @@ backendNetworkSideCB(
break;
}
cupsSideChannelWrite(command, status, data, datalen, 1.0);
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
}
+7 -10
Ver Arquivo
@@ -1278,7 +1278,7 @@ int papCancelRequest(int sockfd, u_short tid)
* 'sidechannel_request()' - Handle side-channel requests.
*/
static void
static int
sidechannel_request()
{
cups_sc_command_t command; /* Request command */
@@ -1289,32 +1289,29 @@ sidechannel_request()
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
{
fputs(_("WARNING: Failed to read side-channel request!\n"), stderr);
return;
}
return (-1);
switch (command)
{
case CUPS_SC_CMD_GET_BIDI: /* Is the connection bidirectional? */
data[0] = 1;
cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0);
return (cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0));
break;
case CUPS_SC_CMD_GET_STATE: /* Return device state */
data[0] = CUPS_SC_STATE_ONLINE;
cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0);
return (cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0));
break;
case CUPS_SC_CMD_DRAIN_OUTPUT: /* Drain all pending output */
case CUPS_SC_CMD_SOFT_RESET: /* Do a soft reset */
case CUPS_SC_CMD_GET_DEVICE_ID: /* Return IEEE-1284 device ID */
default:
cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED,
NULL, 0, 1.0);
return (cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED,
NULL, 0, 1.0));
break;
}
return;
return (0);
}
+4 -7
Ver Arquivo
@@ -59,7 +59,7 @@
*/
static void list_devices(void);
static void side_cb(int print_fd, int device_fd, int snmp_fd,
static int side_cb(int print_fd, int device_fd, int snmp_fd,
http_addr_t *addr, int use_bc);
@@ -615,7 +615,7 @@ list_devices(void)
* 'side_cb()' - Handle side-channel requests...
*/
static void
static int /* O - 0 on success, -1 on error */
side_cb(int print_fd, /* I - Print file */
int device_fd, /* I - Device file */
int snmp_fd, /* I - SNMP socket (unused) */
@@ -634,10 +634,7 @@ side_cb(int print_fd, /* I - Print file */
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
{
_cupsLangPuts(stderr, _("WARNING: Failed to read side-channel request!\n"));
return;
}
return (-1);
switch (command)
{
@@ -680,7 +677,7 @@ side_cb(int print_fd, /* I - Print file */
break;
}
cupsSideChannelWrite(command, status, data, datalen, 1.0);
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
}
+11 -2
Ver Arquivo
@@ -147,7 +147,7 @@ backendRunLoop(
int snmp_fd, /* I - SNMP socket or -1 if none */
http_addr_t *addr, /* I - Address of device */
int use_bc, /* I - Use back-channel? */
void (*side_cb)(int, int, int, http_addr_t *, int))
int (*side_cb)(int, int, int, http_addr_t *, int))
/* I - Side-channel callback */
{
int nfds; /* Maximum file descriptor value + 1 */
@@ -196,6 +196,14 @@ backendRunLoop(
signal(SIGTERM, SIG_IGN);
#endif /* HAVE_SIGSET */
}
else if (print_fd < 0)
{
/*
* Copy print data from stdin, but don't mess with the signal handlers...
*/
print_fd = 0;
}
/*
* Figure out the maximum file descriptor value to use with select()...
@@ -266,7 +274,8 @@ backendRunLoop(
* loop since it may have read from print_fd...
*/
(*side_cb)(print_fd, device_fd, snmp_fd, addr, use_bc);
if ((*side_cb)(print_fd, device_fd, snmp_fd, addr, use_bc))
side_cb = NULL;
continue;
}
+9 -11
Ver Arquivo
@@ -84,7 +84,7 @@
*/
static void list_devices(void);
static void side_cb(int print_fd, int device_fd, int use_bc);
static int side_cb(int print_fd, int device_fd, int use_bc);
/*
@@ -109,7 +109,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
sep; /* Option separator */
int port; /* Port number (not used) */
int copies; /* Number of copies to print */
int print_fd, /* Print file */
int side_eof = 0, /* Saw EOF on side-channel? */
print_fd, /* Print file */
device_fd; /* Serial device */
int nfds; /* Maximum file descriptor value + 1 */
fd_set input, /* Input set for reading */
@@ -558,7 +559,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if (!print_bytes)
FD_SET(print_fd, &input);
FD_SET(device_fd, &input);
if (!print_bytes)
if (!print_bytes && !side_eof)
FD_SET(CUPS_SC_FD, &input);
FD_ZERO(&output);
@@ -579,7 +580,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* loop since it may have read from print_fd...
*/
side_cb(print_fd, device_fd, 1);
if (side_cb(print_fd, device_fd, 1))
side_eof = 1;
continue;
}
@@ -1278,7 +1280,7 @@ list_devices(void)
* 'side_cb()' - Handle side-channel requests...
*/
static void
static int /* O - 0 on success, -1 on error */
side_cb(int print_fd, /* I - Print file */
int device_fd, /* I - Device file */
int use_bc) /* I - Using back-channel? */
@@ -1292,11 +1294,7 @@ side_cb(int print_fd, /* I - Print file */
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
{
_cupsLangPuts(stderr,
_("WARNING: Failed to read side-channel request!\n"));
return;
}
return (-1);
switch (command)
{
@@ -1323,7 +1321,7 @@ side_cb(int print_fd, /* I - Print file */
break;
}
cupsSideChannelWrite(command, status, data, datalen, 1.0);
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
}
+5 -2
Ver Arquivo
@@ -229,8 +229,11 @@ backendSNMPSupplies(
packet.object_type != CUPS_ASN1_OCTET_STRING)
return (-1);
new_state = (packet.object_value.string.bytes[0] << 8) |
packet.object_value.string.bytes[1];
if (packet.object_value.string.num_bytes == 2)
new_state = (packet.object_value.string.bytes[0] << 8) |
packet.object_value.string.bytes[1];
else
new_state = 0;
if (current_state < 0)
change_state = 0xffff;
+8 -12
Ver Arquivo
@@ -3,7 +3,7 @@
*
* AppSocket backend for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2008 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -62,7 +62,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
const char *device_uri; /* Device URI */
char method[255], /* Method in URI */
char scheme[255], /* Scheme in URI */
hostname[1024], /* Hostname */
username[255], /* Username info (not used) */
resource[1024], /* Resource info (not used) */
@@ -168,9 +168,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if ((device_uri = cupsBackendDeviceURI(argv)) == NULL)
return (CUPS_BACKEND_FAILED);
httpSeparateURI(HTTP_URI_CODING_ALL, device_uri,
method, sizeof(method), username, sizeof(username),
hostname, sizeof(hostname), &port,
httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme),
username, sizeof(username), hostname, sizeof(hostname), &port,
resource, sizeof(resource));
if (port == 0)
@@ -261,6 +260,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
sprintf(portname, "%d", port);
fputs("STATE: +connecting-to-device\n", stderr);
fprintf(stderr, "DEBUG: Looking up \"%s\"...\n", hostname);
if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, portname)) == NULL)
@@ -270,12 +270,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
return (CUPS_BACKEND_STOP);
}
fprintf(stderr, "DEBUG: Connecting to %s:%d\n",
hostname, port);
fprintf(stderr, "DEBUG: Connecting to %s:%d\n", hostname, port);
_cupsLangPuts(stderr, _("INFO: Connecting to printer...\n"));
fputs("STATE: +connecting-to-device\n", stderr);
for (delay = 5;;)
{
if ((addr = httpAddrConnect(addrlist, &device_fd)) == NULL)
@@ -345,9 +342,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if (recoverable)
{
/*
* If we've shown a recoverable error make sure the printer proxies
* have a chance to see the recovered message. Not pretty but
* necessary for now...
* If we've shown a recoverable error make sure the printer proxies have a
* chance to see the recovered message. Not pretty but necessary for now...
*/
fputs("INFO: recovered: \n", stderr);
+205 -48
Ver Arquivo
@@ -16,9 +16,10 @@
*
* Contents:
*
* main() - Run the named backend.
* usage() - Show usage information.
* walk_cb() - Show results of cupsSideChannelSNMPWalk...
* main() - Run the named backend.
* sigterm_handler() - Flag when we get SIGTERM.
* usage() - Show usage information.
* walk_cb() - Show results of cupsSideChannelSNMPWalk...
*/
/*
@@ -34,12 +35,21 @@
#include <fcntl.h>
#include <errno.h>
#include <sys/wait.h>
#include <signal.h>
/*
* Local globals...
*/
static int job_canceled = 0;
/*
* Local functions...
*/
static void sigterm_handler(int sig);
static void usage(void);
static void walk_cb(const char *oid, const char *data, int datalen,
void *context);
@@ -58,6 +68,7 @@ main(int argc, /* I - Number of command-line args */
char *argv[]) /* I - Command-line arguments */
{
int first_arg, /* First argument for backend */
do_cancel = 0, /* Simulate a cancel-job via SIGTERM */
do_ps = 0, /* Do PostScript query+test? */
do_pcl = 0, /* Do PCL query+test? */
do_side_tests = 0, /* Test side-channel ops? */
@@ -69,9 +80,12 @@ main(int argc, /* I - Number of command-line args */
char scheme[255], /* Scheme in URI == backend */
backend[1024]; /* Backend path */
const char *serverbin; /* CUPS_SERVERBIN environment variable */
int back_fds[2], /* Back-channel pipe */
int fd, /* Temporary file descriptor */
back_fds[2], /* Back-channel pipe */
side_fds[2], /* Side-channel socket */
data_fds[2], /* Data pipe */
back_pid = -1, /* Backend process ID */
data_pid = -1, /* Trickle process ID */
pid, /* Process ID */
status; /* Exit status */
@@ -85,6 +99,8 @@ main(int argc, /* I - Number of command-line args */
first_arg ++)
if (!strcmp(argv[first_arg], "-d"))
show_log = 1;
else if (!strcmp(argv[first_arg], "-cancel"))
do_cancel = 1;
else if (!strcmp(argv[first_arg], "-pcl"))
do_pcl = 1;
else if (!strcmp(argv[first_arg], "-ps"))
@@ -160,33 +176,44 @@ main(int argc, /* I - Number of command-line args */
* Execute the trickle process as needed...
*/
if (do_trickle || do_pcl || do_ps)
if (do_trickle || do_pcl || do_ps || do_cancel)
{
pipe(data_fds);
if ((pid = fork()) == 0)
signal(SIGTERM, sigterm_handler);
if ((data_pid = fork()) == 0)
{
/*
* Trickle/query child comes here. Rearrange file descriptors so that
* FD 1, 3, and 4 point to the backend...
*/
close(0);
open("/dev/null", O_RDONLY);
if ((fd = open("/dev/null", O_RDONLY)) != 0)
{
dup2(fd, 0);
close(fd);
}
close(1);
dup(data_fds[1]);
if (data_fds[1] != 1)
{
dup2(data_fds[1], 1);
close(data_fds[1]);
}
close(data_fds[0]);
close(data_fds[1]);
close(3);
dup(back_fds[0]);
close(back_fds[0]);
if (back_fds[0] != 3)
{
dup2(back_fds[0], 3);
close(back_fds[0]);
}
close(back_fds[1]);
close(4);
dup(side_fds[0]);
close(side_fds[0]);
if (side_fds[0] != 4)
{
dup2(side_fds[0], 4);
close(side_fds[0]);
}
close(side_fds[1]);
if (do_trickle)
@@ -203,6 +230,97 @@ main(int argc, /* I - Number of command-line args */
sleep(1);
}
}
else if (do_cancel)
{
/*
* Write PS or PCL lines until we see SIGTERM...
*/
int line = 0, page = 0; /* Current line and page */
ssize_t bytes; /* Number of bytes of response data */
char buffer[1024]; /* Output buffer */
if (do_pcl)
write(1, "\033E", 2);
else
write(1, "%!\n/Courier findfont 12 scalefont setfont 0 setgray\n", 52);
while (!job_canceled)
{
if (line == 0)
{
page ++;
if (do_pcl)
snprintf(buffer, sizeof(buffer), "PCL Page %d\r\n\r\n", page);
else
snprintf(buffer, sizeof(buffer),
"18 732 moveto (PS Page %d) show\n", page);
write(1, buffer, strlen(buffer));
}
line ++;
if (do_pcl)
snprintf(buffer, sizeof(buffer), "Line %d\r\n", line);
else
snprintf(buffer, sizeof(buffer), "18 %d moveto (Line %d) show\n",
720 - line * 12, line);
write(1, buffer, strlen(buffer));
if (line >= 55)
{
/*
* Eject after 55 lines...
*/
line = 0;
if (do_pcl)
write(1, "\014", 1);
else
write(1, "showpage\n", 9);
}
/*
* Check for back-channel data...
*/
if ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), 0)) > 0)
write(2, buffer, bytes);
/*
* Throttle output to ~100hz...
*/
usleep(10000);
}
/*
* Eject current page with info...
*/
if (do_pcl)
snprintf(buffer, sizeof(buffer),
"Canceled on line %d of page %d\r\n\014\033E", line, page);
else
snprintf(buffer, sizeof(buffer),
"\n18 %d moveto (Canceled on line %d of page %d)\nshowpage\n",
720 - line * 12, line, page);
write(1, buffer, strlen(buffer));
/*
* See if we get any back-channel data...
*/
while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), 5.0)) > 0)
write(2, buffer, bytes);
exit(0);
}
else
{
/*
@@ -282,7 +400,7 @@ main(int argc, /* I - Number of command-line args */
exit(0);
}
else if (pid < 0)
else if (data_pid < 0)
{
perror("testbackend: Unable to fork");
return (1);
@@ -295,34 +413,43 @@ main(int argc, /* I - Number of command-line args */
* Execute the backend...
*/
if ((pid = fork()) == 0)
if ((back_pid = fork()) == 0)
{
/*
* Child comes here...
*/
if (do_trickle || do_ps)
if (do_trickle || do_ps || do_pcl || do_cancel)
{
close(0);
dup(data_fds[0]);
close(data_fds[0]);
if (data_fds[0] != 0)
{
dup2(data_fds[0], 0);
close(data_fds[0]);
}
close(data_fds[1]);
}
if (!show_log)
{
close(2);
open("/dev/null", O_WRONLY);
if ((fd = open("/dev/null", O_WRONLY)) != 2)
{
dup2(fd, 2);
close(fd);
}
}
close(3);
dup(back_fds[1]);
close(back_fds[0]);
if (back_fds[1] != 3)
{
dup2(back_fds[1], 3);
close(back_fds[0]);
}
close(back_fds[1]);
close(4);
dup(side_fds[1]);
close(side_fds[0]);
if (side_fds[1] != 4)
{
dup2(side_fds[1], 4);
close(side_fds[0]);
}
close(side_fds[1]);
execv(backend, argv + first_arg);
@@ -330,7 +457,7 @@ main(int argc, /* I - Number of command-line args */
strerror(errno));
return (errno);
}
else if (pid < 0)
else if (back_pid < 0)
{
perror("testbackend: Unable to fork");
return (1);
@@ -340,20 +467,24 @@ main(int argc, /* I - Number of command-line args */
* Parent comes here, setup back and side channel file descriptors...
*/
if (do_trickle || do_ps)
if (do_trickle || do_ps || do_pcl || do_cancel)
{
close(data_fds[0]);
close(data_fds[1]);
}
close(3);
dup(back_fds[0]);
close(back_fds[0]);
if (back_fds[0] != 3)
{
dup2(back_fds[0], 3);
close(back_fds[0]);
}
close(back_fds[1]);
close(4);
dup(side_fds[0]);
close(side_fds[0]);
if (side_fds[0] != 4)
{
dup2(side_fds[0], 4);
close(side_fds[0]);
}
close(side_fds[1]);
/*
@@ -435,14 +566,26 @@ main(int argc, /* I - Number of command-line args */
printf("CUPS_SC_CMD_SOFT_RESET returned %s\n", statuses[scstatus]);
}
while (wait(&status) != pid);
if (status)
if (do_cancel)
{
if (WIFEXITED(status))
printf("%s exited with status %d!\n", backend, WEXITSTATUS(status));
else
printf("%s crashed with signal %d!\n", backend, WTERMSIG(status));
sleep(1);
kill(data_pid, SIGTERM);
kill(back_pid, SIGTERM);
}
while ((pid = wait(&status)) > 0)
{
if (status)
{
if (WIFEXITED(status))
printf("%s exited with status %d!\n",
pid == back_pid ? backend : "test",
WEXITSTATUS(status));
else
printf("%s crashed with signal %d!\n",
pid == back_pid ? backend : "test",
WTERMSIG(status));
}
}
/*
@@ -453,6 +596,19 @@ main(int argc, /* I - Number of command-line args */
}
/*
* 'sigterm_handler()' - Flag when we get SIGTERM.
*/
static void
sigterm_handler(int sig) /* I - Signal */
{
(void)sig;
job_canceled = 1;
}
/*
* 'usage()' - Show usage information.
*/
@@ -460,10 +616,11 @@ main(int argc, /* I - Number of command-line args */
static void
usage(void)
{
puts("Usage: testbackend [-d] [-ps] [-s [-oid OID] [-walk OID]] [-t] "
"device-uri job-id user title copies options [file]");
puts("Usage: testbackend [-cancel] [-d] [-ps | -pcl] [-s [-oid OID] "
"[-walk OID]] [-t] device-uri job-id user title copies options [file]");
puts("");
puts("Options:");
puts(" -cancel Simulate a canceled print job after 2 seconds.");
puts(" -d Show log messages from backend.");
puts(" -oid OID Lookup the specified SNMP OID.");
puts(" (.1.3.6.1.2.1.43.10.2.1.4.1.1 is a good one for printers)");
+129 -50
Ver Arquivo
@@ -104,6 +104,14 @@
extern char **environ;
/*
* DEBUG_WRITES, if defined, causes the backend to write data to the printer in
* 512 byte increments, up to 8192 bytes, to make debugging with a USB bus
* analyzer easier.
*/
#define DEBUG_WRITES 0
/*
* WAIT_EOF_DELAY is number of seconds we'll wait for responses from
* the printer after we've finished sending all the data
@@ -232,6 +240,9 @@ typedef struct globals_s
int print_fd; /* File descriptor to print */
ssize_t print_bytes; /* Print bytes read */
#if DEBUG_WRITES
ssize_t debug_bytes; /* Current bytes to read */
#endif /* DEBUG_WRITES */
Boolean wait_eof;
int drain_output; /* Drain all pending output */
@@ -281,9 +292,8 @@ static void status_timer_cb(CFRunLoopTimerRef timer, void *info);
#if defined(__i386__) || defined(__x86_64__)
static pid_t child_pid; /* Child PID */
static void run_legacy_backend(int argc, char *argv[], int fd); /* Starts child backend process running as a ppc executable */
#endif /* __i386__ || __x86_64__ */
static int job_canceled = 0; /* Was the job canceled? */
static void sigterm_handler(int sig); /* SIGTERM handler */
#endif /* __i386__ || __x86_64__ */
#ifdef PARSE_PS_ERRORS
static const char *next_line (const char *buffer);
@@ -318,8 +328,7 @@ print_device(const char *uri, /* I - Device URI */
{
char serial[1024]; /* Serial number buffer */
OSStatus status; /* Function results */
IOReturn iostatus, /* Current IO status */
prev_iostatus = 0; /* Previous IO status */
IOReturn iostatus; /* Current IO status */
pthread_t read_thread_id, /* Read thread */
sidechannel_thread_id;/* Side-channel thread */
int have_sidechannel = 0; /* Was the side-channel thread started? */
@@ -451,9 +460,9 @@ print_device(const char *uri, /* I - Device URI */
fputs("STATE: -connecting-to-device\n", stderr);
/*
* Now that we are "connected" to the port, catch SIGTERM so that we
* Now that we are "connected" to the port, ignore SIGTERM so that we
* can finish out any page data the driver sends (e.g. to eject the
* current page... Only catch SIGTERM if we are printing data from
* current page... Only ignore SIGTERM if we are printing data from
* stdin (otherwise you can't cancel raw jobs...)
*/
@@ -465,7 +474,7 @@ print_device(const char *uri, /* I - Device URI */
memset(&action, 0, sizeof(action));
sigemptyset(&action.sa_mask);
action.sa_handler = sigterm_handler;
action.sa_handler = SIG_IGN;
sigaction(SIGTERM, &action, NULL);
}
@@ -612,7 +621,16 @@ print_device(const char *uri, /* I - Device URI */
if (FD_ISSET(print_fd, &input_set))
{
#if DEBUG_WRITES
g.debug_bytes += 512;
if (g.debug_bytes > sizeof(print_buffer))
g.debug_bytes = 512;
g.print_bytes = read(print_fd, print_buffer, g.debug_bytes);
#else
g.print_bytes = read(print_fd, print_buffer, sizeof(print_buffer));
#endif /* DEBUG_WRITES */
if (g.print_bytes < 0)
{
@@ -646,8 +664,7 @@ print_device(const char *uri, /* I - Device URI */
if (g.print_bytes)
{
bytes = g.print_bytes;
bytes = g.print_bytes;
iostatus = (*g.classdriver)->WritePipe(g.classdriver, (UInt8*)print_ptr, &bytes, 0);
/*
@@ -656,27 +673,42 @@ print_device(const char *uri, /* I - Device URI */
*/
if (iostatus == kIOUSBTransactionTimeout)
iostatus = 0;
/*
* Ignore stall errors, since we clear any stalls in the class driver...
*/
if (iostatus == kIOUSBPipeStalled)
iostatus = 0;
/*
* Ignore the first "aborted" status we get, since we might have
* received a signal (<rdar://problem/6860126>)...
*/
if (iostatus == kIOReturnAborted && prev_iostatus != kIOReturnAborted)
{
prev_iostatus = iostatus;
iostatus = 0;
fputs("DEBUG: Got USB transaction timeout during write!\n", stderr);
iostatus = 0;
}
else
prev_iostatus = iostatus;
/*
* If we've stalled, retry the write...
*/
else if (iostatus == kIOUSBPipeStalled)
{
fputs("DEBUG: Got USB pipe stalled during write!\n", stderr);
bytes = g.print_bytes;
iostatus = (*g.classdriver)->WritePipe(g.classdriver, (UInt8*)print_ptr, &bytes, 0);
}
/*
* Retry a write after an aborted write since we probably just got
* SIGTERM (<rdar://problem/6860126>)...
*/
else if (iostatus == kIOReturnAborted)
{
fputs("DEBUG: Got USB return aborted during write!\n", stderr);
IOReturn err = (*g.classdriver)->Abort(g.classdriver);
fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n", err);
#if DEBUG_WRITES
sleep(5);
#endif /* DEBUG_WRITES */
bytes = g.print_bytes;
iostatus = (*g.classdriver)->WritePipe(g.classdriver, (UInt8*)print_ptr, &bytes, 0);
}
if (iostatus || bytes < 0)
{
@@ -684,21 +716,25 @@ print_device(const char *uri, /* I - Device URI */
* Write error - bail if we don't see an error we can retry...
*/
IOReturn err = (*g.classdriver)->Abort(g.classdriver);
_cupsLangPuts(stderr, _("ERROR: Unable to send print data!\n"));
fprintf(stderr, "DEBUG: USB class driver WritePipe returned %x\n",
iostatus);
IOReturn err = (*g.classdriver)->Abort(g.classdriver);
fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n",
err);
status = job_canceled ? CUPS_BACKEND_FAILED : CUPS_BACKEND_STOP;
status = CUPS_BACKEND_FAILED;
break;
}
else if (bytes > 0)
{
fprintf(stderr, "DEBUG: Wrote %d bytes of print data...\n", (int)bytes);
fprintf(stderr, "DEBUG: Wrote %d bytes of print data...\n", (int)bytes);
g.print_bytes -= bytes;
print_ptr += bytes;
total_bytes += bytes;
g.print_bytes -= bytes;
print_ptr += bytes;
total_bytes += bytes;
}
}
if (print_fd != 0 && status == noErr)
@@ -844,6 +880,8 @@ static void *read_thread(void *reference)
readstatus = (*g.classdriver)->ReadPipe(g.classdriver, readbuffer, &rbytes);
if (readstatus == kIOReturnSuccess && rbytes > 0)
{
fprintf(stderr, "DEBUG: Read %d bytes of back-channel data...\n",
(int)rbytes);
cupsBackChannelWrite((char*)readbuffer, rbytes, 1.0);
/* cntrl-d is echoed by the printer.
@@ -858,6 +896,12 @@ static void *read_thread(void *reference)
parse_pserror(readbuffer, rbytes);
#endif
}
else if (readstatus == kIOUSBTransactionTimeout)
fputs("DEBUG: Got USB transaction timeout during read!\n", stderr);
else if (readstatus == kIOUSBPipeStalled)
fputs("DEBUG: Got USB pipe stalled during read!\n", stderr);
else if (readstatus == kIOReturnAborted)
fputs("DEBUG: Got USB return aborted during read!\n", stderr);
/*
* Make sure this loop executes no more than once every 250 miliseconds...
@@ -899,46 +943,88 @@ sidechannel_thread(void *reference)
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
continue;
break;
switch (command)
{
case CUPS_SC_CMD_SOFT_RESET: /* Do a soft reset */
fputs("DEBUG: CUPS_SC_CMD_SOFT_RESET received from driver...\n",
stderr);
if ((*g.classdriver)->SoftReset != NULL)
{
soft_reset();
cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, NULL, 0, 1.0);
fputs("DEBUG: Returning status CUPS_STATUS_OK with no bytes...\n",
stderr);
}
else
{
cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED,
NULL, 0, 1.0);
fputs("DEBUG: Returning status CUPS_STATUS_NOT_IMPLEMENTED with "
"no bytes...\n", stderr);
}
break;
case CUPS_SC_CMD_DRAIN_OUTPUT: /* Drain all pending output */
fputs("DEBUG: CUPS_SC_CMD_DRAIN_OUTPUT received from driver...\n",
stderr);
g.drain_output = 1;
break;
case CUPS_SC_CMD_GET_BIDI: /* Is the connection bidirectional? */
fputs("DEBUG: CUPS_SC_CMD_GET_BIDI received from driver...\n",
stderr);
data[0] = g.bidi_flag;
cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0);
fprintf(stderr,
"DEBUG: Returned CUPS_SC_STATUS_OK with 1 byte (%02X)...\n",
data[0]);
break;
case CUPS_SC_CMD_GET_DEVICE_ID: /* Return IEEE-1284 device ID */
fputs("DEBUG: CUPS_SC_CMD_GET_DEVICE_ID received from driver...\n",
stderr);
datalen = sizeof(data);
get_device_id(&status, data, &datalen);
cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, datalen, 1.0);
if (datalen < sizeof(data))
data[datalen] = '\0';
else
data[sizeof(data) - 1] = '\0';
fprintf(stderr,
"DEBUG: Returning CUPS_SC_STATUS_OK with %d bytes (%s)...\n",
datalen, data);
break;
case CUPS_SC_CMD_GET_STATE: /* Return device state */
fputs("DEBUG: CUPS_SC_CMD_GET_STATE received from driver...\n",
stderr);
data[0] = CUPS_SC_STATE_ONLINE;
cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0);
fprintf(stderr,
"DEBUG: Returned CUPS_SC_STATUS_OK with 1 byte (%02X)...\n",
data[0]);
break;
default:
fprintf(stderr, "DEBUG: Unknown side-channel command (%d) received "
"from driver...\n", command);
cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED,
NULL, 0, 1.0);
fputs("DEBUG: Returned CUPS_SC_STATUS_NOT_IMPLEMENTED with no bytes...\n",
stderr);
break;
}
}
@@ -1078,7 +1164,7 @@ static Boolean list_device_cb(void *refcon,
snprintf(optionsstr, sizeof(optionsstr), "?location=%x", (unsigned)deviceLocation);
httpAssembleURI(HTTP_URI_CODING_ALL, uristr, sizeof(uristr), "usb", NULL, makestr, 0, modelstr);
strncat(uristr, optionsstr, sizeof(uristr));
strlcat(uristr, optionsstr, sizeof(uristr));
cupsBackendReport("direct", uristr, make_modelstr, make_modelstr, idstr,
NULL);
@@ -1933,8 +2019,6 @@ static void run_legacy_backend(int argc,
exit(exitstatus);
}
#endif /* __i386__ || __x86_64__ */
/*
* 'sigterm_handler()' - SIGTERM handler.
@@ -1943,7 +2027,8 @@ static void run_legacy_backend(int argc,
static void
sigterm_handler(int sig) /* I - Signal */
{
#if defined(__i386__) || defined(__x86_64__)
/* If we started a child process pass the signal on to it...
*/
if (child_pid)
{
/*
@@ -1965,15 +2050,10 @@ sigterm_handler(int sig) /* I - Signal */
exit(CUPS_BACKEND_STOP);
}
}
#endif /* __i386__ || __x86_64__ */
/*
* Otherwise just flag that the job has been canceled...
*/
job_canceled = 1;
}
#endif /* __i386__ || __x86_64__ */
#ifdef PARSE_PS_ERRORS
/*
@@ -2123,12 +2203,11 @@ static void get_device_id(cups_sc_status_t *status,
char *data,
int *datalen)
{
UInt32 deviceLocation = 0;
UInt8 interfaceNum = 0;
CFStringRef deviceIDString = NULL;
/* GetDeviceID */
copy_devicestring(g.printer_obj, &deviceIDString, &deviceLocation, &interfaceNum);
copy_deviceid(g.classdriver, &deviceIDString);
if (deviceIDString)
{
CFStringGetCString(deviceIDString, data, *datalen, kCFStringEncodingUTF8);
+23 -10
Ver Arquivo
@@ -158,7 +158,16 @@ print_device(const char *uri, /* I - Device URI */
while (poll(pfds, 2, -1) > 0)
{
if (pfds[0].revents & POLLIN)
/*
* CUPS STR #3318: USB process hangs on end-of-file, making further
* printing impossible
*
* From a strict interpretation of POSIX poll(), POLLHUP should never be
* set without POLLIN, since POLLIN is the event you request. That said,
* it appears that some versions of Linux break this.
*/
if (pfds[0].revents & (POLLIN | POLLHUP))
{
if ((bytes = read(print_fd, buffer, sizeof(buffer))) > 0)
{
@@ -178,8 +187,13 @@ print_device(const char *uri, /* I - Device URI */
break;
}
if (pfds[1].revents & POLLIN)
tbytes += side_cb(printer, print_fd);
if (pfds[1].revents & (POLLIN | POLLHUP))
{
if ((bytes = side_cb(printer, print_fd)) < 0)
pfds[1].events = 0; /* Filter has gone away... */
else
tbytes += bytes;
}
}
}
@@ -418,12 +432,14 @@ get_device_id(usb_printer_t *printer, /* I - Printer */
* and then limit the length to the size of our buffer...
*/
if (length > (bufsize - 2))
if (length > bufsize)
length = (((unsigned)buffer[1] & 255) << 8) +
((unsigned)buffer[0] & 255);
if (length > (bufsize - 2))
length = bufsize - 2;
if (length > bufsize)
length = bufsize;
length -= 2;
/*
* Copy the device ID text to the beginning of the buffer and
@@ -743,10 +759,7 @@ side_cb(usb_printer_t *printer, /* I - Printer */
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
{
_cupsLangPuts(stderr, _("WARNING: Failed to read side-channel request!\n"));
return (0);
}
return (-1);
switch (command)
{
+4 -7
Ver Arquivo
@@ -36,7 +36,7 @@
*/
static int open_device(const char *uri, int *use_bc);
static void side_cb(int print_fd, int device_fd, int snmp_fd,
static int side_cb(int print_fd, int device_fd, int snmp_fd,
http_addr_t *addr, int use_bc);
@@ -560,7 +560,7 @@ open_device(const char *uri, /* I - Device URI */
* 'side_cb()' - Handle side-channel requests...
*/
static void
static int /* O - 0 on success, -1 on error */
side_cb(int print_fd, /* I - Print file */
int device_fd, /* I - Device file */
int snmp_fd, /* I - SNMP socket (unused) */
@@ -579,10 +579,7 @@ side_cb(int print_fd, /* I - Print file */
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
{
_cupsLangPuts(stderr, _("WARNING: Failed to read side-channel request!\n"));
return;
}
return (-1);
switch (command)
{
@@ -625,7 +622,7 @@ side_cb(int print_fd, /* I - Print file */
break;
}
cupsSideChannelWrite(command, status, data, datalen, 1.0);
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
}
+2 -1
Ver Arquivo
@@ -158,8 +158,9 @@ install-libs: $(INSTALLSTATIC)
installstatic:
$(INSTALL_DIR) -m 755 $(LIBDIR)
$(INSTALL_LIB) libcupscgi.a $(LIBDIR)
$(INSTALL_LIB) -m 755 libcupscgi.a $(LIBDIR)
$(RANLIB) $(LIBDIR)/libcupscgi.a
$(CHMOD) 555 $(LIBDIR)/libcupscgi.a
#
+97 -4
Ver Arquivo
@@ -122,6 +122,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "admin");
cgiSetVariable("REFRESH_PAGE", "");
/*
* See if we have form data...
@@ -191,7 +192,7 @@ main(int argc, /* I - Number of command-line arguments */
}
else if (op && !strcmp(op, "redirect"))
{
const char *url; /* Redirection URL... */
const char *url; /* Redirection URL... */
char prefix[1024]; /* URL prefix */
@@ -205,7 +206,50 @@ main(int argc, /* I - Number of command-line arguments */
fprintf(stderr, "DEBUG: redirecting with prefix %s!\n", prefix);
if ((url = cgiGetVariable("URL")) != NULL)
printf("Location: %s%s\n\n", prefix, url);
{
char encoded[1024], /* Encoded URL string */
*ptr; /* Pointer into encoded string */
ptr = encoded;
if (*url != '/')
*ptr++ = '/';
for (; *url && ptr < (encoded + sizeof(encoded) - 4); url ++)
{
if (strchr("%@&+ <>#=", *url) || *url < ' ' || *url & 128)
{
/*
* Percent-encode this character; safe because we have at least 4
* bytes left in the array...
*/
sprintf(ptr, "%%%02X", *url & 255);
ptr += 3;
}
else
*ptr++ = *url;
}
*ptr = '\0';
if (*url)
{
/*
* URL was too long, just redirect to the admin page...
*/
printf("Location: %s/admin\n\n", prefix);
}
else
{
/*
* URL is OK, redirect there...
*/
printf("Location: %s%s\n\n", prefix, encoded);
}
}
else
printf("Location: %s/admin\n\n", prefix);
}
@@ -345,6 +389,31 @@ do_add_rss_subscription(http_t *http) /* I - HTTP connection */
* and classes and (re)show the add page...
*/
if (cgiGetVariable("EVENT_JOB_CREATED"))
cgiSetVariable("EVENT_JOB_CREATED", "CHECKED");
if (cgiGetVariable("EVENT_JOB_COMPLETED"))
cgiSetVariable("EVENT_JOB_COMPLETED", "CHECKED");
if (cgiGetVariable("EVENT_JOB_STOPPED"))
cgiSetVariable("EVENT_JOB_STOPPED", "CHECKED");
if (cgiGetVariable("EVENT_JOB_CONFIG_CHANGED"))
cgiSetVariable("EVENT_JOB_CONFIG_CHANGED", "CHECKED");
if (cgiGetVariable("EVENT_PRINTER_STOPPED"))
cgiSetVariable("EVENT_PRINTER_STOPPED", "CHECKED");
if (cgiGetVariable("EVENT_PRINTER_ADDED"))
cgiSetVariable("EVENT_PRINTER_ADDED", "CHECKED");
if (cgiGetVariable("EVENT_PRINTER_MODIFIED"))
cgiSetVariable("EVENT_PRINTER_MODIFIED", "CHECKED");
if (cgiGetVariable("EVENT_PRINTER_DELETED"))
cgiSetVariable("EVENT_PRINTER_DELETED", "CHECKED");
if (cgiGetVariable("EVENT_SERVER_STARTED"))
cgiSetVariable("EVENT_SERVER_STARTED", "CHECKED");
if (cgiGetVariable("EVENT_SERVER_STOPPED"))
cgiSetVariable("EVENT_SERVER_STOPPED", "CHECKED");
if (cgiGetVariable("EVENT_SERVER_RESTARTED"))
cgiSetVariable("EVENT_SERVER_RESTARTED", "CHECKED");
if (cgiGetVariable("EVENT_SERVER_AUDIT"))
cgiSetVariable("EVENT_SERVER_AUDIT", "CHECKED");
request = ippNewRequest(CUPS_GET_PRINTERS);
response = cupsDoRequest(http, request, "/");
@@ -467,6 +536,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
ipp_attribute_t *attr; /* member-uris attribute */
char uri[HTTP_MAX_URI]; /* Device or printer URI */
const char *name, /* Pointer to class name */
*op, /* Operation name */
*ptr; /* Pointer to CGI variable */
const char *title; /* Title of page */
static const char * const pattrs[] = /* Requested printer attributes */
@@ -478,6 +548,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
title = cgiText(modify ? _("Modify Class") : _("Add Class"));
op = cgiGetVariable("OP");
name = cgiGetVariable("PRINTER_NAME");
if (cgiGetVariable("PRINTER_LOCATION") == NULL)
@@ -492,10 +563,22 @@ do_am_class(http_t *http, /* I - HTTP connection */
request = ippNewRequest(CUPS_GET_PRINTERS);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type",
CUPS_PRINTER_LOCAL);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask",
CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE |
CUPS_PRINTER_IMPLICIT);
/*
* Do the request and get back a response...
*/
cgiClearVariables();
if (op)
cgiSetVariable("OP", op);
if (name)
cgiSetVariable("PRINTER_NAME", name);
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
/*
@@ -628,6 +711,15 @@ do_am_class(http_t *http, /* I - HTTP connection */
return;
}
if (!name)
{
cgiStartHTML(title);
cgiSetVariable("ERROR", cgiText(_("Missing form variable!")));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
return;
}
for (ptr = name; *ptr; ptr ++)
if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '#')
break;
@@ -662,8 +754,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
request = ippNewRequest(CUPS_ADD_CLASS);
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
"localhost", 0, "/classes/%s",
cgiGetVariable("PRINTER_NAME"));
"localhost", 0, "/classes/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
@@ -2607,7 +2698,9 @@ do_menu(http_t *http) /* I - HTTP connection */
if ((val = cupsGetOption("DefaultAuthType", num_settings,
settings)) != NULL && !strcasecmp(val, "Negotiate"))
cgiSetVariable("KERBEROS", "CHECKED");
else
#endif /* HAVE_GSSAPI */
cgiSetVariable("KERBEROS", "");
#ifdef HAVE_DNSSD
cgiSetVariable("HAVE_DNSSD", "1");
+1
Ver Arquivo
@@ -54,6 +54,7 @@ typedef struct cgi_file_s /**** Uploaded file data ****/
extern void cgiAbort(const char *title, const char *stylesheet,
const char *format, ...);
extern int cgiCheckVariables(const char *names);
extern void cgiClearVariables(void);
extern void *cgiCompileSearch(const char *query);
extern void cgiCopyTemplateFile(FILE *out, const char *tmpl);
extern void cgiCopyTemplateLang(const char *tmpl);
+1
Ver Arquivo
@@ -72,6 +72,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "classes");
cgiSetVariable("REFRESH_PAGE", "");
/*
* See if we are displaying a printer or all classes...
+9 -2
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Online help CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2008 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -63,6 +63,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "help");
cgiSetVariable("REFRESH_PAGE", "");
/*
* Load the help index...
@@ -102,7 +103,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
for (i = 0; i < argc; i ++)
fprintf(stderr, "argv[%d]=\"%s\"\n", i, argv[i]);
fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]);
if ((helpfile = getenv("PATH_INFO")) != NULL)
{
@@ -182,6 +183,12 @@ main(int argc, /* I - Number of command-line arguments */
topic = cgiGetVariable("TOPIC");
si = helpSearchIndex(hi, query, topic, helpfile);
cgiClearVariables();
if (query)
cgiSetVariable("QUERY", query);
if (topic)
cgiSetVariable("TOPIC", topic);
fprintf(stderr, "DEBUG: query=\"%s\", topic=\"%s\"\n",
query ? query : "(null)", topic ? topic : "(null)");
+28 -11
Ver Arquivo
@@ -650,7 +650,8 @@ cgiPrintCommand(http_t *http, /* I - Connection to server */
cgiSetIPPVars(response, NULL, NULL, NULL, 0);
attr = ippFindAttribute(response, "job-state", IPP_TAG_ENUM);
if (!attr || attr->values[0].integer >= IPP_JOB_STOPPED)
if (!attr || attr->values[0].integer >= IPP_JOB_STOPPED ||
attr->values[0].integer == IPP_JOB_HELD)
{
ippDelete(response);
break;
@@ -1397,7 +1398,9 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
int ascending, /* Order of jobs (0 = descending) */
first, /* First job to show */
count; /* Number of jobs */
const char *var; /* Form variable */
const char *var, /* Form variable */
*query, /* Query string */
*section; /* Section in web interface */
void *search; /* Search data */
char url[1024], /* Printer URI */
val[1024]; /* Form variable */
@@ -1441,11 +1444,14 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
* Get a list of matching job objects.
*/
if ((var = cgiGetVariable("QUERY")) != NULL &&
if ((query = cgiGetVariable("QUERY")) != NULL &&
!cgiGetVariable("CLEAR"))
search = cgiCompileSearch(var);
search = cgiCompileSearch(query);
else
{
query = NULL;
search = NULL;
}
jobs = cgiGetIPPObjects(response, search);
count = cupsArrayCount(jobs);
@@ -1470,16 +1476,27 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
if (first < 0)
first = 0;
sprintf(val, "%d", count);
cgiSetVariable("TOTAL", val);
if ((var = cgiGetVariable("ORDER")) != NULL)
ascending = !strcasecmp(var, "asc");
else
{
ascending = !which_jobs || !strcasecmp(which_jobs, "not-completed");
cgiSetVariable("ORDER", ascending ? "asc" : "dec");
}
section = cgiGetVariable("SECTION");
cgiClearVariables();
if (query)
cgiSetVariable("QUERY", query);
cgiSetVariable("ORDER", ascending ? "asc" : "dec");
cgiSetVariable("SECTION", section);
sprintf(val, "%d", count);
cgiSetVariable("TOTAL", val);
if (which_jobs)
cgiSetVariable("WHICH_JOBS", which_jobs);
if (ascending)
{
@@ -1501,7 +1518,7 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
*/
if (dest)
snprintf(val, sizeof(val), "/%s/%s", cgiGetVariable("SECTION"), dest);
snprintf(val, sizeof(val), "/%s/%s", section, dest);
else
strlcpy(val, "/jobs/", sizeof(val));
+1
Ver Arquivo
@@ -57,6 +57,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "jobs");
cgiSetVariable("REFRESH_PAGE", "");
/*
* Connect to the HTTP server...
+1
Ver Arquivo
@@ -1,4 +1,5 @@
_cgiCheckVariables
_cgiClearVariables
_cgiCompileSearch
_cgiCopyTemplateFile
_cgiCopyTemplateLang
+12 -4
Ver Arquivo
@@ -357,7 +357,7 @@ write_index(const char *path, /* I - File to write */
static void
write_info(const char *path, /* I - File to write */
const char *revision) /* I - Version number */
const char *revision) /* I - Subversion revision number */
{
cups_file_t *fp; /* File */
@@ -379,14 +379,22 @@ write_info(const char *path, /* I - File to write */
"\t<key>CFBundleName</key>\n"
"\t<string>CUPS Documentation</string>\n"
"\t<key>CFBundleVersion</key>\n"
"\t<string>1.4.%s</string>\n"
"\t<string>%d.%d.%s</string>\n"
"\t<key>CFBundleShortVersionString</key>\n"
"\t<string>%d.%d.%d</string>\n"
"\t<key>DocSetFeedName</key>\n"
"\t<string>cups.org</string>\n"
"\t<key>DocSetFeedURL</key>\n"
"\t<string>http://www.cups.org/org.cups.docset.xar"
"\t<string>http://www.cups.org/org.cups.docset.atom"
"</string>\n"
"\t<key>DocSetPublisherIdentifier</key>\n"
"\t<string>org.cups</string>\n"
"\t<key>DocSetPublisherName</key>\n"
"\t<string>CUPS</string>\n"
"</dict>\n"
"</plist>\n", revision);
"</plist>\n",
CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, revision,
CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, CUPS_VERSION_PATCH);
cupsFileClose(fp);
}
+1
Ver Arquivo
@@ -73,6 +73,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "printers");
cgiSetVariable("REFRESH_PAGE", "");
/*
* See if we are displaying a printer or all printers...
+3 -1
Ver Arquivo
@@ -675,6 +675,8 @@ cgi_puts(const char *s, /* I - String to output */
fputs("&gt;", out);
else if (*s == '\"')
fputs("&quot;", out);
else if (*s == '\'')
fputs("&#39;", out);
else if (*s == '&')
fputs("&amp;", out);
else
@@ -695,7 +697,7 @@ cgi_puturi(const char *s, /* I - String to output */
{
while (*s)
{
if (strchr("%&+ <>#=", *s) || *s & 128)
if (strchr("%@&+ <>#=", *s) || *s < ' ' || *s & 128)
fprintf(out, "%%%02X", *s & 255);
else
putc(*s, out);
+35 -9
Ver Arquivo
@@ -15,6 +15,7 @@
* Contents:
*
* cgiCheckVariables() - Check for the presence of "required" variables.
* cgiClearVariables() - Clear all form variables.
* cgiGetArray() - Get an element from a form array...
* cgiGetFile() - Get the file (if any) that was submitted in the form.
* cgiGetSize() - Get the size of a form array value.
@@ -134,6 +135,31 @@ cgiCheckVariables(const char *names) /* I - Variables to look for */
}
/*
* 'cgiClearVariables()' - Clear all form variables.
*/
void
cgiClearVariables(void)
{
int i, j; /* Looping vars */
_cgi_var_t *v; /* Current variable */
for (v = form_vars, i = form_count; i > 0; v ++, i --)
{
_cupsStrFree(v->name);
for (j = 0; j < v->nvalues; j ++)
if (v->values[j])
_cupsStrFree(v->values[j]);
}
form_count = 0;
cgi_unlink_file();
}
/*
* 'cgiGetArray()' - Get an element from a form array...
*/
@@ -151,7 +177,7 @@ cgiGetArray(const char *name, /* I - Name of array variable */
if (element < 0 || element >= var->nvalues)
return (NULL);
return (var->values[element]);
return (_cupsStrRetain(var->values[element]));
}
@@ -206,7 +232,7 @@ cgiGetVariable(const char *name) /* I - Name of variable */
var->values[var->nvalues - 1]));
#endif /* DEBUG */
return ((var == NULL) ? NULL : var->values[var->nvalues - 1]);
return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1]));
}
@@ -337,9 +363,9 @@ cgiSetArray(const char *name, /* I - Name of variable */
var->nvalues = element + 1;
}
else if (var->values[element])
free((char *)var->values[element]);
_cupsStrFree((char *)var->values[element]);
var->values[element] = strdup(value);
var->values[element] = _cupsStrAlloc(value);
}
}
@@ -384,7 +410,7 @@ cgiSetSize(const char *name, /* I - Name of variable */
{
for (i = size; i < var->nvalues; i ++)
if (var->values[i])
free((void *)(var->values[i]));
_cupsStrFree((void *)(var->values[i]));
}
var->nvalues = size;
@@ -417,9 +443,9 @@ cgiSetVariable(const char *name, /* I - Name of variable */
{
for (i = 0; i < var->nvalues; i ++)
if (var->values[i])
free((char *)var->values[i]);
_cupsStrFree((char *)var->values[i]);
var->values[0] = strdup(value);
var->values[0] = _cupsStrAlloc(value);
var->nvalues = 1;
}
}
@@ -465,10 +491,10 @@ cgi_add_variable(const char *name, /* I - Variable name */
if ((var->values = calloc(element + 1, sizeof(char *))) == NULL)
return;
var->name = strdup(name);
var->name = _cupsStrAlloc(name);
var->nvalues = element + 1;
var->avalues = element + 1;
var->values[element] = strdup(value);
var->values[element] = _cupsStrAlloc(value);
form_count ++;
}
+15 -8
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Web search program for www.cups.org.
*
* Copyright 2007-2008 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -33,7 +33,8 @@
* Local functions...
*/
static void list_nodes(const char *title, cups_array_t *nodes);
static void list_nodes(help_index_t *hi, const char *title,
cups_array_t *nodes);
/*
@@ -69,7 +70,7 @@ main(int argc, /* I - Number of command-line args */
search = helpSearchIndex(hi, argv[2], NULL, NULL);
if (search)
list_nodes(argv[1], search->sorted);
list_nodes(hi, argv[1], search->sorted);
/*
* Return with no errors...
@@ -84,10 +85,12 @@ main(int argc, /* I - Number of command-line args */
*/
static void
list_nodes(const char *title, /* I - Title string */
list_nodes(help_index_t *hi, /* I - Help index */
const char *title, /* I - Title string */
cups_array_t *nodes) /* I - Nodes */
{
help_node_t *node; /* Current node */
help_node_t *node, /* Current node */
*file; /* File node */
printf("%d\n", cupsArrayCount(nodes));
@@ -96,10 +99,14 @@ list_nodes(const char *title, /* I - Title string */
node = (help_node_t *)cupsArrayNext(nodes))
{
if (node->anchor)
printf("%d|%s#%s|%s\n", node->score, node->filename, node->anchor,
node->text);
{
file = helpFindNode(hi, node->filename, NULL);
printf("%d|%s#%s|%s|%s\n", node->score, node->filename, node->anchor,
node->text, file ? file->text : node->filename);
}
else
printf("%d|%s|%s\n", node->score, node->filename, node->text);
printf("%d|%s|%s|%s\n", node->score, node->filename, node->text,
node->text);
}
}
+1 -1
Ver Arquivo
@@ -90,7 +90,7 @@ install-data:
done
-if test x$(PAMDIR) != x; then \
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(PAMDIR); \
if test -r $(BUILDROOT)$(PAMDIR)/cups/$(PAMFILE) ; then \
if test -r $(BUILDROOT)$(PAMDIR)/cups ; then \
$(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups.N ; \
else \
$(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups ; \
+2 -3
Ver Arquivo
@@ -1,9 +1,8 @@
#
# "$Id$"
#
# Sample configuration file for the Common UNIX Printing System (CUPS)
# scheduler. See "man cupsd.conf" for a complete description of this
# file.
# Sample configuration file for the CUPS scheduler. See "man cupsd.conf" for a
# complete description of this file.
#
# Log general information in error_log - change "@CUPS_LOG_LEVEL@" to "debug"
+2 -2
Ver Arquivo
@@ -7,7 +7,7 @@
#
# MIME converts file for the Common UNIX Printing System (CUPS).
#
# Copyright 2007-2008 by Apple Inc.
# Copyright 2007-2009 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
@@ -38,7 +38,7 @@
# PostScript filters
#
application/pdf application/postscript 33 pdftops
application/pdf application/vnd.cups-postscript 66 pdftops
application/postscript application/vnd.cups-postscript 66 pstops
application/vnd.hp-HPGL application/postscript 66 hpgltops
application/x-cshell application/postscript 33 texttops
+4 -4
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: mime.types 8652 2009-05-16 23:48:35Z mike $"
# "$Id: mime.types 8783 2009-08-28 17:51:05Z mike $"
#
# MIME types file for the Common UNIX Printing System (CUPS).
#
@@ -95,7 +95,7 @@ application/vnd.hp-HPGL hpgl \
image/gif gif string(0,GIF87a) string(0,GIF89a)
image/png png string(0,<89>PNG)
image/jpeg jpeg jpg jpe string(0,<FFD8FF>) &&\
image/jpeg jpeg jpg jpe string(0,<FFD8FF>) +\
(char(3,0xe0) char(3,0xe1) char(3,0xe2) char(3,0xe3)\
char(3,0xe4) char(3,0xe5) char(3,0xe6) char(3,0xe7)\
char(3,0xe8) char(3,0xe9) char(3,0xea) char(3,0xeb)\
@@ -114,7 +114,7 @@ image/x-sun-raster ras string(0,<59a66a95>)
#image/fpx fpx
image/x-alias pix short(8,8) short(8,24)
image/x-bitmap bmp string(0,BM) && !printable(2,14)
image/x-bitmap bmp string(0,BM) + !printable(2,14)
image/x-icon ico
########################################################################
@@ -177,5 +177,5 @@ application/vnd.cups-raw (string(0,<1B>E) + !string(2,<1B>%0B)) \
application/octet-stream
#
# End of "$Id: mime.types 8652 2009-05-16 23:48:35Z mike $".
# End of "$Id: mime.types 8783 2009-08-28 17:51:05Z mike $".
#
-3
Ver Arquivo
@@ -1,3 +0,0 @@
#%PAM-1.0
auth required pam_unix.so shadow nodelay nullok
account required pam_unix.so
+1 -1
Ver Arquivo
@@ -1,2 +1,2 @@
auth required @PAMMOD@ nullok shadow
auth required @PAMMODAUTH@
account required @PAMMOD@
+4 -12
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-common.m4 8613 2009-05-11 22:39:39Z mike $"
dnl "$Id: cups-common.m4 8841 2009-10-07 16:24:25Z mike $"
dnl
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -20,7 +20,7 @@ dnl Set the name of the config header file...
AC_CONFIG_HEADER(config.h)
dnl Version number information...
CUPS_VERSION="1.4b3"
CUPS_VERSION="1.4.2"
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'`"
@@ -49,6 +49,7 @@ AC_PROG_CPP
AC_PROG_CXX
AC_PROG_RANLIB
AC_PATH_PROG(AR,ar)
AC_PATH_PROG(CHMOD,chmod)
AC_PATH_PROG(HTMLDOC,htmldoc)
AC_PATH_PROG(LD,ld)
AC_PATH_PROG(LN,ln)
@@ -143,9 +144,6 @@ fi
dnl Check for random number functions...
AC_CHECK_FUNCS(random mrand48 lrand48)
dnl Checks for mkstemp and mkstemps functions.
AC_CHECK_FUNCS(mkstemp mkstemps)
dnl Check for geteuid function.
AC_CHECK_FUNCS(geteuid)
@@ -268,11 +266,6 @@ if test "x$enable_dbus" != xno; then
dbus_message_iter_init_append,
AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND),,
`$PKGCONFIG --libs dbus-1`)
if $PKGCONFIG --exists glib-2.0 && $PKGCONFIG --exists dbus-glib-1; then
DBUS_NOTIFIER="dbus"
DBUS_NOTIFIERLIBS="`$PKGCONFIG --libs glib-2.0` `$PKGCONFIG --libs dbus-glib-1` `$PKGCONFIG --libs dbus-1`"
CFLAGS="$CFLAGS `$PKGCONFIG --cflags glib-2.0`"
fi
else
AC_MSG_RESULT(no)
fi
@@ -291,7 +284,6 @@ LEGACY_BACKENDS="parallel scsi"
case $uname in
Darwin*)
# FONTS=""
LEGACY_BACKENDS=""
BACKLIBS="$BACKLIBS -framework IOKit"
CUPSDLIBS="$CUPSDLIBS -sectorder __TEXT __text cupsd.order -e start -framework IOKit -framework SystemConfiguration -weak_framework ApplicationServices"
@@ -357,5 +349,5 @@ AC_SUBST(FONTS)
AC_SUBST(LEGACY_BACKENDS)
dnl
dnl End of "$Id: cups-common.m4 8613 2009-05-11 22:39:39Z mike $".
dnl End of "$Id: cups-common.m4 8841 2009-10-07 16:24:25Z mike $".
dnl
+4 -4
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-defaults.m4 8344 2009-02-10 17:05:35Z mike $"
dnl "$Id: cups-defaults.m4 8841 2009-10-07 16:24:25Z mike $"
dnl
dnl Default cupsd configuration settings for the Common UNIX Printing System
dnl (CUPS).
@@ -325,8 +325,8 @@ if test x$default_lpdconfigfile != xno; then
CUPS_DEFAULT_LPD_CONFIG_FILE="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist"
;;
*)
if test -d /etc/xinetd.d; then
CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd:///etc/xinetd.d/cups-lpd"
if test "x$XINETD" != x; then
CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd://$XINETD/cups-lpd"
else
CUPS_DEFAULT_LPD_CONFIG_FILE=""
fi
@@ -435,5 +435,5 @@ AC_SUBST(BANNERTOPS)
AC_SUBST(TEXTTOPS)
dnl
dnl End of "$Id: cups-defaults.m4 8344 2009-02-10 17:05:35Z mike $".
dnl End of "$Id: cups-defaults.m4 8841 2009-10-07 16:24:25Z mike $".
dnl
+3 -3
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-dnssd.m4 8344 2009-02-10 17:05:35Z mike $"
dnl "$Id: cups-dnssd.m4 8789 2009-08-28 22:54:34Z mike $"
dnl
dnl DNS Service Discovery (aka Bonjour) stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -43,7 +43,7 @@ if test x$enable_dnssd != xno; then
AC_MSG_CHECKING(for current version of dns_sd library)
SAVELIBS="$LIBS"
LIBS="$LIBS -ldns_sd"
AC_TRY_COMPILE([#include <dns_sd.h],
AC_TRY_COMPILE([#include <dns_sd.h>],
[int constant = kDNSServiceFlagsShareConnection;
unsigned char txtRecord[100];
uint8_t valueLen;
@@ -64,5 +64,5 @@ AC_SUBST(DNSSDLIBS)
AC_SUBST(DNSSD_BACKEND)
dnl
dnl End of "$Id: cups-dnssd.m4 8344 2009-02-10 17:05:35Z mike $".
dnl End of "$Id: cups-dnssd.m4 8789 2009-08-28 22:54:34Z mike $".
dnl
+15 -17
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-pam.m4 8344 2009-02-10 17:05:35Z mike $"
dnl "$Id: cups-pam.m4 8825 2009-09-22 21:53:31Z mike $"
dnl
dnl PAM stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -22,9 +22,10 @@ if test $uname = AIX; then
fi
PAMDIR=""
PAMFILE=""
PAMFILE="pam.std"
PAMLIBS=""
PAMMOD="pam_unknown.so"
PAMMODAUTH="pam_unknown.so"
if test x$enable_pam != xno; then
SAVELIBS="$LIBS"
@@ -60,7 +61,7 @@ if test x$enable_pam != xno; then
case "$uname" in
Darwin*)
# Darwin, MacOS X
# Darwin/Mac OS X
if test "x$with_pam_module" != x; then
PAMFILE="pam.$with_pam_module"
elif test -f /usr/lib/pam/pam_opendirectory.so.2; then
@@ -70,26 +71,22 @@ if test x$enable_pam != xno; then
fi
;;
IRIX)
# SGI IRIX
PAMFILE="pam.irix"
;;
*)
# All others; this test might need to be updated
# as Linux distributors move things around...
if test "x$with_pam_module" != x; then
PAMMOD="pam_${with_pam_module}.so"
else
for mod in pam_unix2.so pam_unix.so pam_pwdb.so; do
if test -f /lib/security/$mod; then
PAMMOD="$mod"
break;
fi
done
elif test -f /lib/security/pam_unix2.so; then
PAMMOD="pam_unix2.so"
elif test -f /lib/security/pam_unix.so; then
PAMMOD="pam_unix.so"
fi
PAMFILE="pam.std"
if test "x$PAMMOD" = xpam_unix.so; then
PAMMODAUTH="$PAMMOD shadow nodelay"
else
PAMMODAUTH="$PAMMOD nodelay"
fi
;;
esac
fi
@@ -98,7 +95,8 @@ AC_SUBST(PAMDIR)
AC_SUBST(PAMFILE)
AC_SUBST(PAMLIBS)
AC_SUBST(PAMMOD)
AC_SUBST(PAMMODAUTH)
dnl
dnl End of "$Id: cups-pam.m4 8344 2009-02-10 17:05:35Z mike $".
dnl End of "$Id: cups-pam.m4 8825 2009-09-22 21:53:31Z mike $".
dnl
+23 -3
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-pdf.m4 8430 2009-03-12 21:50:44Z mike $"
dnl "$Id: cups-pdf.m4 8760 2009-08-07 22:30:30Z mike $"
dnl
dnl PDF filter configuration stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -13,7 +13,7 @@ dnl which should have been included with this file. If this file is
dnl file is missing or damaged, see the license at "http://www.cups.org/".
dnl
AC_ARG_WITH(pdftops, [ --with-pdftops set pdftops filter (gs,pdftops,none), default=pdftops ])
AC_ARG_WITH(pdftops, [ --with-pdftops set pdftops filter (gs,/path/to/gs,pdftops,/path/to/pdftops,none), default=pdftops ])
PDFTOPS=""
CUPS_PDFTOPS=""
@@ -47,6 +47,12 @@ case "x$with_pdftops" in
fi
;;
x/*/gs) # Use /path/to/gs without any check:
CUPS_GHOSTSCRIPT="$with_pdftops"
AC_DEFINE(HAVE_GHOSTSCRIPT)
PDFTOPS="pdftops"
;;
xpdftops)
AC_PATH_PROG(CUPS_PDFTOPS, pdftops)
if test "x$CUPS_PDFTOPS" != x; then
@@ -57,6 +63,20 @@ case "x$with_pdftops" in
exit 1
fi
;;
x/*/pdftops) # Use /path/to/pdftops without any check:
CUPS_PDFTOPS="$with_pdftops"
AC_DEFINE(HAVE_PDFTOPS)
PDFTOPS="pdftops"
;;
xnone) # Make no pdftops filter if with_pdftops=none:
;;
*) # Invalid with_pdftops value:
AC_MSG_ERROR(Invalid with_pdftops value!)
exit 1
;;
esac
AC_DEFINE_UNQUOTED(CUPS_PDFTOPS, "$CUPS_PDFTOPS")
@@ -64,5 +84,5 @@ AC_DEFINE_UNQUOTED(CUPS_GHOSTSCRIPT, "$CUPS_GHOSTSCRIPT")
AC_SUBST(PDFTOPS)
dnl
dnl End of "$Id: cups-pdf.m4 8430 2009-03-12 21:50:44Z mike $".
dnl End of "$Id: cups-pdf.m4 8760 2009-08-07 22:30:30Z mike $".
dnl
-16
Ver Arquivo
@@ -335,14 +335,6 @@
#undef HAVE_DNSSD
/*
* Do we have Darwin's CoreFoundation and SystemConfiguration frameworks?
*/
#undef HAVE_COREFOUNDATION
#undef HAVE_SYSTEMCONFIGURATION
/*
* Do we have <sys/ioctl.h>?
*/
@@ -350,14 +342,6 @@
#undef HAVE_SYS_IOCTL_H
/*
* Do we have mkstemp() and/or mkstemps()?
*/
#undef HAVE_MKSTEMP
#undef HAVE_MKSTEMPS
/*
* Does the "tm" structure contain the "tm_gmtoff" member?
*/
+2 -1
Ver Arquivo
@@ -237,8 +237,9 @@ install-libs: $(INSTALLSTATIC) $(INSTALL32) $(INSTALL64)
installstatic:
$(INSTALL_DIR) -m 755 $(LIBDIR)
$(INSTALL_LIB) libcups.a $(LIBDIR)
$(INSTALL_LIB) -m 755 libcups.a $(LIBDIR)
$(RANLIB) $(LIBDIR)/libcups.a
$(CHMOD) 555 $(LIBDIR)/libcups.a
install32bit:
echo Installing libraries in $(LIB32DIR)...
+14 -9
Ver Arquivo
@@ -1553,7 +1553,7 @@ _cupsAdminSetServerSettings(
const char *remotep = cupsGetOption("BrowseRemoteProtocols",
num_settings, settings);
if (!localp)
if (!localp || !localp[0])
localp = cupsGetOption("BrowseLocalProtocols", cupsd_num_settings,
cupsd_settings);
@@ -2173,18 +2173,23 @@ do_samba_command(const char *command, /* I - Command to run */
* Child goes here, redirect stdin/out/err and execute the command...
*/
close(0);
open("/dev/null", O_RDONLY);
int fd = open("/dev/null", O_RDONLY);
close(1);
if (fd > 0)
{
dup2(fd, 0);
close(fd);
}
if (logfile)
dup(fileno(logfile));
else
open("/dev/null", O_WRONLY);
dup2(fileno(logfile), 1);
else if ((fd = open("/dev/null", O_WRONLY)) > 1)
{
dup2(fd, 1);
close(fd);
}
close(2);
dup(1);
dup2(1, 2);
execlp(command, command, address, "-N", "-A", authfile, "-c", subcmd,
(char *)0);
+3 -1
Ver Arquivo
@@ -1,5 +1,5 @@
<!--
"$Id: api-filter.header 8627 2009-05-13 21:39:17Z mike $"
"$Id: api-filter.header 8673 2009-05-22 17:34:15Z mike $"
Filter and backend programming header for the Common UNIX Printing System
(CUPS).
@@ -34,6 +34,8 @@
Programming: <a href='api-cups.html' target='_top'>CUPS API</a><br>
Programming: <a href='api-ppd.html' target='_top'>PPD API</a><br>
Programming: <a href='api-raster.html' target='_top'>Raster API</a><br>
Programming: <a href='postscript-driver.html' target='_top'>Developing PostScript Printer Drivers</a><br>
Programming: <a href='raster-driver.html' target='_top'>Developing Raster Printer Drivers</a><br>
Specifications: <a href='spec-design' target='_top'>CUPS Design Description</a></td>
</tr>
</tbody>
+12 -4
Ver Arquivo
@@ -1,5 +1,5 @@
<!--
"$Id: api-filter.shtml 8628 2009-05-13 22:25:34Z mike $"
"$Id: api-filter.shtml 8718 2009-06-18 17:41:03Z mike $"
Filter and backend programming introduction for the Common UNIX Printing
System (CUPS).
@@ -127,7 +127,7 @@ when running print filters and backends:</p>
<dl class="code">
<dt>APPLE_LANGUAGES</dt>
<dt>APPLE_LANGUAGE</dt>
<dd>The Apple language identifier associated with the job
(Mac OS X only).</dd>
@@ -264,7 +264,16 @@ prefix strings:</p>
current queue. Typically this is used to indicate persistent media,
ink, toner, and configuration conditions or errors on a printer.
<a href='#TABLE2'>Table 2</a> lists the standard state keywords -
use vendor-prefixed ("com.acme.foo") keywords for custom states.</dd>
use vendor-prefixed ("com.acme.foo") keywords for custom states.
<blockquote><b>Note:</b>
<p>"STATE:" messages often provide visible alerts to the user. For example, on
Mac OS X setting a printer-state-reason value with an "-error" or "-warning"
suffix will cause the printer's dock item to bounce if the corresponding reason
is localized with a cupsIPPReason keyword in the printer's PPD file.</p>
</blockquote></dd>
<dt>WARNING: message</dt>
<dd>Sets the printer-state-message attribute and adds the specified
@@ -276,7 +285,6 @@ prefix strings:</p>
<p>Messages without one of these prefixes are treated as if they began with
the "DEBUG:" prefix string.</p>
<div class='table'><table width='80%' summary='Table 1: Standard marker-types Values'>
<caption>Table 1: <a name='TABLE1'>Standard marker-types Values</a></caption>
<thead>
+5 -5
Ver Arquivo
@@ -59,10 +59,10 @@ extern "C" {
* Constants...
*/
# define CUPS_VERSION 1.0400
# define CUPS_VERSION 1.0402
# define CUPS_VERSION_MAJOR 1
# define CUPS_VERSION_MINOR 4
# define CUPS_VERSION_PATCH -1
# define CUPS_VERSION_PATCH 2
# define CUPS_BC_FD 3 /* Back-channel file descriptor for select/poll */
# define CUPS_DATE_ANY (time_t)-1
@@ -253,7 +253,7 @@ extern int cupsPrintFiles2(http_t *http, const char *name,
extern int cupsSetDests2(http_t *http, int num_dests,
cups_dest_t *dests) _CUPS_API_1_1_21;
/**** New in CUPS 1.2 ****/
/**** New in CUPS 1.2/Mac OS X 10.5 ****/
extern ssize_t cupsBackChannelRead(char *buffer, size_t bytes,
double timeout) _CUPS_API_1_2;
extern ssize_t cupsBackChannelWrite(const char *buffer, size_t bytes,
@@ -268,7 +268,7 @@ extern int cupsRemoveOption(const char *name, int num_options,
cups_option_t **options) _CUPS_API_1_2;
extern cups_file_t *cupsTempFile2(char *filename, int len) _CUPS_API_1_2;
/**** New in CUPS 1.3 ****/
/**** New in CUPS 1.3/Mac OS X 10.5 ****/
extern ipp_t *cupsDoIORequest(http_t *http, ipp_t *request,
const char *resource, int infile,
int outfile) _CUPS_API_1_3;
@@ -281,7 +281,7 @@ extern void cupsSetDefaultDest(const char *name,
int num_dests,
cups_dest_t *dests) _CUPS_API_1_3;
/**** New in CUPS 1.4 ****/
/**** New in CUPS 1.4/Mac OS X 10.6 ****/
extern ipp_status_t cupsCancelJob2(http_t *http, const char *name,
int job_id, int purge) _CUPS_API_1_4;
extern int cupsCreateJob(http_t *http, const char *name,
+2 -2
Ver Arquivo
@@ -557,7 +557,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
* configuration file does not exist. Find out the real default.
*/
if (!cups_get_sdests(http, CUPS_GET_DEFAULT, name, 0, &dest))
if (!cups_get_sdests(http, CUPS_GET_DEFAULT, NULL, 0, &dest))
return (NULL);
}
@@ -1800,7 +1800,7 @@ cups_get_sdests(http_t *http, /* I - Connection to server or CUPS_HTTP_DEFA
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
"requesting-user-name", NULL, cupsUser());
if (name)
if (name && op != CUPS_GET_DEFAULT)
{
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
"localhost", ippPort(), "/printers/%s", name);
+48 -19
Ver Arquivo
@@ -50,6 +50,7 @@
#include "debug.h"
#include "globals.h"
#include <stdlib.h>
#include <errno.h>
#ifdef HAVE_DNSSD
# include <dns_sd.h>
# include <poll.h>
@@ -1406,7 +1407,6 @@ _httpResolveURI(
fputs("STATE: +connecting-to-device\n", stderr);
fprintf(stderr, "DEBUG: Resolving \"%s\", regtype=\"%s\", "
"domain=\"local.\"...\n", hostname, regtype);
_cupsLangPuts(stderr, _("INFO: Looking for printer...\n"));
}
uri = NULL;
@@ -1418,36 +1418,65 @@ _httpResolveURI(
hostname, regtype, "local.", resolve_callback,
&uribuf) == kDNSServiceErr_NoError)
{
if (strcasecmp(domain, "local."))
int fds; /* Number of ready descriptors */
time_t timeout, /* Poll timeout */
start_time = time(NULL);/* Start time */
for (;;)
{
if (logit)
_cupsLangPuts(stderr, _("INFO: Looking for printer...\n"));
/*
* Wait 2 seconds for a response to the local resolve; if nothing comes
* in, do an additional domain resolution...
* For the first minute, wakeup every 2 seconds to emit a
* "looking for printer" message...
*/
timeout = (time(NULL) < (start_time + 60)) ? 2000 : -1;
polldata.fd = DNSServiceRefSockFD(ref);
polldata.events = POLLIN;
if (poll(&polldata, 1, 2000) != 1)
fds = poll(&polldata, 1, timeout);
if (fds < 0)
{
if (errno != EINTR && errno != EAGAIN)
{
DEBUG_printf(("5_httpResolveURI: poll error: %s", strerror(errno)));
break;
}
}
else if (fds == 0)
{
/*
* OK, send the domain name resolve...
* Wait 2 seconds for a response to the local resolve; if nothing
* comes in, do an additional domain resolution...
*/
if (logit)
fprintf(stderr, "DEBUG: Resolving \"%s\", regtype=\"%s\", "
"domain=\"%s\"...\n", hostname, regtype, domain);
domainref = ref;
if (DNSServiceResolve(&domainref, kDNSServiceFlagsShareConnection, 0,
hostname, regtype, domain, resolve_callback,
&uribuf) == kDNSServiceErr_NoError)
domainsent = 1;
if (domainsent == 0 && strcasecmp(domain, "local."))
{
if (logit)
fprintf(stderr,
"DEBUG: Resolving \"%s\", regtype=\"%s\", "
"domain=\"%s\"...\n", hostname, regtype, domain);
domainref = ref;
if (DNSServiceResolve(&domainref, kDNSServiceFlagsShareConnection, 0,
hostname, regtype, domain, resolve_callback,
&uribuf) == kDNSServiceErr_NoError)
domainsent = 1;
}
}
}
if (DNSServiceProcessResult(ref) == kDNSServiceErr_NoError)
uri = resolved_uri;
else
{
if (DNSServiceProcessResult(ref) == kDNSServiceErr_NoError)
{
uri = resolved_uri;
break;
}
}
}
if (domainsent)
DNSServiceRefDeallocate(domainref);
+12 -2
Ver Arquivo
@@ -3004,6 +3004,11 @@ http_setup_ssl(http_t *http) /* I - Connection to server */
http->error = errno;
http->status = HTTP_ERROR;
gnutls_deinit(conn->session);
gnutls_certificate_free_credentials(*credentials);
free(credentials);
free(conn);
return (-1);
}
@@ -3138,6 +3143,13 @@ http_upgrade(http_t *http) /* I - Connection to server */
DEBUG_printf(("7http_upgrade(%p)", http));
/*
* Flush the connection to make sure any previous "Upgrade" message
* has been read.
*/
httpFlush(http);
/*
* Copy the HTTP data to a local variable so we can do the OPTIONS
* request without interfering with the existing request data...
@@ -3165,8 +3177,6 @@ http_upgrade(http_t *http) /* I - Connection to server */
while (httpUpdate(http) == HTTP_CONTINUE);
}
httpFlush(http);
/*
* Restore the HTTP request data...
*/
+3 -3
Ver Arquivo
@@ -4,7 +4,7 @@
* Hyper-Text Transport Protocol definitions for the Common UNIX Printing
* System (CUPS).
*
* Copyright 2007 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -387,7 +387,7 @@ extern void httpSeparate2(const char *uri,
char *host, int hostlen, int *port,
char *resource, int resourcelen) _CUPS_DEPRECATED;
/**** New in CUPS 1.2 ****/
/**** New in CUPS 1.2/Mac OS X 10.5 ****/
extern int httpAddrAny(const http_addr_t *addr) _CUPS_API_1_2;
extern http_addrlist_t *httpAddrConnect(http_addrlist_t *addrlist, int *sock) _CUPS_API_1_2;
extern int httpAddrEqual(const http_addr_t *addr1,
@@ -435,7 +435,7 @@ extern void httpSetLength(http_t *http, size_t length) _CUPS_API_1_2;
extern ssize_t httpWrite2(http_t *http, const char *buffer,
size_t length) _CUPS_API_1_2;
/**** New in CUPS 1.3 ****/
/**** New in CUPS 1.3/Mac OS X 10.5 ****/
extern char *httpGetAuthString(http_t *http) _CUPS_API_1_3;
extern void httpSetAuthString(http_t *http, const char *scheme,
const char *data) _CUPS_API_1_3;
+4 -2
Ver Arquivo
@@ -445,7 +445,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
if (!language)
{
if ((language = getenv("LANG")) == NULL)
if (!getenv("SOFTWARE") || (language = getenv("LANG")) == NULL)
language = appleLangDefault();
DEBUG_printf(("4cupsLangGet: language=\"%s\"", language));
@@ -1121,13 +1121,15 @@ appleLangDefault(void)
/* Pointer to library globals */
DEBUG_puts("2appleLangDefault()");
/*
* Only do the lookup and translation the first time.
*/
if (!cg->language[0])
{
if ((lang = getenv("LANG")))
if (getenv("SOFTWARE") != NULL && (lang = getenv("LANG")) != NULL)
{
strlcpy(cg->language, lang, sizeof(cg->language));
return (cg->language);
+5
Ver Arquivo
@@ -29,10 +29,14 @@ _cupsStrStatistics
_cups_strcpy
_cups_strlcat
_cups_strlcpy
_httpResolveURI
_ippAddAttr
_ippFindOption
_ippFreeAttr
_ppdFreeLanguages
_ppdGetEncoding
_ppdGetLanguages
_ppdHashName
cupsAddDest
cupsAddOption
cupsAdminCreateWindowsPPD
@@ -129,6 +133,7 @@ cupsPrintFiles2
cupsPutFd
cupsPutFile
cupsRemoveOption
cupsResolveConflicts
cupsServer
cupsSetDests
cupsSetDests2
+4 -3
Ver Arquivo
@@ -18,9 +18,10 @@
*
* Contents:
*
* ppdPageSize() - Get the page size record for the given size.
* ppdPageWidth() - Get the page width for the given size.
* ppdPageLength() - Get the page length for the given size.
* ppdPageSize() - Get the page size record for the given size.
* ppdPageSizeLimits() - Return the custom page size limits.
* ppdPageWidth() - Get the page width for the given size.
* ppdPageLength() - Get the page length for the given size.
*/
/*
+8 -1
Ver Arquivo
@@ -942,7 +942,8 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
* Get the parameter data...
*/
if (sscanf(string, "%d%32s%64s%64s", &corder, ctype, cminimum,
if (!string ||
sscanf(string, "%d%32s%64s%64s", &corder, ctype, cminimum,
cmaximum) != 4)
{
cg->ppd_status = PPD_BAD_CUSTOM_PARAM;
@@ -1615,6 +1616,12 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
else if (!strcmp(keyword, "UIConstraints") ||
!strcmp(keyword, "NonUIConstraints"))
{
if (!string)
{
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
goto error;
}
if (ppd->num_consts == 0)
constraint = calloc(2, sizeof(ppd_const_t));
else
+4 -4
Ver Arquivo
@@ -213,7 +213,7 @@ typedef struct ppd_profile_s /**** sRGB Color Profiles ****/
float matrix[3][3]; /* Transform matrix */
} ppd_profile_t;
/**** New in CUPS 1.2 ****/
/**** New in CUPS 1.2/Mac OS X 10.5 ****/
typedef enum ppd_cptype_e /**** Custom Parameter Type @since CUPS 1.2/Mac OS X 10.5@ ****/
{
PPD_CUSTOM_CURVE, /* Curve value for f(x) = x^value */
@@ -321,15 +321,15 @@ typedef struct ppd_file_s /**** PPD File ****/
int cur_attr; /* Current attribute @since CUPS 1.1.19/Mac OS X 10.3@ @private@ */
ppd_attr_t **attrs; /* Attributes @since CUPS 1.1.19/Mac OS X 10.3@ @private@ */
/**** New in CUPS 1.2 ****/
/**** New in CUPS 1.2/Mac OS X 10.5 ****/
cups_array_t *sorted_attrs; /* Attribute lookup array @since CUPS 1.2/Mac OS X 10.5@ @private@ */
cups_array_t *options; /* Option lookup array @since CUPS 1.2/Mac OS X 10.5@ @private@ */
cups_array_t *coptions; /* Custom options array @since CUPS 1.2/Mac OS X 10.5@ @private@ */
/**** New in CUPS 1.3 ****/
/**** New in CUPS 1.3/Mac OS X 10.5 ****/
cups_array_t *marked; /* Marked choices @since CUPS 1.3/Mac OS X 10.5@ @private@ */
/**** New in CUPS 1.4 ****/
/**** New in CUPS 1.4/Mac OS X 10.6 ****/
cups_array_t *cups_uiconstraints; /* cupsUIConstraints @since CUPS 1.4/Mac OS X 10.6@ @private@ */
} ppd_file_t;
+4 -2
Ver Arquivo
@@ -266,9 +266,11 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
DEBUG_printf(("2cupsDoIORequest: status=%d", status));
if (status == HTTP_FORBIDDEN || status == HTTP_ERROR ||
status >= HTTP_SERVER_ERROR)
if (status >= HTTP_BAD_REQUEST &&
status != HTTP_UNAUTHORIZED &&
status != HTTP_UPGRADE_REQUIRED)
{
httpFlush(http);
_cupsSetHTTPError(status);
break;
}
+21 -1
Ver Arquivo
@@ -191,9 +191,23 @@ cupsSideChannelRead(
if (errno != EINTR && errno != EAGAIN)
{
DEBUG_printf(("1cupsSideChannelRead: Read error: %s", strerror(errno)));
*command = CUPS_SC_CMD_NONE;
*status = CUPS_SC_STATUS_IO_ERROR;
return (-1);
}
/*
* Watch for EOF or too few bytes...
*/
if (bytes < 4)
{
DEBUG_printf(("1cupsSideChannelRead: Short read of %d bytes", bytes));
*command = CUPS_SC_CMD_NONE;
*status = CUPS_SC_STATUS_BAD_MESSAGE;
return (-1);
}
/*
* Validate the command code in the message...
*/
@@ -202,6 +216,8 @@ cupsSideChannelRead(
buffer[0] > CUPS_SC_CMD_SNMP_GET_NEXT)
{
DEBUG_printf(("1cupsSideChannelRead: Bad command %d!", buffer[0]));
*command = CUPS_SC_CMD_NONE;
*status = CUPS_SC_STATUS_BAD_MESSAGE;
return (-1);
}
@@ -379,6 +395,7 @@ cupsSideChannelSNMPWalk(
real_oidlen, /* Length of returned OID string */
oidlen; /* Length of first OID */
const char *current_oid; /* Current OID */
char last_oid[2048]; /* Last OID */
DEBUG_printf(("cupsSideChannelSNMPWalk(oid=\"%s\", timeout=%.3f, cb=%p, "
@@ -397,6 +414,7 @@ cupsSideChannelSNMPWalk(
current_oid = oid;
oidlen = (int)strlen(oid);
last_oid[0] = '\0';
do
{
@@ -422,7 +440,8 @@ cupsSideChannelSNMPWalk(
* Parse the response of the form "oid\0value"...
*/
if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.')
if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.' ||
!strcmp(real_data, last_oid))
{
/*
* Done with this set of OIDs...
@@ -448,6 +467,7 @@ cupsSideChannelSNMPWalk(
*/
current_oid = real_data;
strlcpy(last_oid, current_oid, sizeof(last_oid));
}
}
while (status == CUPS_SC_STATUS_OK);
+1
Ver Arquivo
@@ -55,6 +55,7 @@ typedef enum cups_sc_bidi_e cups_sc_bidi_t;
enum cups_sc_command_e /**** Request command codes ****/
{
CUPS_SC_CMD_NONE = 0, /* No command @private@ */
CUPS_SC_CMD_SOFT_RESET = 1, /* Do a soft reset */
CUPS_SC_CMD_DRAIN_OUTPUT = 2, /* Drain all pending output */
CUPS_SC_CMD_GET_BIDI = 3, /* Return bidirectional capabilities */
+10 -4
Ver Arquivo
@@ -608,6 +608,8 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
int count = 0; /* Number of OIDs found */
int request_id = 0; /* Current request ID */
cups_snmp_t packet; /* Current response packet */
int lastoid[CUPS_SNMP_MAX_OID];
/* Last OID we got */
/*
@@ -631,14 +633,15 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
*/
_cupsSNMPCopyOID(packet.object_name, prefix, CUPS_SNMP_MAX_OID);
lastoid[0] = -1;
for (;;)
{
request_id ++;
if (!_cupsSNMPWrite(fd, address, version, community,
CUPS_ASN1_GET_NEXT_REQUEST, request_id,
packet.object_name))
CUPS_ASN1_GET_NEXT_REQUEST, request_id,
packet.object_name))
{
DEBUG_puts("5_cupsSNMPWalk: Returning -1");
@@ -652,7 +655,8 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
return (-1);
}
if (!_cupsSNMPIsOIDPrefixed(&packet, prefix))
if (!_cupsSNMPIsOIDPrefixed(&packet, prefix) ||
_cupsSNMPIsOID(&packet, lastoid))
{
DEBUG_printf(("5_cupsSNMPWalk: Returning %d", count));
@@ -666,6 +670,8 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
return (count > 0 ? count : -1);
}
_cupsSNMPCopyOID(lastoid, packet.object_name, CUPS_SNMP_MAX_OID);
count ++;
(*cb)(&packet, data);
@@ -1280,7 +1286,7 @@ asn1_get_integer(
int value; /* Integer value */
for (value = 0;
for (value = (**buffer & 0x80) ? -1 : 0;
length > 0 && *buffer < bufend;
length --, (*buffer) ++)
value = (value << 8) | **buffer;
+5 -1
Ver Arquivo
@@ -64,8 +64,10 @@ main(int argc, /* I - Number of command-line arguments */
int status; /* Exit status */
char filename[1024]; /* Filename buffer */
cups_file_t *fp; /* File pointer */
#ifndef WIN32
int fds[2]; /* Open file descriptors */
cups_file_t *fdfile; /* File opened with cupsFileOpenFd() */
#endif /* !WIN32 */
int count; /* Number of lines in file */
@@ -93,6 +95,7 @@ main(int argc, /* I - Number of command-line arguments */
status += random_tests();
#ifndef WIN32
/*
* Test fdopen and close without reading...
*/
@@ -126,6 +129,7 @@ main(int argc, /* I - Number of command-line arguments */
puts("PASS");
}
#endif /* !WIN32 */
/*
* Count lines in euc-jp.txt, rewind, then count again.
@@ -756,7 +760,7 @@ read_write_tests(int compression) /* I - Use compression? */
fputs("cupsFileGetChar(partial line): ", stdout);
for (i = 0; i < strlen(partial_line); i ++)
for (i = 0; i < (int)strlen(partial_line); i ++)
if ((byte = cupsFileGetChar(fp)) < 0)
break;
else if (byte != partial_line[i])
+1 -1
Ver Arquivo
@@ -247,7 +247,7 @@ main(int argc, /* I - Number of command-line arguments */
for (i = 0, j = 0; i < (int)(sizeof(base64_tests) / sizeof(base64_tests[0])); i ++)
{
httpEncode64_2(encode, sizeof(encode), base64_tests[i][0],
strlen(base64_tests[i][0]));
(int)strlen(base64_tests[i][0]));
decodelen = (int)sizeof(decode);
httpDecode64_2(decode, &decodelen, base64_tests[i][1]);
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Localization test program for the Common UNIX Printing System (CUPS).
*
* Copyright 2007 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
+1
Ver Arquivo
@@ -166,6 +166,7 @@ main(int argc, /* I - Number of command-line arguments */
}
putenv("LOCALEDIR=locale");
putenv("SOFTWARE=CUPS");
/*
* Do tests with test.ppd...
+6 -3
Ver Arquivo
@@ -809,7 +809,8 @@ cupsGetJobs2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_D
* in the class.
*
* The returned filename is stored in a static buffer and is overwritten with
* each call to @code cupsGetPPD@ or @link cupsGetPPD2@.
* each call to @code cupsGetPPD@ or @link cupsGetPPD2@. The caller "owns" the
* file that is created and must @code unlink@ the returned filename.
*/
const char * /* O - Filename for PPD file */
@@ -840,7 +841,8 @@ cupsGetPPD(const char *name) /* I - Destination name */
* in the class.
*
* The returned filename is stored in a static buffer and is overwritten with
* each call to @link cupsGetPPD@ or @code cupsGetPPD2@.
* each call to @link cupsGetPPD@ or @code cupsGetPPD2@. The caller "owns" the
* file that is created and must @code unlink@ the returned filename.
*
* @since CUPS 1.1.21/Mac OS X 10.4@
*/
@@ -873,7 +875,8 @@ cupsGetPPD2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
*
* The "buffer" parameter contains the local PPD filename. If it contains
* the empty string, a new temporary file is created, otherwise the existing
* file will be overwritten as needed.
* file will be overwritten as needed. The caller "owns" the file that is
* created and must @code unlink@ the returned filename.
*
* On success, @code HTTP_OK@ is returned for a new PPD file and
* @code HTTP_NOT_MODIFIED@ if the existing PPD file is up-to-date. Any other
+30 -26
Ver Arquivo
@@ -7,29 +7,33 @@ Terminal=false
Type=Application
Name=Manage Printing
Comment=CUPS Web Interface
Name[de.UTF-8]=Druckerverwaltung
Comment[de.UTF-8]=CUPS Webinterface
Name[en_US.UTF-8]=Manage Printing
Comment[en_US.UTF-8]=CUPS Web Interface
Name[es.UTF-8]=Administrar impresión
Comment[es.UTF-8]=Interfaz Web de CUPS
Name[et.UTF-8]=Trükkimise haldur
Comment[et.UTF-8]=CUPS-i veebiliides
Name[fr.UTF-8]=Gestionnaire d'impression
Comment[fr.UTF-8]=Interface Web de CUPS
Name[he.UTF-8]=נהל הדפסות
Comment[he.UTF-8]=ממשק דפדפן של CUPS
Name[id.UTF-8]=Manajemen Pencetakan
Comment[id.UTF-8]=Antarmuka Web CUPS
Name[it.UTF-8]=Gestione stampa
Comment[it.UTF-8]=Interfaccia web di CUPS
Name[ja.UTF-8]=印刷の管理
Comment[ja.UTF-8]=CUPS Web インタフェース
Name[pl.UTF-8]=Zarządzanie drukowaniem
Comment[pl.UTF-8]=Interfejs WWW CUPS
Name[ru.UTF-8]=Настройка печати
Comment[ru.UTF-8]=Настройка CUPS
Name[zh.UTF-8]=打印机管理
Comment[zh.UTF-8]=CUPS网页界面
Name[zh_TW.UTF-8]=印表管理
Comment[zh_TW.UTF-8]=CUPS 網頁介面
Name[de]=Druckerverwaltung
Comment[de]=CUPS Webinterface
Name[en_US]=Manage Printing
Comment[en_US]=CUPS Web Interface
Name[es]=Administrar impresión
Comment[es]=Interfaz Web de CUPS
Name[et]=Trükkimise haldur
Comment[et]=CUPS-i veebiliides
Name[eu]=Kudeatu inprimaketak
Comment[eu]=CUPSen web interfazea
Name[fr]=Gestionnaire d'impression
Comment[fr]=Interface Web de CUPS
Name[he]=נהל הדפסות
Comment[he]=ממשק דפדפן של CUPS
Name[id]=Manajemen Pencetakan
Comment[id]=Antarmuka Web CUPS
Name[it]=Gestione stampa
Comment[it]=Interfaccia web di CUPS
Name[ja]=印刷の管理
Comment[ja]=CUPS Web インタフェース
Name[pl]=Zarządzanie drukowaniem
Comment[pl]=Interfejs WWW CUPS
Name[ru]=Настройка печати
Comment[ru]=Настройка CUPS
Name[sv]=Hantera skrivare
Comment[sv]=CUPS webb-gränssnitt
Name[zh]=打印机管理
Comment[zh]=CUPS网页界面
Name[zh_TW]=印表管理
Comment[zh_TW]=CUPS 網頁介面
+3 -3
Ver Arquivo
@@ -34,7 +34,7 @@ WEBIMAGES = \
images/unsel.gif \
images/wait.gif
HELPIMAGES = \
images/cups-block-diagram.gif \
images/cups-block-diagram.png \
images/cups-command-chain.png \
images/cups-postscript-chain.png \
images/cups-raster-chain.png \
@@ -190,8 +190,8 @@ install-languages:
for lang in $(LANGUAGES); do \
if test -d $$lang; then \
$(INSTALL_DIR) -m 755 $(DOCDIR)/$$lang; \
$(INSTALL_MAN) $$lang/index.html $(DOCDIR)/$$lang; \
test -f $$lang/cups.css && $(INSTALL_MAN) $$lang/cups.css $(DOCDIR)/$$lang; \
$(INSTALL_DATA) $$lang/index.html $(DOCDIR)/$$lang; \
$(INSTALL_DATA) $$lang/cups.css $(DOCDIR)/$$lang >/dev/null 2>&1 || true; \
fi; \
done
+1 -1
Ver Arquivo
@@ -17,7 +17,7 @@ SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></A></TD>
<TD CLASS="unsel"><A HREF="/admin">&nbsp;&nbsp;Verwaltung&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/classes/">&nbsp;&nbsp;Klassen&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/help/">&nbsp;&nbsp;On-Line&nbsp;Hilfe&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Auftr&uuml;ge&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Auftr&auml;ge&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/printers/">&nbsp;&nbsp;Drucker&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Search Help"
+106
Ver Arquivo
@@ -0,0 +1,106 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<TITLE>Hasiera - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
<LINK REL="SHORTCUT ICON" HREF="/images/cups-icon.png" TYPE="image/png">
</HEAD>
<BODY>
<TABLE CLASS="page" SUMMARY="{title}">
<TR><TD CLASS="body">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR HEIGHT="36">
<TD><A HREF="http://www.cups.org/" TARGET="_blank"><IMG
SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></A></TD>
<TD CLASS="sel"><A HREF="/">&nbsp;&nbsp;Hasiera&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/admin">&nbsp;&nbsp;Administrazioa&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/classes/">&nbsp;&nbsp;Klaseak&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/help/">&nbsp;&nbsp;Lineako&nbsp;laguntza&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Lanak&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/printers/">&nbsp;&nbsp;Inprimagailuak&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Bilatu laguntzan"
AUTOSAVE="org.cups.help" RESULTS="20"></FORM></TD>
<TD><IMG SRC="/images/right.gif" WIDTH="4" HEIGHT="36" ALT=""></TD>
</TR>
</TABLE>
<TABLE CLASS="indent" SUMMARY="">
<TR><TD STYLE="padding-right: 20px;">
<H1>CUPS @CUPS_VERSION@</H1>
<P><A HREF="http://www.apple.com/">Apple Inc.</A>-ek Mac OS<SUP>&reg;</SUP> X eta
beste UNIX<SUP>&reg;</SUP> bezalako sistema eragileentzako iturburu irekiko
inprimatzeko sisteman oinarrituta dago.</P>
</TD>
<TD><A HREF="http://www.cups.org/"><IMG SRC="images/cups-icon.png" WIDTH="128"
HEIGHT="128" ALT="CUPS"></A></TD>
</TR>
</TABLE>
<TABLE CLASS="indent" SUMMARY="">
<TR><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-right: 20px;">
<H2>CUPS erabiltzaileentzako</H2>
<P><A HREF="help/overview.html">CUPSen gainbegiraketa</A></P>
<P><A HREF="help/options.html">Komando-lerroaren bidez inprimatzea eta aukerak</A></P>
<P><A HREF="help/whatsnew.html">CUPS 1.4 bertsioak dakartzan berrikuntza.</A></P>
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.general">Erabiltzaileen foroa</A></P>
</TD><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-left: 20px; padding-right: 20px;">
<H2>CUPS administratzaileentzako</H2>
<P><A HREF="admin">Inprimagailuak eta klaseak gehitzea</A></P>
<P><A HREF="help/policies.html">Kudeaketako eragiketen politikak</A></P>
<P><A HREF="help/accounting.html">Inprimagailuaren oinarrizko kontabilitatea</A></P>
<P><A HREF="help/security.html">Zerbitzariaren segurtasuna</A></P>
<P><A HREF="help/kerberos.html">Kerberos autentifikazioa erabiltzea</A></P>
<P><A HREF="help/network.html">Sareko inprimagailuak erabiltzea</A></P>
<P><A HREF="help/ref-cupsd-conf.html">cupsd.conf erreferentzia</A></P>
<P><A HREF="http://www.cups.org/ppd.php">Bilatu inprimagailuaren kontrolatzaileak</A></P>
</TD><TD VALIGN="top" STYLE="padding-left: 20px;">
<H2>CUPS garatzaileentzako</H2>
<P><A HREF="help/api-overview.html">Sarrera CUPSen programaziora</A></P>
<P><A HREF="help/api-cups.html">CUPSen APIa</A></P>
<P><A HREF="help/api-filter.html">Iragazkien eta atzeko planoan programatzeea</A></P>
<P><A HREF="help/api-httpipp.html">HTTP eta IPP APIak</A></P>
<P><A HREF="help/api-ppd.html">PPD APIa</A></P>
<P><A HREF="help/api-raster.html">Bilbearen APIa</A></P>
<P><A HREF="help/ref-ppdcfile.html">PPD kontrolatzaileen konpilatzailearen informazioaren fitxategiaren erreferentzia</A></P>
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.development">Garatzaileen forua</A></P>
</TD></TR>
</TABLE>
</TD></TR>
<TR><TD>&nbsp;</TD></TR>
<TR><TD CLASS="trailer">CUPS eta CUPSen logotipoa <A HREF="http://www.apple.com">Apple Inc.</A>en marka erregistratuaj dira.
CUPSen copyright-a 2007-2009 Apple Inc. Eskubide guztiak gordeta.</TD></TR>
</TABLE>
</BODY>
</HTML>
+8 -5
Ver Arquivo
@@ -338,7 +338,7 @@ div.contents ul.subcontents li {
<body>
<div class='body'>
<!--
"$Id: api-cups.html 8653 2009-05-16 23:53:28Z mike $"
"$Id: api-cups.html 8726 2009-06-22 20:46:13Z mike $"
CUPS API header for the Common UNIX Printing System (CUPS).
@@ -475,7 +475,7 @@ specified server.">cupsPrintFiles2</a></li>
<li><a href="#cups_ptype_e" title="Printer type/capability bit constants">cups_ptype_e</a></li>
</ul></li>
<!--
"$Id: api-cups.html 8653 2009-05-16 23:53:28Z mike $"
"$Id: api-cups.html 8726 2009-06-22 20:46:13Z mike $"
CUPS API introduction for the Common UNIX Printing System (CUPS).
@@ -1491,7 +1491,8 @@ const char *cupsGetPPD (<br>
in the class.<br>
<br>
The returned filename is stored in a static buffer and is overwritten with
each call to <code>cupsGetPPD</code> or <a href="#cupsGetPPD2"><code>cupsGetPPD2</code></a>.</p>
each call to <code>cupsGetPPD</code> or <a href="#cupsGetPPD2"><code>cupsGetPPD2</code></a>. The caller &quot;owns&quot; the
file that is created and must <code>unlink</code> the returned filename.</p>
<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/Mac OS X 10.4&nbsp;</span><a name="cupsGetPPD2">cupsGetPPD2</a></h3>
<p class="description">Get the PPD file for a printer from the specified server.</p>
<p class="code">
@@ -1513,7 +1514,8 @@ const char *cupsGetPPD2 (<br>
in the class.<br>
<br>
The returned filename is stored in a static buffer and is overwritten with
each call to <a href="#cupsGetPPD"><code>cupsGetPPD</code></a> or <code>cupsGetPPD2</code>.
each call to <a href="#cupsGetPPD"><code>cupsGetPPD</code></a> or <code>cupsGetPPD2</code>. The caller &quot;owns&quot; the
file that is created and must <code>unlink</code> the returned filename.
</p>
<h3 class="function"><span class="info">&nbsp;CUPS 1.4/Mac OS X 10.6&nbsp;</span><a name="cupsGetPPD3">cupsGetPPD3</a></h3>
@@ -1549,7 +1551,8 @@ the server.<br>
<br>
The &quot;buffer&quot; parameter contains the local PPD filename. If it contains
the empty string, a new temporary file is created, otherwise the existing
file will be overwritten as needed.<br>
file will be overwritten as needed. The caller &quot;owns&quot; the file that is
created and must <code>unlink</code> the returned filename.<br>
<br>
On success, <code>HTTP_OK</code> is returned for a new PPD file and
<code>HTTP_NOT_MODIFIED</code> if the existing PPD file is up-to-date. Any other
+15 -5
Ver Arquivo
@@ -338,7 +338,7 @@ div.contents ul.subcontents li {
<body>
<div class='body'>
<!--
"$Id: api-filter.html 8653 2009-05-16 23:53:28Z mike $"
"$Id: api-filter.html 8718 2009-06-18 17:41:03Z mike $"
Filter and backend programming header for the Common UNIX Printing System
(CUPS).
@@ -373,6 +373,8 @@ div.contents ul.subcontents li {
Programming: <a href='api-cups.html' target='_top'>CUPS API</a><br>
Programming: <a href='api-ppd.html' target='_top'>PPD API</a><br>
Programming: <a href='api-raster.html' target='_top'>Raster API</a><br>
Programming: <a href='postscript-driver.html' target='_top'>Developing PostScript Printer Drivers</a><br>
Programming: <a href='raster-driver.html' target='_top'>Developing Raster Printer Drivers</a><br>
Specifications: <a href='spec-design' target='_top'>CUPS Design Description</a></td>
</tr>
</tbody>
@@ -419,7 +421,7 @@ div.contents ul.subcontents li {
<li><a href="#cups_sc_status_e" title="Response status codes">cups_sc_status_e</a></li>
</ul></li>
<!--
"$Id: api-filter.html 8653 2009-05-16 23:53:28Z mike $"
"$Id: api-filter.html 8718 2009-06-18 17:41:03Z mike $"
Filter and backend programming introduction for the Common UNIX Printing
System (CUPS).
@@ -547,7 +549,7 @@ when running print filters and backends:</p>
<dl class="code">
<dt>APPLE_LANGUAGES</dt>
<dt>APPLE_LANGUAGE</dt>
<dd>The Apple language identifier associated with the job
(Mac OS X only).</dd>
@@ -684,7 +686,16 @@ prefix strings:</p>
current queue. Typically this is used to indicate persistent media,
ink, toner, and configuration conditions or errors on a printer.
<a href='#TABLE2'>Table 2</a> lists the standard state keywords -
use vendor-prefixed ("com.acme.foo") keywords for custom states.</dd>
use vendor-prefixed ("com.acme.foo") keywords for custom states.
<blockquote><b>Note:</b>
<p>"STATE:" messages often provide visible alerts to the user. For example, on
Mac OS X setting a printer-state-reason value with an "-error" or "-warning"
suffix will cause the printer's dock item to bounce if the corresponding reason
is localized with a cupsIPPReason keyword in the printer's PPD file.</p>
</blockquote></dd>
<dt>WARNING: message</dt>
<dd>Sets the printer-state-message attribute and adds the specified
@@ -696,7 +707,6 @@ prefix strings:</p>
<p>Messages without one of these prefixes are treated as if they began with
the "DEBUG:" prefix string.</p>
<div class='table'><table width='80%' summary='Table 1: Standard marker-types Values'>
<caption>Table 1: <a name='TABLE1'>Standard marker-types Values</a></caption>
<thead>
+18 -2
Ver Arquivo
@@ -338,7 +338,7 @@ div.contents ul.subcontents li {
<body>
<div class='body'>
<!--
"$Id: api-ppdc.html 8653 2009-05-16 23:53:28Z mike $"
"$Id: api-ppdc.html 8704 2009-06-10 15:51:21Z mike $"
PPD Compiler API header for CUPS.
@@ -411,7 +411,7 @@ div.contents ul.subcontents li {
<li><a href="#ppdcOptType" title="// Option type">ppdcOptType</a></li>
</ul></li>
<!--
"$Id: api-ppdc.html 8653 2009-05-16 23:53:28Z mike $"
"$Id: api-ppdc.html 8704 2009-06-10 15:51:21Z mike $"
PPD Compiler API introduction for CUPS.
@@ -865,6 +865,22 @@ void add_size (<br>
</dl>
<h5 class="returnvalue">Return Value</h5>
<p class="description">Matching option or NULL</p>
<h4 class="method"><a name="find_option_group">find_option_group</a></h4>
<p class="description"></p>
<p class="code">
<a href="#ppdcOption">ppdcOption</a> *find_option_group (<br>
&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcGroup">ppdcGroup</a> **mg<br>
);</p>
<h5 class="parameters">Parameters</h5>
<dl>
<dt>n</dt>
<dd class="description">Option name</dd>
<dt>mg</dt>
<dd class="description">Matching group or NULL</dd>
</dl>
<h5 class="returnvalue">Return Value</h5>
<p class="description">Matching option or NULL</p>
<h4 class="method"><a name="ppdcDriver">ppdcDriver</a></h4>
<p class="description"></p>
<p class="code">
+2 -2
Ver Arquivo
@@ -372,7 +372,7 @@ div.contents ul.subcontents li {
<div class='figure'><table summary='PostScript Filter Chain'>
<caption>Figure 1: <a name='FIGURE_1'>PostScript Filter Chain</a></caption>
<tr><td><img src='/images/cups-postscript-chain.png' width='700' height='150' alt='PostScript Filter Chain'></td></tr>
<tr><td><img src='../images/cups-postscript-chain.png' width='700' height='150' alt='PostScript Filter Chain'></td></tr>
</table></div>
<p>The optional PostScript filter can be provided to add printer-specific commands to the PostScript output that cannot be represented in the PPD file or to reorganize the output for special printer features. Typically this is used to support advanced job management or finishing functions on the printer. CUPS includes a generic PostScript filter that handles all PPD-defined commands.</p>
@@ -385,7 +385,7 @@ div.contents ul.subcontents li {
<div class='figure'><table summary='Command Filter Chain'>
<caption>Figure 2: <a name='FIGURE_2'>Command Filter Chain</a></caption>
<tr><td><img src='/images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
<tr><td><img src='../images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
</table></div>
<p>PostScript printer drivers typically do not require their own command filter since CUPS includes a generic PostScript command filter that supports all of the standard functions using PPD-defined commands.</p>
+77
Ver Arquivo
@@ -369,6 +369,10 @@ that describe the features and capabilities of one or more printers.</P>
<li><a href="#CONDITIONAL">Conditional Statements</a></li>
<li><a href="#CONSTRAINTS">Defining Constraints</a></li>
</ul></li>
<li><a href="#LOCALIZATION">Localization</a><ul class="subcontents">
<li><a href="#PPDPO">The ppdpo Utility</a></li>
<li><a href="#PPDC_CATALOG">Using Message Catalogs with the PPD Compiler</a></li>
</ul></li>
<h2 class='title'><a name='BASICS'>The Basics</a></h2>
<P>The PPD compiler, <a href='man-ppdc.html'><code>ppdc(1)</code></a>, is a
@@ -1179,6 +1183,79 @@ lines:</p>
<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsUIConstraints DuplexOff "*Duplex *OptionDuplexer False"
<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsUIResolver DuplexOff "*Duplex None"
</pre>
<h2 class='title'><a name='LOCALIZATION'>Localization</a></h2>
<p>The PPD compiler provides localization of PPD files in different languages
through <i>message catalog</i> files in the GNU gettext or Apple .strings
formats. Each user text string and several key PPD attribute values such as
<tt>LanguageVersion</tt> and <tt>LanguageEncoding</tt> are looked up in the
corresponding message catalog and the translated text is substituted in the
generated PPD files. One message catalog file can be used by multiple driver
information files, and each file contains a single language translation.</p>
<h3><a name='PPDPO'>The ppdpo Utility</a></h3>
<p>While CUPS includes localizations of all standard media sizes and options in
several languages, your driver information files may provide their own media
sizes and options that need to be localized. CUPS provides a utility program to
aid in the localization of drivers called <a
href='man-ppdpo.html'><tt>ppdpo(1)</tt></a>. The <tt>ppdpo</tt> program creates
or updates a message catalog file based upon one or more driver information
files. New messages are added with the word "TRANSLATE" added to the front of
the translation string to make locating new strings for translation easier. The
program accepts the message catalog filename and one or more driver information
files.</p>
<p>For example, run the following command to create a new German message catalog
called <var>de.po</var> for all of the driver information files in the current
directory:</p>
<pre class='command'>
ppdpo -o de.po *.drv
</pre>
<p>If the file <var>de.po</var> already exists, <tt>ppdpo</tt> will update the
contents of the file with any new messages that need to be translated. To create
an Apple .strings file instead, specify the output filename with a .strings
extension, for example:</p>
<pre class='command'>
ppdpo -o de.strings *.drv
</pre>
<h3><a name='PPDC_CATALOG'>Using Message Catalogs with the PPD Compiler</a></h3>
<p>Once you have created a message catalog, use the <a
href='ref-ppdcfile.html#_po'><tt>#po</tt></a> directive to declare it in each
driver information file. For example, to declare the German message catalog for
a driver use:</p>
<pre class='example'>
<a href='ref-ppdcfile.html#_po'>#po</a> de "de.po" // German
</pre>
<p>In fact, you can use the <tt>#po</tt> directive as many times as needed:</p>
<pre class='example'>
<a href='ref-ppdcfile.html#_po'>#po</a> de "de.po" // German
<a href='ref-ppdcfile.html#_po'>#po</a> es "es.po" // Spanish
<a href='ref-ppdcfile.html#_po'>#po</a> fr "fr.po" // French
<a href='ref-ppdcfile.html#_po'>#po</a> it "it.po" // Italian
<a href='ref-ppdcfile.html#_po'>#po</a> ja "ja.po" // Japanese
</pre>
<p>The filename ("de.po", etc.) can be relative to the location of the driver
information file or an absolute path. Once defined, the PPD compiler will
automatically generate a globalized PPD for every language declared in your
driver information file. To generate a single-language PPD file, simply use the
<tt>-l</tt> option to list the corresponding locale, for example:</p>
<pre class='command'>
ppdc -l de -d ppd/de mydrivers.drv
</pre>
<p>to generate German PPD files.</p>
</div>
</body>
</html>
+2 -2
Ver Arquivo
@@ -370,7 +370,7 @@ div.contents ul.subcontents li {
<div class='figure'><table summary='Raster Filter Chain'>
<caption>Figure 1: <a name='FIGURE_1'>Raster Filter Chain</a></caption>
<tr><td><img src='/images/cups-raster-chain.png' width='700' height='150' alt='Raster Filter Chain'></td></tr>
<tr><td><img src='../images/cups-raster-chain.png' width='700' height='150' alt='Raster Filter Chain'></td></tr>
</table></div>
<p>The raster filter converts CUPS raster data into a format the printer understands, for example HP-PCL. CUPS includes several sample raster filters supporting standard page description languages (PDLs). <a href='#TABLE_1'>Table 1</a> shows the raster filters that are bundled with CUPS and the languages they support.</p>
@@ -397,7 +397,7 @@ div.contents ul.subcontents li {
<div class='figure'><table summary='Command Filter Chain'>
<caption>Figure 2: <a name='FIGURE_2'>Command Filter Chain</a></caption>
<tr><td><img src='/images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
<tr><td><img src='../images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
</table></div>
<p>Raster printer drivers must provide their own command filter.</p>
+2 -2
Ver Arquivo
@@ -21,8 +21,8 @@ can be modified using your favorite text editor, you should
normally use the <A HREF="man-lpadmin.html">lpadmin(8)</A>
command, web interface, or any of the available GUIs to manage
your classes instead. If you do choose to edit this file
manually, you will need to restart the scheduler to make them
active.</P>
manually, you will need to stop the scheduler first, make your
changes, and then start the scheduler to make them active.</P>
<H2 CLASS="title"><A NAME="Accepting">Accepting</A></H2>
+51 -38
Ver Arquivo
@@ -135,8 +135,14 @@ to the access log file. The following levels are defined:</P>
address, or network that is allowed access to the server.
<CODE>Allow</CODE> directives are cummulative, so multiple
<CODE>Allow</CODE> directives can be used to allow access for
multiple hosts or networks. The <CODE>/mm</CODE> notation
specifies a CIDR netmask, as shown in Table 1.</P>
multiple hosts or networks.</P>
<P>Host and domain name matching require that you enable the <A
HREF="#HostNameLookups"><CODE>HostNameLookups</CODE></A>
directive.</P>
<P>The <CODE>/mm</CODE> notation specifies a CIDR netmask, as shown in
<A HREF="#TABLE1">Table 1</A>.</P>
<DIV CLASS="table"><TABLE SUMMARY="CIDR Netmasks">
<CAPTION>Table 1: <A NAME="TABLE1">CIDR Netmasks</A></CAPTION>
@@ -388,10 +394,10 @@ browse packets from all hosts.</P>
HREF="#HostNameLookups"><CODE>HostNameLookups</CODE></A>
directive.</P>
<P>IP address matching supports exact matches, partial addresses
that match networks using netmasks of 255.0.0.0, 255.255.0.0, and
255.255.255.0, or network addresses using the specified netmask
or bit count.</P>
<P>IP address matching supports exact matches, partial addresses that match
networks using netmasks of 255.0.0.0, 255.255.0.0, and 255.255.255.0, or network
addresses using the specified netmask or bit count. The <CODE>/mm</CODE>
notation specifies a CIDR netmask, a shown in <A HREF="TABLE1">Table 1</A>.</P>
<P>The <CODE>@LOCAL</CODE> name will allow browse data from all
local interfaces. The <CODE>@IF(name)</CODE> name will allow
@@ -426,10 +432,10 @@ browse packets from any hosts.</P>
HREF="#HostNameLookups"><CODE>HostNameLookups</CODE></A>
directive.</P>
<P>IP address matching supports exact matches, partial addresses
that match networks using netmasks of 255.0.0.0, 255.255.0.0, and
255.255.255.0, or network addresses using the specified netmask
or bit count.</P>
<P>IP address matching supports exact matches, partial addresses that match
networks using netmasks of 255.0.0.0, 255.255.0.0, and 255.255.255.0, or network
addresses using the specified netmask or bit count. The <CODE>/mm</CODE>
notation specifies a CIDR netmask, a shown in <A HREF="TABLE1">Table 1</A>.</P>
<P>The <CODE>@LOCAL</CODE> name will block browse data from all
local interfaces. The <CODE>@IF(name)</CODE> name will block
@@ -461,7 +467,7 @@ value. Otherwise printers and classes will disappear from client
systems between updates.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="BrowseLDAPBindDN">BrowseLDAPBindDN</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="BrowseLDAPBindDN">BrowseLDAPBindDN</A></H2>
<H3>Examples</H3>
@@ -476,7 +482,7 @@ domain name to use when listening for printer registrations. The
default is undefined.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4</SPAN><A NAME="BrowseLDAPCACertFile">BrowseLDAPCACertFile</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4/Mac OS X 10.6</SPAN><A NAME="BrowseLDAPCACertFile">BrowseLDAPCACertFile</A></H2>
<H3>Examples</H3>
@@ -490,7 +496,7 @@ BrowseLDAPCACertFile /etc/cups/ssl/certs
authority file to use for LDAP + SSL. The default is undefined.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="BrowseLDAPDN">BrowseLDAPDN</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="BrowseLDAPDN">BrowseLDAPDN</A></H2>
<H3>Examples</H3>
@@ -505,7 +511,7 @@ domain name to use when registering local shared printers. The
default is undefined.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="BrowseLDAPPassword">BrowseLDAPPassword</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="BrowseLDAPPassword">BrowseLDAPPassword</A></H2>
<H3>Examples</H3>
@@ -520,7 +526,7 @@ access password to use when connecting to the LDAP server. The
default is undefined.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="BrowseLDAPServer">BrowseLDAPServer</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="BrowseLDAPServer">BrowseLDAPServer</A></H2>
<H3>Examples</H3>
@@ -551,7 +557,7 @@ additional IPP backend options to advertise with local shared
printers. The default is to not include any options.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="BrowseLocalProtocols">BrowseLocalProtocols</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="BrowseLocalProtocols">BrowseLocalProtocols</A></H2>
<H3>Examples</H3>
@@ -734,7 +740,7 @@ the options replace any options specified by the remote server.
The default is to not include any options.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="BrowseRemoteProtocols">BrowseRemoteProtocols</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="BrowseRemoteProtocols">BrowseRemoteProtocols</A></H2>
<H3>Examples</H3>
@@ -920,7 +926,7 @@ DataDir /usr/share/cups
for data files.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="DefaultAuthType">DefaultAuthType</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="DefaultAuthType">DefaultAuthType</A></H2>
<H3>Examples</H3>
@@ -957,7 +963,7 @@ character set for the language specified by the client or the
<CODE>DefaultLanguage</CODE> directive.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="DefaultEncryption">DefaultEncryption</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="DefaultEncryption">DefaultEncryption</A></H2>
<H3>Examples</H3>
@@ -995,7 +1001,7 @@ language localization file exists for it. The default language
is "en" for English.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4</SPAN><A NAME="DefaultPaperSize">DefaultPaperSize</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4/Mac OS X 10.6</SPAN><A NAME="DefaultPaperSize">DefaultPaperSize</A></H2>
<H3>Examples</H3>
@@ -1015,7 +1021,7 @@ of <CODE>None</CODE> tells the scheduler to not set the default paper
size.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="DefaultPolicy">DefaultPolicy</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="DefaultPolicy">DefaultPolicy</A></H2>
<H3>Examples</H3>
@@ -1031,7 +1037,7 @@ policy to use for IPP operation. The default is
<CODE>default</CODE>.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="DefaultShared">DefaultShared</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="DefaultShared">DefaultShared</A></H2>
<H3>Examples</H3>
@@ -1077,9 +1083,14 @@ printers are shared (published) by default. The default is
address, or network that is denied access to the server.
<CODE>Deny</CODE> directives are cummulative, so multiple
<CODE>Deny</CODE> directives can be used to allow access for
multiple hosts or networks. The <CODE>/mm</CODE> notation
specifies a CIDR netmask, a shown in <A HREF="TABLE1">Table
1</A>.</P>
multiple hosts or networks.</P>
<P>Host and domain name matching require that you enable the <A
HREF="#HostNameLookups"><CODE>HostNameLookups</CODE></A>
directive.</P>
<P>The <CODE>/mm</CODE> notation specifies a CIDR netmask, a shown in
<A HREF="TABLE1">Table 1</A>.</P>
<P>The <CODE>@LOCAL</CODE> name will deny access from all local
interfaces. The <CODE>@IF(name)</CODE> name will deny access from
@@ -1093,7 +1104,7 @@ HREF="#Location"><CODE>Location</CODE></A> or <A
HREF="#Limit"><CODE>Limit</CODE></A> section.</P>
<H2 CLASS="title"><A NAME="DirtyCleanInterval">DirtyCleanInterval</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4/Mac OS X 10.6</SPAN><A NAME="DirtyCleanInterval">DirtyCleanInterval</A></H2>
<H3>Examples</H3>
@@ -1106,7 +1117,9 @@ DirtyCleanInterval 0
<P>The <CODE>DirtyCleanInterval</CODE> directive specifies the number of
seconds to wait before updating configuration and state files for printers,
classes, subscriptions, and jobs. The default is 30 seconds.</P>
classes, subscriptions, and jobs. The default is 30 seconds. A value of 0
causes the update to occur as soon as possible, typically within a few
milliseconds.</P>
<H2 CLASS="title"><A NAME="DocumentRoot">DocumentRoot</A></H2>
@@ -1182,7 +1195,7 @@ default error log file is <VAR>@CUPS_LOGDIR@/error_log</VAR>.</P>
information to the system log instead of a plain file.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.3</SPAN><A NAME="ErrorPolicy">ErrorPolicy</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.3/Mac OS X 10.5</SPAN><A NAME="ErrorPolicy">ErrorPolicy</A></H2>
<H3>Examples</H3>
@@ -1221,7 +1234,7 @@ printer.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4</SPAN><A NAME="FatalErrors">FatalErrors</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4/Mac OS X 10.6</SPAN><A NAME="FatalErrors">FatalErrors</A></H2>
<H3>Examples</H3>
@@ -1483,7 +1496,7 @@ the file is assumed to be relative to the <A
HREF="#ServerRoot"><CODE>ServerRoot</CODE></A> directory.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="JobRetryInterval">JobRetryInterval</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="JobRetryInterval">JobRetryInterval</A></H2>
<H3>Examples</H3>
@@ -1501,7 +1514,7 @@ print queues whose error policy is <CODE>retry-job</CODE>. The
default is 30 seconds.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4</SPAN><A NAME="JobKillDelay">JobKillDelay</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4/Mac OS X 10.6</SPAN><A NAME="JobKillDelay">JobKillDelay</A></H2>
<H3>Examples</H3>
@@ -1517,7 +1530,7 @@ wait before killing the filters and backend associated with a canceled or held
job. The default is 30 seconds.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="JobRetryLimit">JobRetryLimit</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="JobRetryLimit">JobRetryLimit</A></H2>
<H3>Examples</H3>
@@ -1601,7 +1614,7 @@ The request type names are case-sensitive for compatibility with
Apache.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="LimitIPP">Limit (Policy)</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="LimitIPP">Limit (Policy)</A></H2>
<H3>Examples</H3>
@@ -2252,7 +2265,7 @@ HREF="#LimitRequestBody"><CODE>LimitRequestBody</CODE></A>
directive instead.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4</SPAN><A NAME="MultipleOperationTimeout">MultipleOperationTimeout</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4/Mac OS X 10.6</SPAN><A NAME="MultipleOperationTimeout">MultipleOperationTimeout</A></H2>
<H3>Examples</H3>
@@ -2371,7 +2384,7 @@ recognized:</P>
<P>The default is "%p %j %u %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}".</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="PassEnv">PassEnv</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="PassEnv">PassEnv</A></H2>
<H3>Examples</H3>
@@ -2390,7 +2403,7 @@ scheduler only passes the <CODE>DYLD_LIBRARY_PATH</CODE>,
environment variables to child processes.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="Policy">Policy</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="Policy">Policy</A></H2>
<H3>Examples</H3>
@@ -2920,7 +2933,7 @@ the text that is returned. The default is
</TABLE></DIV>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="SetEnv">SetEnv</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="SetEnv">SetEnv</A></H2>
<H3>Examples</H3>
@@ -3052,7 +3065,7 @@ to wait before an active HTTP or IPP request times out. The
default timeout is 300 seconds.</P>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="UseNetworkDefault">UseNetworkDefault</A></H2>
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2/Mac OS X 10.5</SPAN><A NAME="UseNetworkDefault">UseNetworkDefault</A></H2>
<H3>Examples</H3>
+114 -79
Ver Arquivo
@@ -98,6 +98,34 @@ which can be later referenced using <code>$name</code>. The name is
case-insensitive and can be any sequence of letters, numbers,
and the underscore. The value can be any valid expression.</p>
<h3>Predefined Names</h3>
<p>The following <code>#define</code> names are set by the PPD compiler:</p>
<ul>
<li><code>CUPS_VERSION</code> - The full CUPS version string, e.g.
"1.4.0"</li>
<li><code>CUPS_VERSION_MAJOR</code> - The major version number, e.g.
"1"</li>
<li><code>CUPS_VERSION_MINOR</code> - The minor version number, e.g.
"4"</li>
<li><code>CUPS_VERSION_PATCH</code> - The patch version number, e.g.
"0"</li>
<li><code>PLATFORM_NAME</code> - The operating system name used by the
current system as reported by "uname" ("Windows" on Microsoft
Windows)</li>
<li><code>PLATFORM_ARCH</code> - The processor architecture used by the
current system as reported by "uname -m" ("X86" or "X64" on Microsoft
Windows)</li>
</ul>
<h3>See Also</h3>
<p><a href='#_include'><code>#include</code></a></p>
@@ -352,10 +380,10 @@ least 100 files.</p>
inclusion in a driver. The name with optional user text defines
the name for the media size and is used with the <a
href='#MediaSize'><code>MediaSize</code></a> directive to associate
the media size with the driver. The name may only contain
letters, numbers, and the underscore and may not exceed 40
characters in length. The user text, if supplied, may not exceed
80 characters in length.</p>
the media size with the driver. The name may contain up to 40 ASCII
characters within the range of decimal 33 to decimal 126 inclusive,
except for the characters comma (44), slash (47) and colon (58).
The user text, if supplied, may not exceed 80 bytes in length.</p>
<p>The width and length define the dimensions of the media. Each
number is optionally followed by one of the following unit
@@ -431,17 +459,15 @@ Attribute fooProfile "Photo/Photographic Profile" "photopro.icc"
<h3>Description</h3>
<p>The <code>Attribute</code> directive creates a PPD attribute. The
name is any combination of letters, numbers, and the underscore
and can be up to 40 characters in length.</p>
name may contain up to 40 ASCII characters within the range of decimal
33 to decimal 126 inclusive, except for the characters comma (44),
slash (47) and colon (58).</p>
<p>The selector can be the empty string (<code>""</code>), a keyword
consisting of up to 40 letters, numbers, and the underscore, or
a string composed of a keyword and user text of up to 80
characters.</p>
<p>The selector can be the empty string (<code>""</code>) or text of up
to 80 bytes.</p>
<p>The value is any string or number; the string may contain
multiple lines, however no one line may exceed 255
characters.</p>
<p>The value is any string or number; the string may contain multiple
lines, however no one line may exceed 255 bytes.</p>
<h3>See Also</h3>
@@ -467,14 +493,15 @@ Choice "False/No" "&lt;&lt;/cupsCompression 0&gt;&gt;setpagedevice"
<h3>Description</h3>
<p>The <code>Choice</code> directive adds a single choice to the
current option. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
current option. The name may contain up to 40 ASCII characters within
the range of decimal 33 to decimal 126 inclusive, except for the
characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
<p>If provided, the text can be any string up to 80 bytes
in length. If no text is provided, the name is used.</p>
<p>The code is any string and may contain multiple lines,
however no one line may exceed 255 characters.</p>
however no one line may exceed 255 bytes.</p>
<h3>See Also</h3>
@@ -540,11 +567,12 @@ ColorModel CMYK cmyk chunky 0
<p>The <code>ColorModel</code> directive is a convenience directive
which creates a ColorModel option and choice for the current
printer driver. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
printer driver. The name may contain up to 40 ASCII characters within
the range of decimal 33 to decimal 126 inclusive, except for the
characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The colorspace argument is one of the standard colorspace
keywords defined later in this appendix in the section titled,
@@ -670,7 +698,7 @@ MA 02111 USA"
<p>The <code>Copyright</code> directive adds text comments to the
top of a PPD file, typically for use in copyright notices. The
text argument can contain multiple lines of text, but no line
may exceed 255 characters.</p>
may exceed 255 bytes.</p>
<h2 class="title"><a name='CustomMedia'>CustomMedia</a></h2>
@@ -702,11 +730,12 @@ CustomMedia "A4/A4 - 210x297mm" 210mm 297mm 12 12 12 12
<h3>Description</h3>
<p>The <code>CustomMedia</code> directive adds a custom media size to
the driver. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
the driver. The name may contain up to 40 ASCII characters within the
range of decimal 33 to decimal 126 inclusive, except for the characters
comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The width and length arguments specify the dimensions of the
media as defined for the <a href="#_media"><code>#media</code></a>
@@ -719,7 +748,7 @@ printable margins of the media.</p>
PostScript commands to run for the <code>PageSize</code> and
<code>PageRegion</code> options, respectively. The commands can
contain multiple lines, however no line may be more than 255
characters in length.</p>
bytes in length.</p>
<h3>See Also</h3>
@@ -795,11 +824,12 @@ therefore the darkness of the print.</p>
the Dymo driver from 0 (lowest) to 3 (highest), with 2
representing the normal setting.</p>
<p>The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</p>
<p>The name may contain up to 40 ASCII characters within the range of
decimal 33 to decimal 126 inclusive, except for the characters comma
(44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<h3>See Also</h3>
@@ -1016,14 +1046,15 @@ Finishing "Glossy/Photo Overcoat"
<h3>Description</h3>
<p>The <code>Finishing</code> directive adds a choice to the
<code>cupsFinishing</code> option. The name is any combination of
letters, numbers, and the underscore and can be up to 40
characters in length. The name is stored in the
<code>OutputType</code> attribute in the PostScript page device
dictionary.</p>
<code>cupsFinishing</code> option. The name may contain up to 40 ASCII
characters within the range of decimal 33 to decimal 126 inclusive,
except for the characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The name is stored in the <code>OutputType</code> attribute in the
PostScript page device dictionary.</p>
<h3>See Also</h3>
@@ -1063,8 +1094,7 @@ Font Unicode-Foo Expert "(2.0)" Adobe-Identity ROM
<h3>Description</h3>
<p>The <code>Font</code> directive defines a "device font" for the
current printer driver. The name is the PostScript font
name.</p>
current printer driver. The name is the PostScript font name.</p>
<p>The encoding is the default encoding of the font, usually
<code>Standard</code>, <code>Expert</code>, or <code>Special</code>, as
@@ -1111,14 +1141,16 @@ Group "Special/Vendor Options"
<h3>Description</h3>
<p>The <code>Group</code> directive specifies the group for new
<code>Option</code> directives. The name is any combination of
letters, numbers, and the underscore and can be up to 40
characters in length. The names <code>General</code> and
<code>InstallableOptions</code> are predefined for the standard
Adobe UI keywords and for installable options, respectively.</p>
<code>Option</code> directives. The name may contain up to 40 ASCII
characters within the range of decimal 33 to decimal 126 inclusive,
except for the characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 40 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 40 bytes in length.
If no text is provided, the name is used.</p>
<p>The names <code>General</code> and <code>InstallableOptions</code>
are predefined for the standard Adobe UI keywords and for installable
options, respectively.</p>
<center><table width='80%' border='1' bgcolor='#cccccc' cellpadding='5' cellspacing='0'>
<tr>
@@ -1126,8 +1158,8 @@ in length. If no text is provided, the name is used.</p>
<p>Because of certain API binary compatibility issues,
CUPS limits the length of PPD group translation strings
(text) to 40 characters, while the PPD specification
allows for up to 80 characters.</p>
(text) to 40 bytes, while the PPD specification
allows for up to 80 bytes.</p>
</td>
</tr>
@@ -1201,11 +1233,12 @@ from 0 to 2<sup>32</sup>-1 specifying the value that is placed
in the <code>MediaPosition</code> attribute in the PostScript page
device dictionary.</p>
<p>The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</p>
<p>The name may contain up to 40 ASCII characters within the range of
decimal 33 to decimal 126 inclusive, except for the characters comma
(44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<h3>See Also</h3>
@@ -1243,11 +1276,12 @@ Installable "Option1/Duplexer Installed"
<p>The <code>Installable</code> directive adds a new boolean option
to the <code>InstallableOptions</code> group with a default value of
<code>False</code>. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
<code>False</code>. The name may contain up to 40 ASCII characters
within the range of decimal 33 to decimal 126 inclusive, except for
the characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<h2 class="title"><a name='LocAttribute'>LocAttribute</a></h2>
@@ -1267,17 +1301,15 @@ LocAttribute fooProfile "Photo/Photographic Profile" "photopro.icc"
<h3>Description</h3>
<p>The <code>LocAttribute</code> directive creates a localized PPD
attribute. The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</p>
attribute. The name may contain up to 40 ASCII characters within the
range of decimal 33 to decimal 126 inclusive, except for the characters
comma (44), slash (47) and colon (58).</p>
<p>The selector can be the empty string (<code>""</code>), a keyword
consisting of up to 40 letters, numbers, and the underscore, or
a string composed of a keyword and user text of up to 80
characters.</p>
<p>The selector can be the empty string (<code>""</code>) or text of up
to 80 bytes.</p>
<p>The value is any string or number; the string may contain
multiple lines, however no one line may exceed 255
characters.</p>
<p>The value is any string or number; the string may contain multiple
lines, however no one line may exceed 255 bytes.</p>
<h3>See Also</h3>
@@ -1430,13 +1462,15 @@ from 0 to 2<sup>32</sup>-1 specifying the value that is placed
in the <code>cupsMediaType</code> attribute in the PostScript page
device dictionary.</p>
<p>The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length. The name is
placed in the <code>MediaType</code> attribute in the PostScript
page device dictionary.</p>
<p>The name may contain up to 40 ASCII characters within the range of
decimal 33 to decimal 126 inclusive, except for the characters comma
(44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The name is placed in the <code>MediaType</code> attribute in the
PostScript page device dictionary.</p>
<h3>See Also</h3>
@@ -1504,7 +1538,7 @@ name is any string of letters, numbers, spaces, and the
characters ".", "/", "-", and "+" and should not begin with the
manufacturer name since the PPD compiler will add this
automatically for you. The maximum length of the name string is
31 characters to conform to the Adobe limits on the length of
31 bytes to conform to the Adobe limits on the length of
<code>ShortNickName</code>.</p>
<h3>See Also</h3>
@@ -1570,11 +1604,12 @@ Option "fooFinish/Finishing Option" PickOne DocumentSetup 10
<p>The <code>Option</code> directive creates a new option in the
current group, by default the <code>General</code> group. The name
is any combination of letters, numbers, and the underscore and
can be up to 40 characters in length.</p>
may contain up to 40 ASCII characters within the range of decimal 33
to decimal 126 inclusive, except for the characters comma (44), slash
(47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The type argument is one of the following keywords:</p>
@@ -1721,8 +1756,8 @@ for asymmetric resolutions. The <code>HHH</code> and <code>VVV</code> in
the examples represent the horizontal and vertical resolutions
which must be positive integer values.</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<h3>See Also</h3>
+2 -2
Ver Arquivo
@@ -21,8 +21,8 @@ and can be modified using your favorite text editor, you should
normally use the <A HREF="man-lpadmin.html">lpadmin(8)</A>
command, web interface, or any of the available GUIs to manage
your printers instead. If you do choose to edit this file
manually, you will need to restart the scheduler to make them
active.</P>
manually, you will need to stop the scheduler first, make your
changes, and then start the scheduler to make them active.</P>
<H2 CLASS="title"><A NAME="Accepting">Accepting</A></H2>
+1 -1
Ver Arquivo
@@ -25,7 +25,7 @@
<DIV CLASS="figure"><TABLE SUMMARY="CUPS Block Diagram">
<CAPTION>Figure 1: <A NAME="FIGURE1">CUPS Block Diagram</A></CAPTION>
<TR><TD ALIGN="CENTER"><IMG SRC="../images/cups-block-diagram.gif"
<TR><TD ALIGN="CENTER"><IMG SRC="../images/cups-block-diagram.png"
WIDTH="768" HEIGHT="768" ALT="CUPS Block Diagram"></TD></TR>
</TABLE></DIV>
+68 -56
Ver Arquivo
@@ -8,7 +8,7 @@
</head>
<body>
<!--
"$Id: spec-ipp.html 8653 2009-05-16 23:53:28Z mike $"
"$Id: spec-ipp.html 8816 2009-09-14 21:41:50Z mike $"
CUPS IPP specification for the Common UNIX Printing System (CUPS).
@@ -365,7 +365,7 @@ Print-Job request:
<dl>
<dt>"auth-info" (1setOf text(MAX)):<span class='info'>CUPS 1.3</span>
<dt>"auth-info" (1setOf text(MAX)):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies one or more authentication values as specified by the "auth-info-required" attribute.
@@ -472,7 +472,7 @@ Create-Job request:
<dl>
<dt>"auth-info" (1setOf text(MAX)):<span class='info'>CUPS 1.3</span>
<dt>"auth-info" (1setOf text(MAX)):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies one or more authentication values as specified by the "auth-info-required" attribute.
@@ -558,7 +558,7 @@ job as well.
<h4>Cancel-Job Request</h4>
<p>The following groups of attributes are supplied as part of the
Set-Job-Attributes request:
Cancel-Job request:
<p>Group 1: Operation Attributes
@@ -577,7 +577,7 @@ Set-Job-Attributes request:
<dd>The client MUST supply a URI for the specified printer and
a job ID number, or the job URI.
<dt><span class="info">CUPS 1.4</span>"purge-job" (boolean):
<dt><span class="info">CUPS 1.4/Mac OS X 10.6</span>"purge-job" (boolean):
<dd>The client OPTIONALLY supplies this attribute. When true,
all job files (history and document) are purged. The default
@@ -632,7 +632,18 @@ Purge-Jobs request:
<dd>The client MUST supply a URI for the specified printer or
"ipp://.../printers" for all printers and classes.
<dt><span class="info">CUPS 1.2</span>"purge-jobs" (boolean):
<dt><span class="info">CUPS 1.2/Mac OS X 10.5</span>"requesting-user-name" (name(MAX)):
<dd>The client OPTIONALLY supplies this attribute to specify whose jobs
jobs are purged or canceled.
<dt><span class="info">CUPS 1.2/Mac OS X 10.5</span>"my-jobs" (boolean):
<dd>The client OPTIONALLY supplies this attribute to specify that only
the jobs owned by the requesting user are purged or canceled. The
default is false.
<dt><span class="info">CUPS 1.2/Mac OS X 10.5</span>"purge-jobs" (boolean):
<dd>The client OPTIONALLY supplies this attribute to specify
whether the jobs are purged (true) or just canceled (false).
@@ -743,7 +754,7 @@ Response:
</dl>
<h3 class='title'><span class='info'>CUPS 1.2</span><a
<h3 class='title'><span class='info'>CUPS 1.2/Mac OS X 10.5</span><a
name='CREATE_PRINTER_SUBSCRIPTION'>Create-Printer-Subscription</a></h3>
<p>The Create-Printer-Subscription operation (0x0016) creates a
@@ -915,7 +926,7 @@ CUPS-Get-Printers request:
attributes as described in section 3.1.4.1 of the IPP Model and
Semantics document.
<dt>"first-printer-name" (name(127)):<span class='info'>CUPS 1.2</span>
<dt>"first-printer-name" (name(127)):<span class='info'>CUPS 1.2/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies this attribute to
select the first printer that is returned.
@@ -949,7 +960,7 @@ CUPS-Get-Printers request:
responds as if this attribute had been supplied with a value of
'all'.
<dt>"requested-user-name" (name(127)) : <span class='info'>CUPS 1.2</span>
<dt>"requested-user-name" (name(127)) : <span class='info'>CUPS 1.2/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a user name that is used to filter
the returned printers.
@@ -1016,7 +1027,7 @@ CUPS-Add-Modify-Printer request:
<dl>
<dt>"auth-info-required" (1setOf type2 keyword):<span class='info'>CUPS 1.3</span>
<dt>"auth-info-required" (1setOf type2 keyword):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies one or more authentication keywords that are required to communicate with the printer/remote queue.
@@ -1179,7 +1190,7 @@ CUPS-Get-Classes request:
attributes as described in section 3.1.4.1 of the IPP Model and
Semantics document.
<dt>"first-printer-name" (name(127)):<span class='info'>CUPS 1.2</span>
<dt>"first-printer-name" (name(127)):<span class='info'>CUPS 1.2/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies this attribute to
select the first printer that is returned.
@@ -1209,7 +1220,7 @@ CUPS-Get-Classes request:
interested. If the client omits this attribute, the server responds as
if this attribute had been supplied with a value of 'all'.
<dt>"requested-user-name" (name(127)) : <span class='info'>CUPS 1.2</span>
<dt>"requested-user-name" (name(127)) : <span class='info'>CUPS 1.2/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a user name that is used to filter
the returned printers.
@@ -1276,7 +1287,7 @@ CUPS-Add-Modify-Class request:
<dl>
<dt>"auth-info-required" (1setOf type2 keyword):<span class='info'>CUPS 1.3</span>
<dt>"auth-info-required" (1setOf type2 keyword):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies one or more authentication keywords that are required to communicate with the printer/remote queue.
@@ -1575,14 +1586,14 @@ CUPS-Get-Devices request:
<dd>The client OPTIONALLY supplies a device class keyword to select
which devices are returned.
<dt>"exclude-schemes" (1setOf name) :<span class='info'>CUPS 1.4</span>
<dt>"exclude-schemes" (1setOf name) :<span class='info'>CUPS 1.4/Mac OS X 10.6</span>
<dd>The client OPTIONALLY supplies a set of scheme names that the
requestor does not want to discover. If the client omits this attribute,
the server responds with devices of all schemes specified by
the "include-schemes" attribute.
<dt>"include-schemes" (1setOf name) :<span class='info'>CUPS 1.4</span>
<dt>"include-schemes" (1setOf name) :<span class='info'>CUPS 1.4/Mac OS X 10.6</span>
<dd>The client OPTIONALLY supplies a set of scheme names that the
requestor wants to discover. If the client omits this attribute,
@@ -1601,10 +1612,10 @@ CUPS-Get-Devices request:
the client omits this attribute, the server responds as if this
attribute had been supplied with a value of 'all'.
<dt>"timeout" (integer (1:MAX)) :<span class='info'>CUPS 1.4</span>
<dt>"timeout" (integer (1:MAX)) :<span class='info'>CUPS 1.4/Mac OS X 10.6</span>
<dd>The client OPTIONALLY supplies this attribute limiting the number of
devices that are returned.
<dd>The client OPTIONALLY supplies this attribute to limit the duration
of the lookup. The default timeout is 15 seconds.
</dl>
@@ -1658,14 +1669,14 @@ CUPS-Get-PPDs request:
attributes as described in section 3.1.4.1 of the IPP Model and
Semantics document.
<dt>"exclude-schemes" (1setOf name) :<span class='info'>CUPS 1.4</span>
<dt>"exclude-schemes" (1setOf name) :<span class='info'>CUPS 1.4/Mac OS X 10.6</span>
<dd>The client OPTIONALLY supplies a set of scheme names that the
requestor does not want to list. If the client omits this attribute,
the server responds with PPDs of all schemes specified by the
"include-schemes" attribute.
<dt>"include-schemes" (1setOf name) :<span class='info'>CUPS 1.4</span>
<dt>"include-schemes" (1setOf name) :<span class='info'>CUPS 1.4/Mac OS X 10.6</span>
<dd>The client OPTIONALLY supplies a set of scheme names that the
requestor wants to list. If the client omits this attribute, the server
@@ -1680,27 +1691,27 @@ CUPS-Get-PPDs request:
<dd>The client OPTIONALLY supplies a printer manufacturer to select which PPDs are returned.
<dt>"ppd-make-and-model" (text(127)):<span class='info'>CUPS 1.3</span>
<dt>"ppd-make-and-model" (text(127)):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a make and model to select which PPDs are returned.
<dt>"ppd-model-number" (integer):<span class='info'>CUPS 1.3</span>
<dt>"ppd-model-number" (integer):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a model number to select which PPDs are returned.
<dt>"ppd-natural-language" (naturalLanguage):<span class='info'>CUPS 1.3</span>
<dt>"ppd-natural-language" (naturalLanguage):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a language to select which PPDs are returned.
<dt>"ppd-product" (text(127)):<span class='info'>CUPS 1.3</span>
<dt>"ppd-product" (text(127)):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a PostScript product string to select which PPDs are returned.
<dt>"ppd-psversion" (text(127)):<span class='info'>CUPS 1.3</span>
<dt>"ppd-psversion" (text(127)):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a PostScript version string to select which PPDs are returned.
<dt>"ppd-type" (type1 keyword):<span class='info'>CUPS 1.3</span>
<dt>"ppd-type" (type1 keyword):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a driver type to select which PPDs are returned.
@@ -1802,7 +1813,7 @@ CUPS-Move-Job Response:
</dl>
<h3 class='title'><span class='info'>CUPS 1.2</span><a name='CUPS_AUTHENTICATE_JOB'>CUPS-Authenticate-Job Operation</a></h3>
<h3 class='title'><span class='info'>CUPS 1.2/Mac OS X 10.5</span><a name='CUPS_AUTHENTICATE_JOB'>CUPS-Authenticate-Job Operation</a></h3>
<p>The CUPS-Authenticate-Job operation (0x400E) authenticates a print job for
printing, releasing the job if it is held. Typically this is used when printing
@@ -1837,11 +1848,11 @@ CUPS-Authenticate-Job request:
<dl>
<dt>"auth-info" (1setOf text(MAX)):<span class='info'>CUPS 1.3</span>
<dt>"auth-info" (1setOf text(MAX)):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies one or more authentication values as specified by the "auth-info-required" attribute.
<dt>"job-hold-until" (keyword | name(MAX)):<span class='info'>CUPS 1.3</span>
<dt>"job-hold-until" (keyword | name(MAX)):<span class='info'>CUPS 1.3/Mac OS X 10.5</span>
<dd>The client OPTIONALLY supplies a new job-hold-until value for the
job. If specified and not the "no-hold" value, the job is held instead
@@ -1880,7 +1891,7 @@ CUPS-Authenticate-Job Response:
</dl>
<h3 class='title'><span class='info'>CUPS 1.3</span><a name='CUPS_GET_PPD'>CUPS-Get-PPD Operation</a></h3>
<h3 class='title'><span class='info'>CUPS 1.3/Mac OS X 10.5</span><a name='CUPS_GET_PPD'>CUPS-Get-PPD Operation</a></h3>
<p>The CUPS-Get-PPD operation (0x400F) gets a PPD file from the
server. The PPD file can be specified using a <tt>ppd-name</tt>
@@ -1950,7 +1961,7 @@ CUPS-Get-PPD Response:
<p>If the status code is <tt>successful-ok</tt>, the PPD file follows
the end of the IPP response.</p>
<h3 class='title'><span class='info'>CUPS 1.4</span><a name='CUPS_GET_DOCUMENT'>CUPS-Get-Document Operation</a></h3>
<h3 class='title'><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='CUPS_GET_DOCUMENT'>CUPS-Get-Document Operation</a></h3>
<p>The CUPS-Get-Document operation (0x4027) gets a document file from a
job on the server. The document file is specified using the
@@ -2067,7 +2078,7 @@ one of the following:
</ul>
<h4><a name="device-id">device-id (text(127))</a><span class="info">CUPS 1.2</span></h4>
<h4><a name="device-id">device-id (text(127))</a><span class="info">CUPS 1.2/Mac OS X 10.5</span></h4>
<p>The device-id attribute specifies the IEEE-1284 device ID
string for the device.</p>
@@ -2077,7 +2088,7 @@ string for the device.</p>
<p>The device-info attribute specifies a human-readable string describing
the device, e.g. "Parallel Port #1".
<h4><a name="device-location">device-location (text(127))</a><span class="info">CUPS 1.4</span></h4>
<h4><a name="device-location">device-location (text(127))</a><span class="info">CUPS 1.4/Mac OS X 10.6</span></h4>
<p>The device-location attribute specifies the physical location of the
printer.
@@ -2137,7 +2148,7 @@ of the device-class attribute:
<h3 class='title'><a name='JOB_TEMPLATE_ATTRIBUTES'>Job Template Attributes</a></h3>
<h4><a name="auth-info">auth-info (1setOf text(MAX))</a><span class="info">CUPS 1.3</span></h4>
<h4><a name="auth-info">auth-info (1setOf text(MAX))</a><span class="info">CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The auth-info attribute specifies the authentication information to use when printing to a remote device. The order and content of each text value is specifed by the <a href="#auth-info-required">auth-info-required</a> printer attribute.
@@ -2179,7 +2190,7 @@ supported. The default value is 10.
<p>The document-count attribute specifies the number of documents that
are present in the job.
<h4><a name="fit-to-page">fit-to-page (boolean)</a><span class="info">CUPS 1.4</span></h4>
<h4><a name="fit-to-page">fit-to-page (boolean)</a><span class="info">CUPS 1.4/Mac OS X 10.6</span></h4>
<p>The fit-to-page attribute specifies whether to scale documents to fit on the
selected media (fit-to-page=true) or use the physical size specified in the
@@ -2234,17 +2245,17 @@ Universal Coordinated Time (UTC) and <i>not</i> in the local time zone. If the
specified time is less than the current time, the job is held until the
next day.
<h4><a name="job-media-progress">job-media-progress (integer(0:100))</a><span class='info'>CUPS 1.4</span></h4>
<h4><a name="job-media-progress">job-media-progress (integer(0:100))</a><span class='info'>CUPS 1.4/Mac OS X 10.6</span></h4>
<p>The job-media-progress attribute specifies the percentage of completion of
the current page. It is only valid when the job-state attribute has the
"processing" value (5).</p>
<h4><a name="job-printer-state-message">job-printer-state-message (text(MAX))</a><span class='info'>CUPS 1.3</span></h4>
<h4><a name="job-printer-state-message">job-printer-state-message (text(MAX))</a><span class='info'>CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The job-printer-state-message attribute provides the last known value of the printer-state-message attribute for the printer that processed (or is processing) the job.</p>
<h4><a name="job-printer-state-reasons">job-printer-state-reasons (1setOf type2 keyword)</a><span class='info'>CUPS 1.3</span></h4>
<h4><a name="job-printer-state-reasons">job-printer-state-reasons (1setOf type2 keyword)</a><span class='info'>CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The job-printer-state-reasons attribute provides the last known value of the printer-state-reasons attribute for the printer that processed (or is processing) the job.</p>
@@ -2466,7 +2477,7 @@ name of the PPD file (the NickName attribute in the PPD file). If the
make and model is not specified in the PPD file then the ModelName or
ShortNickName attributes are used instead.
<h4><a name="ppd-model-number">ppd-model-number (integer)</a><span class="info">CUPS 1.3</span></h4>
<h4><a name="ppd-model-number">ppd-model-number (integer)</a><span class="info">CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The ppd-model-number attribute provides the <tt>cupsModelNumber</tt> value from the PPD file.
@@ -2484,11 +2495,11 @@ language is unknown or undefined then "en" (English) is assumed.
<p>The ppd-product attribute specifies the Product attribute values in the PPD file.
<h4><a name="ppd-psversion">ppd-psversion (1setOf text(127))</a><span class="info">CUPS 1.3</span></h4>
<h4><a name="ppd-psversion">ppd-psversion (1setOf text(127))</a><span class="info">CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The ppd-product attribute specifies the PSVersion attribute values in the PPD file.
<h4><a name="ppd-type">ppd-type (type1 keyword)</a><span class="info">CUPS 1.3</span></h4>
<h4><a name="ppd-type">ppd-type (type1 keyword)</a><span class="info">CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The ppd-type attribute specifies the type of driver described by the PPD file:</p>
@@ -2509,7 +2520,7 @@ language is unknown or undefined then "en" (English) is assumed.
<h3 class='title'><a name='PRINTER_ATTRIBUTES'>Printer Attributes</a></h3>
<h4><a name="auth-info-required">auth-info-required (1setOf type2 keyword)</a><span class="info">CUPS 1.3</span></h4>
<h4><a name="auth-info-required">auth-info-required (1setOf type2 keyword)</a><span class="info">CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The auth-info-required attribute specifies the authentication information that is required for printing a job. The following keywords are recognized:</p>
@@ -2549,50 +2560,51 @@ the system.
<p>The job-sheets-supported attribute specifies the available banner files.
There will always be at least one banner file available called "none".
<h4><a name="marker-change-time">marker-change-time (integer)</a><span class='info'>CUPS 1.3</span></h4>
<h4><a name="marker-change-time">marker-change-time (integer)</a><span class='info'>CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The marker-change-time attribute specifies the printer-up-time value when
the last change to the marker-colors, marker-levels, marker-message,
marker-names, or marker-types attributes was made.</p>
<h4><a name="marker-colors">marker-colors (1setof name(MAX))</a><span class='info'>CUPS 1.3</span></h4>
<h4><a name="marker-colors">marker-colors (1setof name(MAX))</a><span class='info'>CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The marker-colors attribute specifies the color(s) for each supply in the
printer. It is only available when the driver provides supply levels. The
color is either "none" or one or more hex-encoded sRGB colors of the form
"#RRGGBB".</p>
<h4><a name="marker-high-levels">marker-high-levels (1setof integer(0:100))</a><span class='info'>CUPS 1.4</span></h4>
<h4><a name="marker-high-levels">marker-high-levels (1setof integer(0:100))</a><span class='info'>CUPS 1.4/Mac OS X 10.6</span></h4>
<p>The marker-high-levels attribute specifies the supply levels that indicate
a near-full condition. A value of 100 should be used for supplies that are
consumed/emptied, e.g. ink cartridges.</p>
<h4><a name="marker-levels">marker-levels (1setof integer(-1:100))</a><span class='info'>CUPS 1.3</span></h4>
<h4><a name="marker-levels">marker-levels (1setof integer(-3:100))</a><span class='info'>CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The marker-levels attribute specifies the current supply levels for the
printer. It is only available when the driver provides supply levels. A
value of -1 indicates the level is unknown, while values from 0 to 100
indicate the corresponding percentage.</p>
value of -1 indicates the level is unavailable, -2 indicates unknown, and -3
indicates the level is unknown but has not yet reached capacity. Values from 0
to 100 indicate the corresponding percentage.</p>
<h4><a name="marker-low-levels">marker-low-levels (1setof integer(0:100))</a><span class='info'>CUPS 1.4</span></h4>
<h4><a name="marker-low-levels">marker-low-levels (1setof integer(0:100))</a><span class='info'>CUPS 1.4/Mac OS X 10.6</span></h4>
<p>The marker-low-levels attribute specifies the supply levels that indicate
a near-empty condition. A value of 0 should be used for supplies that are
filled, e.g. waste ink tanks.</p>
<h4><a name="marker-message">marker-message (text(MAX))</a><span class='info'>CUPS 1.4</span></h4>
<h4><a name="marker-message">marker-message (text(MAX))</a><span class='info'>CUPS 1.4/Mac OS X 10.6</span></h4>
<p>The marker-message attribute provides a human-readable status message
for the current supply levels, e.g. "12 pages of ink remaining." It is only
available when the driver provides supply levels.</p>
<h4><a name="marker-names">marker-names (1setof name(MAX))</a><span class='info'>CUPS 1.3</span></h4>
<h4><a name="marker-names">marker-names (1setof name(MAX))</a><span class='info'>CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The marker-names attribute specifies the name(s) for each supply in the
printer. It is only available when the driver provides supply levels.</p>
<h4><a name="marker-types">marker-types (1setof type3 keyword)</a><span class='info'>CUPS 1.3</span></h4>
<h4><a name="marker-types">marker-types (1setof type3 keyword)</a><span class='info'>CUPS 1.3/Mac OS X 10.5</span></h4>
<p>The marker-types attribute specifies the type(s) of each supply in the
printer. It is only available when the driver provides supply levels. The
@@ -2671,13 +2683,13 @@ to this printer. The default port monitor is "none".
<p>The port-monitor-supported attribute specifies the available port monitors.
<h4><a name="printer-commands">printer-commands (1setOf Type3 keyword)</a><span class='info'>CUPS 1.4</span></h4>
<h4><a name="printer-commands">printer-commands (1setOf Type3 keyword)</a><span class='info'>CUPS 1.4/Mac OS X 10.6</span></h4>
<p>The printer-commands attribute specifies the commands that are supported
by the CUPS command file filter. The keyword "none" indicates that no commands
are supported.</p>
<h4><a name="printer-dns-sd-name">printer-dns-sd-name (name(MAX) | noValue)</a><span class='info'>CUPS 1.4</span></h4>
<h4><a name="printer-dns-sd-name">printer-dns-sd-name (name(MAX) | noValue)</a><span class='info'>CUPS 1.4/Mac OS X 10.6</span></h4>
<p>The printer-dns-sd-name attribute specifies the registered DNS-SD service
name for the printer. If the printer is not being shared using this protocol,
@@ -2697,10 +2709,10 @@ and the following CUPS-specific keywords:</p>
permissions. CUPS will not execute programs with world write permissions
or setuid programs. When run as root (the default), CUPS also does not
execute programs that are not owned by root.
<span class='info'>CUPS 1.4</span></li>
<span class='info'>CUPS 1.4/Mac OS X 10.6</span></li>
<li><tt>cups-missing-filter-warning</tt> - a filter or backend is not
installed. <span class='info'>CUPS 1.4</span></li>
installed. <span class='info'>CUPS 1.4/Mac OS X 10.6</span></li>
</ul>
+27 -27
Ver Arquivo
@@ -8,7 +8,7 @@
</head>
<body>
<!--
"$Id: spec-ppd.html 8628 2009-05-13 22:25:34Z mike $"
"$Id: spec-ppd.html 8673 2009-05-22 17:34:15Z mike $"
CUPS PPD extensions specification for the Common UNIX Printing System (CUPS).
@@ -212,7 +212,7 @@ function is applied <i>after</i> the CMY transformation:</p>
</pre>
<h3><span class='info'>Mac OS X 10.3/CUPS 1.2</span><a name='cupsICCProfile'>cupsICCProfile</a></h3>
<h3><span class='info'>Mac OS X 10.3/CUPS 1.2/Mac OS X 10.5</span><a name='cupsICCProfile'>cupsICCProfile</a></h3>
<p class='summary'>*cupsICCProfile
ColorModel.MediaType.Resolution/Description: "filename"</p>
@@ -395,7 +395,7 @@ The same <tt>cupsUIResolver</tt> can be used by multiple
</blockquote>
<h3><span class='info'>CUPS 1.4</span><a name='cupsUIConstraints'>cupsUIConstraints</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsUIConstraints'>cupsUIConstraints</a></h3>
<p class='summary'>*cupsUIConstraints resolver: "*Keyword1 *Keyword2 ..."<br>
*cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 ..."<br>
@@ -428,7 +428,7 @@ choice followed by testing each option choice to resolve the conflict.</p>
*cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi"
</pre>
<h3><span class='info'>CUPS 1.4</span><a name='cupsUIResolver'>cupsUIResolver</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsUIResolver'>cupsUIResolver</a></h3>
<p class='summary'>*cupsUIResolution resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."</p>
@@ -1058,7 +1058,7 @@ PRE B {
<p>The CUPS media attributes allow drivers to specify alternate custom page
size limits based on up to two options.</p>
<h3><span class='info'>CUPS 1.4</span><a name='cupsMediaQualifier2'>cupsMediaQualifier2</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsMediaQualifier2'>cupsMediaQualifier2</a></h3>
<p class='summary'>*cupsMediaQualifier2: MainKeyword</p>
@@ -1077,7 +1077,7 @@ custom page size limits.</p>
*cupsMinSize ..Photo: "300 300"
</pre>
<h3><span class='info'>CUPS 1.4</span><a name='cupsMediaQualifier3'>cupsMediaQualifier3</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsMediaQualifier3'>cupsMediaQualifier3</a></h3>
<p class='summary'>*cupsMediaQualifier3: MainKeyword</p>
@@ -1096,7 +1096,7 @@ custom page size limits.</p>
*cupsMinSize ..Photo: "300 300"
</pre>
<h3><span class='info'>CUPS 1.4</span><a name='cupsMinSize'>cupsMinSize</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsMinSize'>cupsMinSize</a></h3>
<p class='summary'>*cupsMinSize .Qualifier2.Qualifier3: "width length"<br>
*cupsMinSize .Qualifier2.: "width length"<br>
@@ -1119,7 +1119,7 @@ are used to identify options to use for matching.</p>
*cupsMinSize ..Photo: "300 300"
</pre>
<h3><span class='info'>CUPS 1.4</span><a name='cupsMaxSize'>cupsMaxSize</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsMaxSize'>cupsMaxSize</a></h3>
<p class='summary'>*cupsMaxSize .Qualifier2.Qualifier3: "width length"<br>
*cupsMaxSize .Qualifier2.: "width length"<br>
@@ -1145,7 +1145,7 @@ are used to identify options to use for matching.</p>
<h2 class='title'><a name='ATTRIBUTES'>General Attributes</a></h2>
<h3><span class='info'>CUPS 1.3</span><a name='cupsBackSide'>cupsBackSide</a></h3>
<h3><span class='info'>CUPS 1.3/Mac OS X 10.5</span><a name='cupsBackSide'>cupsBackSide</a></h3>
<p class='summary'>*cupsBackSide: keyword</p>
@@ -1241,7 +1241,7 @@ will be ignored.</p>
<p>Also see the related <a href='#APDuplexRequiresFlippedMargin'><tt>APDuplexRequiresFlippedMargin</tt></a>
attribute.</p>
<h3><span class='info'>CUPS 1.4</span><a name='cupsCommands'>cupsCommands</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsCommands'>cupsCommands</a></h3>
<p class='summary'>*cupsCommands: "name name2 ... nameN"</p>
@@ -1257,7 +1257,7 @@ by whitespace.</p>
</pre>
<h3><span class='info'>CUPS 1.3</span><a name='cupsEvenDuplex'>cupsEvenDuplex</a></h3>
<h3><span class='info'>CUPS 1.3/Mac OS X 10.5</span><a name='cupsEvenDuplex'>cupsEvenDuplex</a></h3>
<p class='summary'>*cupsEvenDuplex: boolean</p>
@@ -1341,7 +1341,7 @@ Ghostscript can use:</p>
*cupsFlipDuplex: true
</pre></blockquote>
<h3><span class='info'>CUPS 1.3</span><a name='cupsIPPFinishings'>cupsIPPFinishings</a></h3>
<h3><span class='info'>CUPS 1.3/Mac OS X 10.5</span><a name='cupsIPPFinishings'>cupsIPPFinishings</a></h3>
<p class='summary'>*cupsIPPFinishings number/text: "*Option Choice ..."</p>
@@ -1357,7 +1357,7 @@ values to PPD options and choices.</p>
*cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape"
</pre>
<h3><span class='info'>CUPS 1.3</span><a name='cupsIPPReason'>cupsIPPReason</a></h3>
<h3><span class='info'>CUPS 1.3/Mac OS X 10.5</span><a name='cupsIPPReason'>cupsIPPReason</a></h3>
<p class='summary'>*cupsIPPReason reason/Reason Text: "optional URIs"</p>
@@ -1401,7 +1401,7 @@ http://www.vendor.com/help"
*End
</pre>
<h3><span class='info'>CUPS 1.2</span><a name='cupsLanguages'>cupsLanguages</a></h3>
<h3><span class='info'>CUPS 1.2/Mac OS X 10.5</span><a name='cupsLanguages'>cupsLanguages</a></h3>
<p class='summary'>*cupsLanguages: "locale list"</p>
@@ -1431,7 +1431,7 @@ hardware. The default value is <code>false</code>.</p>
*cupsManualCopies: true
</pre>
<h3><span class='info'>CUPS 1.4</span><a name='cupsMarkerName'>cupsMarkerName</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsMarkerName'>cupsMarkerName</a></h3>
<p class='summary'>*cupsMarkerName/Name Text: ""</p>
@@ -1445,7 +1445,7 @@ generated by the driver to human readable text.</p>
*cupsMarkerName cyanToner/Cyan Toner: ""
</pre>
<h3><span class='info'>CUPS 1.4</span><a name='cupsMarkerNotice'>cupsMarkerNotice</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsMarkerNotice'>cupsMarkerNotice</a></h3>
<p class='summary'>*cupsMarkerNotice: "disclaimer text"</p>
@@ -1474,7 +1474,7 @@ the output for a specific model of printer.</p>
*cupsModelNumber: 1234
</pre>
<h3><span class='info'>CUPS 1.3</span><a name='cupsPJLCharset'>cupsPJLCharset</a></h3>
<h3><span class='info'>CUPS 1.3/Mac OS X 10.5</span><a name='cupsPJLCharset'>cupsPJLCharset</a></h3>
<p class='summary'>*cupsPJLCharset: "ISO character set name"</p>
@@ -1489,7 +1489,7 @@ assumed.</p>
*cupsPJLCharset: "UTF-8"
</pre>
<h3><span class='info'>CUPS 1.4</span><a name='cupsPJLDisplay'>cupsPJLDisplay</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsPJLDisplay'>cupsPJLDisplay</a></h3>
<p class='summary'>*cupsPJLDisplay: "what"</p>
@@ -1508,7 +1508,7 @@ to use "@PJL RDYMSG DISPLAY". The default is "job".</p>
*cupsPJLDisplay: "none"
</pre>
<h3><span class='info'>CUPS 1.2</span><a name='cupsPortMonitor'>cupsPortMonitor</a></h3>
<h3><span class='info'>CUPS 1.2/Mac OS X 10.5</span><a name='cupsPortMonitor'>cupsPortMonitor</a></h3>
<p class='summary'>*cupsPortMonitor urischeme/Descriptive Text: "port monitor"</p>
@@ -1540,7 +1540,7 @@ to disable the port monitor for the given URI scheme.</p>
*cupsPortMonitor usb/USB Status Monitor: "epson-usb"
</pre>
<h3><span class='info'>CUPS 1.3</span><a name='cupsPreFilter'>cupsPreFilter</a></h3>
<h3><span class='info'>CUPS 1.3/Mac OS X 10.5</span><a name='cupsPreFilter'>cupsPreFilter</a></h3>
<p class='summary'>*cupsPreFilter: "source/type cost program"</p>
@@ -1558,7 +1558,7 @@ before the filter that accepts the given MIME type.</p>
*cupsPreFilter: "image/png 0 mypngprefilter"
</pre>
<h3><span class='info'>CUPS 1.4</span><a name='cupsSNMPSupplies'>cupsSNMPSupplies</a></h3>
<h3><span class='info'>CUPS 1.4/Mac OS X 10.6</span><a name='cupsSNMPSupplies'>cupsSNMPSupplies</a></h3>
<p class='summary'>*cupsSNMPSupplies: boolean</p>
@@ -1863,7 +1863,7 @@ the device.</p>
<h2 class='title'><a name='HISTORY'>Change History</a></h2>
<h3>Changes in CUPS 1.4</a></h3>
<h3>Changes in CUPS 1.4</h3>
<ul>
@@ -1898,7 +1898,7 @@ the device.</p>
</ul>
<h3>Changes in CUPS 1.3.1</a></h3>
<h3>Changes in CUPS 1.3.1</h3>
<ul>
@@ -1913,7 +1913,7 @@ the device.</p>
</ul>
<h3>Changes in CUPS 1.3</a></h3>
<h3>Changes in CUPS 1.3</h3>
<ul>
@@ -1932,7 +1932,7 @@ the device.</p>
</ul>
<h3>Changes in CUPS 1.2.8</a></h3>
<h3>Changes in CUPS 1.2.8</h3>
<ul>
@@ -1941,7 +1941,7 @@ the device.</p>
</ul>
<h3>Changes in CUPS 1.2</a></h3>
<h3>Changes in CUPS 1.2</h3>
<ul>
@@ -1966,7 +1966,7 @@ the device.</p>
</ul>
<h3>Changes in CUPS 1.1</a></h3>
<h3>Changes in CUPS 1.1</h3>
<ul>
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 41 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 75 KiB

Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff

Antes

Largura:  |  Altura:  |  Tamanho: 37 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 46 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 146 KiB

+2 -1
Ver Arquivo
@@ -164,8 +164,9 @@ install-libs: $(INSTALLSTATIC)
installstatic:
$(INSTALL_DIR) -m 755 $(LIBDIR)
$(INSTALL_LIB) libcupsdriver.a $(LIBDIR)
$(INSTALL_LIB) -m 755 libcupsdriver.a $(LIBDIR)
$(RANLIB) $(LIBDIR)/libcupsdriver.a
$(CHMOD) 555 $(LIBDIR)/libcupsdriver.a
#
+3 -2
Ver Arquivo
@@ -164,8 +164,9 @@ install-libs: $(INSTALLSTATIC) $(INSTALL32) $(INSTALL64)
installstatic:
$(INSTALL_DIR) -m 755 $(LIBDIR)
$(INSTALL_LIB) libcupsimage.a $(LIBDIR);
$(RANLIB) $(LIBDIR)/libcupsimage.a;
$(INSTALL_LIB) -m 755 libcupsimage.a $(LIBDIR)
$(RANLIB) $(LIBDIR)/libcupsimage.a
$(CHMOD) 555 $(LIBDIR)/libcupsimage.a
install32bit:
$(INSTALL_DIR) -m 755 $(LIB32DIR)
+1 -1
Ver Arquivo
@@ -593,7 +593,7 @@ write_banner(banner_file_t *banner, /* I - Banner file */
printf("%.1f %.1f translate\n", PageLeft, PageBottom);
else
printf("%.1f %.1f translate\n", PageWidth - PageRight,
PageLength - PageRight);
PageLength - PageTop);
puts("0 setgray");
y = info_top;
+1 -1
Ver Arquivo
@@ -139,7 +139,7 @@ _cupsRasterClearError(void)
*
* If there are no recent errors, NULL is returned.
*
* @since CUPS 1.3@
* @since CUPS 1.3/Mac OS X 10.5@
*/
const char * /* O - Last error */
+1 -1
Ver Arquivo
@@ -144,7 +144,7 @@ ParseCommand(FILE *fp, /* I - File to read from */
if (!strcasecmp(name, "LB"))
{
bufptr = buf;
while ((ch = getc(fp)) != StringTerminator)
while ((ch = getc(fp)) != StringTerminator && ch != EOF)
if (bufptr < (buf + sizeof(buf) - 1))
*bufptr++ = ch;
*bufptr = '\0';
+5 -1
Ver Arquivo
@@ -29,7 +29,11 @@
# include <cups/string.h>
# include <stdlib.h>
# include <string.h>
# include <unistd.h>
# ifdef WIN32
# include <io.h>
# else
# include <unistd.h>
# endif /* WIN32 */
# include <errno.h>
# include <math.h>
+2 -4
Ver Arquivo
@@ -241,8 +241,7 @@ main(int argc, /* I - Number of command-line arguments */
* Child process for pstoraster... Assign new pipe input to pstoraster...
*/
close(0);
dup(mypipes[0]);
dup2(mypipes[0], 0);
close(mypipes[0]);
close(mypipes[1]);
@@ -265,8 +264,7 @@ main(int argc, /* I - Number of command-line arguments */
* Update stdout so it points at the new pstoraster...
*/
close(1);
dup(mypipes[1]);
dup2(mypipes[1], 1);
close(mypipes[0]);
close(mypipes[1]);
+12
Ver Arquivo
@@ -204,6 +204,15 @@ cupsRasterInterpretPPD(
strcpy(h->cupsPageSizeName, "Letter");
#ifdef __APPLE__
/*
* cupsInteger0 is also used for the total page count on Mac OS X; set an
* uncommon default value so we can tell if the driver is using cupsInteger0.
*/
h->cupsInteger[0] = 0x80000000;
#endif /* __APPLE__ */
/*
* Apply patches and options to the page header...
*/
@@ -985,6 +994,9 @@ scan_ps(_cups_ps_stack_t *st, /* I - Stack */
*/
for (cur ++; *cur && *cur != '\n' && *cur != '\r'; cur ++);
if (!*cur)
cur --;
}
else if (!isspace(*cur & 255))
break;

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais