Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 9bf949fa58 |
@@ -3,12 +3,6 @@ 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
|
||||
|
||||
+1
-176
@@ -1,181 +1,6 @@
|
||||
CHANGES.txt - 2010-03-30
|
||||
CHANGES.txt - 2009-06-08
|
||||
------------------------
|
||||
|
||||
CHANGES IN CUPS V1.4.3
|
||||
|
||||
- SECURITY: The scheduler could try responding on a closed client
|
||||
connection, leading to a crash (STR #3200)
|
||||
- SECURITY: The lppasswd program allowed the localization files to be
|
||||
overridden when running in setuid mode (STR #3482)
|
||||
- Localization updates (STR #3352, STR #3409, STR #3422, STR #3452,
|
||||
STR #3473, STR #3502)
|
||||
- Documentation updates (STR #3451, STR #3504)
|
||||
- The IPP backend now sets the printer-state-message to "Ready to
|
||||
print." at the end of a successful job (STR #3460)
|
||||
- The PPD compiler did not correctly add the manufacturer to the output
|
||||
filename when using the "-m" option (STR #3469)
|
||||
- The IPP backend did not handle authentication properly for the Get-
|
||||
Printer-Attributes operation (STR 3458)
|
||||
- Getting SNMP values larger than 127 bytes did not work.
|
||||
- IPP conformance: Get-Jobs has a default value for requested-attributes
|
||||
(STR #3383)
|
||||
- cupsPrintFiles() did not report all errors (STR #3449)
|
||||
- cupsAddDest() could read freed memory (STR #3448)
|
||||
- The DBUS notifier did not build (STR #3447)
|
||||
- The scheduler would crash when an active printer was deleted.
|
||||
- The snmp backend did not work with some printers (STR #3413)
|
||||
- The web interface did not show the conflicting values when setting
|
||||
options (STR #3440)
|
||||
- Setting options in the web interface did not always work (STR #3439)
|
||||
- The scheduler did not use the Get-Job-Attributes policy for a printer
|
||||
(STR #3431)
|
||||
- The scheduler added two job-name attributes to each job object
|
||||
(STR #3428)
|
||||
- CSS files would not print (STR #3442)
|
||||
- The scheduler did not clean out completed jobs when PreserveJobHistory
|
||||
was turned off (STR #3425)
|
||||
- The web interface did not show completed jobs for a printer
|
||||
(STR #3436)
|
||||
- Authenticated printing did not always work when printing directly to
|
||||
a remote server (STR #3435)
|
||||
- The USB backend did not work on Solaris (STR #3423)
|
||||
- cupstestppd didn't catch problems with JobPatchFile definitions
|
||||
(STR #3421)
|
||||
- The socket backend could crash if a SNMP string had a negative length.
|
||||
- Fixed some termination issues with the USB backend on Mac OS X.
|
||||
- The side-channel APIs did not handle interrupts properly.
|
||||
- The network backends incorrectly cleared the media-empty-warning
|
||||
state.
|
||||
- The web interface did not allow users to successfully add serial
|
||||
printers (STR #3391)
|
||||
- cupsTempFd() did not work in some situations (STR #3382)
|
||||
- Some C API headers were missing C++ wrapper logic.
|
||||
- The PPD compiler did not localize single-language PPD options properly
|
||||
(STR #3386)
|
||||
- Modifying a printer from the web interface sometimes caused the wrong
|
||||
driver to be selected (STR #3418)
|
||||
- The scheduler did not handle out-of-memory conditions properly when
|
||||
loading a job (STR #3407)
|
||||
- When adding printers from the web interface, the dynamic updates of
|
||||
the device list made it hard to pick a device (STR #3406)
|
||||
- Fixed a typo in the web interface admin page template (STR 3403)
|
||||
- The web interface did not preserve the "printer is shared" state when
|
||||
modifying a printer (STR #3390)
|
||||
- The PPD compiler incorrectly inserted translations of empty strings
|
||||
(STR #3411)
|
||||
- The scheduler did not reset the SIGPIPE handler of child processes
|
||||
(STR #3399)
|
||||
- cupsGetNamedDest() incorrectly returned the default printer if the
|
||||
named printer did not exist (STR #3397)
|
||||
- Fixed a GNU TLS error handling bug (STR #3381)
|
||||
|
||||
|
||||
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
|
||||
|
||||
+2
-4
@@ -1,4 +1,4 @@
|
||||
CREDITS.txt - 2010-03-13
|
||||
CREDITS.txt - 2008-12-08
|
||||
------------------------
|
||||
|
||||
Few projects are completed by one person, and CUPS is no exception. We'd
|
||||
@@ -17,7 +17,6 @@ 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.
|
||||
@@ -29,7 +28,6 @@ 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.
|
||||
@@ -40,7 +38,7 @@ like to thank the following individuals for their contributions:
|
||||
Opher Shachar - Hebrew localization.
|
||||
Stuart Stevens - HP JetDirect IPP information.
|
||||
Andrea Suatoni - IRIX desktop integration and testing.
|
||||
Teppo Turliainen - Finnish localization.
|
||||
Teppo Turlianen - Finnish localization.
|
||||
Tim Waugh - Lots of patches, testing, and Linux
|
||||
integration.
|
||||
Yugami - LDAP browsing support.
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
INSTALL - CUPS v1.4.3 - 2009-12-15
|
||||
----------------------------------
|
||||
INSTALL - CUPS v1.4rc1 - 2009-05-22
|
||||
-----------------------------------
|
||||
|
||||
This file describes how to compile and install CUPS from source code. For more
|
||||
information on CUPS see the file called "README.txt". A complete change log can
|
||||
@@ -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
|
||||
autoconf -f
|
||||
|
||||
|
||||
CONFIGURATION
|
||||
|
||||
+4
-7
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Top-level Makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 2007-2010 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
|
||||
@@ -139,15 +139,13 @@ depend:
|
||||
|
||||
#
|
||||
# Run the clang.llvm.org static code analysis tool on the C sources.
|
||||
# (at least checker-231 is required for scan-build to work this way)
|
||||
#
|
||||
|
||||
.PHONY: clang clang-changes
|
||||
.PHONY: clang
|
||||
clang:
|
||||
$(RM) -r clang
|
||||
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) clean all
|
||||
clang-changes:
|
||||
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) all
|
||||
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) \
|
||||
CC=ccc-analyzer CXX=ccc-analyzer clean all
|
||||
|
||||
|
||||
#
|
||||
@@ -394,7 +392,6 @@ 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 \
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
README - CUPS v1.4.3 - 2009-12-15
|
||||
---------------------------------
|
||||
README - CUPS v1.4rc1 - 2009-05-22
|
||||
----------------------------------
|
||||
|
||||
Looking for compile instructions? Read the file "INSTALL.txt"
|
||||
instead...
|
||||
|
||||
@@ -34,26 +34,6 @@
|
||||
# include <cups/string.h>
|
||||
# include <signal.h>
|
||||
|
||||
# ifdef __linux
|
||||
# include <sys/ioctl.h>
|
||||
# include <linux/lp.h>
|
||||
# define IOCNR_GET_DEVICE_ID 1
|
||||
# define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
|
||||
# include <linux/parport.h>
|
||||
# include <linux/ppdev.h>
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# endif /* __linux */
|
||||
|
||||
# ifdef __sun
|
||||
# ifdef __sparc
|
||||
# include <sys/ecppio.h>
|
||||
# else
|
||||
# include <sys/ioccom.h>
|
||||
# include <sys/ecppsys.h>
|
||||
# endif /* __sparc */
|
||||
# endif /* __sun */
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
@@ -296,17 +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 int backendNetworkSideCB(int print_fd, int device_fd,
|
||||
extern void 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,
|
||||
int update_state,
|
||||
int (*side_cb)(int print_fd,
|
||||
int device_fd,
|
||||
int snmp_fd,
|
||||
http_addr_t *addr,
|
||||
int use_bc));
|
||||
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));
|
||||
extern int backendSNMPSupplies(int snmp_fd, http_addr_t *addr,
|
||||
int *page_count,
|
||||
int *printer_state);
|
||||
|
||||
+2
-2
@@ -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 = sigterm_handler;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, sigterm_handler);
|
||||
#else
|
||||
signal(SIGTERM, sigterm_handler);
|
||||
#endif /* HAVE_SIGSET */
|
||||
|
||||
+24
-19
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IEEE-1284 support functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2009 by Apple Inc.
|
||||
* Copyright 2007-2008 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -27,6 +27,26 @@
|
||||
|
||||
#include "backend-private.h"
|
||||
|
||||
#ifdef __linux
|
||||
# include <sys/ioctl.h>
|
||||
# include <linux/lp.h>
|
||||
# define IOCNR_GET_DEVICE_ID 1
|
||||
# define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
|
||||
# include <linux/parport.h>
|
||||
# include <linux/ppdev.h>
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
#endif /* __linux */
|
||||
|
||||
#ifdef __sun
|
||||
# ifdef __sparc
|
||||
# include <sys/ecppio.h>
|
||||
# else
|
||||
# include <sys/ioccom.h>
|
||||
# include <sys/ecppsys.h>
|
||||
# endif /* __sparc */
|
||||
#endif /* __sun */
|
||||
|
||||
|
||||
/*
|
||||
* 'backendGetDeviceID()' - Get the IEEE-1284 device ID string and
|
||||
@@ -176,19 +196,12 @@ backendGetDeviceID(
|
||||
* and then limit the length to the size of our buffer...
|
||||
*/
|
||||
|
||||
if (length > device_id_size)
|
||||
if (length > (device_id_size - 2))
|
||||
length = (((unsigned)device_id[1] & 255) << 8) +
|
||||
((unsigned)device_id[0] & 255);
|
||||
|
||||
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;
|
||||
if (length > (device_id_size - 2))
|
||||
length = device_id_size - 2;
|
||||
|
||||
/*
|
||||
* Copy the device ID text to the beginning of the buffer and
|
||||
@@ -293,14 +306,6 @@ 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.
|
||||
|
||||
+57
-77
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IPP backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2010 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
|
||||
@@ -45,8 +45,6 @@
|
||||
|
||||
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__ */
|
||||
@@ -93,7 +91,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 scheme[255], /* Scheme in URI */
|
||||
char method[255], /* Method in URI */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info */
|
||||
resource[1024], /* Resource info (printer name) */
|
||||
@@ -238,14 +236,21 @@ main(int argc, /* I - Number of command-line args */
|
||||
if ((device_uri = cupsBackendDeviceURI(argv)) == NULL)
|
||||
return (CUPS_BACKEND_FAILED);
|
||||
|
||||
httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme),
|
||||
username, sizeof(username), hostname, sizeof(hostname), &port,
|
||||
resource, sizeof(resource));
|
||||
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);
|
||||
}
|
||||
|
||||
if (!port)
|
||||
port = IPP_PORT; /* Default to port 631 */
|
||||
|
||||
if (!strcmp(scheme, "https"))
|
||||
if (!strcmp(method, "https"))
|
||||
cupsSetEncryption(HTTP_ENCRYPT_ALWAYS);
|
||||
else
|
||||
cupsSetEncryption(HTTP_ENCRYPT_IF_REQUESTED);
|
||||
@@ -411,12 +416,11 @@ 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"),
|
||||
@@ -434,8 +438,23 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
_cupsLangPuts(stderr, _("INFO: Copying print data...\n"));
|
||||
|
||||
tbytes = backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0, 0,
|
||||
backendNetworkSideCB);
|
||||
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));
|
||||
}
|
||||
|
||||
if (snmp_fd >= 0)
|
||||
_cupsSNMPClose(snmp_fd);
|
||||
@@ -525,7 +544,8 @@ 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)
|
||||
@@ -641,8 +661,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
* might contain username:password information...
|
||||
*/
|
||||
|
||||
httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), scheme, NULL, hostname,
|
||||
port, resource);
|
||||
snprintf(uri, sizeof(uri), "%s://%s:%d%s", method, hostname, port, resource);
|
||||
|
||||
/*
|
||||
* First validate the destination and see if the device supports multiple
|
||||
@@ -738,15 +757,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
return (CUPS_BACKEND_STOP);
|
||||
}
|
||||
else if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
|
||||
{
|
||||
if (!strncmp(httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE),
|
||||
"Negotiate", 9))
|
||||
auth_info_required = "negotiate";
|
||||
|
||||
fprintf(stderr, "ATTR: auth-info-required=%s\n", auth_info_required);
|
||||
return (CUPS_BACKEND_AUTH_REQUIRED);
|
||||
}
|
||||
else
|
||||
{
|
||||
_cupsLangPrintf(stderr,
|
||||
@@ -1060,21 +1070,16 @@ 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 || ipp_status == IPP_FORBIDDEN)
|
||||
if (ipp_status == IPP_NOT_AUTHORIZED)
|
||||
{
|
||||
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))
|
||||
auth_info_required = "negotiate";
|
||||
fputs("ATTR: auth-info-required=negotiate\n", stderr);
|
||||
else
|
||||
fputs("ATTR: auth-info-required=username,password\n", stderr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1255,19 +1260,6 @@ 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);
|
||||
@@ -1312,15 +1304,6 @@ 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...
|
||||
*/
|
||||
@@ -1353,19 +1336,12 @@ main(int argc, /* I - Number of command-line args */
|
||||
* Return the queue status...
|
||||
*/
|
||||
|
||||
fprintf(stderr, "ATTR: auth-info-required=%s\n", auth_info_required);
|
||||
|
||||
if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
|
||||
if (ipp_status == IPP_NOT_AUTHORIZED)
|
||||
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
|
||||
{
|
||||
_cupsLangPuts(stderr, _("INFO: Ready to print.\n"));
|
||||
return (CUPS_BACKEND_OK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1562,12 +1538,6 @@ 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 ++;
|
||||
@@ -1577,10 +1547,23 @@ password_cb(const char *prompt) /* I - Prompt (not used) */
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Give up after 3 tries or if we don't have a password to begin with...
|
||||
* If there is no password set in the device URI, return the
|
||||
* "authentication required" exit code...
|
||||
*/
|
||||
|
||||
return (NULL);
|
||||
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 */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1843,11 +1826,8 @@ run_pictwps_filter(char **argv, /* I - Command-line arguments */
|
||||
* Change to an unpriviledged user...
|
||||
*/
|
||||
|
||||
if (setgid(fileinfo.st_gid))
|
||||
return (errno);
|
||||
|
||||
if (setuid(fileinfo.st_uid))
|
||||
return (errno);
|
||||
setgid(fileinfo.st_gid);
|
||||
setuid(fileinfo.st_uid);
|
||||
}
|
||||
|
||||
execlp("pictwpstops", printer, argv[1], argv[2], argv[3], argv[4], argv[5],
|
||||
|
||||
+23
-11
@@ -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 scheme[255], /* Scheme in URI */
|
||||
char method[255], /* Method in URI */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info */
|
||||
resource[1024], /* Resource info (printer name) */
|
||||
@@ -193,8 +193,9 @@ 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, scheme, sizeof(scheme),
|
||||
username, sizeof(username), hostname, sizeof(hostname), &port,
|
||||
httpSeparateURI(HTTP_URI_CODING_ALL, device_uri,
|
||||
method, sizeof(method), username, sizeof(username),
|
||||
hostname, sizeof(hostname), &port,
|
||||
resource, sizeof(resource));
|
||||
|
||||
if (!port)
|
||||
@@ -425,11 +426,10 @@ 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,8 +447,19 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
_cupsLangPuts(stderr, _("INFO: Copying print data...\n"));
|
||||
|
||||
backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0, 0,
|
||||
backendNetworkSideCB);
|
||||
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));
|
||||
}
|
||||
|
||||
if (snmp_fd >= 0)
|
||||
_cupsSNMPClose(snmp_fd);
|
||||
@@ -684,7 +695,6 @@ 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)
|
||||
@@ -711,8 +721,9 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
* First try to reserve a port for this connection...
|
||||
*/
|
||||
|
||||
fprintf(stderr, "DEBUG: Connecting to %s:%d for printer %s\n", hostname,
|
||||
port, printer);
|
||||
fputs("STATE: +connecting-to-device\n", stderr);
|
||||
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,
|
||||
@@ -798,6 +809,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
|
||||
error = errno;
|
||||
close(fd);
|
||||
fd = -1;
|
||||
|
||||
if (addr->next)
|
||||
continue;
|
||||
|
||||
+8
-9
@@ -61,7 +61,7 @@ backendCheckSideChannel(
|
||||
* 'backendNetworkSideCB()' - Handle common network side-channel commands.
|
||||
*/
|
||||
|
||||
int /* O - -1 on error, 0 on success */
|
||||
void
|
||||
backendNetworkSideCB(
|
||||
int print_fd, /* I - Print file or -1 */
|
||||
int device_fd, /* I - Device file or -1 */
|
||||
@@ -79,7 +79,10 @@ backendNetworkSideCB(
|
||||
datalen = sizeof(data);
|
||||
|
||||
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
|
||||
return (-1);
|
||||
{
|
||||
_cupsLangPuts(stderr, _("WARNING: Failed to read side-channel request!\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (command)
|
||||
{
|
||||
@@ -170,13 +173,9 @@ backendNetworkSideCB(
|
||||
|
||||
case CUPS_ASN1_BIT_STRING :
|
||||
case CUPS_ASN1_OCTET_STRING :
|
||||
if (packet.object_value.string.num_bytes < 0)
|
||||
i = 0;
|
||||
else if (packet.object_value.string.num_bytes <
|
||||
(sizeof(data) - (dataptr - data)))
|
||||
i = (int)(sizeof(data) - (dataptr - data));
|
||||
if (packet.object_value.string.num_bytes < i)
|
||||
i = packet.object_value.string.num_bytes;
|
||||
else
|
||||
i = (int)(sizeof(data) - (dataptr - data));
|
||||
|
||||
memcpy(dataptr, packet.object_value.string.bytes, i);
|
||||
|
||||
@@ -285,7 +284,7 @@ backendNetworkSideCB(
|
||||
break;
|
||||
}
|
||||
|
||||
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
|
||||
cupsSideChannelWrite(command, status, data, datalen, 1.0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+10
-7
@@ -1278,7 +1278,7 @@ int papCancelRequest(int sockfd, u_short tid)
|
||||
* 'sidechannel_request()' - Handle side-channel requests.
|
||||
*/
|
||||
|
||||
static int
|
||||
static void
|
||||
sidechannel_request()
|
||||
{
|
||||
cups_sc_command_t command; /* Request command */
|
||||
@@ -1289,29 +1289,32 @@ sidechannel_request()
|
||||
datalen = sizeof(data);
|
||||
|
||||
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
|
||||
return (-1);
|
||||
{
|
||||
fputs(_("WARNING: Failed to read side-channel request!\n"), stderr);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (command)
|
||||
{
|
||||
case CUPS_SC_CMD_GET_BIDI: /* Is the connection bidirectional? */
|
||||
data[0] = 1;
|
||||
return (cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0));
|
||||
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;
|
||||
return (cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0));
|
||||
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:
|
||||
return (cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED,
|
||||
NULL, 0, 1.0));
|
||||
cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED,
|
||||
NULL, 0, 1.0);
|
||||
break;
|
||||
}
|
||||
return (0);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
*/
|
||||
|
||||
static void list_devices(void);
|
||||
static int side_cb(int print_fd, int device_fd, int snmp_fd,
|
||||
static void side_cb(int print_fd, int device_fd, int snmp_fd,
|
||||
http_addr_t *addr, int use_bc);
|
||||
|
||||
|
||||
@@ -284,7 +284,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
lseek(print_fd, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, side_cb);
|
||||
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, side_cb);
|
||||
|
||||
if (print_fd != 0 && tbytes >= 0)
|
||||
_cupsLangPrintf(stderr,
|
||||
@@ -615,7 +615,7 @@ list_devices(void)
|
||||
* 'side_cb()' - Handle side-channel requests...
|
||||
*/
|
||||
|
||||
static int /* O - 0 on success, -1 on error */
|
||||
static void
|
||||
side_cb(int print_fd, /* I - Print file */
|
||||
int device_fd, /* I - Device file */
|
||||
int snmp_fd, /* I - SNMP socket (unused) */
|
||||
@@ -634,7 +634,10 @@ side_cb(int print_fd, /* I - Print file */
|
||||
datalen = sizeof(data);
|
||||
|
||||
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
|
||||
return (-1);
|
||||
{
|
||||
_cupsLangPuts(stderr, _("WARNING: Failed to read side-channel request!\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (command)
|
||||
{
|
||||
@@ -677,7 +680,7 @@ side_cb(int print_fd, /* I - Print file */
|
||||
break;
|
||||
}
|
||||
|
||||
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
|
||||
cupsSideChannelWrite(command, status, data, datalen, 1.0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+7
-17
@@ -147,8 +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? */
|
||||
int update_state, /* I - Update printer-state-reasons? */
|
||||
int (*side_cb)(int, int, int, http_addr_t *, int))
|
||||
void (*side_cb)(int, int, int, http_addr_t *, int))
|
||||
/* I - Side-channel callback */
|
||||
{
|
||||
int nfds; /* Maximum file descriptor value + 1 */
|
||||
@@ -197,14 +196,6 @@ 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()...
|
||||
@@ -246,7 +237,7 @@ backendRunLoop(
|
||||
* Pause printing to clear any pending errors...
|
||||
*/
|
||||
|
||||
if (errno == ENXIO && offline != 1 && update_state)
|
||||
if (errno == ENXIO && offline != 1)
|
||||
{
|
||||
fputs("STATE: +offline-report\n", stderr);
|
||||
_cupsLangPuts(stderr, _("INFO: Printer is currently offline.\n"));
|
||||
@@ -275,8 +266,7 @@ backendRunLoop(
|
||||
* loop since it may have read from print_fd...
|
||||
*/
|
||||
|
||||
if ((*side_cb)(print_fd, device_fd, snmp_fd, addr, use_bc))
|
||||
side_cb = NULL;
|
||||
(*side_cb)(print_fd, device_fd, snmp_fd, addr, use_bc);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -352,7 +342,7 @@ backendRunLoop(
|
||||
|
||||
if (errno == ENOSPC)
|
||||
{
|
||||
if (paperout != 1 && update_state)
|
||||
if (paperout != 1)
|
||||
{
|
||||
fputs("STATE: +media-empty-warning\n", stderr);
|
||||
_cupsLangPuts(stderr, _("ERROR: Out of paper!\n"));
|
||||
@@ -361,7 +351,7 @@ backendRunLoop(
|
||||
}
|
||||
else if (errno == ENXIO)
|
||||
{
|
||||
if (offline != 1 && update_state)
|
||||
if (offline != 1)
|
||||
{
|
||||
fputs("STATE: +offline-report\n", stderr);
|
||||
_cupsLangPuts(stderr, _("INFO: Printer is currently off-line.\n"));
|
||||
@@ -377,13 +367,13 @@ backendRunLoop(
|
||||
}
|
||||
else
|
||||
{
|
||||
if (paperout && update_state)
|
||||
if (paperout)
|
||||
{
|
||||
fputs("STATE: -media-empty-warning\n", stderr);
|
||||
paperout = 0;
|
||||
}
|
||||
|
||||
if (offline && update_state)
|
||||
if (offline)
|
||||
{
|
||||
fputs("STATE: -offline-report\n", stderr);
|
||||
_cupsLangPuts(stderr, _("INFO: Printer is now online.\n"));
|
||||
|
||||
+11
-9
@@ -84,7 +84,7 @@
|
||||
*/
|
||||
|
||||
static void list_devices(void);
|
||||
static int side_cb(int print_fd, int device_fd, int use_bc);
|
||||
static void side_cb(int print_fd, int device_fd, int use_bc);
|
||||
|
||||
|
||||
/*
|
||||
@@ -109,8 +109,7 @@ 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 side_eof = 0, /* Saw EOF on side-channel? */
|
||||
print_fd, /* Print file */
|
||||
int print_fd, /* Print file */
|
||||
device_fd; /* Serial device */
|
||||
int nfds; /* Maximum file descriptor value + 1 */
|
||||
fd_set input, /* Input set for reading */
|
||||
@@ -559,7 +558,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 && !side_eof)
|
||||
if (!print_bytes)
|
||||
FD_SET(CUPS_SC_FD, &input);
|
||||
|
||||
FD_ZERO(&output);
|
||||
@@ -580,8 +579,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* loop since it may have read from print_fd...
|
||||
*/
|
||||
|
||||
if (side_cb(print_fd, device_fd, 1))
|
||||
side_eof = 1;
|
||||
side_cb(print_fd, device_fd, 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1280,7 +1278,7 @@ list_devices(void)
|
||||
* 'side_cb()' - Handle side-channel requests...
|
||||
*/
|
||||
|
||||
static int /* O - 0 on success, -1 on error */
|
||||
static void
|
||||
side_cb(int print_fd, /* I - Print file */
|
||||
int device_fd, /* I - Device file */
|
||||
int use_bc) /* I - Using back-channel? */
|
||||
@@ -1294,7 +1292,11 @@ side_cb(int print_fd, /* I - Print file */
|
||||
datalen = sizeof(data);
|
||||
|
||||
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
|
||||
return (-1);
|
||||
{
|
||||
_cupsLangPuts(stderr,
|
||||
_("WARNING: Failed to read side-channel request!\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (command)
|
||||
{
|
||||
@@ -1321,7 +1323,7 @@ side_cb(int print_fd, /* I - Print file */
|
||||
break;
|
||||
}
|
||||
|
||||
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
|
||||
cupsSideChannelWrite(command, status, data, datalen, 1.0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -229,13 +229,8 @@ backendSNMPSupplies(
|
||||
packet.object_type != CUPS_ASN1_OCTET_STRING)
|
||||
return (-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 if (packet.object_value.string.num_bytes == 1)
|
||||
new_state = (packet.object_value.string.bytes[0] << 8);
|
||||
else
|
||||
new_state = 0;
|
||||
new_state = (packet.object_value.string.bytes[0] << 8) |
|
||||
packet.object_value.string.bytes[1];
|
||||
|
||||
if (current_state < 0)
|
||||
change_state = 0xffff;
|
||||
|
||||
+3
-5
@@ -999,7 +999,7 @@ read_snmp_response(int fd) /* I - SNMP socket file descriptor */
|
||||
DEVICE_PRODUCT, LexmarkProductOID2);
|
||||
_cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
|
||||
packet.community, CUPS_ASN1_GET_REQUEST,
|
||||
DEVICE_ID, LexmarkDeviceIdOID);
|
||||
DEVICE_URI, LexmarkDeviceIdOID);
|
||||
_cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
|
||||
packet.community, CUPS_ASN1_GET_REQUEST,
|
||||
DEVICE_PRODUCT, XeroxProductOID);
|
||||
@@ -1054,9 +1054,7 @@ read_snmp_response(int fd) /* I - SNMP socket file descriptor */
|
||||
break;
|
||||
|
||||
case DEVICE_ID :
|
||||
if (device && packet.object_type == CUPS_ASN1_OCTET_STRING &&
|
||||
(!device->id ||
|
||||
strlen(device->id) < packet.object_value.string.num_bytes))
|
||||
if (device && packet.object_type == CUPS_ASN1_OCTET_STRING)
|
||||
{
|
||||
/*
|
||||
* Update an existing cache entry...
|
||||
@@ -1109,7 +1107,7 @@ read_snmp_response(int fd) /* I - SNMP socket file descriptor */
|
||||
|
||||
case DEVICE_URI :
|
||||
if (device && packet.object_type == CUPS_ASN1_OCTET_STRING &&
|
||||
!device->uri && packet.object_value.string.num_bytes > 0)
|
||||
!device->uri)
|
||||
{
|
||||
/*
|
||||
* Update an existing cache entry...
|
||||
|
||||
+13
-9
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* AppSocket backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2009 by Apple Inc.
|
||||
* Copyright 2007-2008 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 scheme[255], /* Scheme in URI */
|
||||
char method[255], /* Method in URI */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info (not used) */
|
||||
resource[1024], /* Resource info (not used) */
|
||||
@@ -168,8 +168,9 @@ 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, scheme, sizeof(scheme),
|
||||
username, sizeof(username), hostname, sizeof(hostname), &port,
|
||||
httpSeparateURI(HTTP_URI_CODING_ALL, device_uri,
|
||||
method, sizeof(method), username, sizeof(username),
|
||||
hostname, sizeof(hostname), &port,
|
||||
resource, sizeof(resource));
|
||||
|
||||
if (port == 0)
|
||||
@@ -260,7 +261,6 @@ 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,9 +270,12 @@ 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)
|
||||
@@ -342,8 +345,9 @@ 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);
|
||||
@@ -393,7 +397,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
lseek(print_fd, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
tbytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addr->addr), 1, 0,
|
||||
tbytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addr->addr), 1,
|
||||
backendNetworkSideCB);
|
||||
|
||||
if (print_fd != 0 && tbytes >= 0)
|
||||
|
||||
+70
-83
@@ -104,14 +104,6 @@
|
||||
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
|
||||
@@ -240,9 +232,6 @@ 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 */
|
||||
@@ -292,8 +281,9 @@ 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 */
|
||||
static void sigterm_handler(int sig); /* SIGTERM handler */
|
||||
#endif /* __i386__ || __x86_64__ */
|
||||
static int job_canceled = 0; /* Was the job canceled? */
|
||||
static void sigterm_handler(int sig); /* SIGTERM handler */
|
||||
|
||||
#ifdef PARSE_PS_ERRORS
|
||||
static const char *next_line (const char *buffer);
|
||||
@@ -328,7 +318,8 @@ print_device(const char *uri, /* I - Device URI */
|
||||
{
|
||||
char serial[1024]; /* Serial number buffer */
|
||||
OSStatus status; /* Function results */
|
||||
IOReturn iostatus; /* Current IO status */
|
||||
IOReturn iostatus, /* Current IO status */
|
||||
prev_iostatus = 0; /* Previous 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? */
|
||||
@@ -373,12 +364,12 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
if (!g.make || !g.model)
|
||||
{
|
||||
_cupsLangPuts(stderr, _("ERROR: Fatal USB error\n"));
|
||||
_cupsLangPuts(stderr, _("ERROR: Fatal USB error!\n"));
|
||||
|
||||
if (!g.make)
|
||||
fputs("DEBUG: USB make string is NULL\n", stderr);
|
||||
fputs("DEBUG: USB make string is NULL!\n", stderr);
|
||||
if (!g.model)
|
||||
fputs("DEBUG: USB model string is NULL\n", stderr);
|
||||
fputs("DEBUG: USB model string is NULL!\n", stderr);
|
||||
|
||||
return (CUPS_BACKEND_STOP);
|
||||
}
|
||||
@@ -431,7 +422,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
strlcpy(print_buffer, "USB class driver", sizeof(print_buffer));
|
||||
|
||||
fputs("STATE: +apple-missing-usbclassdriver-error\n", stderr);
|
||||
_cupsLangPuts(stderr, _("ERROR: Fatal USB error\n"));
|
||||
_cupsLangPuts(stderr, _("ERROR: Fatal USB error!\n"));
|
||||
fprintf(stderr, "DEBUG: Could not load %s\n", print_buffer);
|
||||
|
||||
if (driverBundlePath)
|
||||
@@ -460,9 +451,9 @@ print_device(const char *uri, /* I - Device URI */
|
||||
fputs("STATE: -connecting-to-device\n", stderr);
|
||||
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* Now that we are "connected" to the port, catch SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* current page... Only catch SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
@@ -474,7 +465,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
action.sa_handler = sigterm_handler;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
}
|
||||
|
||||
@@ -496,9 +487,8 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
if (pthread_create(&sidechannel_thread_id, NULL, sidechannel_thread, NULL))
|
||||
{
|
||||
_cupsLangPuts(stderr, _("ERROR: Fatal USB error\n"));
|
||||
fputs("DEBUG: Couldn't create side-channel thread\n", stderr);
|
||||
registry_close();
|
||||
_cupsLangPuts(stderr, _("ERROR: Fatal USB error!\n"));
|
||||
fputs("DEBUG: Couldn't create side-channel thread!\n", stderr);
|
||||
return (CUPS_BACKEND_STOP);
|
||||
}
|
||||
}
|
||||
@@ -515,9 +505,8 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
if (pthread_create(&read_thread_id, NULL, read_thread, NULL))
|
||||
{
|
||||
_cupsLangPuts(stderr, _("ERROR: Fatal USB error\n"));
|
||||
fputs("DEBUG: Couldn't create read thread\n", stderr);
|
||||
registry_close();
|
||||
_cupsLangPuts(stderr, _("ERROR: Fatal USB error!\n"));
|
||||
fputs("DEBUG: Couldn't create read thread!\n", stderr);
|
||||
return (CUPS_BACKEND_STOP);
|
||||
}
|
||||
|
||||
@@ -595,16 +584,14 @@ print_device(const char *uri, /* I - Device URI */
|
||||
if (errno == EINTR && total_bytes == 0)
|
||||
{
|
||||
fputs("DEBUG: Received an interrupt before any bytes were "
|
||||
"written, aborting\n", stderr);
|
||||
registry_close();
|
||||
"written, aborting!\n", stderr);
|
||||
return (CUPS_BACKEND_OK);
|
||||
}
|
||||
else if (errno != EAGAIN && errno != EINTR)
|
||||
{
|
||||
_cupsLangPuts(stderr, _("ERROR: Unable to read print data\n"));
|
||||
_cupsLangPuts(stderr, _("ERROR: Unable to read print data!\n"));
|
||||
perror("DEBUG: select");
|
||||
registry_close();
|
||||
return (CUPS_BACKEND_FAILED);
|
||||
return (CUPS_BACKEND_FAILED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -625,16 +612,7 @@ 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)
|
||||
{
|
||||
@@ -644,9 +622,8 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
if (errno != EAGAIN && errno != EINTR)
|
||||
{
|
||||
_cupsLangPuts(stderr, _("ERROR: Unable to read print data\n"));
|
||||
_cupsLangPuts(stderr, _("ERROR: Unable to read print data!\n"));
|
||||
perror("DEBUG: read");
|
||||
registry_close();
|
||||
return (CUPS_BACKEND_FAILED);
|
||||
}
|
||||
|
||||
@@ -669,7 +646,8 @@ 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);
|
||||
|
||||
/*
|
||||
@@ -679,41 +657,50 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
if (iostatus == kIOUSBTransactionTimeout)
|
||||
{
|
||||
fputs("DEBUG: Got USB transaction timeout during write\n", stderr);
|
||||
fputs("DEBUG: Got USB transaction timeout during write!\n", stderr);
|
||||
iostatus = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we've stalled, retry the write...
|
||||
* Ignore the first stall error we get since we try to clear any stalls
|
||||
* in the class driver...
|
||||
*/
|
||||
|
||||
else if (iostatus == kIOUSBPipeStalled)
|
||||
{
|
||||
fputs("DEBUG: Got USB pipe stalled during write\n", stderr);
|
||||
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);
|
||||
bytes = 0;
|
||||
|
||||
if (prev_iostatus != kIOUSBPipeStalled)
|
||||
{
|
||||
prev_iostatus = iostatus;
|
||||
iostatus = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Retry a write after an aborted write since we probably just got
|
||||
* SIGTERM (<rdar://problem/6860126>)...
|
||||
* Ignore the first "aborted" status we get, since we might have
|
||||
* received a signal (<rdar://problem/6860126>)...
|
||||
*/
|
||||
|
||||
else if (iostatus == kIOReturnAborted)
|
||||
{
|
||||
fputs("DEBUG: Got USB return aborted during write\n", stderr);
|
||||
fputs("DEBUG: Got 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 = 0;
|
||||
|
||||
bytes = g.print_bytes;
|
||||
iostatus = (*g.classdriver)->WritePipe(g.classdriver, (UInt8*)print_ptr, &bytes, 0);
|
||||
if (prev_iostatus != kIOReturnAborted)
|
||||
{
|
||||
prev_iostatus = iostatus;
|
||||
iostatus = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
prev_iostatus = iostatus;
|
||||
|
||||
if (iostatus || bytes < 0)
|
||||
{
|
||||
@@ -721,7 +708,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
* Write error - bail if we don't see an error we can retry...
|
||||
*/
|
||||
|
||||
_cupsLangPuts(stderr, _("ERROR: Unable to send print data\n"));
|
||||
_cupsLangPuts(stderr, _("ERROR: Unable to send print data!\n"));
|
||||
fprintf(stderr, "DEBUG: USB class driver WritePipe returned %x\n",
|
||||
iostatus);
|
||||
|
||||
@@ -729,7 +716,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n",
|
||||
err);
|
||||
|
||||
status = CUPS_BACKEND_FAILED;
|
||||
status = job_canceled ? CUPS_BACKEND_FAILED : CUPS_BACKEND_STOP;
|
||||
break;
|
||||
}
|
||||
else if (bytes > 0)
|
||||
@@ -902,11 +889,11 @@ static void *read_thread(void *reference)
|
||||
#endif
|
||||
}
|
||||
else if (readstatus == kIOUSBTransactionTimeout)
|
||||
fputs("DEBUG: Got USB transaction timeout during read\n", stderr);
|
||||
fputs("DEBUG: Got USB transaction timeout during write!\n", stderr);
|
||||
else if (readstatus == kIOUSBPipeStalled)
|
||||
fputs("DEBUG: Got USB pipe stalled during read\n", stderr);
|
||||
fputs("DEBUG: Got USB pipe stalled during read!\n", stderr);
|
||||
else if (readstatus == kIOReturnAborted)
|
||||
fputs("DEBUG: Got USB return aborted during read\n", stderr);
|
||||
fputs("DEBUG: Got return aborted during read!\n", stderr);
|
||||
|
||||
/*
|
||||
* Make sure this loop executes no more than once every 250 miliseconds...
|
||||
@@ -948,12 +935,7 @@ sidechannel_thread(void *reference)
|
||||
datalen = sizeof(data);
|
||||
|
||||
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
|
||||
{
|
||||
if (status == CUPS_SC_STATUS_TIMEOUT)
|
||||
continue;
|
||||
else
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
|
||||
switch (command)
|
||||
{
|
||||
@@ -1174,7 +1156,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);
|
||||
strlcat(uristr, optionsstr, sizeof(uristr));
|
||||
strncat(uristr, optionsstr, sizeof(uristr));
|
||||
|
||||
cupsBackendReport("direct", uristr, make_modelstr, make_modelstr, idstr,
|
||||
NULL);
|
||||
@@ -1911,7 +1893,6 @@ static void run_legacy_backend(int argc,
|
||||
* Setup a SIGTERM handler then block it before forking...
|
||||
*/
|
||||
|
||||
int err; /* posix_spawn result */
|
||||
struct sigaction action; /* POSIX signal action */
|
||||
sigset_t newmask, /* New signal mask */
|
||||
oldmask; /* Old signal mask */
|
||||
@@ -1960,7 +1941,7 @@ static void run_legacy_backend(int argc,
|
||||
# else
|
||||
perror("DEBUG: Unable to set binary preference to ppc");
|
||||
# endif /* __x86_64__ */
|
||||
_cupsLangPrintf(stderr, _("Unable to use legacy USB class driver\n"));
|
||||
_cupsLangPrintf(stderr, _("Unable to use legacy USB class driver!\n"));
|
||||
exit(CUPS_BACKEND_STOP);
|
||||
}
|
||||
}
|
||||
@@ -1978,12 +1959,11 @@ static void run_legacy_backend(int argc,
|
||||
|
||||
my_argv[i] = NULL;
|
||||
|
||||
if ((err = posix_spawn(&child_pid, usbpath, NULL, &attrs, my_argv,
|
||||
environ)) != 0)
|
||||
if (posix_spawn(&child_pid, usbpath, NULL, &attrs, my_argv, environ))
|
||||
{
|
||||
fprintf(stderr, "DEBUG: Unable to exec %s: %s\n", usbpath,
|
||||
strerror(err));
|
||||
_cupsLangPrintf(stderr, _("Unable to use legacy USB class driver\n"));
|
||||
strerror(errno));
|
||||
_cupsLangPrintf(stderr, _("Unable to use legacy USB class driver!\n"));
|
||||
exit(CUPS_BACKEND_STOP);
|
||||
}
|
||||
|
||||
@@ -2009,14 +1989,14 @@ static void run_legacy_backend(int argc,
|
||||
if (WIFSIGNALED(childstatus))
|
||||
{
|
||||
exitstatus = CUPS_BACKEND_STOP;
|
||||
fprintf(stderr, "DEBUG: usb(legacy) backend %d crashed on signal %d\n",
|
||||
fprintf(stderr, "DEBUG: usb(legacy) backend %d crashed on signal %d!\n",
|
||||
child_pid, WTERMSIG(childstatus));
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((exitstatus = WEXITSTATUS(childstatus)) != 0)
|
||||
fprintf(stderr,
|
||||
"DEBUG: usb(legacy) backend %d stopped with status %d\n",
|
||||
"DEBUG: usb(legacy) backend %d stopped with status %d!\n",
|
||||
child_pid, exitstatus);
|
||||
else
|
||||
fprintf(stderr, "DEBUG: usb(legacy) backend %d exited with no errors\n",
|
||||
@@ -2031,6 +2011,8 @@ static void run_legacy_backend(int argc,
|
||||
|
||||
exit(exitstatus);
|
||||
}
|
||||
#endif /* __i386__ || __x86_64__ */
|
||||
|
||||
|
||||
/*
|
||||
* 'sigterm_handler()' - SIGTERM handler.
|
||||
@@ -2039,8 +2021,7 @@ static void run_legacy_backend(int argc,
|
||||
static void
|
||||
sigterm_handler(int sig) /* I - Signal */
|
||||
{
|
||||
/* If we started a child process pass the signal on to it...
|
||||
*/
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
if (child_pid)
|
||||
{
|
||||
/*
|
||||
@@ -2058,14 +2039,19 @@ sigterm_handler(int sig) /* I - Signal */
|
||||
exit(0);
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "DEBUG: Child crashed on signal %d\n", status);
|
||||
fprintf(stderr, "DEBUG: Child crashed on signal %d!\n", status);
|
||||
exit(CUPS_BACKEND_STOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* __i386__ || __x86_64__ */
|
||||
|
||||
/*
|
||||
* Otherwise just flag that the job has been canceled...
|
||||
*/
|
||||
|
||||
job_canceled = 1;
|
||||
}
|
||||
|
||||
|
||||
#ifdef PARSE_PS_ERRORS
|
||||
/*
|
||||
@@ -2215,11 +2201,12 @@ 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_deviceid(g.classdriver, &deviceIDString);
|
||||
|
||||
copy_devicestring(g.printer_obj, &deviceIDString, &deviceLocation, &interfaceNum);
|
||||
if (deviceIDString)
|
||||
{
|
||||
CFStringGetCString(deviceIDString, data, *datalen, kCFStringEncodingUTF8);
|
||||
|
||||
+10
-23
@@ -158,16 +158,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
while (poll(pfds, 2, -1) > 0)
|
||||
{
|
||||
/*
|
||||
* 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 (pfds[0].revents & POLLIN)
|
||||
{
|
||||
if ((bytes = read(print_fd, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
@@ -187,13 +178,8 @@ print_device(const char *uri, /* I - Device URI */
|
||||
break;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
if (pfds[1].revents & POLLIN)
|
||||
tbytes += side_cb(printer, print_fd);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,14 +418,12 @@ get_device_id(usb_printer_t *printer, /* I - Printer */
|
||||
* and then limit the length to the size of our buffer...
|
||||
*/
|
||||
|
||||
if (length > bufsize)
|
||||
if (length > (bufsize - 2))
|
||||
length = (((unsigned)buffer[1] & 255) << 8) +
|
||||
((unsigned)buffer[0] & 255);
|
||||
|
||||
if (length > bufsize)
|
||||
length = bufsize;
|
||||
|
||||
length -= 2;
|
||||
if (length > (bufsize - 2))
|
||||
length = bufsize - 2;
|
||||
|
||||
/*
|
||||
* Copy the device ID text to the beginning of the buffer and
|
||||
@@ -759,7 +743,10 @@ side_cb(usb_printer_t *printer, /* I - Printer */
|
||||
datalen = sizeof(data);
|
||||
|
||||
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
|
||||
return (-1);
|
||||
{
|
||||
_cupsLangPuts(stderr, _("WARNING: Failed to read side-channel request!\n"));
|
||||
return (0);
|
||||
}
|
||||
|
||||
switch (command)
|
||||
{
|
||||
|
||||
+10
-7
@@ -5,7 +5,7 @@
|
||||
*
|
||||
* This file is included from "usb.c" when compiled on UNIX/Linux.
|
||||
*
|
||||
* Copyright 2007-2009 by Apple Inc.
|
||||
* Copyright 2007-2008 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -36,7 +36,7 @@
|
||||
*/
|
||||
|
||||
static int open_device(const char *uri, int *use_bc);
|
||||
static int side_cb(int print_fd, int device_fd, int snmp_fd,
|
||||
static void side_cb(int print_fd, int device_fd, int snmp_fd,
|
||||
http_addr_t *addr, int use_bc);
|
||||
|
||||
|
||||
@@ -187,10 +187,10 @@ print_device(const char *uri, /* I - Device URI */
|
||||
* select() or poll(), so we can't support the sidechannel either...
|
||||
*/
|
||||
|
||||
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, NULL);
|
||||
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, NULL);
|
||||
|
||||
#else
|
||||
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, side_cb);
|
||||
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, side_cb);
|
||||
#endif /* __sun */
|
||||
|
||||
if (print_fd != 0 && tbytes >= 0)
|
||||
@@ -560,7 +560,7 @@ open_device(const char *uri, /* I - Device URI */
|
||||
* 'side_cb()' - Handle side-channel requests...
|
||||
*/
|
||||
|
||||
static int /* O - 0 on success, -1 on error */
|
||||
static void
|
||||
side_cb(int print_fd, /* I - Print file */
|
||||
int device_fd, /* I - Device file */
|
||||
int snmp_fd, /* I - SNMP socket (unused) */
|
||||
@@ -579,7 +579,10 @@ side_cb(int print_fd, /* I - Print file */
|
||||
datalen = sizeof(data);
|
||||
|
||||
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
|
||||
return (-1);
|
||||
{
|
||||
_cupsLangPuts(stderr, _("WARNING: Failed to read side-channel request!\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (command)
|
||||
{
|
||||
@@ -622,7 +625,7 @@ side_cb(int print_fd, /* I - Print file */
|
||||
break;
|
||||
}
|
||||
|
||||
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
|
||||
cupsSideChannelWrite(command, status, data, datalen, 1.0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-17
@@ -340,18 +340,7 @@ show_jobs(const char *command, /* I - Command name */
|
||||
char resource[1024]; /* Resource string */
|
||||
char rankstr[255]; /* Rank string */
|
||||
char namestr[1024]; /* Job name string */
|
||||
static const char * const jobattrs[] =/* Job attributes we want to see */
|
||||
{
|
||||
"copies",
|
||||
"job-id",
|
||||
"job-k-octets",
|
||||
"job-name",
|
||||
"job-originating-user-name",
|
||||
"job-printer-uri",
|
||||
"job-priority",
|
||||
"job-state"
|
||||
};
|
||||
static const char * const ranks[10] = /* Ranking strings */
|
||||
static const char *ranks[10] = /* Ranking strings */
|
||||
{
|
||||
"th",
|
||||
"st",
|
||||
@@ -379,7 +368,6 @@ show_jobs(const char *command, /* I - Command name */
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* job-uri or printer-uri
|
||||
* requested-attributes
|
||||
*/
|
||||
|
||||
request = ippNewRequest(id ? IPP_GET_JOB_ATTRIBUTES : IPP_GET_JOBS);
|
||||
@@ -409,10 +397,6 @@ show_jobs(const char *command, /* I - Command name */
|
||||
ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1);
|
||||
}
|
||||
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes",
|
||||
(int)(sizeof(jobattrs) / sizeof(jobattrs[0])), NULL, jobattrs);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
+59
-160
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Administration CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2010 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
|
||||
@@ -52,7 +52,8 @@
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static int current_device = 0; /* Current device shown */
|
||||
static int current_device; /* Current device for add/modify */
|
||||
static time_t last_device_time; /* Last update time for device list */
|
||||
|
||||
|
||||
/*
|
||||
@@ -121,7 +122,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
*/
|
||||
|
||||
cgiSetVariable("SECTION", "admin");
|
||||
cgiSetVariable("REFRESH_PAGE", "");
|
||||
|
||||
/*
|
||||
* See if we have form data...
|
||||
@@ -191,7 +191,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,50 +205,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
fprintf(stderr, "DEBUG: redirecting with prefix %s!\n", prefix);
|
||||
|
||||
if ((url = cgiGetVariable("URL")) != NULL)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
printf("Location: %s%s\n\n", prefix, url);
|
||||
else
|
||||
printf("Location: %s/admin\n\n", prefix);
|
||||
}
|
||||
@@ -291,21 +248,6 @@ choose_device_cb(
|
||||
const char *device_location, /* I - Location */
|
||||
const char *title) /* I - Page title */
|
||||
{
|
||||
/*
|
||||
* For modern browsers, start a multi-part page so we can show that something
|
||||
* is happening. Non-modern browsers just get everything at the end...
|
||||
*/
|
||||
|
||||
if (current_device == 0 && cgiSupportsMultipart())
|
||||
{
|
||||
cgiStartMultipart();
|
||||
cgiStartHTML(title);
|
||||
cgiCopyTemplateLang("choose-device.tmpl");
|
||||
cgiEndHTML();
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Add the device to the array...
|
||||
*/
|
||||
@@ -318,6 +260,23 @@ choose_device_cb(
|
||||
cgiSetArray("device_location", current_device, device_location);
|
||||
|
||||
current_device ++;
|
||||
|
||||
if (time(NULL) > last_device_time && cgiSupportsMultipart())
|
||||
{
|
||||
/*
|
||||
* Update the page...
|
||||
*/
|
||||
|
||||
if (!last_device_time)
|
||||
cgiStartMultipart();
|
||||
|
||||
cgiStartHTML(title);
|
||||
cgiCopyTemplateLang("choose-device.tmpl");
|
||||
cgiEndHTML();
|
||||
fflush(stdout);
|
||||
|
||||
time(&last_device_time);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -386,31 +345,6 @@ 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, "/");
|
||||
|
||||
@@ -533,7 +467,6 @@ 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 */
|
||||
@@ -545,7 +478,6 @@ 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)
|
||||
@@ -560,22 +492,10 @@ 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)
|
||||
{
|
||||
/*
|
||||
@@ -708,15 +628,6 @@ 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;
|
||||
@@ -751,7 +662,8 @@ 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", name);
|
||||
"localhost", 0, "/classes/%s",
|
||||
cgiGetVariable("PRINTER_NAME"));
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
@@ -969,8 +881,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
if (isalnum(*uriptr & 255) || *uriptr == '_' || *uriptr == '-' ||
|
||||
*uriptr == '.')
|
||||
*tptr++ = *uriptr;
|
||||
else if ((*uriptr == ' ' || *uriptr == '/') && tptr > template &&
|
||||
tptr[-1] != '_')
|
||||
else if ((*uriptr == ' ' || *uriptr == '/') && tptr[-1] != '_')
|
||||
*tptr++ = '_';
|
||||
else if (*uriptr == '?' || *uriptr == '(')
|
||||
break;
|
||||
@@ -999,28 +910,31 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
}
|
||||
|
||||
/*
|
||||
* Scan for devices for up to 30 seconds...
|
||||
* Scan for devices for up to 30 seconds, updating the page as we find
|
||||
* them...
|
||||
*/
|
||||
|
||||
fputs("DEBUG: Getting list of devices...\n", stderr);
|
||||
|
||||
current_device = 0;
|
||||
last_device_time = 0;
|
||||
current_device = 0;
|
||||
if (cupsGetDevices(http, 30, CUPS_INCLUDE_ALL, CUPS_EXCLUDE_NONE,
|
||||
(cups_device_cb_t)choose_device_cb,
|
||||
(void *)title) == IPP_OK)
|
||||
{
|
||||
fputs("DEBUG: Got device list!\n", stderr);
|
||||
|
||||
if (cgiSupportsMultipart())
|
||||
cgiStartMultipart();
|
||||
if (!cgiSupportsMultipart())
|
||||
{
|
||||
/*
|
||||
* Non-modern browsers that don't support multi-part documents get
|
||||
* everything at the end...
|
||||
*/
|
||||
|
||||
cgiSetVariable("CUPS_GET_DEVICES_DONE", "1");
|
||||
cgiStartHTML(title);
|
||||
cgiCopyTemplateLang("choose-device.tmpl");
|
||||
cgiEndHTML();
|
||||
|
||||
if (cgiSupportsMultipart())
|
||||
cgiEndMultipart();
|
||||
cgiStartHTML(title);
|
||||
cgiCopyTemplateLang("choose-device.tmpl");
|
||||
cgiEndHTML();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1041,6 +955,16 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Show the final selection page...
|
||||
*/
|
||||
|
||||
cgiSetVariable("CUPS_GET_DEVICES_DONE", "1");
|
||||
cgiStartHTML(title);
|
||||
cgiCopyTemplateLang("choose-device.tmpl");
|
||||
cgiEndHTML();
|
||||
cgiEndMultipart();
|
||||
}
|
||||
else if (strchr(var, '/') == NULL)
|
||||
{
|
||||
@@ -1106,11 +1030,6 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
if ((attr = ippFindAttribute(oldinfo, "printer-location",
|
||||
IPP_TAG_TEXT)) != NULL)
|
||||
cgiSetVariable("PRINTER_LOCATION", attr->values[0].string.text);
|
||||
|
||||
if ((attr = ippFindAttribute(oldinfo, "printer-is-shared",
|
||||
IPP_TAG_BOOLEAN)) != NULL)
|
||||
cgiSetVariable("PRINTER_IS_SHARED",
|
||||
attr->values[0].boolean ? "1" : "0");
|
||||
}
|
||||
|
||||
cgiCopyTemplateLang("modify-printer.tmpl");
|
||||
@@ -1246,7 +1165,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
* Got the list of PPDs, see if the user has selected a make...
|
||||
*/
|
||||
|
||||
if (cgiSetIPPVars(response, NULL, NULL, NULL, 0) == 0 && !modify)
|
||||
if (cgiSetIPPVars(response, NULL, NULL, NULL, 0) == 0)
|
||||
{
|
||||
/*
|
||||
* No PPD files with this make, try again with all makes...
|
||||
@@ -1282,11 +1201,8 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
*/
|
||||
|
||||
cgiStartHTML(title);
|
||||
if (!cgiGetVariable("PPD_MAKE"))
|
||||
cgiSetVariable("PPD_MAKE", cgiGetVariable("CURRENT_MAKE"));
|
||||
if (!modify)
|
||||
cgiSetVariable("CURRENT_MAKE_AND_MODEL",
|
||||
cgiGetArray("PPD_MAKE_AND_MODEL", 0));
|
||||
cgiSetVariable("CURRENT_MAKE_AND_MODEL",
|
||||
cgiGetArray("PPD_MAKE_AND_MODEL", 0));
|
||||
cgiCopyTemplateLang("choose-model.tmpl");
|
||||
cgiEndHTML();
|
||||
}
|
||||
@@ -1578,7 +1494,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
|
||||
#ifdef HAVE_GSSAPI
|
||||
char default_auth_type[255];
|
||||
/* DefaultAuthType value */
|
||||
const char *val; /* Setting value */
|
||||
const char *val; /* Setting value */
|
||||
#endif /* HAVE_GSSAPI */
|
||||
|
||||
|
||||
@@ -1650,7 +1566,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
|
||||
strcat(local_protocols, "slp");
|
||||
}
|
||||
#endif /* HAVE_SLP */
|
||||
|
||||
|
||||
if (cgiGetVariable("BROWSE_REMOTE_CUPS"))
|
||||
strcpy(remote_protocols, "cups");
|
||||
else
|
||||
@@ -1903,7 +1819,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
|
||||
cgiSetVariable("ERROR", strerror(errno));
|
||||
cgiCopyTemplateLang("error.tmpl");
|
||||
cgiEndHTML();
|
||||
|
||||
|
||||
perror(tempfile);
|
||||
return;
|
||||
}
|
||||
@@ -1915,7 +1831,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
|
||||
cgiSetVariable("ERROR", strerror(errno));
|
||||
cgiCopyTemplateLang("error.tmpl");
|
||||
cgiEndHTML();
|
||||
|
||||
|
||||
perror(tempfile);
|
||||
close(tempfd);
|
||||
unlink(tempfile);
|
||||
@@ -2691,9 +2607,7 @@ 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");
|
||||
@@ -3305,16 +3219,11 @@ do_set_options(http_t *http, /* I - HTTP connection */
|
||||
for (option = ppdFirstOption(ppd);
|
||||
option;
|
||||
option = ppdNextOption(ppd))
|
||||
{
|
||||
if ((var = cgiGetVariable(option->keyword)) != NULL)
|
||||
{
|
||||
have_options = 1;
|
||||
ppdMarkOption(ppd, option->keyword, var);
|
||||
fprintf(stderr, "DEBUG: Set %s to %s...\n", option->keyword, var);
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "DEBUG: Didn't find %s...\n", option->keyword);
|
||||
}
|
||||
}
|
||||
|
||||
if (!have_options || ppdConflicts(ppd))
|
||||
@@ -3335,7 +3244,7 @@ do_set_options(http_t *http, /* I - HTTP connection */
|
||||
((ppdattr = ppdFindAttr(ppd, "cupsCommands", NULL)) != NULL &&
|
||||
ppdattr->value && strstr(ppdattr->value, "AutoConfigure")))
|
||||
cgiSetVariable("HAVE_AUTOCONFIGURE", "YES");
|
||||
else
|
||||
else
|
||||
{
|
||||
for (i = 0; i < ppd->num_filters; i ++)
|
||||
if (!strncmp(ppd->filters[i], "application/vnd.cups-postscript", 31))
|
||||
@@ -3421,16 +3330,6 @@ do_set_options(http_t *http, /* I - HTTP connection */
|
||||
{
|
||||
cgiSetArray("ckeyword", k, option->keyword);
|
||||
cgiSetArray("ckeytext", k, option->text);
|
||||
|
||||
for (m = 0; m < option->num_choices; m ++)
|
||||
{
|
||||
if (option->choices[m].marked)
|
||||
{
|
||||
cgiSetArray("cchoice", k, option->choices[m].text);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
k ++;
|
||||
}
|
||||
|
||||
@@ -3449,7 +3348,7 @@ do_set_options(http_t *http, /* I - HTTP connection */
|
||||
cgiSetVariable("GROUP", group->text);
|
||||
|
||||
cgiCopyTemplateLang("option-header.tmpl");
|
||||
|
||||
|
||||
for (j = group->num_options, option = group->options;
|
||||
j > 0;
|
||||
j --, option ++)
|
||||
@@ -4093,7 +3992,7 @@ get_option_value(
|
||||
|
||||
snprintf(buffer, bufsize, "Custom.%gx%g%s", width, length, uval);
|
||||
}
|
||||
else if (cupsArrayCount(coption->params) == 1)
|
||||
else if (cupsArrayCount(coption->params) == 1)
|
||||
{
|
||||
cparam = ppdFirstCustomParam(coption);
|
||||
snprintf(keyword, sizeof(keyword), "%s.%s", coption->keyword, cparam->name);
|
||||
|
||||
@@ -33,14 +33,6 @@
|
||||
# include "help-index.h"
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* Types...
|
||||
*/
|
||||
@@ -62,7 +54,6 @@ 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);
|
||||
@@ -107,10 +98,6 @@ extern void cgiStartMultipart(void);
|
||||
extern int cgiSupportsMultipart(void);
|
||||
extern const char *cgiText(const char *message);
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
|
||||
#endif /* !_CUPS_CGI_H_ */
|
||||
|
||||
/*
|
||||
|
||||
@@ -72,7 +72,6 @@ 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...
|
||||
|
||||
@@ -23,14 +23,6 @@
|
||||
# include <cups/array.h>
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* Data structures...
|
||||
*/
|
||||
@@ -76,10 +68,6 @@ extern help_index_t *helpSearchIndex(help_index_t *hi, const char *query,
|
||||
const char *filename);
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
|
||||
#endif /* !_CUPS_HELP_INDEX_H_ */
|
||||
|
||||
/*
|
||||
|
||||
+2
-9
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Online help CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2009 by Apple Inc.
|
||||
* Copyright 2007-2008 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -63,7 +63,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
*/
|
||||
|
||||
cgiSetVariable("SECTION", "help");
|
||||
cgiSetVariable("REFRESH_PAGE", "");
|
||||
|
||||
/*
|
||||
* Load the help index...
|
||||
@@ -103,7 +102,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
*/
|
||||
|
||||
for (i = 0; i < argc; i ++)
|
||||
fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]);
|
||||
fprintf(stderr, "argv[%d]=\"%s\"\n", i, argv[i]);
|
||||
|
||||
if ((helpfile = getenv("PATH_INFO")) != NULL)
|
||||
{
|
||||
@@ -183,12 +182,6 @@ 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)");
|
||||
|
||||
|
||||
+14
-35
@@ -333,7 +333,7 @@ cgiMoveJobs(http_t *http, /* I - Connection to server */
|
||||
NULL, job_uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes", NULL, "job-printer-uri");
|
||||
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
if ((attr = ippFindAttribute(response, "job-printer-uri",
|
||||
@@ -650,8 +650,7 @@ 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 ||
|
||||
attr->values[0].integer == IPP_JOB_HELD)
|
||||
if (!attr || attr->values[0].integer >= IPP_JOB_STOPPED)
|
||||
{
|
||||
ippDelete(response);
|
||||
break;
|
||||
@@ -926,7 +925,7 @@ cgiRewriteURL(const char *uri, /* I - Current URI */
|
||||
ishttps ? "https" : "http",
|
||||
userpass, hostname, port, resource);
|
||||
else
|
||||
snprintf(url, urlsize, "%s://%s:%d%s",
|
||||
snprintf(url, urlsize, "%s://%s:%d%s",
|
||||
ishttps ? "https" : "http",
|
||||
hostname, port, resource);
|
||||
}
|
||||
@@ -1398,9 +1397,7 @@ 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 */
|
||||
*query, /* Query string */
|
||||
*section; /* Section in web interface */
|
||||
const char *var; /* Form variable */
|
||||
void *search; /* Search data */
|
||||
char url[1024], /* Printer URI */
|
||||
val[1024]; /* Form variable */
|
||||
@@ -1444,14 +1441,11 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
|
||||
* Get a list of matching job objects.
|
||||
*/
|
||||
|
||||
if ((query = cgiGetVariable("QUERY")) != NULL &&
|
||||
if ((var = cgiGetVariable("QUERY")) != NULL &&
|
||||
!cgiGetVariable("CLEAR"))
|
||||
search = cgiCompileSearch(query);
|
||||
search = cgiCompileSearch(var);
|
||||
else
|
||||
{
|
||||
query = NULL;
|
||||
search = NULL;
|
||||
}
|
||||
|
||||
jobs = cgiGetIPPObjects(response, search);
|
||||
count = cupsArrayCount(jobs);
|
||||
@@ -1476,27 +1470,16 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
|
||||
if (first < 0)
|
||||
first = 0;
|
||||
|
||||
if ((var = cgiGetVariable("ORDER")) != NULL)
|
||||
ascending = !strcasecmp(var, "asc");
|
||||
else
|
||||
ascending = !which_jobs || !strcasecmp(which_jobs, "not-completed");
|
||||
|
||||
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 ((var = cgiGetVariable("ORDER")) != NULL)
|
||||
ascending = !strcasecmp(var, "asc");
|
||||
else
|
||||
{
|
||||
ascending = !which_jobs || !strcasecmp(which_jobs, "not-completed");
|
||||
cgiSetVariable("ORDER", ascending ? "asc" : "dec");
|
||||
}
|
||||
|
||||
if (ascending)
|
||||
{
|
||||
@@ -1518,11 +1501,7 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
|
||||
*/
|
||||
|
||||
if (dest)
|
||||
{
|
||||
snprintf(val, sizeof(val), "/%s/%s", section, dest);
|
||||
cgiSetVariable("PRINTER_NAME", dest);
|
||||
cgiSetVariable("PRINTER_URI_SUPPORTED", val);
|
||||
}
|
||||
snprintf(val, sizeof(val), "/%s/%s", cgiGetVariable("SECTION"), dest);
|
||||
else
|
||||
strlcpy(val, "/jobs/", sizeof(val));
|
||||
|
||||
|
||||
@@ -57,7 +57,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
*/
|
||||
|
||||
cgiSetVariable("SECTION", "jobs");
|
||||
cgiSetVariable("REFRESH_PAGE", "");
|
||||
|
||||
/*
|
||||
* Connect to the HTTP server...
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
_cgiCheckVariables
|
||||
_cgiClearVariables
|
||||
_cgiCompileSearch
|
||||
_cgiCopyTemplateFile
|
||||
_cgiCopyTemplateLang
|
||||
|
||||
+4
-12
@@ -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 - Subversion revision number */
|
||||
const char *revision) /* I - Version number */
|
||||
{
|
||||
cups_file_t *fp; /* File */
|
||||
|
||||
@@ -379,22 +379,14 @@ 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>%d.%d.%s</string>\n"
|
||||
"\t<key>CFBundleShortVersionString</key>\n"
|
||||
"\t<string>%d.%d.%d</string>\n"
|
||||
"\t<string>1.4.%s</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.atom"
|
||||
"\t<string>http://www.cups.org/org.cups.docset.xar"
|
||||
"</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",
|
||||
CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, revision,
|
||||
CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, CUPS_VERSION_PATCH);
|
||||
"</plist>\n", revision);
|
||||
|
||||
cupsFileClose(fp);
|
||||
}
|
||||
|
||||
@@ -73,7 +73,6 @@ 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...
|
||||
|
||||
+4
-13
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI template function.
|
||||
*
|
||||
* Copyright 2007-2010 by Apple Inc.
|
||||
* Copyright 2007-2008 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -119,7 +119,7 @@ cgiCopyTemplateLang(const char *tmpl) /* I - Base filename */
|
||||
*locptr = '\0'; /* Strip charset */
|
||||
}
|
||||
|
||||
fprintf(stderr, "DEBUG2: lang=\"%s\", locale=\"%s\"...\n",
|
||||
fprintf(stderr, "DEBUG: lang=\"%s\", locale=\"%s\"...\n",
|
||||
lang ? lang : "(null)", locale);
|
||||
|
||||
/*
|
||||
@@ -437,14 +437,7 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
* Test for existance...
|
||||
*/
|
||||
|
||||
if (name[0] == '?')
|
||||
result = cgiGetArray(name + 1, element) != NULL;
|
||||
else if (name[0] == '#')
|
||||
result = cgiGetVariable(name + 1) != NULL;
|
||||
else
|
||||
result = cgiGetArray(name, element) != NULL;
|
||||
|
||||
result = result && outptr[0];
|
||||
result = cgiGetArray(name, element) != NULL && outptr[0];
|
||||
compare[0] = '\0';
|
||||
}
|
||||
else
|
||||
@@ -682,8 +675,6 @@ cgi_puts(const char *s, /* I - String to output */
|
||||
fputs(">", out);
|
||||
else if (*s == '\"')
|
||||
fputs(""", out);
|
||||
else if (*s == '\'')
|
||||
fputs("'", out);
|
||||
else if (*s == '&')
|
||||
fputs("&", out);
|
||||
else
|
||||
@@ -704,7 +695,7 @@ cgi_puturi(const char *s, /* I - String to output */
|
||||
{
|
||||
while (*s)
|
||||
{
|
||||
if (strchr("%@&+ <>#=", *s) || *s < ' ' || *s & 128)
|
||||
if (strchr("%&+ <>#=", *s) || *s & 128)
|
||||
fprintf(out, "%%%02X", *s & 255);
|
||||
else
|
||||
putc(*s, out);
|
||||
|
||||
+9
-35
@@ -15,7 +15,6 @@
|
||||
* 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.
|
||||
@@ -135,31 +134,6 @@ 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...
|
||||
*/
|
||||
@@ -177,7 +151,7 @@ cgiGetArray(const char *name, /* I - Name of array variable */
|
||||
if (element < 0 || element >= var->nvalues)
|
||||
return (NULL);
|
||||
|
||||
return (_cupsStrRetain(var->values[element]));
|
||||
return (var->values[element]);
|
||||
}
|
||||
|
||||
|
||||
@@ -232,7 +206,7 @@ cgiGetVariable(const char *name) /* I - Name of variable */
|
||||
var->values[var->nvalues - 1]));
|
||||
#endif /* DEBUG */
|
||||
|
||||
return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1]));
|
||||
return ((var == NULL) ? NULL : var->values[var->nvalues - 1]);
|
||||
}
|
||||
|
||||
|
||||
@@ -363,9 +337,9 @@ cgiSetArray(const char *name, /* I - Name of variable */
|
||||
var->nvalues = element + 1;
|
||||
}
|
||||
else if (var->values[element])
|
||||
_cupsStrFree((char *)var->values[element]);
|
||||
free((char *)var->values[element]);
|
||||
|
||||
var->values[element] = _cupsStrAlloc(value);
|
||||
var->values[element] = strdup(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -410,7 +384,7 @@ cgiSetSize(const char *name, /* I - Name of variable */
|
||||
{
|
||||
for (i = size; i < var->nvalues; i ++)
|
||||
if (var->values[i])
|
||||
_cupsStrFree((void *)(var->values[i]));
|
||||
free((void *)(var->values[i]));
|
||||
}
|
||||
|
||||
var->nvalues = size;
|
||||
@@ -443,9 +417,9 @@ cgiSetVariable(const char *name, /* I - Name of variable */
|
||||
{
|
||||
for (i = 0; i < var->nvalues; i ++)
|
||||
if (var->values[i])
|
||||
_cupsStrFree((char *)var->values[i]);
|
||||
free((char *)var->values[i]);
|
||||
|
||||
var->values[0] = _cupsStrAlloc(value);
|
||||
var->values[0] = strdup(value);
|
||||
var->nvalues = 1;
|
||||
}
|
||||
}
|
||||
@@ -491,10 +465,10 @@ cgi_add_variable(const char *name, /* I - Variable name */
|
||||
if ((var->values = calloc(element + 1, sizeof(char *))) == NULL)
|
||||
return;
|
||||
|
||||
var->name = _cupsStrAlloc(name);
|
||||
var->name = strdup(name);
|
||||
var->nvalues = element + 1;
|
||||
var->avalues = element + 1;
|
||||
var->values[element] = _cupsStrAlloc(value);
|
||||
var->values[element] = strdup(value);
|
||||
|
||||
form_count ++;
|
||||
}
|
||||
|
||||
+1
-1
@@ -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 ; then \
|
||||
if test -r $(BUILDROOT)$(PAMDIR)/cups/$(PAMFILE) ; then \
|
||||
$(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups.N ; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups ; \
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#
|
||||
# "$Id$"
|
||||
#
|
||||
# Sample configuration file for the CUPS scheduler. See "man cupsd.conf" for a
|
||||
# complete description of this file.
|
||||
# Sample configuration file for the Common UNIX Printing System (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"
|
||||
|
||||
@@ -46,7 +46,6 @@ application/x-csource application/postscript 33 texttops
|
||||
application/x-perl application/postscript 33 texttops
|
||||
application/x-shell application/postscript 33 texttops
|
||||
text/plain application/postscript 33 texttops
|
||||
text/css application/postscript 33 texttops
|
||||
text/html application/postscript 33 texttops
|
||||
image/gif application/vnd.cups-postscript 66 imagetops
|
||||
image/png application/vnd.cups-postscript 66 imagetops
|
||||
|
||||
+4
-4
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: mime.types 8783 2009-08-28 17:51:05Z mike $"
|
||||
# "$Id: mime.types 8652 2009-05-16 23:48:35Z 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 8783 2009-08-28 17:51:05Z mike $".
|
||||
# End of "$Id: mime.types 8652 2009-05-16 23:48:35Z mike $".
|
||||
#
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#%PAM-1.0
|
||||
auth required pam_unix.so shadow nodelay nullok
|
||||
account required pam_unix.so
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
auth required @PAMMODAUTH@
|
||||
auth required @PAMMOD@ nullok shadow
|
||||
account required @PAMMOD@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-common.m4 8938 2009-12-18 23:52:01Z mike $"
|
||||
dnl "$Id: cups-common.m4 8686 2009-05-26 23:27:06Z 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.4.3"
|
||||
CUPS_VERSION="1.4rc1"
|
||||
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'`"
|
||||
@@ -142,7 +142,10 @@ else
|
||||
fi
|
||||
|
||||
dnl Check for random number functions...
|
||||
AC_CHECK_FUNCS(random lrand48 arc4random)
|
||||
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)
|
||||
@@ -262,12 +265,15 @@ if test "x$enable_dbus" != xno; then
|
||||
AC_DEFINE(HAVE_DBUS)
|
||||
CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE"
|
||||
CUPSDLIBS="$CUPSDLIBS `$PKGCONFIG --libs dbus-1`"
|
||||
DBUS_NOTIFIER="dbus"
|
||||
DBUS_NOTIFIERLIBS="`$PKGCONFIG --libs dbus-1`"
|
||||
AC_CHECK_LIB(dbus-1,
|
||||
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
|
||||
@@ -286,6 +292,7 @@ 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"
|
||||
@@ -351,5 +358,5 @@ AC_SUBST(FONTS)
|
||||
AC_SUBST(LEGACY_BACKENDS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-common.m4 8938 2009-12-18 23:52:01Z mike $".
|
||||
dnl End of "$Id: cups-common.m4 8686 2009-05-26 23:27:06Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-defaults.m4 8929 2009-12-15 22:40:37Z mike $"
|
||||
dnl "$Id: cups-defaults.m4 8344 2009-02-10 17:05:35Z mike $"
|
||||
dnl
|
||||
dnl Default cupsd configuration settings for the Common UNIX Printing System
|
||||
dnl (CUPS).
|
||||
@@ -208,10 +208,6 @@ AC_ARG_WITH(cups_user, [ --with-cups-user set default user for CUPS],
|
||||
AC_MSG_RESULT(no password file, using "$CUPS_USER")
|
||||
fi)
|
||||
|
||||
if test "x$CUPS_USER" = "xroot" -o "x$CUPS_USER" = "x0"; then
|
||||
AC_MSG_ERROR([The default user for CUPS cannot be root!])
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(cups_group, [ --with-cups-group set default group for CUPS],
|
||||
CUPS_GROUP="$withval",
|
||||
AC_MSG_CHECKING(for default print group)
|
||||
@@ -242,10 +238,6 @@ AC_ARG_WITH(cups_group, [ --with-cups-group set default group for CUPS],
|
||||
AC_MSG_RESULT(no group file, using "$CUPS_GROUP")
|
||||
fi)
|
||||
|
||||
if test "x$CUPS_GROUP" = "xroot" -o "x$CUPS_GROUP" = "xwheel" -o "x$CUPS_GROUP" = "x0"; then
|
||||
AC_MSG_ERROR([The default group for CUPS cannot be root!])
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(system_groups, [ --with-system-groups set default system groups for CUPS],
|
||||
CUPS_SYSTEM_GROUPS="$withval",
|
||||
if test x$uname = xDarwin; then
|
||||
@@ -277,13 +269,8 @@ AC_ARG_WITH(system_groups, [ --with-system-groups set default system groups
|
||||
fi
|
||||
fi)
|
||||
|
||||
CUPS_PRIMARY_SYSTEM_GROUP="`echo $CUPS_SYSTEM_GROUPS | awk '{print $1}'`"
|
||||
|
||||
for group in $CUPS_SYSTEM_GROUPS; do
|
||||
if test "x$CUPS_GROUP" = "x$group"; then
|
||||
AC_MSG_ERROR([The default system groups cannot contain the default CUPS group!])
|
||||
fi
|
||||
done
|
||||
CUPS_PRIMARY_SYSTEM_GROUP="`echo $CUPS_SYSTEM_GROUPS | awk '{print $1}'`"
|
||||
|
||||
AC_SUBST(CUPS_USER)
|
||||
AC_SUBST(CUPS_GROUP)
|
||||
@@ -338,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 "x$XINETD" != x; then
|
||||
CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd://$XINETD/cups-lpd"
|
||||
if test -d /etc/xinetd.d; then
|
||||
CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd:///etc/xinetd.d/cups-lpd"
|
||||
else
|
||||
CUPS_DEFAULT_LPD_CONFIG_FILE=""
|
||||
fi
|
||||
@@ -448,5 +435,5 @@ AC_SUBST(BANNERTOPS)
|
||||
AC_SUBST(TEXTTOPS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-defaults.m4 8929 2009-12-15 22:40:37Z mike $".
|
||||
dnl End of "$Id: cups-defaults.m4 8344 2009-02-10 17:05:35Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-dnssd.m4 8789 2009-08-28 22:54:34Z mike $"
|
||||
dnl "$Id: cups-dnssd.m4 8344 2009-02-10 17:05:35Z 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 8789 2009-08-28 22:54:34Z mike $".
|
||||
dnl End of "$Id: cups-dnssd.m4 8344 2009-02-10 17:05:35Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-pam.m4 8825 2009-09-22 21:53:31Z mike $"
|
||||
dnl "$Id: cups-pam.m4 8344 2009-02-10 17:05:35Z mike $"
|
||||
dnl
|
||||
dnl PAM stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
@@ -22,10 +22,9 @@ if test $uname = AIX; then
|
||||
fi
|
||||
|
||||
PAMDIR=""
|
||||
PAMFILE="pam.std"
|
||||
PAMFILE=""
|
||||
PAMLIBS=""
|
||||
PAMMOD="pam_unknown.so"
|
||||
PAMMODAUTH="pam_unknown.so"
|
||||
|
||||
if test x$enable_pam != xno; then
|
||||
SAVELIBS="$LIBS"
|
||||
@@ -61,7 +60,7 @@ if test x$enable_pam != xno; then
|
||||
|
||||
case "$uname" in
|
||||
Darwin*)
|
||||
# Darwin/Mac OS X
|
||||
# Darwin, MacOS 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
|
||||
@@ -71,22 +70,26 @@ 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"
|
||||
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"
|
||||
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
|
||||
fi
|
||||
|
||||
if test "x$PAMMOD" = xpam_unix.so; then
|
||||
PAMMODAUTH="$PAMMOD shadow nodelay"
|
||||
else
|
||||
PAMMODAUTH="$PAMMOD nodelay"
|
||||
fi
|
||||
PAMFILE="pam.std"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -95,8 +98,7 @@ AC_SUBST(PAMDIR)
|
||||
AC_SUBST(PAMFILE)
|
||||
AC_SUBST(PAMLIBS)
|
||||
AC_SUBST(PAMMOD)
|
||||
AC_SUBST(PAMMODAUTH)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-pam.m4 8825 2009-09-22 21:53:31Z mike $".
|
||||
dnl End of "$Id: cups-pam.m4 8344 2009-02-10 17:05:35Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-pdf.m4 8760 2009-08-07 22:30:30Z mike $"
|
||||
dnl "$Id: cups-pdf.m4 8430 2009-03-12 21:50:44Z 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,/path/to/gs,pdftops,/path/to/pdftops,none), default=pdftops ])
|
||||
AC_ARG_WITH(pdftops, [ --with-pdftops set pdftops filter (gs,pdftops,none), default=pdftops ])
|
||||
|
||||
PDFTOPS=""
|
||||
CUPS_PDFTOPS=""
|
||||
@@ -47,12 +47,6 @@ 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
|
||||
@@ -63,20 +57,6 @@ 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")
|
||||
@@ -84,5 +64,5 @@ AC_DEFINE_UNQUOTED(CUPS_GHOSTSCRIPT, "$CUPS_GHOSTSCRIPT")
|
||||
AC_SUBST(PDFTOPS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-pdf.m4 8760 2009-08-07 22:30:30Z mike $".
|
||||
dnl End of "$Id: cups-pdf.m4 8430 2009-03-12 21:50:44Z mike $".
|
||||
dnl
|
||||
|
||||
+17
-15
@@ -335,6 +335,14 @@
|
||||
#undef HAVE_DNSSD
|
||||
|
||||
|
||||
/*
|
||||
* Do we have Darwin's CoreFoundation and SystemConfiguration frameworks?
|
||||
*/
|
||||
|
||||
#undef HAVE_COREFOUNDATION
|
||||
#undef HAVE_SYSTEMCONFIGURATION
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <sys/ioctl.h>?
|
||||
*/
|
||||
@@ -342,6 +350,14 @@
|
||||
#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?
|
||||
*/
|
||||
@@ -586,24 +602,10 @@
|
||||
* Which random number generator function to use...
|
||||
*/
|
||||
|
||||
#undef HAVE_ARC4RANDOM
|
||||
#undef HAVE_RANDOM
|
||||
#undef HAVE_MRAND48
|
||||
#undef HAVE_LRAND48
|
||||
|
||||
#ifdef HAVE_ARC4RANDOM
|
||||
# define CUPS_RAND() arc4random()
|
||||
# define CUPS_SRAND(v) arc4random_stir()
|
||||
#elif defined(HAVE_RANDOM)
|
||||
# define CUPS_RAND() random()
|
||||
# define CUPS_SRAND(v) srandom(v)
|
||||
#elif defined(HAVE_LRAND48)
|
||||
# define CUPS_RAND() lrand48()
|
||||
# define CUPS_SRAND(v) srand48(v)
|
||||
#else
|
||||
# define CUPS_RAND() rand()
|
||||
# define CUPS_SRAND(v) srand(v)
|
||||
#endif /* HAVE_ARC4RANDOM */
|
||||
|
||||
|
||||
/*
|
||||
* Do we have vproc_transaction_begin/end?
|
||||
|
||||
+1
-1
@@ -1553,7 +1553,7 @@ _cupsAdminSetServerSettings(
|
||||
const char *remotep = cupsGetOption("BrowseRemoteProtocols",
|
||||
num_settings, settings);
|
||||
|
||||
if (!localp || !localp[0])
|
||||
if (!localp)
|
||||
localp = cupsGetOption("BrowseLocalProtocols", cupsd_num_settings,
|
||||
cupsd_settings);
|
||||
|
||||
|
||||
+4
-12
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id: api-filter.shtml 8718 2009-06-18 17:41:03Z mike $"
|
||||
"$Id: api-filter.shtml 8628 2009-05-13 22:25:34Z 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_LANGUAGE</dt>
|
||||
<dt>APPLE_LANGUAGES</dt>
|
||||
<dd>The Apple language identifier associated with the job
|
||||
(Mac OS X only).</dd>
|
||||
|
||||
@@ -264,16 +264,7 @@ 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.
|
||||
|
||||
<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>
|
||||
use vendor-prefixed ("com.acme.foo") keywords for custom states.</dd>
|
||||
|
||||
<dt>WARNING: message</dt>
|
||||
<dd>Sets the printer-state-message attribute and adds the specified
|
||||
@@ -285,6 +276,7 @@ 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>
|
||||
|
||||
@@ -26,14 +26,6 @@
|
||||
# include "versioning.h"
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* Constants...
|
||||
*/
|
||||
@@ -65,10 +57,6 @@ extern void cupsBackendReport(const char *device_scheme,
|
||||
_CUPS_API_1_4;
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
|
||||
#endif /* !_CUPS_BACKEND_H_ */
|
||||
|
||||
/*
|
||||
|
||||
+1
-5
@@ -583,13 +583,9 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
* Clear all conflicts...
|
||||
*/
|
||||
|
||||
cupsArraySave(ppd->options);
|
||||
|
||||
for (o = ppdFirstOption(ppd); o; o = ppdNextOption(ppd))
|
||||
o->conflicted = 0;
|
||||
|
||||
cupsArrayRestore(ppd->options);
|
||||
|
||||
/*
|
||||
* Test for conflicts...
|
||||
*/
|
||||
@@ -645,7 +641,7 @@ ppdInstallableConflict(
|
||||
DEBUG_printf(("2ppdInstallableConflict(ppd=%p, option=\"%s\", choice=\"%s\")",
|
||||
ppd, option, choice));
|
||||
|
||||
/*
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
|
||||
+2
-2
@@ -59,10 +59,10 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 1.0403
|
||||
# define CUPS_VERSION 1.0400
|
||||
# define CUPS_VERSION_MAJOR 1
|
||||
# define CUPS_VERSION_MINOR 4
|
||||
# define CUPS_VERSION_PATCH 3
|
||||
# define CUPS_VERSION_PATCH 0
|
||||
|
||||
# define CUPS_BC_FD 3 /* Back-channel file descriptor for select/poll */
|
||||
# define CUPS_DATE_ANY (time_t)-1
|
||||
|
||||
+6
-13
@@ -33,6 +33,7 @@
|
||||
* server.
|
||||
* appleCopyLocations() - Copy the location history array.
|
||||
* appleCopyNetwork() - Get the network ID for the current location.
|
||||
* appleGetDefault() - Get the default printer for this location.
|
||||
* appleGetPaperSize() - Get the default paper size.
|
||||
* appleGetPrinter() - Get a printer from the history array.
|
||||
* appleSetDefault() - Set the default printer for this location.
|
||||
@@ -138,17 +139,12 @@ cupsAddDest(const char *name, /* I - Destination name */
|
||||
|
||||
if (!cupsGetDest(name, instance, num_dests, *dests))
|
||||
{
|
||||
if (instance && !cupsGetDest(name, NULL, num_dests, *dests))
|
||||
if (instance &&
|
||||
(parent = cupsGetDest(name, NULL, num_dests, *dests)) == NULL)
|
||||
return (num_dests);
|
||||
|
||||
dest = cups_add_dest(name, instance, &num_dests, dests);
|
||||
|
||||
/*
|
||||
* Find the base dest again now the array has been realloc'd.
|
||||
*/
|
||||
|
||||
parent = cupsGetDest(name, NULL, num_dests, *dests);
|
||||
|
||||
if (instance && parent && parent->num_options > 0)
|
||||
{
|
||||
/*
|
||||
@@ -553,7 +549,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
|
||||
if (!cups_get_sdests(http, op, name, 0, &dest))
|
||||
{
|
||||
if (op == CUPS_GET_DEFAULT || name)
|
||||
if (op == CUPS_GET_DEFAULT)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
@@ -561,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, NULL, 0, &dest))
|
||||
if (!cups_get_sdests(http, CUPS_GET_DEFAULT, name, 0, &dest))
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -1292,9 +1288,6 @@ appleUseLastPrinter(void)
|
||||
CFPropertyListRef uselast; /* Use last printer preference value */
|
||||
|
||||
|
||||
if (getenv("CUPS_DISABLE_APPLE_DEFAULT"))
|
||||
return (0);
|
||||
|
||||
if ((uselast = CFPreferencesCopyAppValue(kUseLastPrinterAsCurrentPrinterKey,
|
||||
kPMPrintingPreferences)) != NULL)
|
||||
{
|
||||
@@ -1807,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 && op != CUPS_GET_DEFAULT)
|
||||
if (name)
|
||||
{
|
||||
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
|
||||
"localhost", ippPort(), "/printers/%s", name);
|
||||
|
||||
@@ -772,7 +772,6 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
|
||||
if (section == PPD_ORDER_JCL)
|
||||
{
|
||||
if (!strcasecmp(choices[i]->choice, "Custom") &&
|
||||
choices[i]->code &&
|
||||
(coption = ppdFindCustomOption(ppd, choices[i]->option->keyword))
|
||||
!= NULL)
|
||||
{
|
||||
|
||||
+10
-34
@@ -38,44 +38,20 @@
|
||||
static void
|
||||
cups_env_init(_cups_globals_t *g) /* I - Global data */
|
||||
{
|
||||
#ifdef HAVE_GETEUID
|
||||
if ((geteuid() != getuid() && getuid()) || getegid() != getgid())
|
||||
#else
|
||||
if (!getuid())
|
||||
#endif /* HAVE_GETEUID */
|
||||
{
|
||||
/*
|
||||
* When running setuid/setgid, don't allow environment variables to override
|
||||
* the directories...
|
||||
*/
|
||||
if ((g->cups_datadir = getenv("CUPS_DATADIR")) == NULL)
|
||||
g->cups_datadir = CUPS_DATADIR;
|
||||
|
||||
g->cups_datadir = CUPS_DATADIR;
|
||||
g->cups_serverbin = CUPS_SERVERBIN;
|
||||
if ((g->cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL)
|
||||
g->cups_serverbin = CUPS_SERVERBIN;
|
||||
|
||||
if ((g->cups_serverroot = getenv("CUPS_SERVERROOT")) == NULL)
|
||||
g->cups_serverroot = CUPS_SERVERROOT;
|
||||
g->cups_statedir = CUPS_STATEDIR;
|
||||
g->localedir = CUPS_LOCALEDIR;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Allow directories to be overridden by environment variables.
|
||||
*/
|
||||
|
||||
if ((g->cups_datadir = getenv("CUPS_DATADIR")) == NULL)
|
||||
g->cups_datadir = CUPS_DATADIR;
|
||||
if ((g->cups_statedir = getenv("CUPS_STATEDIR")) == NULL)
|
||||
g->cups_statedir = CUPS_STATEDIR;
|
||||
|
||||
if ((g->cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL)
|
||||
g->cups_serverbin = CUPS_SERVERBIN;
|
||||
|
||||
if ((g->cups_serverroot = getenv("CUPS_SERVERROOT")) == NULL)
|
||||
g->cups_serverroot = CUPS_SERVERROOT;
|
||||
|
||||
if ((g->cups_statedir = getenv("CUPS_STATEDIR")) == NULL)
|
||||
g->cups_statedir = CUPS_STATEDIR;
|
||||
|
||||
if ((g->localedir = getenv("LOCALEDIR")) == NULL)
|
||||
g->localedir = CUPS_LOCALEDIR;
|
||||
}
|
||||
if ((g->localedir = getenv("LOCALEDIR")) == NULL)
|
||||
g->localedir = CUPS_LOCALEDIR;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+19
-48
@@ -50,7 +50,6 @@
|
||||
#include "debug.h"
|
||||
#include "globals.h"
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#ifdef HAVE_DNSSD
|
||||
# include <dns_sd.h>
|
||||
# include <poll.h>
|
||||
@@ -1407,6 +1406,7 @@ _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,65 +1418,36 @@ _httpResolveURI(
|
||||
hostname, regtype, "local.", resolve_callback,
|
||||
&uribuf) == kDNSServiceErr_NoError)
|
||||
{
|
||||
int fds; /* Number of ready descriptors */
|
||||
time_t timeout, /* Poll timeout */
|
||||
start_time = time(NULL);/* Start time */
|
||||
|
||||
for (;;)
|
||||
if (strcasecmp(domain, "local."))
|
||||
{
|
||||
if (logit)
|
||||
_cupsLangPuts(stderr, _("INFO: Looking for printer...\n"));
|
||||
|
||||
/*
|
||||
* For the first minute, wakeup every 2 seconds to emit a
|
||||
* "looking for printer" message...
|
||||
* Wait 2 seconds for a response to the local resolve; if nothing comes
|
||||
* in, do an additional domain resolution...
|
||||
*/
|
||||
|
||||
timeout = (time(NULL) < (start_time + 60)) ? 2000 : -1;
|
||||
|
||||
polldata.fd = DNSServiceRefSockFD(ref);
|
||||
polldata.events = POLLIN;
|
||||
|
||||
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)
|
||||
if (poll(&polldata, 1, 2000) != 1)
|
||||
{
|
||||
/*
|
||||
* Wait 2 seconds for a response to the local resolve; if nothing
|
||||
* comes in, do an additional domain resolution...
|
||||
* OK, send the domain name resolve...
|
||||
*/
|
||||
|
||||
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 (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;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DNSServiceProcessResult(ref) == kDNSServiceErr_NoError)
|
||||
{
|
||||
uri = resolved_uri;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (DNSServiceProcessResult(ref) == kDNSServiceErr_NoError)
|
||||
uri = resolved_uri;
|
||||
|
||||
if (domainsent)
|
||||
DNSServiceRefDeallocate(domainref);
|
||||
|
||||
+18
-85
@@ -26,6 +26,7 @@
|
||||
* httpClearCookie() - Clear the cookie value(s).
|
||||
* httpClearFields() - Clear HTTP request fields.
|
||||
* httpClose() - Close an HTTP connection...
|
||||
* httpConnect() - Connect to a HTTP server.
|
||||
* httpConnectEncrypt() - Connect to a HTTP server using encryption.
|
||||
* _httpCreate() - Create an unconnected HTTP connection.
|
||||
* httpDelete() - Send a DELETE request to the server.
|
||||
@@ -720,7 +721,7 @@ httpGetField(http_t *http, /* I - Connection to server */
|
||||
{
|
||||
if (!http || field <= HTTP_FIELD_UNKNOWN || field >= HTTP_FIELD_MAX)
|
||||
return (NULL);
|
||||
else if (field == HTTP_FIELD_AUTHORIZATION &&
|
||||
else if (field == HTTP_FIELD_AUTHORIZATION &&
|
||||
http->field_authorization)
|
||||
{
|
||||
/*
|
||||
@@ -1136,7 +1137,7 @@ httpGets(char *line, /* I - Line to read into */
|
||||
http->activity = time(NULL);
|
||||
|
||||
*lineptr = '\0';
|
||||
|
||||
|
||||
DEBUG_printf(("3httpGets: Returning \"%s\"", line));
|
||||
|
||||
return (line);
|
||||
@@ -2282,7 +2283,7 @@ httpWait(http_t *http, /* I - Connection to server */
|
||||
*
|
||||
* @deprecated@
|
||||
*/
|
||||
|
||||
|
||||
int /* O - Number of bytes written */
|
||||
httpWrite(http_t *http, /* I - Connection to server */
|
||||
const char *buffer, /* I - Buffer for data */
|
||||
@@ -2297,7 +2298,7 @@ httpWrite(http_t *http, /* I - Connection to server */
|
||||
*
|
||||
* @since CUPS 1.2/Mac OS X 10.5@
|
||||
*/
|
||||
|
||||
|
||||
ssize_t /* O - Number of bytes written */
|
||||
httpWrite2(http_t *http, /* I - Connection to server */
|
||||
const char *buffer, /* I - Buffer for data */
|
||||
@@ -2455,7 +2456,7 @@ _httpWriteCDSA(
|
||||
else
|
||||
{
|
||||
*dataLength = 0;
|
||||
|
||||
|
||||
if (errno == EAGAIN)
|
||||
result = errSSLWouldBlock;
|
||||
else
|
||||
@@ -2516,7 +2517,7 @@ http_bio_ctrl(BIO *h, /* I - BIO data */
|
||||
}
|
||||
else
|
||||
return (0);
|
||||
|
||||
|
||||
case BIO_CTRL_DUP :
|
||||
case BIO_CTRL_FLUSH :
|
||||
return (1);
|
||||
@@ -2718,36 +2719,7 @@ http_read_ssl(http_t *http, /* I - Connection to server */
|
||||
return (SSL_read((SSL *)(http->tls), buf, len));
|
||||
|
||||
# elif defined(HAVE_GNUTLS)
|
||||
ssize_t result; /* Return value */
|
||||
|
||||
|
||||
result = gnutls_record_recv(((http_tls_t *)(http->tls))->session, buf, len);
|
||||
|
||||
if (result < 0 && !errno)
|
||||
{
|
||||
/*
|
||||
* Convert GNU TLS error to errno value...
|
||||
*/
|
||||
|
||||
switch (result)
|
||||
{
|
||||
case GNUTLS_E_INTERRUPTED :
|
||||
errno = EINTR;
|
||||
break;
|
||||
|
||||
case GNUTLS_E_AGAIN :
|
||||
errno = EAGAIN;
|
||||
break;
|
||||
|
||||
default :
|
||||
errno = EPIPE;
|
||||
break;
|
||||
}
|
||||
|
||||
result = -1;
|
||||
}
|
||||
|
||||
return ((int)result);
|
||||
return (gnutls_record_recv(((http_tls_t *)(http->tls))->session, buf, len));
|
||||
|
||||
# elif defined(HAVE_CDSASSL)
|
||||
int result; /* Return value */
|
||||
@@ -2885,7 +2857,7 @@ http_send(http_t *http, /* I - Connection to server */
|
||||
DEBUG_printf(("9http_send: %s: %s", http_fields[i],
|
||||
httpGetField(http, i)));
|
||||
|
||||
if (httpPrintf(http, "%s: %s\r\n", http_fields[i],
|
||||
if (httpPrintf(http, "%s: %s\r\n", http_fields[i],
|
||||
httpGetField(http, i)) < 1)
|
||||
{
|
||||
http->status = HTTP_ERROR;
|
||||
@@ -2924,15 +2896,15 @@ http_send(http_t *http, /* I - Connection to server */
|
||||
* The Kerberos and AuthRef authentication strings can only be used once...
|
||||
*/
|
||||
|
||||
if (http->field_authorization && http->authstring &&
|
||||
(!strncmp(http->authstring, "Negotiate", 9) ||
|
||||
if (http->field_authorization && http->authstring &&
|
||||
(!strncmp(http->authstring, "Negotiate", 9) ||
|
||||
!strncmp(http->authstring, "AuthRef", 7)))
|
||||
{
|
||||
http->_authstring[0] = '\0';
|
||||
|
||||
if (http->authstring != http->_authstring)
|
||||
free(http->authstring);
|
||||
|
||||
|
||||
http->authstring = http->_authstring;
|
||||
}
|
||||
|
||||
@@ -3032,11 +3004,6 @@ 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);
|
||||
}
|
||||
|
||||
@@ -3171,13 +3138,6 @@ 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...
|
||||
@@ -3205,6 +3165,8 @@ http_upgrade(http_t *http) /* I - Connection to server */
|
||||
while (httpUpdate(http) == HTTP_CONTINUE);
|
||||
}
|
||||
|
||||
httpFlush(http);
|
||||
|
||||
/*
|
||||
* Restore the HTTP request data...
|
||||
*/
|
||||
@@ -3248,7 +3210,7 @@ http_upgrade(http_t *http) /* I - Connection to server */
|
||||
/*
|
||||
* 'http_write()' - Write a buffer to a HTTP connection.
|
||||
*/
|
||||
|
||||
|
||||
static int /* O - Number of bytes written */
|
||||
http_write(http_t *http, /* I - Connection to server */
|
||||
const char *buffer, /* I - Buffer for data */
|
||||
@@ -3363,36 +3325,7 @@ http_write_ssl(http_t *http, /* I - Connection to server */
|
||||
return (SSL_write((SSL *)(http->tls), buf, len));
|
||||
|
||||
# elif defined(HAVE_GNUTLS)
|
||||
ssize_t result; /* Return value */
|
||||
|
||||
result = gnutls_record_send(((http_tls_t *)(http->tls))->session, buf, len);
|
||||
|
||||
if (result < 0 && !errno)
|
||||
{
|
||||
/*
|
||||
* Convert GNU TLS error to errno value...
|
||||
*/
|
||||
|
||||
switch (result)
|
||||
{
|
||||
case GNUTLS_E_INTERRUPTED :
|
||||
errno = EINTR;
|
||||
break;
|
||||
|
||||
case GNUTLS_E_AGAIN :
|
||||
errno = EAGAIN;
|
||||
break;
|
||||
|
||||
default :
|
||||
errno = EPIPE;
|
||||
break;
|
||||
}
|
||||
|
||||
result = -1;
|
||||
}
|
||||
|
||||
return ((int)result);
|
||||
|
||||
return (gnutls_record_send(((http_tls_t *)(http->tls))->session, buf, len));
|
||||
# elif defined(HAVE_CDSASSL)
|
||||
int result; /* Return value */
|
||||
OSStatus error; /* Error info */
|
||||
@@ -3415,11 +3348,11 @@ http_write_ssl(http_t *http, /* I - Connection to server */
|
||||
else
|
||||
{
|
||||
result = -1;
|
||||
errno = EINTR;
|
||||
errno = EINTR;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
errno = EPIPE;
|
||||
errno = EPIPE;
|
||||
result = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
* Hyper-Text Transport Protocol definitions for the Common UNIX Printing
|
||||
* System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2009 by Apple Inc.
|
||||
* Copyright 2007 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
|
||||
+7
-29
@@ -842,8 +842,6 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
|
||||
if (!strcasecmp(option, "AP_D_InputSlot"))
|
||||
{
|
||||
cupsArraySave(ppd->options);
|
||||
|
||||
if ((o = ppdFindOption(ppd, "InputSlot")) != NULL)
|
||||
{
|
||||
key.option = o;
|
||||
@@ -853,21 +851,13 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
cupsArrayRemove(ppd->marked, oldc);
|
||||
}
|
||||
}
|
||||
|
||||
cupsArrayRestore(ppd->options);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for custom options...
|
||||
*/
|
||||
|
||||
cupsArraySave(ppd->options);
|
||||
|
||||
o = ppdFindOption(ppd, option);
|
||||
|
||||
cupsArrayRestore(ppd->options);
|
||||
|
||||
if (!o)
|
||||
if ((o = ppdFindOption(ppd, option)) == NULL)
|
||||
return;
|
||||
|
||||
loc = localeconv();
|
||||
@@ -922,15 +912,15 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
if (units)
|
||||
{
|
||||
if (!strcasecmp(units, "cm"))
|
||||
cparam->current.custom_points *= 72.0f / 2.54f;
|
||||
cparam->current.custom_points *= 72.0f / 2.54f;
|
||||
else if (!strcasecmp(units, "mm"))
|
||||
cparam->current.custom_points *= 72.0f / 25.4f;
|
||||
cparam->current.custom_points *= 72.0f / 25.4f;
|
||||
else if (!strcasecmp(units, "m"))
|
||||
cparam->current.custom_points *= 72.0f / 0.0254f;
|
||||
cparam->current.custom_points *= 72.0f / 0.0254f;
|
||||
else if (!strcasecmp(units, "in"))
|
||||
cparam->current.custom_points *= 72.0f;
|
||||
cparam->current.custom_points *= 72.0f;
|
||||
else if (!strcasecmp(units, "ft"))
|
||||
cparam->current.custom_points *= 12.0f * 72.0f;
|
||||
cparam->current.custom_points *= 12.0f * 72.0f;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1070,8 +1060,6 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
* appropriate...
|
||||
*/
|
||||
|
||||
cupsArraySave(ppd->options);
|
||||
|
||||
if (!strcasecmp(option, "PageSize"))
|
||||
{
|
||||
if ((o = ppdFindOption(ppd, "PageRegion")) != NULL)
|
||||
@@ -1096,8 +1084,6 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cupsArrayRestore(ppd->options);
|
||||
}
|
||||
else if (!strcasecmp(option, "InputSlot"))
|
||||
{
|
||||
@@ -1105,8 +1091,6 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
* Unmark ManualFeed option...
|
||||
*/
|
||||
|
||||
cupsArraySave(ppd->options);
|
||||
|
||||
if ((o = ppdFindOption(ppd, "ManualFeed")) != NULL)
|
||||
{
|
||||
key.option = o;
|
||||
@@ -1116,8 +1100,6 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
cupsArrayRemove(ppd->marked, oldc);
|
||||
}
|
||||
}
|
||||
|
||||
cupsArrayRestore(ppd->options);
|
||||
}
|
||||
else if (!strcasecmp(option, "ManualFeed") &&
|
||||
!strcasecmp(choice, "True"))
|
||||
@@ -1126,8 +1108,6 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
* Unmark InputSlot option...
|
||||
*/
|
||||
|
||||
cupsArraySave(ppd->options);
|
||||
|
||||
if ((o = ppdFindOption(ppd, "InputSlot")) != NULL)
|
||||
{
|
||||
key.option = o;
|
||||
@@ -1137,8 +1117,6 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
cupsArrayRemove(ppd->marked, oldc);
|
||||
}
|
||||
}
|
||||
|
||||
cupsArrayRestore(ppd->options);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1219,7 +1197,7 @@ ppd_mark_size(ppd_file_t *ppd, /* I - PPD file */
|
||||
return;
|
||||
}
|
||||
else
|
||||
return;
|
||||
return;
|
||||
|
||||
/*
|
||||
* Search the PPD file for a matching size...
|
||||
|
||||
+13
-9
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Page size functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2010 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
|
||||
@@ -250,9 +250,6 @@ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */
|
||||
* Figure out the current minimum width and length...
|
||||
*/
|
||||
|
||||
width = ppd->custom_min[0];
|
||||
length = ppd->custom_min[1];
|
||||
|
||||
if (qualifier2)
|
||||
{
|
||||
/*
|
||||
@@ -280,13 +277,18 @@ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */
|
||||
attr = ppdFindAttr(ppd, "cupsMinSize", spec);
|
||||
}
|
||||
|
||||
if ((attr && attr->value &&
|
||||
sscanf(attr->value, "%f%f", &width, &length) != 2) || !attr)
|
||||
if (!attr ||
|
||||
(attr->value && sscanf(attr->value, "%f%f", &width, &length) != 2))
|
||||
{
|
||||
width = ppd->custom_min[0];
|
||||
length = ppd->custom_min[1];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
width = ppd->custom_min[0];
|
||||
length = ppd->custom_min[1];
|
||||
}
|
||||
|
||||
minimum->width = width;
|
||||
minimum->length = length;
|
||||
@@ -299,9 +301,6 @@ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */
|
||||
* Figure out the current maximum width and length...
|
||||
*/
|
||||
|
||||
width = ppd->custom_max[0];
|
||||
length = ppd->custom_max[1];
|
||||
|
||||
if (qualifier2)
|
||||
{
|
||||
/*
|
||||
@@ -336,6 +335,11 @@ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */
|
||||
length = ppd->custom_max[1];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
width = ppd->custom_max[0];
|
||||
length = ppd->custom_max[1];
|
||||
}
|
||||
|
||||
maximum->width = width;
|
||||
maximum->length = length;
|
||||
|
||||
+2
-35
@@ -352,13 +352,11 @@ ppdErrorString(ppd_status_t status) /* I - PPD status */
|
||||
_("Illegal option keyword string"),
|
||||
_("Illegal translation string"),
|
||||
_("Illegal whitespace character"),
|
||||
_("Bad custom parameter"),
|
||||
_("Missing option keyword"),
|
||||
_("Bad value string")
|
||||
_("Bad custom parameter")
|
||||
};
|
||||
|
||||
|
||||
if (status < PPD_OK || status >= PPD_MAX_STATUS)
|
||||
if (status < PPD_OK || status > PPD_ILLEGAL_WHITESPACE)
|
||||
return (_cupsLangString(cupsLangDefault(), _("Unknown")));
|
||||
else
|
||||
return (_cupsLangString(cupsLangDefault(), messages[status]));
|
||||
@@ -1179,37 +1177,6 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
}
|
||||
else if (!strcmp(keyword, "JobPatchFile"))
|
||||
{
|
||||
/*
|
||||
* CUPS STR #3421: Check for "*JobPatchFile: int: string"
|
||||
*/
|
||||
|
||||
if (isdigit(*string & 255))
|
||||
{
|
||||
for (sptr = string + 1; isdigit(*sptr & 255); sptr ++);
|
||||
|
||||
if (*sptr == ':')
|
||||
{
|
||||
/*
|
||||
* Found "*JobPatchFile: int: string"...
|
||||
*/
|
||||
|
||||
cg->ppd_status = PPD_BAD_VALUE;
|
||||
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
if (!name[0])
|
||||
{
|
||||
/*
|
||||
* Found "*JobPatchFile: string"...
|
||||
*/
|
||||
|
||||
cg->ppd_status = PPD_MISSING_OPTION_KEYWORD;
|
||||
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (ppd->patches == NULL)
|
||||
ppd->patches = strdup(string);
|
||||
else
|
||||
|
||||
+1
-4
@@ -115,10 +115,7 @@ typedef enum ppd_status_e /**** Status Codes @since CUPS 1.1.19/Mac OS X 10.3@
|
||||
PPD_ILLEGAL_OPTION_KEYWORD, /* Illegal option keyword string */
|
||||
PPD_ILLEGAL_TRANSLATION, /* Illegal translation string */
|
||||
PPD_ILLEGAL_WHITESPACE, /* Illegal whitespace character */
|
||||
PPD_BAD_CUSTOM_PARAM, /* Bad custom parameter */
|
||||
PPD_MISSING_OPTION_KEYWORD, /* Missing option keyword */
|
||||
PPD_BAD_VALUE, /* Bad value string */
|
||||
PPD_MAX_STATUS /* @private@ */
|
||||
PPD_BAD_CUSTOM_PARAM /* Bad custom parameter */
|
||||
} ppd_status_t;
|
||||
|
||||
enum ppd_conform_e /**** Conformance Levels @since CUPS 1.1.19/Mac OS X 10.3@ ****/
|
||||
|
||||
+2
-4
@@ -266,11 +266,9 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
DEBUG_printf(("2cupsDoIORequest: status=%d", status));
|
||||
|
||||
if (status >= HTTP_BAD_REQUEST &&
|
||||
status != HTTP_UNAUTHORIZED &&
|
||||
status != HTTP_UPGRADE_REQUIRED)
|
||||
if (status == HTTP_FORBIDDEN || status == HTTP_ERROR ||
|
||||
status >= HTTP_SERVER_ERROR)
|
||||
{
|
||||
httpFlush(http);
|
||||
_cupsSetHTTPError(status);
|
||||
break;
|
||||
}
|
||||
|
||||
+26
-39
@@ -116,7 +116,6 @@ cupsSideChannelRead(
|
||||
char buffer[16388]; /* Message buffer */
|
||||
int bytes; /* Bytes read */
|
||||
int templen; /* Data length from message */
|
||||
int nfds; /* Number of file descriptors */
|
||||
#ifdef HAVE_POLL
|
||||
struct pollfd pfd; /* Poll structure for poll() */
|
||||
#else /* select() */
|
||||
@@ -144,30 +143,38 @@ cupsSideChannelRead(
|
||||
pfd.fd = CUPS_SC_FD;
|
||||
pfd.events = POLLIN;
|
||||
|
||||
while ((nfds = poll(&pfd, 1,
|
||||
timeout < 0.0 ? -1 : (long)(timeout * 1000))) < 0 &&
|
||||
(errno == EINTR || errno == EAGAIN))
|
||||
;
|
||||
if (timeout < 0.0)
|
||||
{
|
||||
if (poll(&pfd, 1, -1) < 1)
|
||||
return (-1);
|
||||
}
|
||||
else if (poll(&pfd, 1, (long)(timeout * 1000)) < 1)
|
||||
return (-1);
|
||||
|
||||
#else /* select() */
|
||||
FD_ZERO(&input_set);
|
||||
FD_SET(CUPS_SC_FD, &input_set);
|
||||
|
||||
stimeout.tv_sec = (int)timeout;
|
||||
stimeout.tv_usec = (int)(timeout * 1000000) % 1000000;
|
||||
|
||||
while ((nfds = select(CUPS_SC_FD + 1, &input_set, NULL, NULL,
|
||||
timeout < 0.0 ? NULL : &stimeout)) < 0 &&
|
||||
(errno == EINTR || errno == EAGAIN))
|
||||
;
|
||||
|
||||
#endif /* HAVE_POLL */
|
||||
|
||||
if (nfds < 1)
|
||||
if (timeout < 0.0)
|
||||
{
|
||||
*status = nfds==0 ? CUPS_SC_STATUS_TIMEOUT : CUPS_SC_STATUS_IO_ERROR;
|
||||
return (-1);
|
||||
if (select(CUPS_SC_FD + 1, &input_set, NULL, NULL, NULL) < 1)
|
||||
{
|
||||
DEBUG_printf(("1cupsSideChannelRead: Select error: %s", strerror(errno)));
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stimeout.tv_sec = (int)timeout;
|
||||
stimeout.tv_usec = (int)(timeout * 1000000) % 1000000;
|
||||
|
||||
if (select(CUPS_SC_FD + 1, &input_set, NULL, NULL, &stimeout) < 1)
|
||||
{
|
||||
DEBUG_puts("1cupsSideChannelRead: Select timeout");
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_POLL */
|
||||
|
||||
/*
|
||||
* Read a side-channel message for the format:
|
||||
@@ -184,23 +191,9 @@ 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...
|
||||
*/
|
||||
@@ -209,8 +202,6 @@ 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);
|
||||
}
|
||||
|
||||
@@ -388,7 +379,6 @@ 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, "
|
||||
@@ -407,7 +397,6 @@ cupsSideChannelSNMPWalk(
|
||||
|
||||
current_oid = oid;
|
||||
oidlen = (int)strlen(oid);
|
||||
last_oid[0] = '\0';
|
||||
|
||||
do
|
||||
{
|
||||
@@ -433,8 +422,7 @@ cupsSideChannelSNMPWalk(
|
||||
* Parse the response of the form "oid\0value"...
|
||||
*/
|
||||
|
||||
if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.' ||
|
||||
!strcmp(real_data, last_oid))
|
||||
if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.')
|
||||
{
|
||||
/*
|
||||
* Done with this set of OIDs...
|
||||
@@ -460,7 +448,6 @@ cupsSideChannelSNMPWalk(
|
||||
*/
|
||||
|
||||
current_oid = real_data;
|
||||
strlcpy(last_oid, current_oid, sizeof(last_oid));
|
||||
}
|
||||
}
|
||||
while (status == CUPS_SC_STATUS_OK);
|
||||
|
||||
@@ -55,7 +55,6 @@ 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 */
|
||||
|
||||
+11
-37
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* SNMP functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2010 by Apple Inc.
|
||||
* Copyright 2007-2009 by Apple Inc.
|
||||
* Copyright 2006-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -89,14 +89,14 @@ static char *asn1_get_string(unsigned char **buffer,
|
||||
unsigned char *bufend,
|
||||
int length, char *string,
|
||||
int strsize);
|
||||
static unsigned asn1_get_length(unsigned char **buffer,
|
||||
static int asn1_get_length(unsigned char **buffer,
|
||||
unsigned char *bufend);
|
||||
static int asn1_get_type(unsigned char **buffer,
|
||||
unsigned char *bufend);
|
||||
static void asn1_set_integer(unsigned char **buffer,
|
||||
int integer);
|
||||
static void asn1_set_length(unsigned char **buffer,
|
||||
unsigned length);
|
||||
int length);
|
||||
static void asn1_set_oid(unsigned char **buffer,
|
||||
const int *oid);
|
||||
static void asn1_set_packed(unsigned char **buffer,
|
||||
@@ -608,8 +608,6 @@ _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 */
|
||||
|
||||
|
||||
/*
|
||||
@@ -633,15 +631,14 @@ _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");
|
||||
|
||||
@@ -655,8 +652,7 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (!_cupsSNMPIsOIDPrefixed(&packet, prefix) ||
|
||||
_cupsSNMPIsOID(&packet, lastoid))
|
||||
if (!_cupsSNMPIsOIDPrefixed(&packet, prefix))
|
||||
{
|
||||
DEBUG_printf(("5_cupsSNMPWalk: Returning %d", count));
|
||||
|
||||
@@ -670,8 +666,6 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
|
||||
return (count > 0 ? count : -1);
|
||||
}
|
||||
|
||||
_cupsSNMPCopyOID(lastoid, packet.object_name, CUPS_SNMP_MAX_OID);
|
||||
|
||||
count ++;
|
||||
|
||||
(*cb)(&packet, data);
|
||||
@@ -1286,13 +1280,7 @@ asn1_get_integer(
|
||||
int value; /* Integer value */
|
||||
|
||||
|
||||
if (length > sizeof(int))
|
||||
{
|
||||
(*buffer) += length;
|
||||
return (0);
|
||||
}
|
||||
|
||||
for (value = (**buffer & 0x80) ? -1 : 0;
|
||||
for (value = 0;
|
||||
length > 0 && *buffer < bufend;
|
||||
length --, (*buffer) ++)
|
||||
value = (value << 8) | **buffer;
|
||||
@@ -1305,32 +1293,18 @@ asn1_get_integer(
|
||||
* 'asn1_get_length()' - Get a value length.
|
||||
*/
|
||||
|
||||
static unsigned /* O - Length */
|
||||
static int /* O - Length */
|
||||
asn1_get_length(unsigned char **buffer, /* IO - Pointer in buffer */
|
||||
unsigned char *bufend) /* I - End of buffer */
|
||||
{
|
||||
unsigned length; /* Length */
|
||||
int length; /* Length */
|
||||
|
||||
|
||||
length = **buffer;
|
||||
(*buffer) ++;
|
||||
|
||||
if (length & 128)
|
||||
{
|
||||
int count; /* Number of bytes for length */
|
||||
|
||||
|
||||
if ((count = length & 127) > sizeof(unsigned))
|
||||
{
|
||||
(*buffer) += count;
|
||||
return (0);
|
||||
}
|
||||
|
||||
for (length = 0;
|
||||
count > 0 && *buffer < bufend;
|
||||
count --, (*buffer) ++)
|
||||
length = (length << 8) | **buffer;
|
||||
}
|
||||
length = asn1_get_integer(buffer, bufend, length & 127);
|
||||
|
||||
return (length);
|
||||
}
|
||||
@@ -1549,7 +1523,7 @@ asn1_set_integer(unsigned char **buffer,/* IO - Pointer in buffer */
|
||||
|
||||
static void
|
||||
asn1_set_length(unsigned char **buffer, /* IO - Pointer in buffer */
|
||||
unsigned length) /* I - Length value */
|
||||
int length) /* I - Length value */
|
||||
{
|
||||
if (length > 255)
|
||||
{
|
||||
|
||||
+2
-2
@@ -118,8 +118,8 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
* Format a string using the hex time values...
|
||||
*/
|
||||
|
||||
snprintf(filename, len - 1, "%s/%05x%08x", tmpdir, (unsigned)getpid(),
|
||||
(unsigned)(curtime.tv_sec + curtime.tv_usec + tries));
|
||||
snprintf(filename, len - 1, "%s/%08lx%05lx", tmpdir,
|
||||
(unsigned long)curtime.tv_sec, (unsigned long)curtime.tv_usec);
|
||||
#endif /* WIN32 */
|
||||
|
||||
/*
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@
|
||||
*Throughput: "1"
|
||||
*LandscapeOrientation: Plus90
|
||||
*TTRasterizer: Type42
|
||||
*cupsFilter: "application/vnd.cups-raster 0 -"
|
||||
*cupsFilter: "application/vnd.cups-raster - 0"
|
||||
*RequiresPageRegion All: True
|
||||
|
||||
*% These constraints are used to test ppdConflicts() and cupsResolveConflicts()
|
||||
|
||||
+9
-9
@@ -64,10 +64,8 @@ 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 */
|
||||
|
||||
|
||||
@@ -95,7 +93,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
status += random_tests();
|
||||
|
||||
#ifndef WIN32
|
||||
/*
|
||||
* Test fdopen and close without reading...
|
||||
*/
|
||||
@@ -129,7 +126,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
puts("PASS");
|
||||
}
|
||||
#endif /* !WIN32 */
|
||||
|
||||
/*
|
||||
* Count lines in euc-jp.txt, rewind, then count again.
|
||||
@@ -375,9 +371,9 @@ random_tests(void)
|
||||
fputs("cupsFileSeek(), cupsFileRead(): ", stdout);
|
||||
|
||||
for (num_records = (pass + 1) * 256, count = (pass + 1) * 256,
|
||||
record = CUPS_RAND() % num_records;
|
||||
record = rand() % num_records;
|
||||
count > 0;
|
||||
count --, record = (record + (CUPS_RAND() & 31) - 16 + num_records) %
|
||||
count --, record = (record + (rand() & 31) - 16 + num_records) %
|
||||
num_records)
|
||||
{
|
||||
/*
|
||||
@@ -471,10 +467,14 @@ read_write_tests(int compression) /* I - Use compression? */
|
||||
* Initialize the write buffer with random data...
|
||||
*/
|
||||
|
||||
CUPS_SRAND(time(NULL));
|
||||
#ifdef WIN32
|
||||
srand((unsigned)time(NULL));
|
||||
#else
|
||||
srand(time(NULL));
|
||||
#endif /* WIN32 */
|
||||
|
||||
for (i = 0; i < (int)sizeof(writebuf); i ++)
|
||||
writebuf[i] = CUPS_RAND();
|
||||
writebuf[i] = rand();
|
||||
|
||||
/*
|
||||
* cupsFileOpen(write)
|
||||
@@ -756,7 +756,7 @@ read_write_tests(int compression) /* I - Use compression? */
|
||||
|
||||
fputs("cupsFileGetChar(partial line): ", stdout);
|
||||
|
||||
for (i = 0; i < (int)strlen(partial_line); i ++)
|
||||
for (i = 0; i < strlen(partial_line); i ++)
|
||||
if ((byte = cupsFileGetChar(fp)) < 0)
|
||||
break;
|
||||
else if (byte != partial_line[i])
|
||||
|
||||
+1
-1
@@ -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],
|
||||
(int)strlen(base64_tests[i][0]));
|
||||
strlen(base64_tests[i][0]));
|
||||
decodelen = (int)sizeof(decode);
|
||||
httpDecode64_2(decode, &decodelen, base64_tests[i][1]);
|
||||
|
||||
|
||||
+18
-66
@@ -570,17 +570,17 @@ cupsGetJobs2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_D
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
|
||||
static const char * const attrs[] = /* Requested attributes */
|
||||
{
|
||||
"document-format",
|
||||
"job-id",
|
||||
"job-k-octets",
|
||||
"job-name",
|
||||
"job-originating-user-name",
|
||||
"job-printer-uri",
|
||||
"job-priority",
|
||||
"job-k-octets",
|
||||
"job-state",
|
||||
"time-at-completed",
|
||||
"time-at-creation",
|
||||
"time-at-processing"
|
||||
"time-at-processing",
|
||||
"job-printer-uri",
|
||||
"document-format",
|
||||
"job-name",
|
||||
"job-originating-user-name"
|
||||
};
|
||||
|
||||
|
||||
@@ -809,8 +809,7 @@ 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@. The caller "owns" the
|
||||
* file that is created and must @code unlink@ the returned filename.
|
||||
* each call to @code cupsGetPPD@ or @link cupsGetPPD2@.
|
||||
*/
|
||||
|
||||
const char * /* O - Filename for PPD file */
|
||||
@@ -841,8 +840,7 @@ 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@. The caller "owns" the
|
||||
* file that is created and must @code unlink@ the returned filename.
|
||||
* each call to @link cupsGetPPD@ or @code cupsGetPPD2@.
|
||||
*
|
||||
* @since CUPS 1.1.21/Mac OS X 10.4@
|
||||
*/
|
||||
@@ -875,8 +873,7 @@ 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. The caller "owns" the file that is
|
||||
* created and must @code unlink@ the returned filename.
|
||||
* file will be overwritten as needed.
|
||||
*
|
||||
* 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
|
||||
@@ -1456,9 +1453,6 @@ cupsPrintFiles2(
|
||||
char buffer[8192]; /* Copy buffer */
|
||||
ssize_t bytes; /* Bytes in buffer */
|
||||
http_status_t status; /* Status of write */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
|
||||
ipp_status_t cancel_status; /* Status code to preserve */
|
||||
char *cancel_message; /* Error message to preserve */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsPrintFiles2(http=%p, name=\"%s\", num_files=%d, "
|
||||
@@ -1510,40 +1504,16 @@ cupsPrintFiles2(
|
||||
* Unable to open print file, cancel the job and return...
|
||||
*/
|
||||
|
||||
_cupsSetError(IPP_DOCUMENT_ACCESS_ERROR, NULL, 0);
|
||||
goto cancel_job;
|
||||
cupsCancelJob2(http, name, job_id, 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
cupsFileRewind(fp);
|
||||
status = cupsStartDocument(http, name, job_id, docname, format,
|
||||
i == (num_files - 1));
|
||||
|
||||
status = cupsStartDocument(http, name, job_id, docname, format,
|
||||
i == (num_files - 1));
|
||||
|
||||
while (status == HTTP_CONTINUE &&
|
||||
(bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0)
|
||||
status = cupsWriteRequestData(http, buffer, bytes);
|
||||
|
||||
if (status == HTTP_UNAUTHORIZED)
|
||||
{
|
||||
char resource[1024]; /* Printer resource */
|
||||
|
||||
snprintf(resource, sizeof(resource), "/printers/%s", name);
|
||||
|
||||
if (!cupsDoAuthentication(http, "POST", resource))
|
||||
{
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
_cupsSetError(IPP_SERVICE_UNAVAILABLE, NULL, 0);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
else
|
||||
status = HTTP_AUTHORIZATION_CANCELED;
|
||||
}
|
||||
}
|
||||
while (status == HTTP_UNAUTHORIZED);
|
||||
while (status == HTTP_CONTINUE &&
|
||||
(bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0)
|
||||
status = cupsWriteRequestData(http, buffer, bytes);
|
||||
|
||||
cupsFileClose(fp);
|
||||
|
||||
@@ -1553,30 +1523,12 @@ cupsPrintFiles2(
|
||||
* Unable to queue, cancel the job and return...
|
||||
*/
|
||||
|
||||
goto cancel_job;
|
||||
cupsCancelJob2(http, name, job_id, 0);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
|
||||
return (job_id);
|
||||
|
||||
/*
|
||||
* If we get here, something happened while sending the print job so we need
|
||||
* to cancel the job without setting the last error (since we need to preserve
|
||||
* the current error...
|
||||
*/
|
||||
|
||||
cancel_job:
|
||||
|
||||
cancel_status = cg->last_error;
|
||||
cancel_message = cg->last_status_message ?
|
||||
_cupsStrRetain(cg->last_status_message) : NULL;
|
||||
|
||||
cupsCancelJob2(http, name, job_id, 0);
|
||||
|
||||
cg->last_error = cancel_status;
|
||||
cg->last_status_message = cancel_message;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+26
-30
@@ -7,33 +7,29 @@ Terminal=false
|
||||
Type=Application
|
||||
Name=Manage Printing
|
||||
Comment=CUPS Web Interface
|
||||
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 網頁介面
|
||||
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 網頁介面
|
||||
|
||||
+2
-2
@@ -190,8 +190,8 @@ install-languages:
|
||||
for lang in $(LANGUAGES); do \
|
||||
if test -d $$lang; then \
|
||||
$(INSTALL_DIR) -m 755 $(DOCDIR)/$$lang; \
|
||||
$(INSTALL_DATA) $$lang/index.html $(DOCDIR)/$$lang; \
|
||||
$(INSTALL_DATA) $$lang/cups.css $(DOCDIR)/$$lang >/dev/null 2>&1 || true; \
|
||||
$(INSTALL_MAN) $$lang/index.html $(DOCDIR)/$$lang; \
|
||||
test -f $$lang/cups.css && $(INSTALL_MAN) $$lang/cups.css $(DOCDIR)/$$lang; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
|
||||
+1
-5
@@ -27,7 +27,7 @@ P.example {
|
||||
font-style: italic;
|
||||
margin-left: 36pt;
|
||||
}
|
||||
|
||||
|
||||
PRE.example {
|
||||
background: white;
|
||||
border: dotted thin #999999;
|
||||
@@ -238,10 +238,6 @@ H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
|
||||
color: white;
|
||||
}
|
||||
|
||||
TH.conflict {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
H1.title {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -16,8 +16,8 @@ SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></A></TD>
|
||||
<TD CLASS="sel"><A HREF="/"> Startseite </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/admin"> Verwaltung </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/classes/"> Klassen </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/help/"> Online Hilfe </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/jobs/"> Aufträge </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/help/"> On-Line Hilfe </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/jobs/"> Auftrüge </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/printers/"> Drucker </A></TD>
|
||||
<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
|
||||
TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Search Help"
|
||||
@@ -31,7 +31,7 @@ AUTOSAVE="org.cups.help" RESULTS="20"></FORM></TD>
|
||||
|
||||
<H1>Common UNIX Printing System @CUPS_VERSION@</H1>
|
||||
|
||||
<P>CUPS ist das auf Standards basierte, Open-Source Drucker System, welches von
|
||||
<P>CUPS ist das auf Standards basierte, Open-Source Drucker System, welches von
|
||||
<A HREF="http://www.apple.com/">Apple Inc.</A> für Mac OS<SUP>®</SUP> X und
|
||||
andere UNIX<SUP>®</SUP>-ähnliche Betriebssysteme entwickelt wird.</P>
|
||||
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
<!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="/"> Hasiera </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/admin"> Administrazioa </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/classes/"> Klaseak </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/help/"> Lineako laguntza </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/jobs/"> Lanak </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/printers/"> Inprimagailuak </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>®</SUP> X eta
|
||||
beste UNIX<SUP>®</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> </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>
|
||||
@@ -338,7 +338,7 @@ div.contents ul.subcontents li {
|
||||
<body>
|
||||
<div class='body'>
|
||||
<!--
|
||||
"$Id: api-cups.html 8726 2009-06-22 20:46:13Z mike $"
|
||||
"$Id: api-cups.html 8653 2009-05-16 23:53:28Z 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 8726 2009-06-22 20:46:13Z mike $"
|
||||
"$Id: api-cups.html 8653 2009-05-16 23:53:28Z mike $"
|
||||
|
||||
CUPS API introduction for the Common UNIX Printing System (CUPS).
|
||||
|
||||
@@ -1491,8 +1491,7 @@ 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>. The caller "owns" the
|
||||
file that is created and must <code>unlink</code> the returned filename.</p>
|
||||
each call to <code>cupsGetPPD</code> or <a href="#cupsGetPPD2"><code>cupsGetPPD2</code></a>.</p>
|
||||
<h3 class="function"><span class="info"> CUPS 1.1.21/Mac OS X 10.4 </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">
|
||||
@@ -1514,8 +1513,7 @@ 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>. The caller "owns" the
|
||||
file that is created and must <code>unlink</code> the returned filename.
|
||||
each call to <a href="#cupsGetPPD"><code>cupsGetPPD</code></a> or <code>cupsGetPPD2</code>.
|
||||
|
||||
</p>
|
||||
<h3 class="function"><span class="info"> CUPS 1.4/Mac OS X 10.6 </span><a name="cupsGetPPD3">cupsGetPPD3</a></h3>
|
||||
@@ -1551,8 +1549,7 @@ the server.<br>
|
||||
<br>
|
||||
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. The caller "owns" the file that is
|
||||
created and must <code>unlink</code> the returned filename.<br>
|
||||
file will be overwritten as needed.<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
|
||||
|
||||
@@ -338,7 +338,7 @@ div.contents ul.subcontents li {
|
||||
<body>
|
||||
<div class='body'>
|
||||
<!--
|
||||
"$Id: api-filter.html 8718 2009-06-18 17:41:03Z mike $"
|
||||
"$Id: api-filter.html 8673 2009-05-22 17:34:15Z mike $"
|
||||
|
||||
Filter and backend programming header for the Common UNIX Printing System
|
||||
(CUPS).
|
||||
@@ -421,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 8718 2009-06-18 17:41:03Z mike $"
|
||||
"$Id: api-filter.html 8673 2009-05-22 17:34:15Z mike $"
|
||||
|
||||
Filter and backend programming introduction for the Common UNIX Printing
|
||||
System (CUPS).
|
||||
@@ -549,7 +549,7 @@ when running print filters and backends:</p>
|
||||
|
||||
<dl class="code">
|
||||
|
||||
<dt>APPLE_LANGUAGE</dt>
|
||||
<dt>APPLE_LANGUAGES</dt>
|
||||
<dd>The Apple language identifier associated with the job
|
||||
(Mac OS X only).</dd>
|
||||
|
||||
@@ -686,16 +686,7 @@ 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.
|
||||
|
||||
<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>
|
||||
use vendor-prefixed ("com.acme.foo") keywords for custom states.</dd>
|
||||
|
||||
<dt>WARNING: message</dt>
|
||||
<dd>Sets the printer-state-message attribute and adds the specified
|
||||
@@ -707,6 +698,7 @@ 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>
|
||||
|
||||
@@ -338,7 +338,7 @@ div.contents ul.subcontents li {
|
||||
<body>
|
||||
<div class='body'>
|
||||
<!--
|
||||
"$Id: api-ppdc.html 8704 2009-06-10 15:51:21Z mike $"
|
||||
"$Id: api-ppdc.html 8653 2009-05-16 23:53:28Z 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 8704 2009-06-10 15:51:21Z mike $"
|
||||
"$Id: api-ppdc.html 8653 2009-05-16 23:53:28Z mike $"
|
||||
|
||||
PPD Compiler API introduction for CUPS.
|
||||
|
||||
@@ -865,22 +865,6 @@ 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>
|
||||
const char *n,<br>
|
||||
<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">
|
||||
|
||||
@@ -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 stop the scheduler first, make your
|
||||
changes, and then start the scheduler to make them active.</P>
|
||||
manually, you will need to restart the scheduler to make them
|
||||
active.</P>
|
||||
|
||||
|
||||
<H2 CLASS="title"><A NAME="Accepting">Accepting</A></H2>
|
||||
|
||||
@@ -123,8 +123,7 @@ to the access log file. The following levels are defined:</P>
|
||||
Allow from nnn.nnn.nnn.nnn
|
||||
Allow from nnn.nnn.nnn.nnn/mm
|
||||
Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
|
||||
Allow from [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]
|
||||
Allow from [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]/mmm
|
||||
Allow from xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
|
||||
Allow from @LOCAL
|
||||
Allow from @IF(name)
|
||||
</Location>
|
||||
@@ -136,14 +135,8 @@ 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.</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>
|
||||
multiple hosts or networks. The <CODE>/mm</CODE> notation
|
||||
specifies a CIDR netmask, as shown in Table 1.</P>
|
||||
|
||||
<DIV CLASS="table"><TABLE SUMMARY="CIDR Netmasks">
|
||||
<CAPTION>Table 1: <A NAME="TABLE1">CIDR Netmasks</A></CAPTION>
|
||||
@@ -395,10 +388,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. The <CODE>/mm</CODE>
|
||||
notation specifies a CIDR netmask, a shown in <A HREF="TABLE1">Table 1</A>.</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>The <CODE>@LOCAL</CODE> name will allow browse data from all
|
||||
local interfaces. The <CODE>@IF(name)</CODE> name will allow
|
||||
@@ -433,10 +426,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. The <CODE>/mm</CODE>
|
||||
notation specifies a CIDR netmask, a shown in <A HREF="TABLE1">Table 1</A>.</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>The <CODE>@LOCAL</CODE> name will block browse data from all
|
||||
local interfaces. The <CODE>@IF(name)</CODE> name will block
|
||||
@@ -1072,8 +1065,7 @@ printers are shared (published) by default. The default is
|
||||
Deny from nnn.nnn.nnn.nnn
|
||||
Deny from nnn.nnn.nnn.nnn/mm
|
||||
Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
|
||||
Deny from [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]
|
||||
Deny from [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]/mmm
|
||||
Deny from xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
|
||||
Deny from @LOCAL
|
||||
Deny from @IF(name)
|
||||
</Location>
|
||||
@@ -1085,14 +1077,9 @@ 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.</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>
|
||||
multiple hosts or networks. 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
|
||||
@@ -1106,7 +1093,7 @@ HREF="#Location"><CODE>Location</CODE></A> or <A
|
||||
HREF="#Limit"><CODE>Limit</CODE></A> section.</P>
|
||||
|
||||
|
||||
<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4/Mac OS X 10.6</SPAN><A NAME="DirtyCleanInterval">DirtyCleanInterval</A></H2>
|
||||
<H2 CLASS="title"><A NAME="DirtyCleanInterval">DirtyCleanInterval</A></H2>
|
||||
|
||||
<H3>Examples</H3>
|
||||
|
||||
@@ -1119,9 +1106,7 @@ 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. A value of 0
|
||||
causes the update to occur as soon as possible, typically within a few
|
||||
milliseconds.</P>
|
||||
classes, subscriptions, and jobs. The default is 30 seconds.</P>
|
||||
|
||||
|
||||
<H2 CLASS="title"><A NAME="DocumentRoot">DocumentRoot</A></H2>
|
||||
|
||||
@@ -45,10 +45,10 @@ the page started printing. The format of this field is identical
|
||||
to the <I>data-time</I> field in the <VAR>access_log</VAR>
|
||||
file.</P>
|
||||
|
||||
<P>The <I>page-number</I> and <I>num-copies</I> fields contain the
|
||||
<P>The <I>page-number</I> and <I>num-pages</I> fields contain the
|
||||
page number and number of copies being printed of that page. For
|
||||
printers that cannot produce copies on their own, the
|
||||
<I>num-copies</I> field will always be 1.</P>
|
||||
<I>num-pages</I> field will always be 1.</P>
|
||||
|
||||
<P>The <I>job-billing</I> field contains a copy of the
|
||||
<CODE>job-billing</CODE> attribute provided with the IPP
|
||||
|
||||
@@ -380,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 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>
|
||||
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>
|
||||
|
||||
<p>The width and length define the dimensions of the media. Each
|
||||
number is optionally followed by one of the following unit
|
||||
@@ -459,15 +459,17 @@ Attribute fooProfile "Photo/Photographic Profile" "photopro.icc"
|
||||
<h3>Description</h3>
|
||||
|
||||
<p>The <code>Attribute</code> directive creates a PPD 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>
|
||||
name is any combination of letters, numbers, and the underscore
|
||||
and can be up to 40 characters in length.</p>
|
||||
|
||||
<p>The selector can be the empty string (<code>""</code>) or text of up
|
||||
to 80 bytes.</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 value is any string or number; the string may contain multiple
|
||||
lines, however no one line may exceed 255 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>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
@@ -493,15 +495,14 @@ Choice "False/No" "<</cupsCompression 0>>setpagedevice"
|
||||
<h3>Description</h3>
|
||||
|
||||
<p>The <code>Choice</code> directive adds a single choice to the
|
||||
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>
|
||||
current option. The name is any combination of letters, numbers,
|
||||
and the underscore and can be up to 40 characters in length.</p>
|
||||
|
||||
<p>If provided, the text can be any string up to 80 bytes
|
||||
<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>The code is any string and may contain multiple lines,
|
||||
however no one line may exceed 255 bytes.</p>
|
||||
however no one line may exceed 255 characters.</p>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
@@ -567,12 +568,11 @@ 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 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>
|
||||
printer driver. The name is any combination of letters, numbers,
|
||||
and the underscore and can be up to 40 characters in length.</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>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>The colorspace argument is one of the standard colorspace
|
||||
keywords defined later in this appendix in the section titled,
|
||||
@@ -698,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 bytes.</p>
|
||||
may exceed 255 characters.</p>
|
||||
|
||||
|
||||
<h2 class="title"><a name='CustomMedia'>CustomMedia</a></h2>
|
||||
@@ -730,12 +730,11 @@ 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 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>
|
||||
the driver. The name is any combination of letters, numbers,
|
||||
and the underscore and can be up to 40 characters in length.</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>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>The width and length arguments specify the dimensions of the
|
||||
media as defined for the <a href="#_media"><code>#media</code></a>
|
||||
@@ -748,7 +747,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
|
||||
bytes in length.</p>
|
||||
characters in length.</p>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
@@ -824,12 +823,11 @@ 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 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 name is any combination of letters, numbers, and the
|
||||
underscore and can be up to 40 characters in length.</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>If provided, the text can be any string up to 80 characters
|
||||
in length. If no text is provided, the name is used.</p>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
@@ -1046,15 +1044,14 @@ Finishing "Glossy/Photo Overcoat"
|
||||
<h3>Description</h3>
|
||||
|
||||
<p>The <code>Finishing</code> directive adds a choice to the
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
@@ -1094,7 +1091,8 @@ 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
|
||||
@@ -1141,16 +1139,14 @@ Group "Special/Vendor Options"
|
||||
<h3>Description</h3>
|
||||
|
||||
<p>The <code>Group</code> directive specifies the group for new
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<center><table width='80%' border='1' bgcolor='#cccccc' cellpadding='5' cellspacing='0'>
|
||||
<tr>
|
||||
@@ -1158,8 +1154,8 @@ options, respectively.</p>
|
||||
|
||||
<p>Because of certain API binary compatibility issues,
|
||||
CUPS limits the length of PPD group translation strings
|
||||
(text) to 40 bytes, while the PPD specification
|
||||
allows for up to 80 bytes.</p>
|
||||
(text) to 40 characters, while the PPD specification
|
||||
allows for up to 80 characters.</p>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1233,12 +1229,11 @@ 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 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 name is any combination of letters, numbers, and the
|
||||
underscore and can be up to 40 characters in length.</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>If provided, the text can be any string up to 80 characters
|
||||
in length. If no text is provided, the name is used.</p>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
@@ -1276,12 +1271,11 @@ 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 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>
|
||||
<code>False</code>. The name is any combination of letters, numbers,
|
||||
and the underscore and can be up to 40 characters in length.</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>If provided, the text can be any string up to 80 characters
|
||||
in length. If no text is provided, the name is used.</p>
|
||||
|
||||
|
||||
<h2 class="title"><a name='LocAttribute'>LocAttribute</a></h2>
|
||||
@@ -1301,15 +1295,17 @@ LocAttribute fooProfile "Photo/Photographic Profile" "photopro.icc"
|
||||
<h3>Description</h3>
|
||||
|
||||
<p>The <code>LocAttribute</code> directive creates a localized PPD
|
||||
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>
|
||||
attribute. The name is any combination of letters, numbers, and the
|
||||
underscore and can be up to 40 characters in length.</p>
|
||||
|
||||
<p>The selector can be the empty string (<code>""</code>) or text of up
|
||||
to 80 bytes.</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 value is any string or number; the string may contain multiple
|
||||
lines, however no one line may exceed 255 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>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
@@ -1462,15 +1458,13 @@ 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 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 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>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>
|
||||
<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>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
@@ -1538,7 +1532,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 bytes to conform to the Adobe limits on the length of
|
||||
31 characters to conform to the Adobe limits on the length of
|
||||
<code>ShortNickName</code>.</p>
|
||||
|
||||
<h3>See Also</h3>
|
||||
@@ -1604,12 +1598,11 @@ 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
|
||||
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>
|
||||
is any combination of letters, numbers, and the underscore and
|
||||
can be up to 40 characters in length.</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>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>The type argument is one of the following keywords:</p>
|
||||
|
||||
@@ -1756,8 +1749,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 bytes in length.
|
||||
If no text is provided, the name is used.</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>
|
||||
|
||||
<h3>See Also</h3>
|
||||
|
||||
|
||||
@@ -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 stop the scheduler first, make your
|
||||
changes, and then start the scheduler to make them active.</P>
|
||||
manually, you will need to restart the scheduler to make them
|
||||
active.</P>
|
||||
|
||||
|
||||
<H2 CLASS="title"><A NAME="Accepting">Accepting</A></H2>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<!--
|
||||
"$Id: spec-ipp.html 8816 2009-09-14 21:41:50Z mike $"
|
||||
"$Id: spec-ipp.html 8680 2009-05-22 23:53:11Z mike $"
|
||||
|
||||
CUPS IPP specification for the Common UNIX Printing System (CUPS).
|
||||
|
||||
@@ -558,7 +558,7 @@ job as well.
|
||||
<h4>Cancel-Job Request</h4>
|
||||
|
||||
<p>The following groups of attributes are supplied as part of the
|
||||
Cancel-Job request:
|
||||
Set-Job-Attributes request:
|
||||
|
||||
<p>Group 1: Operation Attributes
|
||||
|
||||
@@ -632,17 +632,6 @@ 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/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
|
||||
@@ -1614,8 +1603,8 @@ CUPS-Get-Devices request:
|
||||
|
||||
<dt>"timeout" (integer (1:MAX)) :<span class='info'>CUPS 1.4/Mac OS X 10.6</span>
|
||||
|
||||
<dd>The client OPTIONALLY supplies this attribute to limit the duration
|
||||
of the lookup. The default timeout is 15 seconds.
|
||||
<dd>The client OPTIONALLY supplies this attribute limiting the number of
|
||||
devices that are returned.
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<!--
|
||||
"$Id: spec-ppd.html 8933 2009-12-16 00:08:31Z mike $"
|
||||
"$Id: spec-ppd.html 8673 2009-05-22 17:34:15Z mike $"
|
||||
|
||||
CUPS PPD extensions specification for the Common UNIX Printing System (CUPS).
|
||||
|
||||
@@ -161,8 +161,9 @@ based on well-known colorspaces such as sRGB and Adobe RGB.</p>
|
||||
|
||||
<blockquote><b>Note:</b>
|
||||
|
||||
<p>At this time, none of the CUPS raster filters support ICC profiles. This
|
||||
will be addressed as time and resources permit.</p>
|
||||
<p>At this time, none of the CUPS raster
|
||||
filters support ICC profiles. This will be addressed as time
|
||||
and resources permit.</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
@@ -173,7 +174,7 @@ gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"</p>
|
||||
|
||||
<p>This string attribute specifies an sRGB-based color profile
|
||||
consisting of gamma and density controls and a 3x3 CMY color
|
||||
transform matrix. <em>This attribute is not supported on Mac OS X.</em></p>
|
||||
transform matrix.</p>
|
||||
|
||||
<p>The <i>Resolution</i> and <i>MediaType</i> values may be "-"
|
||||
to act as a wildcard. Otherwise they must match one of the
|
||||
@@ -276,15 +277,6 @@ data as requested by the driver. The <tt>APCustomColorMatchingProfile</tt>
|
||||
and <tt>APDefaultColorMatchingProfile</tt> attributes specify alternate
|
||||
color profiles (sRGB or AdobeRGB) to use for 3-color (RGB) raster data.</p>
|
||||
|
||||
<blockquote><b>Note:</b>
|
||||
|
||||
<p>Prior to Mac OS X 10.6, the default RGB color space was Apple's "GenericRGB".
|
||||
The new default in Mac OS X 10.6 and later is "sRGB". For more information, see
|
||||
<a href="http://support.apple.com/kb/HT3712">"Mac OS X v10.6: About gamma
|
||||
2.2"</a> on Apple's support site.</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
<h4><span class='info'>Mac OS X 10.5</span><a name='APCustomColorMatchingName'>APCustomColorMatchingName</a></h4>
|
||||
|
||||
<p class='summary'>*APCustomColorMatchingName name/text: ""</p>
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
<!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>Beranda - 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="/"> Beranda </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/admin"> Administrasi </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/classes/"> Kelas </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/help/"> Bantuan Langsung </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/jobs/"> Tugas </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/printers/"> Pencetak </A></TD>
|
||||
<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
|
||||
TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Search Help"
|
||||
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>CUPS adalah sistem pencetakan berstandar dan berkode sumber terbuka, dikembangkan oleh
|
||||
<A HREF="http://www.apple.com/">Apple Inc.</A> untuk Mac OS<SUP>®</SUP> X dan sistem
|
||||
operasi serupa UNIX<SUP>®</SUP> lainnya.</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 bagi Pengguna</H2>
|
||||
|
||||
<P><A HREF="help/overview.html">Ikhtisar CUPS</A></P>
|
||||
|
||||
<P><A HREF="help/options.html">Opsi dan Pencetakan dari Baris Perintah</A></P>
|
||||
|
||||
<P><A HREF="help/whatsnew.html">Apa yang Baru di CUPS 1.4</A></P>
|
||||
|
||||
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.general">Forum Pengguna</A></P>
|
||||
|
||||
</TD><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-left: 20px; padding-right: 20px;">
|
||||
|
||||
<H2>CUPS bagi Administrator</H2>
|
||||
|
||||
<P><A HREF="admin">Menambah Pencetak dan Kelas</A></P>
|
||||
|
||||
<P><A HREF="help/policies.html">Mengatur Kebijakan Operasi</A></P>
|
||||
|
||||
<P><A HREF="help/accounting.html">Dasar Akunting Pencetak</A></P>
|
||||
|
||||
<P><A HREF="help/security.html">Keamanan Server</A></P>
|
||||
|
||||
<P><A HREF="help/kerberos.html">Menggunakan Otentikasi Kerberos</A></P>
|
||||
|
||||
<P><A HREF="help/network.html">Menggunakan Pencetak di Jaringan</A></P>
|
||||
|
||||
<P><A HREF="help/ref-cupsd-conf.html">Referensi cupsd.conf</A></P>
|
||||
|
||||
<P><A HREF="http://www.cups.org/ppd.php">Mencari Penggerak Pencetak</A></P>
|
||||
|
||||
</TD><TD VALIGN="top" STYLE="padding-left: 20px;">
|
||||
|
||||
<H2>CUPS bagi Pengembang</H2>
|
||||
|
||||
<P><A HREF="help/api-overview.html">Pengenalan untuk Pemrograman CUPS</A></P>
|
||||
|
||||
<P><A HREF="help/api-cups.html">API di CUPS</A></P>
|
||||
|
||||
<P><A HREF="help/api-filter.html">Penyaring dan Pemrograman Balik (<I>Backend Programming</I>)</A></P>
|
||||
|
||||
<P><A HREF="help/api-httpipp.html">API di HTTP dan IPP</A></P>
|
||||
|
||||
<P><A HREF="help/api-ppd.html">API di PPD</A></P>
|
||||
|
||||
<P><A HREF="help/api-raster.html">API di Raster</A></P>
|
||||
|
||||
<P><A HREF="help/ref-ppdcfile.html">Referensi Kompiler Berkas Penggerak PPD</A></P>
|
||||
|
||||
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.development">Forum Pengembang</A></P>
|
||||
|
||||
</TD></TR>
|
||||
</TABLE>
|
||||
|
||||
</TD></TR>
|
||||
<TR><TD> </TD></TR>
|
||||
<TR><TD CLASS="trailer">CUPS dan logo CUPS logo adalah merek dagang dari
|
||||
<A HREF="http://www.apple.com">Apple Inc.</A> Hak cipta CUPS pada 2007-2009 Apple
|
||||
Inc. Semua hak terpelihara.</TD></TR>
|
||||
</TABLE>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,107 +0,0 @@
|
||||
<!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>Home - 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="/"> Home </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/admin"> Amministrazione </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/classes/"> Classi </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/help/"> Guida </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/jobs/"> Stampe </A></TD>
|
||||
<TD CLASS="unsel"><A HREF="/printers/"> Stampanti </A></TD>
|
||||
<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
|
||||
TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Aiuto alla ricerca"
|
||||
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>CUPS è un sistema di stampa basato su standard, open source sviluppato da
|
||||
<A HREF="http://www.apple.com/">Apple Inc.</A> per Mac OS<SUP>®</SUP> X e
|
||||
altri sistemi UNIX<SUP>®</SUP> e derivati.</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 per utenti</H2>
|
||||
|
||||
<P><A HREF="help/overview.html">Panoramica di CUPS</A></P>
|
||||
|
||||
<P><A HREF="help/options.html">Stampa e opzioni da riga di comando</A></P>
|
||||
|
||||
<P><A HREF="help/whatsnew.html">Cosa c'è di nuovo in CUPS 1.4</A></P>
|
||||
|
||||
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.general">Forum degli utenti</A></P>
|
||||
|
||||
</TD><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-left: 20px; padding-right: 20px;">
|
||||
|
||||
<H2>CUPS per amministratori</H2>
|
||||
|
||||
<P><A HREF="admin">Aggiungere stampanti e classi</A></P>
|
||||
|
||||
<P><A HREF="help/policies.html">Gestire i criteri di funzionamento</A></P>
|
||||
|
||||
<P><A HREF="help/accounting.html">Basi di controllo di accesso alle stampanti</A></P>
|
||||
|
||||
<P><A HREF="help/security.html">Sicurezza del server</A></P>
|
||||
|
||||
<P><A HREF="help/kerberos.html">Utilizzare l'autenticazione Kerberos</A></P>
|
||||
|
||||
<P><A HREF="help/network.html">Utilizzare stampanti di rete</A></P>
|
||||
|
||||
<P><A HREF="help/ref-cupsd-conf.html">Riferimenti al cupsd.conf</A></P>
|
||||
|
||||
<P><A HREF="http://www.cups.org/ppd.php">Trovare driver per le stampanti</A></P>
|
||||
|
||||
</TD><TD VALIGN="top" STYLE="padding-left: 20px;">
|
||||
|
||||
<H2>CUPS per sviluppatori</H2>
|
||||
|
||||
<P><A HREF="help/api-overview.html">Introduzione alla programmazione di CUPS</A></P>
|
||||
|
||||
<P><A HREF="help/api-cups.html">API di CUPS</A></P>
|
||||
|
||||
<P><A HREF="help/api-filter.html">Programmazione di filtri e motori</A></P>
|
||||
|
||||
<P><A HREF="help/api-httpipp.html">API HTTP e IPP</A></P>
|
||||
|
||||
<P><A HREF="help/api-ppd.html">API PPD</A></P>
|
||||
|
||||
<P><A HREF="help/api-raster.html">API Raster</A></P>
|
||||
|
||||
<P><A HREF="help/ref-ppdcfile.html">Riferimenti al file del compilatore di driver PPD</A></P>
|
||||
|
||||
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.development">Forum degli sviluppatori</A></P>
|
||||
|
||||
</TD></TR>
|
||||
</TABLE>
|
||||
|
||||
</TD></TR>
|
||||
<TR><TD> </TD></TR>
|
||||
<TR><TD CLASS="trailer">CUPS e il logo CUPS sono marchi di
|
||||
<A HREF="http://www.apple.com">Apple Inc.</A> CUPS è un copyright 2007-2009 di Apple
|
||||
Inc. Tutti i diritti sono riservati.</TD></TR>
|
||||
</TABLE>
|
||||
</BODY>
|
||||
</HTML>
|
||||
+19
-5
@@ -24,7 +24,21 @@
|
||||
*/
|
||||
|
||||
#include "driver.h"
|
||||
#include <config.h>
|
||||
|
||||
|
||||
/*
|
||||
* Random number function to use, in order of preference...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_RANDOM
|
||||
# define RANDOM_FUNCTION random
|
||||
#elif defined(HAVE_MRAND48)
|
||||
# define RANDOM_FUNCTION mrand48
|
||||
#elif defined(HAVE_LRAND48)
|
||||
# define RANDOM_FUNCTION lrand48
|
||||
#else
|
||||
# define RANDOM_FUNCTION rand
|
||||
#endif /* HAVE_RANDOM */
|
||||
|
||||
|
||||
/*
|
||||
@@ -155,8 +169,8 @@ cupsDitherLine(cups_dither_t *d, /* I - Dither data */
|
||||
|
||||
if (errrange > 1)
|
||||
{
|
||||
errbase0 = errbase + (CUPS_RAND() % errrange);
|
||||
errbase1 = errbase + (CUPS_RAND() % errrange);
|
||||
errbase0 = errbase + (RANDOM_FUNCTION() % errrange);
|
||||
errbase1 = errbase + (RANDOM_FUNCTION() % errrange);
|
||||
}
|
||||
else
|
||||
errbase0 = errbase1 = errbase;
|
||||
@@ -249,8 +263,8 @@ cupsDitherLine(cups_dither_t *d, /* I - Dither data */
|
||||
|
||||
if (errrange > 1)
|
||||
{
|
||||
errbase0 = errbase + (CUPS_RAND() % errrange);
|
||||
errbase1 = errbase + (CUPS_RAND() % errrange);
|
||||
errbase0 = errbase + (RANDOM_FUNCTION() % errrange);
|
||||
errbase1 = errbase + (RANDOM_FUNCTION() % errrange);
|
||||
}
|
||||
else
|
||||
errbase0 = errbase1 = errbase;
|
||||
|
||||
@@ -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 - PageTop);
|
||||
PageLength - PageRight);
|
||||
puts("0 setgray");
|
||||
|
||||
y = info_top;
|
||||
|
||||
@@ -144,7 +144,7 @@ ParseCommand(FILE *fp, /* I - File to read from */
|
||||
if (!strcasecmp(name, "LB"))
|
||||
{
|
||||
bufptr = buf;
|
||||
while ((ch = getc(fp)) != StringTerminator && ch != EOF)
|
||||
while ((ch = getc(fp)) != StringTerminator)
|
||||
if (bufptr < (buf + sizeof(buf) - 1))
|
||||
*bufptr++ = ch;
|
||||
*bufptr = '\0';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* BMP image routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2007-2009 by Apple Inc.
|
||||
* Copyright 2007-2008 by Apple Inc.
|
||||
* Copyright 1993-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -170,8 +170,6 @@ _cupsImageReadBMP(
|
||||
|
||||
if (colors_used > 0)
|
||||
fread(colormap, colors_used, 4, fp);
|
||||
else
|
||||
memset(colormap, 0, sizeof(colormap));
|
||||
|
||||
/*
|
||||
* Setup image and buffers...
|
||||
|
||||
@@ -29,11 +29,7 @@
|
||||
# include <cups/string.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# ifdef WIN32
|
||||
# include <io.h>
|
||||
# else
|
||||
# include <unistd.h>
|
||||
# endif /* WIN32 */
|
||||
# include <unistd.h>
|
||||
# include <errno.h>
|
||||
# include <math.h>
|
||||
|
||||
|
||||
@@ -204,15 +204,6 @@ 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...
|
||||
*/
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <cups/raster.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
@@ -276,26 +275,26 @@ write_test(int fd, /* I - File descriptor to write to */
|
||||
* text with some whitespace.
|
||||
*/
|
||||
|
||||
CUPS_SRAND(time(NULL));
|
||||
srand(time(NULL));
|
||||
|
||||
memset(data, 0, sizeof(data));
|
||||
|
||||
for (y = 0; y < 28; y ++)
|
||||
{
|
||||
for (x = CUPS_RAND() & 127, count = (CUPS_RAND() & 15) + 1;
|
||||
for (x = rand() & 127, count = (rand() & 15) + 1;
|
||||
x < sizeof(data[0]);
|
||||
x ++, count --)
|
||||
{
|
||||
if (count <= 0)
|
||||
{
|
||||
x += (CUPS_RAND() & 15) + 1;
|
||||
count = (CUPS_RAND() & 15) + 1;
|
||||
x += (rand() & 15) + 1;
|
||||
count = (rand() & 15) + 1;
|
||||
|
||||
if (x >= sizeof(data[0]))
|
||||
break;
|
||||
}
|
||||
|
||||
data[y][x] = CUPS_RAND();
|
||||
data[y][x] = rand();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+280
-280
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+8
-11
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.4\n"
|
||||
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
|
||||
"POT-Creation-Date: 2009-06-18 15:43-0700\n"
|
||||
"POT-Creation-Date: 2009-06-05 14:00-0700\n"
|
||||
"PO-Revision-Date: 2009-02-16 12:00-0800\n"
|
||||
"Last-Translator: Apple Inc.\n"
|
||||
"Language-Team: Apple Inc.\n"
|
||||
@@ -2446,6 +2446,13 @@ msgstr "ERROR: Manglende %%EndProlog!\n"
|
||||
msgid "ERROR: Missing %%EndSetup!\n"
|
||||
msgstr "ERROR: Manglende %%EndSetup!\n"
|
||||
|
||||
msgid ""
|
||||
"ERROR: Missing device URI on command-line and no DEVICE_URI environment "
|
||||
"variable!\n"
|
||||
msgstr ""
|
||||
"ERROR: Manglende enheds-URI på kommandolinjen og ingen DEVICE_URI-"
|
||||
"miljøvariabel!\n"
|
||||
|
||||
#, c-format
|
||||
msgid "ERROR: Missing value on line %d of banner file!\n"
|
||||
msgstr "ERROR: Manglende værdi på linje %d i bannerarkiv!\n"
|
||||
@@ -3433,9 +3440,6 @@ msgstr "NULL PPD-arkivmarkør"
|
||||
msgid "Name OID uses indefinite length"
|
||||
msgstr "Navn-oid bruger uendelig længde"
|
||||
|
||||
msgid "Nested classes are not allowed!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Never"
|
||||
msgstr "Aldrig"
|
||||
|
||||
@@ -5538,13 +5542,6 @@ msgstr "variable-bindings bruger uendelig længde"
|
||||
#~ msgid "600 DPI Grayscale"
|
||||
#~ msgstr "600 dpi gråtoner"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "ERROR: Missing device URI on command-line and no DEVICE_URI environment "
|
||||
#~ "variable!\n"
|
||||
#~ msgstr ""
|
||||
#~ "ERROR: Manglende enheds-URI på kommandolinjen og ingen DEVICE_URI-"
|
||||
#~ "miljøvariabel!\n"
|
||||
|
||||
#~ msgid "ERROR: Unable to create temporary file - %s.\n"
|
||||
#~ msgstr "ERROR: Kan ikke oprette midlertidigt arkiv - %s.\n"
|
||||
|
||||
|
||||
+8
-11
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.4\n"
|
||||
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
|
||||
"POT-Creation-Date: 2009-06-18 15:43-0700\n"
|
||||
"POT-Creation-Date: 2009-06-05 14:00-0700\n"
|
||||
"PO-Revision-Date: 2009-02-16 12:00-0800\n"
|
||||
"Last-Translator: Apple Inc.\n"
|
||||
"Language-Team: Apple Inc.\n"
|
||||
@@ -2456,6 +2456,13 @@ msgstr "ERROR: Fehlender %%EndProlog!\n"
|
||||
msgid "ERROR: Missing %%EndSetup!\n"
|
||||
msgstr "ERROR: Fehlendes %%EndSetup!\n"
|
||||
|
||||
msgid ""
|
||||
"ERROR: Missing device URI on command-line and no DEVICE_URI environment "
|
||||
"variable!\n"
|
||||
msgstr ""
|
||||
"ERROR: Geräte-URI fehlt in der Befehlszeile und keine DEVICE_URI "
|
||||
"Umgebungsvariable vorhanden!\n"
|
||||
|
||||
#, c-format
|
||||
msgid "ERROR: Missing value on line %d of banner file!\n"
|
||||
msgstr "ERROR: Wert fehlt in Zeile %d der Bannerdatei!\n"
|
||||
@@ -3465,9 +3472,6 @@ msgstr "NULL PPD File Pointer"
|
||||
msgid "Name OID uses indefinite length"
|
||||
msgstr "Name-OID hat unbestimmte Länge"
|
||||
|
||||
msgid "Nested classes are not allowed!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Never"
|
||||
msgstr "Niemals"
|
||||
|
||||
@@ -5583,13 +5587,6 @@ msgstr "variable-bindings hat unbestimmte Länge"
|
||||
#~ msgid "600 DPI Grayscale"
|
||||
#~ msgstr "600 DPI Graustufen"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "ERROR: Missing device URI on command-line and no DEVICE_URI environment "
|
||||
#~ "variable!\n"
|
||||
#~ msgstr ""
|
||||
#~ "ERROR: Geräte-URI fehlt in der Befehlszeile und keine DEVICE_URI "
|
||||
#~ "Umgebungsvariable vorhanden!\n"
|
||||
|
||||
#~ msgid "ERROR: Unable to create temporary file - %s.\n"
|
||||
#~ msgstr "ERROR: Temporäre Datei konnte nicht erstellt werden – %s.\n"
|
||||
|
||||
|
||||
+23
-9
@@ -16,8 +16,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.4\n"
|
||||
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
|
||||
"POT-Creation-Date: 2009-06-18 15:43-0700\n"
|
||||
"PO-Revision-Date: 2009-07-02 20:00+0100\n"
|
||||
"POT-Creation-Date: 2009-06-05 14:00-0700\n"
|
||||
"PO-Revision-Date: 2009-05-23 13:15+0100\n"
|
||||
"Last-Translator: Juan Pablo González Riopedre <riopedre13@yahoo.es>\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -2490,6 +2490,13 @@ msgstr "ERROR: Falta %%EndProlog.\n"
|
||||
msgid "ERROR: Missing %%EndSetup!\n"
|
||||
msgstr "ERROR: Falta %%EndSetup.\n"
|
||||
|
||||
msgid ""
|
||||
"ERROR: Missing device URI on command-line and no DEVICE_URI environment "
|
||||
"variable!\n"
|
||||
msgstr ""
|
||||
"ERROR: Falta URI del dispositivo en la línea de comandos y no hay variable "
|
||||
"de entorno DEVICE_URI.\n"
|
||||
|
||||
#, c-format
|
||||
msgid "ERROR: Missing value on line %d of banner file!\n"
|
||||
msgstr "ERROR: Falta el valor en la línea %d del archivo de rótulo.\n"
|
||||
@@ -2567,7 +2574,7 @@ msgid "ERROR: Unable to copy PDF file"
|
||||
msgstr "ERROR: No se ha podido copiar el archivo PDF"
|
||||
|
||||
msgid "ERROR: Unable to create pipe"
|
||||
msgstr "ERROR: No se ha podido crear el canal (pipe)"
|
||||
msgstr ""
|
||||
|
||||
msgid "ERROR: Unable to create socket"
|
||||
msgstr "ERROR: No se ha podido crear socket"
|
||||
@@ -2592,7 +2599,7 @@ msgid "ERROR: Unable to execute pdftops program"
|
||||
msgstr "ERROR: No se ha podido ejecutar el programa pdftops"
|
||||
|
||||
msgid "ERROR: Unable to execute pstops program"
|
||||
msgstr "ERROR: No se ha podido ejecutar el programa pstops"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "ERROR: Unable to fork pictwpstops: %s\n"
|
||||
@@ -3496,9 +3503,6 @@ msgstr "Puntero de archivo PPD NULO"
|
||||
msgid "Name OID uses indefinite length"
|
||||
msgstr "Nombre OID usa una longitud indefinida"
|
||||
|
||||
msgid "Nested classes are not allowed!"
|
||||
msgstr "No se permiten clases anidadas."
|
||||
|
||||
msgid "Never"
|
||||
msgstr "Nunca"
|
||||
|
||||
@@ -5519,12 +5523,11 @@ msgstr "ppdc: No se ha proporcionado catálogo de mensajes para el idioma %s.\n"
|
||||
#, c-format
|
||||
msgid "ppdc: Option %s defined in two different groups on line %d of %s!\n"
|
||||
msgstr ""
|
||||
"ppdc: Opción %s definida en dos diferentes grupos en la línea %d de %s.\n"
|
||||
|
||||
#, c-format
|
||||
msgid "ppdc: Option %s redefined with a different type on line %d of %s!\n"
|
||||
msgstr ""
|
||||
"ppdc: Opción %s redefinida con un tipo diferente en la línea %d de %s.\n"
|
||||
"ppdc: La opción %s redefinida con un tipo diferente en la línea %d de %s.\n"
|
||||
|
||||
#, c-format
|
||||
msgid "ppdc: Option constraint must *name on line %d of %s!\n"
|
||||
@@ -5687,3 +5690,14 @@ msgstr "sin título"
|
||||
msgid "variable-bindings uses indefinite length"
|
||||
msgstr "variable-bindings usa una longitud indefinida"
|
||||
|
||||
#~ msgid "600 DPI Grayscale"
|
||||
#~ msgstr "600 PPP escala de grises"
|
||||
|
||||
#~ msgid "ERROR: pdftops filter crashed on signal %d!\n"
|
||||
#~ msgstr "ERROR: filtro pdftops se ha colgado con la señal %d.\n"
|
||||
|
||||
#~ msgid "ERROR: pdftops filter exited with status %d!\n"
|
||||
#~ msgstr "ERROR: filtro pdftops se ha cerrado con el estado %d.\n"
|
||||
|
||||
#~ msgid "Unknown printer error (%s)!"
|
||||
#~ msgstr "Error de impresión desconocido (%s)."
|
||||
|
||||
-7282
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário